<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://opensimulator.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite%2FMyriad_Lite_Armor-Preview6.lsl</id>
		<title>User:Allen Kerensky/Myriad Lite/Myriad Lite Armor-Preview6.lsl - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://opensimulator.org/index.php?action=history&amp;feed=atom&amp;title=User%3AAllen_Kerensky%2FMyriad_Lite%2FMyriad_Lite_Armor-Preview6.lsl"/>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;action=history"/>
		<updated>2026-06-13T22:44:44Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.19.9</generator>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30285&amp;oldid=prev</id>
		<title>Allen Kerensky: fixed license text</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30285&amp;oldid=prev"/>
				<updated>2012-08-11T21:39:48Z</updated>
		
		<summary type="html">&lt;p&gt;fixed license text&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
				&lt;col class='diff-marker' /&gt;
				&lt;col class='diff-content' /&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='2' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 21:39, 11 August 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 3:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;//============================================================================&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;//============================================================================&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Myriad_Lite_Armor_Preview6.lsl &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Myriad_Lite_Armor_Preview6.lsl &amp;#160;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;background: #ffa; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Copyright (c) 2012 by Allen Kerensky (OSG/SL)&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;background: #cfc; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Copyright (c) 2012 by Allen Kerensky (OSG/SL) &lt;ins class=&quot;diffchange diffchange-inline&quot;&gt;All Rights Reserved.&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// This work is dual-licensed under&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// This work is dual-licensed under&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Creative Commons Attribution (CC BY) 3.0 Unported&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background: #eee; color:black; font-size: smaller;&quot;&gt;&lt;div&gt;// Creative Commons Attribution (CC BY) 3.0 Unported&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30279&amp;oldid=prev</id>
		<title>Allen Kerensky: moved Myriad Lite Armor-Preview6.lsl to User:Allen Kerensky/Myriad Lite/Myriad Lite Armor-Preview6.lsl: move to user space</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30279&amp;oldid=prev"/>
				<updated>2012-08-11T20:51:57Z</updated>
		
		<summary type="html">&lt;p&gt;moved &lt;a href=&quot;/wiki/Myriad_Lite_Armor-Preview6.lsl&quot; class=&quot;mw-redirect&quot; title=&quot;Myriad Lite Armor-Preview6.lsl&quot;&gt;Myriad Lite Armor-Preview6.lsl&lt;/a&gt; to &lt;a href=&quot;/wiki/User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&quot; title=&quot;User:Allen Kerensky/Myriad Lite/Myriad Lite Armor-Preview6.lsl&quot;&gt;User:Allen Kerensky/Myriad Lite/Myriad Lite Armor-Preview6.lsl&lt;/a&gt;: move to user space&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
			&lt;tr valign='top'&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
			&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 20:51, 11 August 2012&lt;/td&gt;
			&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	<entry>
		<id>http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30278&amp;oldid=prev</id>
		<title>Allen Kerensky: Myriad_Lite_Armor-Preview6.lsl</title>
		<link rel="alternate" type="text/html" href="http://opensimulator.org/index.php?title=User:Allen_Kerensky/Myriad_Lite/Myriad_Lite_Armor-Preview6.lsl&amp;diff=30278&amp;oldid=prev"/>
				<updated>2012-08-11T20:50:32Z</updated>
		
		<summary type="html">&lt;p&gt;Myriad_Lite_Armor-Preview6.lsl&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Myriad_Lite_Armor-Preview6.lsl =&lt;br /&gt;
 &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Myriad_Lite_Armor_Preview6.lsl &lt;br /&gt;
// Copyright (c) 2012 by Allen Kerensky (OSG/SL)&lt;br /&gt;
// This work is dual-licensed under&lt;br /&gt;
// Creative Commons Attribution (CC BY) 3.0 Unported&lt;br /&gt;
// http://creativecommons.org/licenses/by/3.0/&lt;br /&gt;
// - or -&lt;br /&gt;
// Modified BSD License (3-clause)&lt;br /&gt;
// Redistribution and use in source and binary forms, with or without&lt;br /&gt;
// modification, are permitted provided that the following conditions are met:&lt;br /&gt;
// * Redistributions of source code must retain the above copyright notice, &lt;br /&gt;
//   this list of conditions and the following disclaimer.&lt;br /&gt;
// * Redistributions in binary form must reproduce the above copyright notice,&lt;br /&gt;
//   this list of conditions and the following disclaimer in the documentation&lt;br /&gt;
//   and/or other materials provided with the distribution.&lt;br /&gt;
// * Neither the name of Myriad Lite nor the names of its contributors may be&lt;br /&gt;
//   used to endorse or promote products derived from this software without&lt;br /&gt;
//   specific prior written permission.&lt;br /&gt;
//&lt;br /&gt;
// THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR&lt;br /&gt;
// IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES&lt;br /&gt;
// OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN&lt;br /&gt;
// NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,&lt;br /&gt;
// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT&lt;br /&gt;
// NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,&lt;br /&gt;
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY&lt;br /&gt;
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT&lt;br /&gt;
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF&lt;br /&gt;
// THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.&lt;br /&gt;
//&lt;br /&gt;
// The Myriad RPG System was designed, written, and illustrated by Ashok Desai&lt;br /&gt;
// Myriad RPG System licensed under:&lt;br /&gt;
// Creative Commons Attribution (CC BY) 2.0 UK: England and Wales&lt;br /&gt;
// http://creativecommons.org/licenses/by/2.0/uk/&lt;br /&gt;
//============================================================================&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// MESSAGE FORMATS&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CHANATTACH - IN - REGISTERATTACHMENTS&lt;br /&gt;
// CHANATTACH - OUT - ATTACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - OUT - DETACHARMOR|int ARMORRATING|int ATTACHPOINT|string OBJECTNAME&lt;br /&gt;
// CHANATTACH - IN - ARMORHIT&lt;br /&gt;
// CHANATTACH - IN - ARMORBLOCKED&lt;br /&gt;
// CHANATTACH - IN - ARMORON&lt;br /&gt;
// CHANATTACH - IN - ARMOROFF&lt;br /&gt;
// CHANATTACH - IN - CHECKBATTERY&lt;br /&gt;
// CHANATTACH - IN - RECHARGE&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// CONSTANTS - variables which don't change over runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
// Example Armor (Myriad PDF p64, Myriad Special Edition p98)&lt;br /&gt;
// Archaic Armor Ratings&lt;br /&gt;
// 1 Soft leather, heavy cloth&lt;br /&gt;
// 2 Hardened leather, thick hide&lt;br /&gt;
// 3 Chain mail, dragon hide&lt;br /&gt;
// 4 Full plate mail, mithril chain&lt;br /&gt;
// 5 Mithril plate mail&lt;br /&gt;
// Modern Armor Ratings&lt;br /&gt;
// 1 Leather jacket&lt;br /&gt;
// 2 Bullet-proof vest&lt;br /&gt;
// 3 SWAT tactical armor&lt;br /&gt;
// 4 Advanced military armor&lt;br /&gt;
// 5 Sci-fi powered battle armor&lt;br /&gt;
&lt;br /&gt;
string  VERSION = &amp;quot;0.0.6&amp;quot;; // version number&lt;br /&gt;
string  VERDATE = &amp;quot;20120212&amp;quot;; // version date&lt;br /&gt;
&lt;br /&gt;
integer ARMORRATING = 1; // the *actual* amount of protection THIS piece of armor provides&lt;br /&gt;
string  CHAN_PREFIX = &amp;quot;0x&amp;quot;; // channel prefix to convert to hexadecimal&lt;br /&gt;
string  DIV=&amp;quot;|&amp;quot;; // the divider used between fields on a Myriad Lite messages&lt;br /&gt;
integer MINATTACHPOINT = 1; // minimum allowed attachment point number&lt;br /&gt;
integer MAXATTACHPOINT = 30; // maximum allowed avatar/inworld attachpoint number for multiattach/HUD attach cheaters&lt;br /&gt;
integer MAXEFFECTTIME = 3; // maximum time to show armor hit/blocked effects&lt;br /&gt;
integer POWERARMOR; // does this armor burn power? configured in SETUP()&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RUNTIME VARIABLES - variables which should change during runtime&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer FLAG_DEBUG; // see debugging messages? Configured in SETUP();&lt;br /&gt;
key     WEARER = NULL_KEY; // holds UUID of last wearer, so we can send detach message to correct meter&lt;br /&gt;
integer ATTACHPOINT = 0; // the avatar position where armor attached to or detached from&lt;br /&gt;
integer CHANATTACH; // owner's attachment channel&lt;br /&gt;
integer HANDATTACH; // chat handle for attachment channel&lt;br /&gt;
integer ARMOR_ON; // is armor &amp;quot;on&amp;quot; and protecting when worn? configured in SETUP()&lt;br /&gt;
integer EFFECTTIME; // how much time is left to show armor effects&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// GLOBAL SETUP()&lt;br /&gt;
//============================================================================&lt;br /&gt;
SETUP() {&lt;br /&gt;
    FLAG_DEBUG = FALSE; // do we want debugging?&lt;br /&gt;
    ARMOR_ON = TRUE; // is power armor on and protecting by default&lt;br /&gt;
    POWERARMOR = TRUE; // is this a piece of power armor or not?&lt;br /&gt;
    WEARER = llGetOwner(); // set the default wearer key&lt;br /&gt;
    // calculate a dynamic chat channel based on owner key, for where the&lt;br /&gt;
    // wearer's ML HUD should be listening of attachment -specific events&lt;br /&gt;
    CHANATTACH = ATTACHCHANNEL(llGetOwner());&lt;br /&gt;
    // open a channel, listening on player HUD channel, save handle for later close if needed&lt;br /&gt;
    if ( HANDATTACH != 0 ) llListenRemove(HANDATTACH); // close an existing listerner first&lt;br /&gt;
    HANDATTACH = llListen(CHANATTACH,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEBUG - show debug chat with wearer name for sorting&lt;br /&gt;
//============================================================================&lt;br /&gt;
DEBUG(string dmessage) {&lt;br /&gt;
    if ( FLAG_DEBUG == TRUE ) llOwnerSay(&amp;quot;DEBUG: (&amp;quot;+llKey2Name(WEARER)+&amp;quot;): &amp;quot;+dmessage);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// RESET() - wrap the llResetScript so we can persist data if needed&lt;br /&gt;
//============================================================================&lt;br /&gt;
RESET() {&lt;br /&gt;
    llResetScript();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// VERSION&lt;br /&gt;
//============================================================================&lt;br /&gt;
GETVERSION() {&lt;br /&gt;
    integer dynchan = ATTACHCHANNEL(llGetOwner());&lt;br /&gt;
    llWhisper(dynchan,&amp;quot;VERSION=&amp;quot;+VERSION+DIV+&amp;quot;VERSIONDATE=&amp;quot;+VERDATE+DIV+llGetObjectName());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ATTACHCHANNEL - calculate dynamic channels&lt;br /&gt;
//============================================================================&lt;br /&gt;
integer ATTACHCHANNEL(key forwho) {&lt;br /&gt;
    // FIXME validate key does if (uuid) work in OSgrid?&lt;br /&gt;
    if ( forwho == NULL_KEY ) return 0; // not valid&lt;br /&gt;
    return ((integer)(CHAN_PREFIX+llGetSubString((string)forwho,1,7)));&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR ON - ACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORON() {&lt;br /&gt;
    ARMOR_ON = TRUE;&lt;br /&gt;
    // your commands go here for armor special effect when starting up&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMOR OFF - DEACTIVATE POWERED ARMOR&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMOROFF() {&lt;br /&gt;
    if ( POWERARMOR == FALSE ) return;&lt;br /&gt;
    ARMOR_ON = FALSE;&lt;br /&gt;
    // your commands go here for armor special effect when shutting down&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORBATTERY() - SHOW SPECIAL ARMOR EFFECTS WHEN CHECKIGN ARMOR BATTERY LEVEL&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORBATTERY() {&lt;br /&gt;
    // your commands go here for armor special effect when checking armor battery&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORRECHARGE() - SHOW SPECIAL ARMOR EFFECTS WHEN RECHARGING ARMOR BATTERY LEVEL&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORRECHARGE() {&lt;br /&gt;
    // your commands go here for armor special effect when recharging&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// ARMORBATTERY() - SHOW SPECIAL ARMOR EFFECTS WHEN CHECKING ARMOR PROTECTION RATING&lt;br /&gt;
//============================================================================&lt;br /&gt;
ARMORCHECK() {&lt;br /&gt;
    // your commands go here for armor special effect when checking armor protection rating&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTHIT() - SHOW SPECIAL ARMOR EFFECTS WHEN ARMOR HIT BUT FAILS TO BLOCK&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTHIT() {&lt;br /&gt;
    // your commands go here for armor special effect when armor hit and does not block&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTBLOCKED - CHANGE ARMOR EFFECT WHEN ARMOR HIT AND BLOCKS DAMAGE&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTBLOCKED() {&lt;br /&gt;
    // your commands go here for armor special effect when armor BLOCKS a hit&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***        &lt;br /&gt;
    EFFECTTIME = MAXEFFECTTIME; // load the countdown&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// EFFECTOFF - RESET ARMOR TO NORMAL VIEW&lt;br /&gt;
//============================================================================&lt;br /&gt;
EFFECTOFF() {&lt;br /&gt;
    // your commands go here to turn off armor effects&lt;br /&gt;
    // *** BEGIN your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
    // *** END your special effect code here&lt;br /&gt;
    // ***&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//============================================================================&lt;br /&gt;
// DEFAULT&lt;br /&gt;
//============================================================================&lt;br /&gt;
default {&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT STATE ENTRY - begin our setup or call a setup block&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    state_entry() {&lt;br /&gt;
        SETUP(); // call the event-independent SETUP code&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ON_REZ&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    on_rez(integer start_param) {&lt;br /&gt;
        start_param = 0; // LSLINT&lt;br /&gt;
        SETUP(); // call event independent SETUP code        &lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT ATTACH - Called for detach too&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    attach(key id) {&lt;br /&gt;
        DEBUG(&amp;quot;attach(&amp;quot;+(string)id+&amp;quot;)&amp;quot;);&lt;br /&gt;
        if ( id == NULL_KEY ) { // on detach act fast&lt;br /&gt;
            llWhisper((integer)(CHAN_PREFIX+llGetSubString((string)llGetOwner(),1,7)),&amp;quot;ARMORDETACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            WEARER = NULL_KEY; // armor detached and reported as such, so we can forget previous wearer&lt;br /&gt;
            ATTACHPOINT = 0; // armor detached and reported as such, so we can forget previous attach point&lt;br /&gt;
            return;&lt;br /&gt;
        } // end of if id not equal null key    &lt;br /&gt;
        // is this an attach event or detach event?&lt;br /&gt;
        if ( id != NULL_KEY ) { // a valid key means its an attach&lt;br /&gt;
            SETUP(); // call event-independent SETUP code&lt;br /&gt;
            WEARER = id; // save who attached this armor piece for use during detach&lt;br /&gt;
            ATTACHPOINT = llGetAttached(); // where was this armor attached?&lt;br /&gt;
            // this should NOT be necessary, since it should match CHANPLAYER&lt;br /&gt;
            integer dynchan = ATTACHCHANNEL(WEARER);&lt;br /&gt;
            // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
            llWhisper(dynchan,&amp;quot;ARMORATTACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT CHANGED&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    changed(integer change) {&lt;br /&gt;
        if ( change &amp;amp; CHANGED_OWNER ) { // if armor has a new owner from take-from-ground or copy, resetup&lt;br /&gt;
            SETUP(); // call event-independent setup code, in this case to update channels&lt;br /&gt;
        }&lt;br /&gt;
        if ( ( change &amp;amp; CHANGED_REGION ) || ( change &amp;amp; CHANGED_TELEPORT ) ) {&lt;br /&gt;
            EFFECTOFF(); // stop effects before reset&lt;br /&gt;
            // FIXME - resets battery state&lt;br /&gt;
            RESET();&lt;br /&gt;
        }&lt;br /&gt;
    }    &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // DEFAULT LISTEN&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    listen(integer channel,string speakername,key speakerid,string message) {&lt;br /&gt;
        speakername = &amp;quot;&amp;quot;; // LSLINT&lt;br /&gt;
        speakerid = NULL_KEY; // LSLINT&lt;br /&gt;
        ATTACHPOINT = llGetAttached(); // get location we're attached to&lt;br /&gt;
        list tokens = llParseString2List(message,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        string command = llToLower(llStringTrim(llList2String(tokens,0),STRING_TRIM));&lt;br /&gt;
        if ( channel == CHANATTACH ) { // is this message on the attach channel?&lt;br /&gt;
            // General Myriad Lite System Commands&lt;br /&gt;
            if ( command == &amp;quot;reset&amp;quot; ) { RESET(); return; }&lt;br /&gt;
            if ( command == &amp;quot;version&amp;quot; ) { GETVERSION(); return; }&lt;br /&gt;
            if ( command == &amp;quot;debugon&amp;quot; ) { FLAG_DEBUG = TRUE; DEBUG(&amp;quot;on&amp;quot;); return; }&lt;br /&gt;
            if ( command == &amp;quot;debugoff&amp;quot; ) { FLAG_DEBUG = FALSE; DEBUG(&amp;quot;off&amp;quot;); return; }&lt;br /&gt;
            // Armor Commands&lt;br /&gt;
            if ( ( command == &amp;quot;registerattachments&amp;quot; ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;gt;= MINATTACHPOINT ) &amp;amp;&amp;amp; ( ATTACHPOINT &amp;lt;= MAXATTACHPOINT ) ) {&lt;br /&gt;
                WEARER = llGetOwner(); // get armor owner BUG: what if owner not equal wearer?&lt;br /&gt;
                // calculate the dynamic channel of the wearer&lt;br /&gt;
                integer dynchan = (integer)(CHAN_PREFIX+llGetSubString((string)WEARER,1,7));&lt;br /&gt;
                // send the ATTACHARMOR to ML HUD to register that this armor piece is worn&lt;br /&gt;
                llWhisper(dynchan,&amp;quot;ARMORATTACH&amp;quot;+DIV+(string)ARMORRATING+DIV+(string)POWERARMOR+DIV+(string)ATTACHPOINT+DIV+llGetObjectName());&lt;br /&gt;
                return; // message processed, exit early&lt;br /&gt;
            } // end of if message equal REGISTERATTACHMENTS&lt;br /&gt;
            if ( command == &amp;quot;armorreset&amp;quot; ) { RESET(); return;} // reset armor&lt;br /&gt;
            if ( command == &amp;quot;armoron&amp;quot; ) { ARMORON(); return;} // activate power armor&lt;br /&gt;
            if ( command == &amp;quot;armoroff&amp;quot; ) { ARMOROFF(); return;} // deactivate power armor&lt;br /&gt;
            if ( command == &amp;quot;armorbattery&amp;quot; ) { ARMORBATTERY(); return;} // show effects on armor battery level check&lt;br /&gt;
            if ( command == &amp;quot;armorrecharge&amp;quot; ) { ARMORRECHARGE(); return;} // show effects on armor recharge&lt;br /&gt;
            if ( command == &amp;quot;armorcheck&amp;quot; ) { ARMORCHECK(); return;} // show effects on armor check            &lt;br /&gt;
            if ( command == &amp;quot;armoreffecthit&amp;quot; ) { EFFECTHIT(); return; } // is this an armor hit?&lt;br /&gt;
            if ( command == &amp;quot;armoreffectblocked&amp;quot; ) { EFFECTBLOCKED(); return; } // did the armor block the hit too&lt;br /&gt;
            if ( command == &amp;quot;armoreffectoff&amp;quot; ) { EFFECTOFF(); return; } // time to turn off effects?&lt;br /&gt;
            // ML HUD sent a request for any attached items&lt;br /&gt;
        } // end if channel CHANATTACH&lt;br /&gt;
    } &lt;br /&gt;
       &lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    // TIMER CALLED TO TURN OFF THE SPECIAL EFFECTS&lt;br /&gt;
    //------------------------------------------------------------------------&lt;br /&gt;
    timer() {&lt;br /&gt;
        EFFECTTIME--;&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 ) { &lt;br /&gt;
            EFFECTOFF(); // turn off special effects&lt;br /&gt;
            EFFECTTIME=0; // make it zero anyway&lt;br /&gt;
        } // timer expired, turn off effect&lt;br /&gt;
        if ( EFFECTTIME &amp;lt;= 0 || ARMOR_ON == FALSE ) llSetTimerEvent(0.0); // all timers done, stop timer events&lt;br /&gt;
    } // end timer&lt;br /&gt;
} // end default&lt;br /&gt;
//============================================================================&lt;br /&gt;
// END&lt;br /&gt;
//============================================================================&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Allen Kerensky</name></author>	</entry>

	</feed>