<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cow+Taurog</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Cow+Taurog"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Cow_Taurog"/>
	<updated>2026-07-16T08:47:44Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:ObviousAltIsObvious_Resident&amp;diff=1196040</id>
		<title>User talk:ObviousAltIsObvious Resident</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:ObviousAltIsObvious_Resident&amp;diff=1196040"/>
		<updated>2015-04-06T16:54:40Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Thanks! */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Thank you for the many useful wiki edits. I run across yours now and again when I&#039;m using the wiki as a reference myself. --[[User:Soft Linden|Soft Linden]] 12:57, 10 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
Shoot. I didn&#039;t realize until now that I&#039;ve been taking you for granted. I&#039;m sorry. Thank you for your hard work, I really appreciate it. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 21:56, 10 December 2013 (PST)&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;nowiki&amp;gt;&amp;lt;lsl&amp;gt;&amp;lt;/nowiki&amp;gt; tag conversion ==&lt;br /&gt;
&lt;br /&gt;
walking thru [[:Category:LSL Functions]], have got as far as [[llGetWallclock]] ... need to break for RL stuff. [[Special:Contributions/Lady Sumoku|Lady Sumoku]] has been barreling through some of the other categories this morning! --[[User:ObviousAltIsObvious Resident|ObviousAltIsObvious Resident]] ([[User talk:ObviousAltIsObvious Resident|talk]]) 02:17, 22 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&#039;&#039;&#039;*waves*&#039;&#039;&#039;Couldn&#039;t sleep, and the formatting change was bugging me until I saw you fixing them. I did most of the &amp;quot;LSL Reference&amp;quot; section (at least one level down) except for [[:Category:LSL Constants|Constants]] and [[LSL Errors|Errors]]. (And Functions, since you were on that!)  --[[User:Lady Sumoku|Lady Sumoku]] ([[User talk:Lady Sumoku|talk]]) 02:35, 22 January 2015 (PST)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Trying to get to the top of the [[User:Zai_Lynch/Wiki_Spammer_Ranking|wiki spammer ranking]] I see. Thank you both for working on this. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 13:18, 23 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
:I feel as if this may come across as bitchy and/or unhelpful, but: Swapping out tags can be done in no time with little effort by using [https://www.mediawiki.org/wiki/Extension:Replace_Text a MediaWiki function/extension using regex to search and replace strings] which is already part of this wiki. All this manual labour makes my head spin. Call me lazy if you like, but why waste energy doing the work of machines?&lt;br /&gt;
:P.S. [[MediaWiki:Common.js|The common JS]] is laughably bad and out of date, and I&#039;m guessing (not looked) that the CSS will be as bad. Someone really ought to clean them up.&amp;amp;nbsp;[[User:Fred_Gandt|&#039;&#039;&#039;&amp;lt;span style=&amp;quot;font-family:arial;color:#055;font-size:16px;&amp;quot;&amp;gt;f&amp;lt;i style=&amp;quot;color:#0dd;font-size:10px;&amp;quot;&amp;gt;red&amp;lt;/i&amp;gt;g&amp;lt;i style=&amp;quot;color:#0dd;font-size:10px;&amp;quot;&amp;gt;andt&amp;lt;/i&amp;gt;&amp;lt;/span&amp;gt;&#039;&#039;&#039;]] 13:40, 23 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
::Manually reviewed changes are a deliberate choice. See the messes that were made with the use of automated tools on  http://forums-archive.secondlife.com/15/1.html and http://community.secondlife.com/t5/Scripting-Library/bd-p/2122 for why. --[[User:ObviousAltIsObvious Resident|ObviousAltIsObvious Resident]] ([[User talk:ObviousAltIsObvious Resident|talk]]) 14:15, 23 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
::I considered suggesting changing this to use a template that specified the tag (this way it we wouldn&#039;t have to worry about doing this again). Who wants to do the &amp;lt;nowiki&amp;gt;&amp;lt;cpp&amp;gt; and &amp;lt;php&amp;gt;&amp;lt;/nowiki&amp;gt; tags? I&#039;m going to work on redoing primitive params (collapsible sections will make it rock). -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:58, 23 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
:::Knew this change was going to have to come sooner or later, and did think about that. Like-for-like substitution was less likely to disturb the syntax in the existing template soup, and we&#039;re reasonably safe for a long time since we&#039;re now in sync with that Wikipedia and Wikia use. --[[User:ObviousAltIsObvious Resident|ObviousAltIsObvious Resident]] ([[User talk:ObviousAltIsObvious Resident|talk]]) 17:16, 23 January 2015 (PST)&lt;br /&gt;
&lt;br /&gt;
::I am of a simliar mindset about the &amp;quot;auto&amp;quot; fixing.  While it&#039;s nice when it works, it is usually much more trouble in the instances where it doesn&#039;t.  I was skimming over each page to make sure my changes weren&#039;t doing anything I didn&#039;t want them to.  Long and boring, sure.  But I didn&#039;t want to cause a mess later for someone else.&lt;br /&gt;
&lt;br /&gt;
== Thanks! ==&lt;br /&gt;
&lt;br /&gt;
I didn&#039;t even realize that geshi got changed to &amp;quot;lsl2&amp;quot;, I spent way too long trying to figure out where I screwed up, and almost went crazy. -[[User:Cow Taurog|Cow Taurog]] ([[User talk:Cow Taurog|talk]]) 09:54, 6 April 2015 (PDT)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196036</id>
		<title>User:Cow Taurog/Interceptor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196036"/>
		<updated>2015-04-05T22:40:58Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;LSL&amp;gt;&lt;br /&gt;
float gfFreq=0.01; // The scanning speed&lt;br /&gt;
float gfRange=15; // The scanning range&lt;br /&gt;
vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar&lt;br /&gt;
float gfTolerance=0.05; // The sensitivity for detecting speed (anything slower than this is considered to be still)&lt;br /&gt;
float gfInnerLimit=0.95; // Object is too close, don&#039;t intercept to avoid putting panels through you&lt;br /&gt;
integer giChan=74347;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giStatus;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){state running;}}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=0;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|0&amp;quot;,&amp;quot;status&amp;quot;);llOwnerSay(&amp;quot;Interceptors off.&amp;quot;);state default;}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;held&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){&lt;br /&gt;
            listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSetTimerEvent(30);&lt;br /&gt;
            llTextBox(llGetOwner(),&amp;quot;Say sensor range and rez distance seperated by commas\n(i.e. 15,2)\nRange: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, Rez distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m&amp;quot;,giChan);&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=1;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|1&amp;quot;,&amp;quot;status&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Interceptors on. Scan range: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m. Intercept distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llListenRemove(listen0);llSetTimerEvent(0);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llGetOwnerKey(id)==llGetOwner()){if(mess!=&amp;quot;&amp;quot;){&lt;br /&gt;
        list lR=llParseString2List(mess,[&amp;quot;,&amp;quot;,&amp;quot;|&amp;quot;,&amp;quot;/&amp;quot;],[]);&lt;br /&gt;
        gfRange=(float)llList2String(lR,0);&lt;br /&gt;
        if((float)llList2String(lR,1)&amp;gt;10){llOwnerSay(&amp;quot;The maximum inctercept distance is 10m.&amp;quot;);gvOffset=&amp;lt;10,0,0&amp;gt;;}&lt;br /&gt;
        else{gvOffset=&amp;lt;(float)llList2String(lR,1),0,0&amp;gt;;}&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sensor range is now &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, rez distance is now &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}}&lt;br /&gt;
    sensor(integer num){&lt;br /&gt;
        integer x;&lt;br /&gt;
        integer i;&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){if(llDetectedOwner(i)!=llGetOwner()){ // if not the owner&#039;s&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ //if moving&lt;br /&gt;
            //if(llVecDist(llGetPos(),llDetectedPos(i))&amp;gt;=gvOffset.x){&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;=(gvOffset.x*PI)){ //*2&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;gvOffset.x){ // inner shield //&lt;br /&gt;
                vector vCloseOffset=&amp;lt;((llVecMag(llGetPos()-llDetectedPos(i)))/1),0,0&amp;gt;; ///pos/2&lt;br /&gt;
                if(llVecDist(llGetPos(),llGetPos()+(&amp;lt;vCloseOffset.x,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())))&amp;gt;gfInnerLimit){&lt;br /&gt;
                    // Inner shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.375,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    // Outer shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.25,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }}&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ // perimeter shield&lt;br /&gt;
                llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(gvOffset*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+((gvOffset+&amp;lt;0.125,0,0&amp;gt;)*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                } // distance check&lt;br /&gt;
            } // moving check&lt;br /&gt;
        }} // loop and owner check&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/LSL&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196035</id>
		<title>User:Cow Taurog/Interceptor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196035"/>
		<updated>2015-04-05T22:39:47Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
float gfFreq=0.01; // The scanning speed&lt;br /&gt;
float gfRange=15; // The scanning range&lt;br /&gt;
vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar&lt;br /&gt;
float gfTolerance=0.05; // The sensitivity for detecting speed (anything slower than this is considered to be still)&lt;br /&gt;
float gfInnerLimit=0.95; // Object is too close, don&#039;t intercept to avoid putting panels through you&lt;br /&gt;
integer giChan=74347;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giStatus;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){state running;}}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=0;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|0&amp;quot;,&amp;quot;status&amp;quot;);llOwnerSay(&amp;quot;Interceptors off.&amp;quot;);state default;}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;held&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){&lt;br /&gt;
            listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSetTimerEvent(30);&lt;br /&gt;
            llTextBox(llGetOwner(),&amp;quot;Say sensor range and rez distance seperated by commas\n(i.e. 15,2)\nRange: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, Rez distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m&amp;quot;,giChan);&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=1;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|1&amp;quot;,&amp;quot;status&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Interceptors on. Scan range: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m. Intercept distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llListenRemove(listen0);llSetTimerEvent(0);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llGetOwnerKey(id)==llGetOwner()){if(mess!=&amp;quot;&amp;quot;){&lt;br /&gt;
        list lR=llParseString2List(mess,[&amp;quot;,&amp;quot;,&amp;quot;|&amp;quot;,&amp;quot;/&amp;quot;],[]);&lt;br /&gt;
        gfRange=(float)llList2String(lR,0);&lt;br /&gt;
        if((float)llList2String(lR,1)&amp;gt;10){llOwnerSay(&amp;quot;The maximum inctercept distance is 10m.&amp;quot;);gvOffset=&amp;lt;10,0,0&amp;gt;;}&lt;br /&gt;
        else{gvOffset=&amp;lt;(float)llList2String(lR,1),0,0&amp;gt;;}&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sensor range is now &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, rez distance is now &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}}&lt;br /&gt;
    sensor(integer num){&lt;br /&gt;
        integer x;&lt;br /&gt;
        integer i;&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){if(llDetectedOwner(i)!=llGetOwner()){ // if not the owner&#039;s&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ //if moving&lt;br /&gt;
            //if(llVecDist(llGetPos(),llDetectedPos(i))&amp;gt;=gvOffset.x){&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;=(gvOffset.x*PI)){ //*2&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;gvOffset.x){ // inner shield //&lt;br /&gt;
                vector vCloseOffset=&amp;lt;((llVecMag(llGetPos()-llDetectedPos(i)))/1),0,0&amp;gt;; ///pos/2&lt;br /&gt;
                if(llVecDist(llGetPos(),llGetPos()+(&amp;lt;vCloseOffset.x,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())))&amp;gt;gfInnerLimit){&lt;br /&gt;
                    // Inner shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.375,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    // Outer shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.25,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }}&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ // perimeter shield&lt;br /&gt;
                llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(gvOffset*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+((gvOffset+&amp;lt;0.125,0,0&amp;gt;)*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                } // distance check&lt;br /&gt;
            } // moving check&lt;br /&gt;
        }} // loop and owner check&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196034</id>
		<title>User:Cow Taurog/Interceptor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196034"/>
		<updated>2015-04-05T22:38:03Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;code&amp;gt;&lt;br /&gt;
float gfFreq=0.01; // The scanning speed&lt;br /&gt;
float gfRange=15; // The scanning range&lt;br /&gt;
vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar&lt;br /&gt;
float gfTolerance=0.05; // The sensitivity for detecting speed (anything slower than this is considered to be still)&lt;br /&gt;
float gfInnerLimit=0.95; // Object is too close, don&#039;t intercept to avoid putting panels through you&lt;br /&gt;
integer giChan=74347;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giStatus;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){state running;}}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=0;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|0&amp;quot;,&amp;quot;status&amp;quot;);llOwnerSay(&amp;quot;Interceptors off.&amp;quot;);state default;}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;held&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){&lt;br /&gt;
            listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSetTimerEvent(30);&lt;br /&gt;
            llTextBox(llGetOwner(),&amp;quot;Say sensor range and rez distance seperated by commas\n(i.e. 15,2)\nRange: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, Rez distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m&amp;quot;,giChan);&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=1;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|1&amp;quot;,&amp;quot;status&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Interceptors on. Scan range: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m. Intercept distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llListenRemove(listen0);llSetTimerEvent(0);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llGetOwnerKey(id)==llGetOwner()){if(mess!=&amp;quot;&amp;quot;){&lt;br /&gt;
        list lR=llParseString2List(mess,[&amp;quot;,&amp;quot;,&amp;quot;|&amp;quot;,&amp;quot;/&amp;quot;],[]);&lt;br /&gt;
        gfRange=(float)llList2String(lR,0);&lt;br /&gt;
        if((float)llList2String(lR,1)&amp;gt;10){llOwnerSay(&amp;quot;The maximum inctercept distance is 10m.&amp;quot;);gvOffset=&amp;lt;10,0,0&amp;gt;;}&lt;br /&gt;
        else{gvOffset=&amp;lt;(float)llList2String(lR,1),0,0&amp;gt;;}&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sensor range is now &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, rez distance is now &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}}&lt;br /&gt;
    sensor(integer num){&lt;br /&gt;
        integer x;&lt;br /&gt;
        integer i;&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){if(llDetectedOwner(i)!=llGetOwner()){ // if not the owner&#039;s&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ //if moving&lt;br /&gt;
            //if(llVecDist(llGetPos(),llDetectedPos(i))&amp;gt;=gvOffset.x){&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;=(gvOffset.x*PI)){ //*2&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;gvOffset.x){ // inner shield //&lt;br /&gt;
                vector vCloseOffset=&amp;lt;((llVecMag(llGetPos()-llDetectedPos(i)))/1),0,0&amp;gt;; ///pos/2&lt;br /&gt;
                if(llVecDist(llGetPos(),llGetPos()+(&amp;lt;vCloseOffset.x,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())))&amp;gt;gfInnerLimit){&lt;br /&gt;
                    // Inner shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.375,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    // Outer shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.25,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }}&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ // perimeter shield&lt;br /&gt;
                llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(gvOffset*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+((gvOffset+&amp;lt;0.125,0,0&amp;gt;)*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                } // distance check&lt;br /&gt;
            } // moving check&lt;br /&gt;
        }} // loop and owner check&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196033</id>
		<title>User:Cow Taurog/Interceptor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196033"/>
		<updated>2015-04-05T22:37:32Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;lsl&amp;gt;&lt;br /&gt;
float gfFreq=0.01; // The scanning speed&lt;br /&gt;
float gfRange=15; // The scanning range&lt;br /&gt;
vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar&lt;br /&gt;
float gfTolerance=0.05; // The sensitivity for detecting speed (anything slower than this is considered to be still)&lt;br /&gt;
float gfInnerLimit=0.95; // Object is too close, don&#039;t intercept to avoid putting panels through you&lt;br /&gt;
integer giChan=74347;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giStatus;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){state running;}}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=0;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|0&amp;quot;,&amp;quot;status&amp;quot;);llOwnerSay(&amp;quot;Interceptors off.&amp;quot;);state default;}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;held&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){&lt;br /&gt;
            listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSetTimerEvent(30);&lt;br /&gt;
            llTextBox(llGetOwner(),&amp;quot;Say sensor range and rez distance seperated by commas\n(i.e. 15,2)\nRange: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, Rez distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m&amp;quot;,giChan);&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=1;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|1&amp;quot;,&amp;quot;status&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Interceptors on. Scan range: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m. Intercept distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llListenRemove(listen0);llSetTimerEvent(0);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llGetOwnerKey(id)==llGetOwner()){if(mess!=&amp;quot;&amp;quot;){&lt;br /&gt;
        list lR=llParseString2List(mess,[&amp;quot;,&amp;quot;,&amp;quot;|&amp;quot;,&amp;quot;/&amp;quot;],[]);&lt;br /&gt;
        gfRange=(float)llList2String(lR,0);&lt;br /&gt;
        if((float)llList2String(lR,1)&amp;gt;10){llOwnerSay(&amp;quot;The maximum inctercept distance is 10m.&amp;quot;);gvOffset=&amp;lt;10,0,0&amp;gt;;}&lt;br /&gt;
        else{gvOffset=&amp;lt;(float)llList2String(lR,1),0,0&amp;gt;;}&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sensor range is now &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, rez distance is now &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}}&lt;br /&gt;
    sensor(integer num){&lt;br /&gt;
        integer x;&lt;br /&gt;
        integer i;&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){if(llDetectedOwner(i)!=llGetOwner()){ // if not the owner&#039;s&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ //if moving&lt;br /&gt;
            //if(llVecDist(llGetPos(),llDetectedPos(i))&amp;gt;=gvOffset.x){&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;=(gvOffset.x*PI)){ //*2&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;gvOffset.x){ // inner shield //&lt;br /&gt;
                vector vCloseOffset=&amp;lt;((llVecMag(llGetPos()-llDetectedPos(i)))/1),0,0&amp;gt;; ///pos/2&lt;br /&gt;
                if(llVecDist(llGetPos(),llGetPos()+(&amp;lt;vCloseOffset.x,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())))&amp;gt;gfInnerLimit){&lt;br /&gt;
                    // Inner shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.375,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    // Outer shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.25,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }}&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ // perimeter shield&lt;br /&gt;
                llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(gvOffset*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+((gvOffset+&amp;lt;0.125,0,0&amp;gt;)*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                } // distance check&lt;br /&gt;
            } // moving check&lt;br /&gt;
        }} // loop and owner check&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196032</id>
		<title>User:Cow Taurog/Interceptor</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Interceptor&amp;diff=1196032"/>
		<updated>2015-04-05T22:36:36Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: Created page with &amp;quot;&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt; float gfFreq=0.01; // The scanning speed float gfRange=15; // The scanning range vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar float gfTo...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
float gfFreq=0.01; // The scanning speed&lt;br /&gt;
float gfRange=15; // The scanning range&lt;br /&gt;
vector gvOffset=&amp;lt;2,0,0&amp;gt;; // Shield plate offset from the avatar&lt;br /&gt;
float gfTolerance=0.05; // The sensitivity for detecting speed (anything slower than this is considered to be still)&lt;br /&gt;
float gfInnerLimit=0.95; // Object is too close, don&#039;t intercept to avoid putting panels through you&lt;br /&gt;
integer giChan=74347;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giStatus;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){state running;}}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=0;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;getstatus&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|&amp;quot;+(string)giStatus,&amp;quot;status&amp;quot;);}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;touched&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|0&amp;quot;,&amp;quot;status&amp;quot;);llOwnerSay(&amp;quot;Interceptors off.&amp;quot;);state default;}}&lt;br /&gt;
        if(llToLower(mess)==&amp;quot;held&amp;quot;){if(id==&amp;quot;interceptor&amp;quot;){&lt;br /&gt;
            listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llSetTimerEvent(30);&lt;br /&gt;
            llTextBox(llGetOwner(),&amp;quot;Say sensor range and rez distance seperated by commas\n(i.e. 15,2)\nRange: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, Rez distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m&amp;quot;,giChan);&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giStatus=1;&lt;br /&gt;
        llMessageLinked(LINK_SET,1,&amp;quot;status|interceptor|1&amp;quot;,&amp;quot;status&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;Interceptors on. Scan range: &amp;quot;+(string)llRound(gfRange)+&amp;quot;m. Intercept distance: &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llListenRemove(listen0);llSetTimerEvent(0);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llGetOwnerKey(id)==llGetOwner()){if(mess!=&amp;quot;&amp;quot;){&lt;br /&gt;
        list lR=llParseString2List(mess,[&amp;quot;,&amp;quot;,&amp;quot;|&amp;quot;,&amp;quot;/&amp;quot;],[]);&lt;br /&gt;
        gfRange=(float)llList2String(lR,0);&lt;br /&gt;
        if((float)llList2String(lR,1)&amp;gt;10){llOwnerSay(&amp;quot;The maximum inctercept distance is 10m.&amp;quot;);gvOffset=&amp;lt;10,0,0&amp;gt;;}&lt;br /&gt;
        else{gvOffset=&amp;lt;(float)llList2String(lR,1),0,0&amp;gt;;}&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT|ACTIVE,gfRange,PI,gfFreq);&lt;br /&gt;
        llOwnerSay(&amp;quot;Sensor range is now &amp;quot;+(string)llRound(gfRange)+&amp;quot;m, rez distance is now &amp;quot;+(string)llRound(gvOffset.x)+&amp;quot;m.&amp;quot;);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}}&lt;br /&gt;
    sensor(integer num){&lt;br /&gt;
        integer x;&lt;br /&gt;
        integer i;&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){if(llDetectedOwner(i)!=llGetOwner()){ // if not the owner&#039;s&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ //if moving&lt;br /&gt;
            //if(llVecDist(llGetPos(),llDetectedPos(i))&amp;gt;=gvOffset.x){&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;=(gvOffset.x*PI)){ //*2&lt;br /&gt;
            if(llVecDist(llGetPos(),llDetectedPos(i))&amp;lt;gvOffset.x){ // inner shield //&lt;br /&gt;
                vector vCloseOffset=&amp;lt;((llVecMag(llGetPos()-llDetectedPos(i)))/1),0,0&amp;gt;; ///pos/2&lt;br /&gt;
                if(llVecDist(llGetPos(),llGetPos()+(&amp;lt;vCloseOffset.x,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())))&amp;gt;gfInnerLimit){&lt;br /&gt;
                    // Inner shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.375,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    // Outer shield&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(&amp;lt;vCloseOffset.x-0.25,0,0&amp;gt;*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),4&lt;br /&gt;
                    );&lt;br /&gt;
                    return;&lt;br /&gt;
                }&lt;br /&gt;
            }}&lt;br /&gt;
            if(llVecMag(llDetectedVel(i))&amp;gt;gfTolerance){ // perimeter shield&lt;br /&gt;
                llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+(gvOffset*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                    llRezObject(&amp;quot;Shield panel&amp;quot;,&lt;br /&gt;
                    llGetPos()+((gvOffset+&amp;lt;0.125,0,0&amp;gt;)*llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos())),&lt;br /&gt;
                    ZERO_VECTOR,&lt;br /&gt;
                    llGetRot()*llRotBetween(&amp;lt;1.33,0,0&amp;gt;*llGetRot(),llDetectedPos(i)-llGetPos()),&lt;br /&gt;
                    4);&lt;br /&gt;
                } // distance check&lt;br /&gt;
            } // moving check&lt;br /&gt;
        }} // loop and owner check&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1189859</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1189859"/>
		<updated>2014-04-24T16:56:22Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, if the license info is available). Any script that I have created is free to copy, modify, and yes, even sell. Everything under my userpage is licensed under [https://creativecommons.org/licenses/by-sa/3.0/ the Creative Commons Attribution-ShareAlike 3.0 Unported license]. I might even help you out with any questions you have. I don&#039;t mind teaching, so ask me, online or not. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert or edit if I don&#039;t like it), they must be under the same license, and keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;b&amp;gt;Be bold.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;br /&gt;
*[[User:Cow Taurog/Sound looper|Sound looper]]&lt;br /&gt;
*[[User:Cow Taurog/Auto turret|Auto Turret]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189770</id>
		<title>User:Cow Taurog/Prim owner board</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189770"/>
		<updated>2014-04-22T10:21:04Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Prim tracker */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Prim poller==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// Cow Taurog&#039;s prim owner info fetcher&lt;br /&gt;
// Last edited on 08/27/2010&lt;br /&gt;
//&lt;br /&gt;
// This script will grab a list of people that have prims on the parcel, prim count, and online status.&lt;br /&gt;
// The list will be sorted by descending prim count, and their names resolved, then sent over chat and/or link message.&lt;br /&gt;
// You can use the output provided in your own script, or drop in the display scripts.&lt;br /&gt;
//&lt;br /&gt;
// This will not work if you aren&#039;t in the same sim unless:&lt;br /&gt;
// -The land is owned by a group, not an individual.&lt;br /&gt;
// -This object is deeded to (owned by) the group, not an individual.&lt;br /&gt;
// You will need to set full perms, and share with the group if you want to be able to edit&lt;br /&gt;
// the server once it is deeded. You will also need to share with group again after it is deeded.&lt;br /&gt;
// Group names cannot be resolved from their key, so any group owned objects will show as unknown.&lt;br /&gt;
// This whole &amp;quot;not working when the owner is gone&amp;quot; thing is why we need this to act by itself as a server.&lt;br /&gt;
&lt;br /&gt;
// -Settings-&lt;br /&gt;
&lt;br /&gt;
float gfPoll=90;          // How often to update in seconds. Depends on how fast the display you will use refreshes.&lt;br /&gt;
&lt;br /&gt;
integer giLinkMsgChan=43; // Channel to output the data over link message on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
integer giChatChan=643;   // Channel to output the data over chat on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
// The data is output as a pipe seperated list of the key, name, prim count, and presence of all prim owners.&lt;br /&gt;
// The parcel key is the first item in the list, useful for making sure we get the right info.&lt;br /&gt;
// &amp;lt;parcel key&amp;gt;|&amp;lt;owner1 key&amp;gt;|&amp;lt;owner1 name&amp;gt;|&amp;lt;owner1 primcount&amp;gt;|&amp;lt;owner1 in sim (1/0)&amp;gt;|&amp;lt;owner2 key&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
list glExcludeKeys=[&amp;quot;38429ab1-2d0a-4535-962f-a909cee910e0&amp;quot;,&amp;quot;83b1a9ee-d1fa-1e11-486c-1aa470872db5&amp;quot;];&lt;br /&gt;
// You can choose to exclude any person or group from being shown on the list. I have myself and my group in this list.&lt;br /&gt;
&lt;br /&gt;
float gfDataTimeout=3.0;  // How long before giving up on response from the name resolution (owner is a group or &amp;lt;1 day old)&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line. &lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
list glRaw; // Stores raw data so we can sort and add to it&lt;br /&gt;
key gkAct; // Target&#039;s key&lt;br /&gt;
integer giCount; // Target&#039;s prim count&lt;br /&gt;
integer giRawLen; // Length of the raw data list&lt;br /&gt;
integer giExcLen; // Length of the key exclusion list&lt;br /&gt;
list glData; // Sorted and completed data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer k; // Counter&lt;br /&gt;
key gkReq; // Dataserver request handle&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
key gkDebugTo=&amp;quot;&amp;quot;; // Key to IM debug messages to. Blank to disable.&lt;br /&gt;
debug2(string mess){if(DEBUG==2){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();} //Reset when rezzed&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}} // Reset when owner changes&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glData=[]; // Clear data from the last run&lt;br /&gt;
        glRaw=llGetParcelPrimOwners(llGetPos()); // Get keys and prim counts from the parcel&lt;br /&gt;
        giRawLen=llGetListLength(glRaw); // Calculate length of the raw data&lt;br /&gt;
        giExcLen=llGetListLength(glExcludeKeys); // Calculate length of the exclusion list&lt;br /&gt;
        debug1(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // Remove anyone on the exclusion list&lt;br /&gt;
        for(i=0;i&amp;lt;giExcLen;i++){ // Check every entry in the exclusion list&lt;br /&gt;
            string sF=llList2String(glExcludeKeys,i); // Store target key&lt;br /&gt;
            debug2(&amp;quot;sF: &amp;quot;+sF);&lt;br /&gt;
            integer iAt=llListFindList(glRaw,[(key)sF]); // Store location of target key&lt;br /&gt;
            debug2(&amp;quot;iAt: &amp;quot;+(string)iAt);&lt;br /&gt;
            if(iAt!=-1){ glRaw=llDeleteSubList(glRaw,iAt,iAt+1);} // If the target is in the list, remove it&lt;br /&gt;
        }&lt;br /&gt;
        debug2(&amp;quot;glRaw after exclusion: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // We can only sort by the first item in a strided list, so we need to reverse the list.&lt;br /&gt;
        // Put the prim count first, and make sure it is casted as an integer instead of a string.&lt;br /&gt;
        for(i=0;i&amp;lt;giRawLen;i=i+2){ // Loop through the entire list (stride of 2, note the i=i+2 instead of i++)&lt;br /&gt;
            integer iCount=llList2Integer(glRaw,i+1); // Store prim count as integer to ensure proper typecasting&lt;br /&gt;
            string sOwner=llList2String(glRaw,i); // Store owner key&lt;br /&gt;
            glData=glData+[iCount,sOwner]; // Add these to the new data list in reverse order&lt;br /&gt;
        }&lt;br /&gt;
        // Sort the data by prim count&lt;br /&gt;
        integer iDL=llGetListLength(glData)-4; // There is one blank stride on the list for some reason, note the -4.&lt;br /&gt;
        debug2(&amp;quot;glData before chop: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glData=llDeleteSubList(glData,iDL,-1); // Chop off the extra entry&lt;br /&gt;
        debug2(&amp;quot;glData before sort: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glRaw=[]; // Blank out the raw info from earlier, we don&#039;t need it&lt;br /&gt;
        glRaw=llListSort(glData,2,FALSE); // Sort data and store it into the empty list&lt;br /&gt;
        glData=[]; // Blank out the data we just sorted from&lt;br /&gt;
        debug2(&amp;quot;glRaw after sort: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        i=0; // Set i to zero so we can use it&lt;br /&gt;
        // The script now has a sorted list of keys and prim counts. We now resolve their names, and find if they are here&lt;br /&gt;
        // We will toggle back and forth between two identical states to resolve the names from the dataserver.&lt;br /&gt;
        state fillA; // Go to the first state&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state fillA{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){ // If the timer event is triggered, the name could not be found, either it is a group or &amp;lt;1 day old.&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1]; // Store their info into the final list&lt;br /&gt;
        i=i+2; // Increment i by 2 since the list is strided&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout); // Set request timeout&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1); // Store target&#039;s key (these are global since they are used in dataserver too)&lt;br /&gt;
        giCount=llList2Integer(glRaw,i); // Store target&#039;s prim count&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);  // Request the name from the dataserver&lt;br /&gt;
        debug2(&amp;quot;Requested (A)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){ // Make sure this is our request, and not some random one&lt;br /&gt;
        llSetTimerEvent(0); // Keep the timeout event from triggering since we got our result&lt;br /&gt;
        debug2(&amp;quot;Dataserver (A): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct); // Store the target&#039;s size (will be &amp;lt;0,0,0&amp;gt; if they are a group, or aren&#039;t in the sim)&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];} // Put their info into the final list, and a 1 for presence&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];} // Put their info into the final list, and a 0 for presence&lt;br /&gt;
        llSleep(0.1); // Wait for a tiny bit to prevent weirdness&lt;br /&gt;
        i=i+2; // Increment i by 2 to advance to the next entry&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state fillB{ // Second verse, same as the first. Only this one goes to state fillA instead.&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1];&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout);&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1);&lt;br /&gt;
        giCount=llList2Integer(glRaw,i);&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);&lt;br /&gt;
        debug2(&amp;quot;Requested (B)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        debug2(&amp;quot;Dataserver (B): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct);&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];}&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];}&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state show{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfPoll); // Start the timer so we can do this all over again&lt;br /&gt;
        llListen(giChatChan+1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;); // Listen for a reset message&lt;br /&gt;
        debug1(&amp;quot;glData: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        string sD=llDumpList2String(glData,&amp;quot;|&amp;quot;); // Dump the whole thing into a string seperated with &amp;quot;|&amp;quot;&lt;br /&gt;
        string sI=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0); // Store the parcel key&lt;br /&gt;
        if(giLinkMsgChan!=0){llMessageLinked(LINK_SET,giLinkMsgChan,sD,(key)sI);} // Output data on linkmsg&lt;br /&gt;
        if(giChatChan!=0){llRegionSay(giChatChan,sI+&amp;quot;|&amp;quot;+sD);debug2((string)giChatChan+&amp;quot;: &amp;quot;+sI+&amp;quot;|&amp;quot;+sD);} // Output on chat&lt;br /&gt;
    }&lt;br /&gt;
    timer(){i=0;glData=[];state default;} // Time to poll again, reset the list and the counter, and start over.&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        if(llSameGroup(id)==TRUE){if(mess==&amp;quot;refresh&amp;quot;){i=0;glData=[];state default;}} // Refresh if told to&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hovertext prim owner display==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
//This script is meant to provide a easy and fast display that shows the parcel&#039;s prim owner info as hovertext.&lt;br /&gt;
//You can drop this into any object on the parcel.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
vector gvColor=&amp;lt;0.3,0.6,1&amp;gt;; // Text color&lt;br /&gt;
float gfAlpha=1; // Text transparency (0=transparent, 1=opaque)&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
string gsOutput; // Stores final output&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        gsOutput=&lt;br /&gt;
         &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z\n&amp;quot;+&lt;br /&gt;
         (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
         &amp;quot; prims remain\n&amp;quot;;&lt;br /&gt;
        for(i=1;i&amp;lt;=llGetListLength(glKeys);i++){&lt;br /&gt;
            key kL=(key)((string)i);&lt;br /&gt;
            gsOutput=gsOutput+&amp;quot; &amp;quot;+llList2String(glNames,i-1)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-1)+&amp;quot;)&amp;quot;;&lt;br /&gt;
            if(llList2String(glPresences,i-1)==&amp;quot;1&amp;quot;){gsOutput=gsOutput+&amp;quot;\n&amp;quot;;}&lt;br /&gt;
            else{gsOutput=gsOutput+&amp;quot; (not here)\n&amp;quot;;}&lt;br /&gt;
        }&lt;br /&gt;
        llSetText(gsOutput,gvColor,gfAlpha);&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Xyzzy text prim owner display==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will make a xyzzytext display show info about the prim owners on your parcel.&lt;br /&gt;
// Drop this and the xyzzy controller into your display, and set the number of lines to match yours.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on.&lt;br /&gt;
integer giScreenRows=10; // Number of rows in your xytext display.&lt;br /&gt;
vector gvOnColor=&amp;lt;0,0.25,0.5&amp;gt;; // Font color for people who are here.&lt;br /&gt;
vector gvOffColor=&amp;lt;0.5,0.25,0&amp;gt;; // Font color for people who aren&#039;t here.&lt;br /&gt;
vector gvTextColor=&amp;lt;0,0.25,0&amp;gt;; // Font color for normal text&lt;br /&gt;
float gfDelay=90; // How often to poll for changes&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
integer giLinesShown; // Counts number of lines used so we don&#039;t have to blank all of them&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        //for(i=0;i&amp;lt;=giLinesShown+2;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    //timer(){llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giScreenRows++; // Rows start at zero, so add 1 to use normal human numbers&lt;br /&gt;
        //llSetTimerEvent(gfDelay);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        }&lt;br /&gt;
        //for(i=0;i&amp;lt;giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;,(string)i);}&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;raw mess: &amp;quot;+mess);&lt;br /&gt;
        if(llGetSubString(mess,36,-1)==&amp;quot;||(unknown)|0|1&amp;quot;){&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
            &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
            (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
            &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            //for(i=4;i&amp;lt;=giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,&amp;quot;4&amp;quot;);&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;* Welcome! No prims are in use&amp;quot;,&amp;quot;4&amp;quot;);  &lt;br /&gt;
        }else{&lt;br /&gt;
            debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
            glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
            debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
            debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
            for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
                glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
                glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
                glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
                glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
                glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
                debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            }&lt;br /&gt;
            giLinesShown=llGetListLength(glKeys);&lt;br /&gt;
            for(i=4;i&amp;lt;=giLinesShown+1;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            glRaw=[];&lt;br /&gt;
            debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
            debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
            debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
            debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
             &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
             (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
             &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
                string sM;&lt;br /&gt;
                sM=&amp;quot; &amp;quot;+llList2String(glNames,i-4)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-4)+&amp;quot;)&amp;quot;;&lt;br /&gt;
                debug2(&amp;quot;sM: &amp;quot;+sM);&lt;br /&gt;
                if(llList2String(glKeys,i-4)!=&amp;quot;&amp;quot;){&lt;br /&gt;
                    if(llList2Integer(glPresences,i)==0){&lt;br /&gt;
                        sM=sM+&amp;quot; (not here)&amp;quot;;&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOffColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }else{&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prim tracker==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will track who rezzes new prims, removes all their prims, and leaves without cleaning up.&lt;br /&gt;
//&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
integer giLeftBehindTol=125; // Don&#039;t nag someone unless they have more than this&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glOldKeys;&lt;br /&gt;
list glOldNames;&lt;br /&gt;
list glOldCounts;&lt;br /&gt;
list glOldPresences;&lt;br /&gt;
list glWarnList;&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
say(string mess, string hours, string minutes){llOwnerSay(hours+minutes+&amp;quot;Z: &amp;quot;+mess);}&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;1,0,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
        state running;&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;0,1,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state running;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
            //glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            //debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        integer iOL=llGetListLength(glOldKeys);&lt;br /&gt;
        debug2(&amp;quot;iOL: &amp;quot;+(string)iOL);&lt;br /&gt;
        integer iKL=llGetListLength(glKeys);&lt;br /&gt;
        debug2(&amp;quot;iKL: &amp;quot;+(string)iKL);&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glKeys,i);&lt;br /&gt;
            string sN=llList2String(glNames,i);&lt;br /&gt;
            integer iNC=llList2Integer(glCounts,i);&lt;br /&gt;
            integer iOC;&lt;br /&gt;
            integer iOCAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOCAt==-1){iOC=-1;}else{iOC=llList2Integer(glOldCounts,iOCAt);}&lt;br /&gt;
            integer iNP=llList2Integer(glPresences,i);&lt;br /&gt;
            integer iOP;&lt;br /&gt;
            integer iOPAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOPAt==-1){iOP=0;}else{iOP=llList2Integer(glOldPresences,iOPAt);}&lt;br /&gt;
            debug1(&amp;quot;kT: &amp;quot;+(string)kT);&lt;br /&gt;
            debug1(&amp;quot;sN: &amp;quot;+sN);&lt;br /&gt;
            debug1(&amp;quot;iNC: &amp;quot;+(string)iNC);&lt;br /&gt;
            debug1(&amp;quot;iOC: &amp;quot;+(string)iOC);&lt;br /&gt;
            debug1(&amp;quot;iNP: &amp;quot;+(string)iNP);&lt;br /&gt;
            debug1(&amp;quot;iOP: &amp;quot;+(string)iOP);&lt;br /&gt;
            debug1(&amp;quot;\n&amp;quot;);&lt;br /&gt;
            if(kT!=&amp;quot;(unknown)&amp;quot;){if(iOCAt==-1){&lt;br /&gt;
                if(iNC==1){say(sN+&amp;quot; rezzed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)iNC+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==0){if(iNP==1){if(iOPAt!=-1){&lt;br /&gt;
                say(sN+&amp;quot; came back.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
            if(iNC&amp;gt;iOC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iNC-iOC==1){say(sN+&amp;quot; rezzed 1 more prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)(iNC-iOC)+&amp;quot; more prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOC&amp;gt;iNC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iOC-iNC==1){say(sN+&amp;quot; removed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; removed &amp;quot;+(string)(iOC-iNC)+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==1){if(iNP==0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; left &amp;quot;+(string)iNC+&amp;quot; prims behind.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                if(iNC&amp;gt;giLeftBehindTol){&lt;br /&gt;
                    //llInstantMessage(kT,&amp;quot;You have left &amp;quot;+(string)iNC+&amp;quot; prims behind in &amp;quot;+llGetRegionName()+&amp;quot;. Please go back and clean up after yourself so other people can use them.&amp;quot;);&lt;br /&gt;
                    say(sN+&amp;quot; was warned for not cleaning up.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                }&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glOldKeys,i);&lt;br /&gt;
            string sN=llList2String(glOldNames,i);&lt;br /&gt;
            integer iOC=llList2Integer(glOldCounts,i);&lt;br /&gt;
            integer iNKAt=llListFindList(glKeys,[kT]);&lt;br /&gt;
            if(iNKAt==-1){if(iOC&amp;gt;0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; removed all &amp;quot;+(string)iOC+&amp;quot; of their prims.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        glOldKeys=[];&lt;br /&gt;
        glOldNames=[];&lt;br /&gt;
        glOldCounts=[];&lt;br /&gt;
        glOldPresences=[];&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Info Fetcher==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
//&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer giRate;&lt;br /&gt;
vector gvColor=&amp;lt;0,0.25,0&amp;gt;;&lt;br /&gt;
default{&lt;br /&gt;
    //touch_start(integer num){if(llDetectedKey(0)==llGetOwner()){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;3&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
        state poll;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state poll{&lt;br /&gt;
    state_entry(){giRate=0;llSetTimerEvent(60);gkReq=llHTTPRequest(&amp;quot;http://secondlife.com/httprequest/homepage.php&amp;quot;,[],&amp;quot;&amp;quot;);}&lt;br /&gt;
    http_response(key req,integer status,list meta,string mess){if(status==200){&lt;br /&gt;
        list lT=llParseString2List(mess,[&amp;quot;\n&amp;quot;],[]);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Grid population: &amp;quot;+llList2String(lT,17),&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Exchange rate: L$&amp;quot;+(string)llRound(llList2Float(lT,11))+&amp;quot; per USD&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(num==99292){&lt;br /&gt;
        if(mess==&amp;quot;poll&amp;quot;){state poll;}&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giRate++;&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        if(giRate&amp;gt;30){state poll;}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189769</id>
		<title>User:Cow Taurog/Prim owner board</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189769"/>
		<updated>2014-04-22T10:20:36Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Prim poller==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// Cow Taurog&#039;s prim owner info fetcher&lt;br /&gt;
// Last edited on 08/27/2010&lt;br /&gt;
//&lt;br /&gt;
// This script will grab a list of people that have prims on the parcel, prim count, and online status.&lt;br /&gt;
// The list will be sorted by descending prim count, and their names resolved, then sent over chat and/or link message.&lt;br /&gt;
// You can use the output provided in your own script, or drop in the display scripts.&lt;br /&gt;
//&lt;br /&gt;
// This will not work if you aren&#039;t in the same sim unless:&lt;br /&gt;
// -The land is owned by a group, not an individual.&lt;br /&gt;
// -This object is deeded to (owned by) the group, not an individual.&lt;br /&gt;
// You will need to set full perms, and share with the group if you want to be able to edit&lt;br /&gt;
// the server once it is deeded. You will also need to share with group again after it is deeded.&lt;br /&gt;
// Group names cannot be resolved from their key, so any group owned objects will show as unknown.&lt;br /&gt;
// This whole &amp;quot;not working when the owner is gone&amp;quot; thing is why we need this to act by itself as a server.&lt;br /&gt;
&lt;br /&gt;
// -Settings-&lt;br /&gt;
&lt;br /&gt;
float gfPoll=90;          // How often to update in seconds. Depends on how fast the display you will use refreshes.&lt;br /&gt;
&lt;br /&gt;
integer giLinkMsgChan=43; // Channel to output the data over link message on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
integer giChatChan=643;   // Channel to output the data over chat on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
// The data is output as a pipe seperated list of the key, name, prim count, and presence of all prim owners.&lt;br /&gt;
// The parcel key is the first item in the list, useful for making sure we get the right info.&lt;br /&gt;
// &amp;lt;parcel key&amp;gt;|&amp;lt;owner1 key&amp;gt;|&amp;lt;owner1 name&amp;gt;|&amp;lt;owner1 primcount&amp;gt;|&amp;lt;owner1 in sim (1/0)&amp;gt;|&amp;lt;owner2 key&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
list glExcludeKeys=[&amp;quot;38429ab1-2d0a-4535-962f-a909cee910e0&amp;quot;,&amp;quot;83b1a9ee-d1fa-1e11-486c-1aa470872db5&amp;quot;];&lt;br /&gt;
// You can choose to exclude any person or group from being shown on the list. I have myself and my group in this list.&lt;br /&gt;
&lt;br /&gt;
float gfDataTimeout=3.0;  // How long before giving up on response from the name resolution (owner is a group or &amp;lt;1 day old)&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line. &lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
list glRaw; // Stores raw data so we can sort and add to it&lt;br /&gt;
key gkAct; // Target&#039;s key&lt;br /&gt;
integer giCount; // Target&#039;s prim count&lt;br /&gt;
integer giRawLen; // Length of the raw data list&lt;br /&gt;
integer giExcLen; // Length of the key exclusion list&lt;br /&gt;
list glData; // Sorted and completed data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer k; // Counter&lt;br /&gt;
key gkReq; // Dataserver request handle&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
key gkDebugTo=&amp;quot;&amp;quot;; // Key to IM debug messages to. Blank to disable.&lt;br /&gt;
debug2(string mess){if(DEBUG==2){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();} //Reset when rezzed&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}} // Reset when owner changes&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glData=[]; // Clear data from the last run&lt;br /&gt;
        glRaw=llGetParcelPrimOwners(llGetPos()); // Get keys and prim counts from the parcel&lt;br /&gt;
        giRawLen=llGetListLength(glRaw); // Calculate length of the raw data&lt;br /&gt;
        giExcLen=llGetListLength(glExcludeKeys); // Calculate length of the exclusion list&lt;br /&gt;
        debug1(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // Remove anyone on the exclusion list&lt;br /&gt;
        for(i=0;i&amp;lt;giExcLen;i++){ // Check every entry in the exclusion list&lt;br /&gt;
            string sF=llList2String(glExcludeKeys,i); // Store target key&lt;br /&gt;
            debug2(&amp;quot;sF: &amp;quot;+sF);&lt;br /&gt;
            integer iAt=llListFindList(glRaw,[(key)sF]); // Store location of target key&lt;br /&gt;
            debug2(&amp;quot;iAt: &amp;quot;+(string)iAt);&lt;br /&gt;
            if(iAt!=-1){ glRaw=llDeleteSubList(glRaw,iAt,iAt+1);} // If the target is in the list, remove it&lt;br /&gt;
        }&lt;br /&gt;
        debug2(&amp;quot;glRaw after exclusion: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // We can only sort by the first item in a strided list, so we need to reverse the list.&lt;br /&gt;
        // Put the prim count first, and make sure it is casted as an integer instead of a string.&lt;br /&gt;
        for(i=0;i&amp;lt;giRawLen;i=i+2){ // Loop through the entire list (stride of 2, note the i=i+2 instead of i++)&lt;br /&gt;
            integer iCount=llList2Integer(glRaw,i+1); // Store prim count as integer to ensure proper typecasting&lt;br /&gt;
            string sOwner=llList2String(glRaw,i); // Store owner key&lt;br /&gt;
            glData=glData+[iCount,sOwner]; // Add these to the new data list in reverse order&lt;br /&gt;
        }&lt;br /&gt;
        // Sort the data by prim count&lt;br /&gt;
        integer iDL=llGetListLength(glData)-4; // There is one blank stride on the list for some reason, note the -4.&lt;br /&gt;
        debug2(&amp;quot;glData before chop: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glData=llDeleteSubList(glData,iDL,-1); // Chop off the extra entry&lt;br /&gt;
        debug2(&amp;quot;glData before sort: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glRaw=[]; // Blank out the raw info from earlier, we don&#039;t need it&lt;br /&gt;
        glRaw=llListSort(glData,2,FALSE); // Sort data and store it into the empty list&lt;br /&gt;
        glData=[]; // Blank out the data we just sorted from&lt;br /&gt;
        debug2(&amp;quot;glRaw after sort: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        i=0; // Set i to zero so we can use it&lt;br /&gt;
        // The script now has a sorted list of keys and prim counts. We now resolve their names, and find if they are here&lt;br /&gt;
        // We will toggle back and forth between two identical states to resolve the names from the dataserver.&lt;br /&gt;
        state fillA; // Go to the first state&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state fillA{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){ // If the timer event is triggered, the name could not be found, either it is a group or &amp;lt;1 day old.&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1]; // Store their info into the final list&lt;br /&gt;
        i=i+2; // Increment i by 2 since the list is strided&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout); // Set request timeout&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1); // Store target&#039;s key (these are global since they are used in dataserver too)&lt;br /&gt;
        giCount=llList2Integer(glRaw,i); // Store target&#039;s prim count&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);  // Request the name from the dataserver&lt;br /&gt;
        debug2(&amp;quot;Requested (A)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){ // Make sure this is our request, and not some random one&lt;br /&gt;
        llSetTimerEvent(0); // Keep the timeout event from triggering since we got our result&lt;br /&gt;
        debug2(&amp;quot;Dataserver (A): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct); // Store the target&#039;s size (will be &amp;lt;0,0,0&amp;gt; if they are a group, or aren&#039;t in the sim)&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];} // Put their info into the final list, and a 1 for presence&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];} // Put their info into the final list, and a 0 for presence&lt;br /&gt;
        llSleep(0.1); // Wait for a tiny bit to prevent weirdness&lt;br /&gt;
        i=i+2; // Increment i by 2 to advance to the next entry&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state fillB{ // Second verse, same as the first. Only this one goes to state fillA instead.&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1];&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout);&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1);&lt;br /&gt;
        giCount=llList2Integer(glRaw,i);&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);&lt;br /&gt;
        debug2(&amp;quot;Requested (B)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        debug2(&amp;quot;Dataserver (B): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct);&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];}&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];}&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state show{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfPoll); // Start the timer so we can do this all over again&lt;br /&gt;
        llListen(giChatChan+1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;); // Listen for a reset message&lt;br /&gt;
        debug1(&amp;quot;glData: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        string sD=llDumpList2String(glData,&amp;quot;|&amp;quot;); // Dump the whole thing into a string seperated with &amp;quot;|&amp;quot;&lt;br /&gt;
        string sI=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0); // Store the parcel key&lt;br /&gt;
        if(giLinkMsgChan!=0){llMessageLinked(LINK_SET,giLinkMsgChan,sD,(key)sI);} // Output data on linkmsg&lt;br /&gt;
        if(giChatChan!=0){llRegionSay(giChatChan,sI+&amp;quot;|&amp;quot;+sD);debug2((string)giChatChan+&amp;quot;: &amp;quot;+sI+&amp;quot;|&amp;quot;+sD);} // Output on chat&lt;br /&gt;
    }&lt;br /&gt;
    timer(){i=0;glData=[];state default;} // Time to poll again, reset the list and the counter, and start over.&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        if(llSameGroup(id)==TRUE){if(mess==&amp;quot;refresh&amp;quot;){i=0;glData=[];state default;}} // Refresh if told to&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hovertext prim owner display==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
//This script is meant to provide a easy and fast display that shows the parcel&#039;s prim owner info as hovertext.&lt;br /&gt;
//You can drop this into any object on the parcel.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
vector gvColor=&amp;lt;0.3,0.6,1&amp;gt;; // Text color&lt;br /&gt;
float gfAlpha=1; // Text transparency (0=transparent, 1=opaque)&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
string gsOutput; // Stores final output&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        gsOutput=&lt;br /&gt;
         &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z\n&amp;quot;+&lt;br /&gt;
         (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
         &amp;quot; prims remain\n&amp;quot;;&lt;br /&gt;
        for(i=1;i&amp;lt;=llGetListLength(glKeys);i++){&lt;br /&gt;
            key kL=(key)((string)i);&lt;br /&gt;
            gsOutput=gsOutput+&amp;quot; &amp;quot;+llList2String(glNames,i-1)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-1)+&amp;quot;)&amp;quot;;&lt;br /&gt;
            if(llList2String(glPresences,i-1)==&amp;quot;1&amp;quot;){gsOutput=gsOutput+&amp;quot;\n&amp;quot;;}&lt;br /&gt;
            else{gsOutput=gsOutput+&amp;quot; (not here)\n&amp;quot;;}&lt;br /&gt;
        }&lt;br /&gt;
        llSetText(gsOutput,gvColor,gfAlpha);&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Xyzzy text prim owner display==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will make a xyzzytext display show info about the prim owners on your parcel.&lt;br /&gt;
// Drop this and the xyzzy controller into your display, and set the number of lines to match yours.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on.&lt;br /&gt;
integer giScreenRows=10; // Number of rows in your xytext display.&lt;br /&gt;
vector gvOnColor=&amp;lt;0,0.25,0.5&amp;gt;; // Font color for people who are here.&lt;br /&gt;
vector gvOffColor=&amp;lt;0.5,0.25,0&amp;gt;; // Font color for people who aren&#039;t here.&lt;br /&gt;
vector gvTextColor=&amp;lt;0,0.25,0&amp;gt;; // Font color for normal text&lt;br /&gt;
float gfDelay=90; // How often to poll for changes&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
integer giLinesShown; // Counts number of lines used so we don&#039;t have to blank all of them&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        //for(i=0;i&amp;lt;=giLinesShown+2;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    //timer(){llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giScreenRows++; // Rows start at zero, so add 1 to use normal human numbers&lt;br /&gt;
        //llSetTimerEvent(gfDelay);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        }&lt;br /&gt;
        //for(i=0;i&amp;lt;giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;,(string)i);}&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;raw mess: &amp;quot;+mess);&lt;br /&gt;
        if(llGetSubString(mess,36,-1)==&amp;quot;||(unknown)|0|1&amp;quot;){&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
            &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
            (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
            &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            //for(i=4;i&amp;lt;=giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,&amp;quot;4&amp;quot;);&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;* Welcome! No prims are in use&amp;quot;,&amp;quot;4&amp;quot;);  &lt;br /&gt;
        }else{&lt;br /&gt;
            debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
            glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
            debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
            debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
            for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
                glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
                glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
                glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
                glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
                glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
                debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            }&lt;br /&gt;
            giLinesShown=llGetListLength(glKeys);&lt;br /&gt;
            for(i=4;i&amp;lt;=giLinesShown+1;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            glRaw=[];&lt;br /&gt;
            debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
            debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
            debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
            debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
             &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
             (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
             &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
                string sM;&lt;br /&gt;
                sM=&amp;quot; &amp;quot;+llList2String(glNames,i-4)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-4)+&amp;quot;)&amp;quot;;&lt;br /&gt;
                debug2(&amp;quot;sM: &amp;quot;+sM);&lt;br /&gt;
                if(llList2String(glKeys,i-4)!=&amp;quot;&amp;quot;){&lt;br /&gt;
                    if(llList2Integer(glPresences,i)==0){&lt;br /&gt;
                        sM=sM+&amp;quot; (not here)&amp;quot;;&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOffColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }else{&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prim tracker==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will track who rezzes new prims, removes all their prims, and leaves without cleaning up.&lt;br /&gt;
//&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
integer giLeftBehindTol=125; // Don&#039;t nag someone unless they have more than this&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glOldKeys;&lt;br /&gt;
list glOldNames;&lt;br /&gt;
list glOldCounts;&lt;br /&gt;
list glOldPresences;&lt;br /&gt;
list glWarnList;&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
say(string mess, string hours, string minutes){llOwnerSay(hours+minutes+&amp;quot;Z: &amp;quot;+mess);}&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;1,0,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
        state running;&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;0,1,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state running;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
            //glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            //debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        integer iOL=llGetListLength(glOldKeys);&lt;br /&gt;
        debug2(&amp;quot;iOL: &amp;quot;+(string)iOL);&lt;br /&gt;
        integer iKL=llGetListLength(glKeys);&lt;br /&gt;
        debug2(&amp;quot;iKL: &amp;quot;+(string)iKL);&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glKeys,i);&lt;br /&gt;
            string sN=llList2String(glNames,i);&lt;br /&gt;
            integer iNC=llList2Integer(glCounts,i);&lt;br /&gt;
            integer iOC;&lt;br /&gt;
            integer iOCAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOCAt==-1){iOC=-1;}else{iOC=llList2Integer(glOldCounts,iOCAt);}&lt;br /&gt;
            integer iNP=llList2Integer(glPresences,i);&lt;br /&gt;
            integer iOP;&lt;br /&gt;
            integer iOPAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOPAt==-1){iOP=0;}else{iOP=llList2Integer(glOldPresences,iOPAt);}&lt;br /&gt;
            debug1(&amp;quot;kT: &amp;quot;+(string)kT);&lt;br /&gt;
            debug1(&amp;quot;sN: &amp;quot;+sN);&lt;br /&gt;
            debug1(&amp;quot;iNC: &amp;quot;+(string)iNC);&lt;br /&gt;
            debug1(&amp;quot;iOC: &amp;quot;+(string)iOC);&lt;br /&gt;
            debug1(&amp;quot;iNP: &amp;quot;+(string)iNP);&lt;br /&gt;
            debug1(&amp;quot;iOP: &amp;quot;+(string)iOP);&lt;br /&gt;
            debug1(&amp;quot;\n&amp;quot;);&lt;br /&gt;
            if(kT!=&amp;quot;(unknown)&amp;quot;){if(iOCAt==-1){&lt;br /&gt;
                if(iNC==1){say(sN+&amp;quot; rezzed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)iNC+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==0){if(iNP==1){if(iOPAt!=-1){&lt;br /&gt;
                say(sN+&amp;quot; came back.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
            if(iNC&amp;gt;iOC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iNC-iOC==1){say(sN+&amp;quot; rezzed 1 more prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)(iNC-iOC)+&amp;quot; more prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOC&amp;gt;iNC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iOC-iNC==1){say(sN+&amp;quot; removed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; removed &amp;quot;+(string)(iOC-iNC)+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==1){if(iNP==0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; left &amp;quot;+(string)iNC+&amp;quot; prims behind.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                if(iNC&amp;gt;giLeftBehindTol){&lt;br /&gt;
                    //llInstantMessage(kT,&amp;quot;You have left &amp;quot;+(string)iNC+&amp;quot; prims behind in &amp;quot;+llGetRegionName()+&amp;quot;. Please go back and clean up after yourself so other people can use them.&amp;quot;);&lt;br /&gt;
                    say(sN+&amp;quot; was warned for not cleaning up.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                }&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glOldKeys,i);&lt;br /&gt;
            string sN=llList2String(glOldNames,i);&lt;br /&gt;
            integer iOC=llList2Integer(glOldCounts,i);&lt;br /&gt;
            integer iNKAt=llListFindList(glKeys,[kT]);&lt;br /&gt;
            if(iNKAt==-1){if(iOC&amp;gt;0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; removed all &amp;quot;+(string)iOC+&amp;quot; of their prims.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        glOldKeys=[];&lt;br /&gt;
        glOldNames=[];&lt;br /&gt;
        glOldCounts=[];&lt;br /&gt;
        glOldPresences=[];&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Info Fetcher==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
//&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer giRate;&lt;br /&gt;
vector gvColor=&amp;lt;0,0.25,0&amp;gt;;&lt;br /&gt;
default{&lt;br /&gt;
    //touch_start(integer num){if(llDetectedKey(0)==llGetOwner()){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;3&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
        state poll;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state poll{&lt;br /&gt;
    state_entry(){giRate=0;llSetTimerEvent(60);gkReq=llHTTPRequest(&amp;quot;http://secondlife.com/httprequest/homepage.php&amp;quot;,[],&amp;quot;&amp;quot;);}&lt;br /&gt;
    http_response(key req,integer status,list meta,string mess){if(status==200){&lt;br /&gt;
        list lT=llParseString2List(mess,[&amp;quot;\n&amp;quot;],[]);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Grid population: &amp;quot;+llList2String(lT,17),&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Exchange rate: L$&amp;quot;+(string)llRound(llList2Float(lT,11))+&amp;quot; per USD&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(num==99292){&lt;br /&gt;
        if(mess==&amp;quot;poll&amp;quot;){state poll;}&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giRate++;&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        if(giRate&amp;gt;30){state poll;}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189768</id>
		<title>User:Cow Taurog/Prim owner board</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Prim_owner_board&amp;diff=1189768"/>
		<updated>2014-04-22T10:09:29Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: Created page with &amp;quot;__NOTOC__ ==Prim poller== &amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt; // This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. // To view a copy of …&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
==Prim poller==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// Cow Taurog&#039;s prim owner info fetcher&lt;br /&gt;
// Last edited on 08/27/2010&lt;br /&gt;
//&lt;br /&gt;
// This script will grab a list of people that have prims on the parcel, prim count, and online status.&lt;br /&gt;
// The list will be sorted by descending prim count, and their names resolved, then sent over chat and/or link message.&lt;br /&gt;
// You can use the output provided in your own script, or drop in the display scripts.&lt;br /&gt;
//&lt;br /&gt;
// This will not work if you aren&#039;t in the same sim unless:&lt;br /&gt;
// -The land is owned by a group, not an individual.&lt;br /&gt;
// -This object is deeded to (owned by) the group, not an individual.&lt;br /&gt;
// You will need to set full perms, and share with the group if you want to be able to edit&lt;br /&gt;
// the server once it is deeded. You will also need to share with group again after it is deeded.&lt;br /&gt;
// Group names cannot be resolved from their key, so any group owned objects will show as unknown.&lt;br /&gt;
// This whole &amp;quot;not working when the owner is gone&amp;quot; thing is why we need this to act by itself as a server.&lt;br /&gt;
&lt;br /&gt;
// -Settings-&lt;br /&gt;
&lt;br /&gt;
float gfPoll=90;          // How often to update in seconds. Depends on how fast the display you will use refreshes.&lt;br /&gt;
&lt;br /&gt;
integer giLinkMsgChan=43; // Channel to output the data over link message on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
integer giChatChan=643;   // Channel to output the data over chat on (0 to disable).&lt;br /&gt;
&lt;br /&gt;
// The data is output as a pipe seperated list of the key, name, prim count, and presence of all prim owners.&lt;br /&gt;
// The parcel key is the first item in the list, useful for making sure we get the right info.&lt;br /&gt;
// &amp;lt;parcel key&amp;gt;|&amp;lt;owner1 key&amp;gt;|&amp;lt;owner1 name&amp;gt;|&amp;lt;owner1 primcount&amp;gt;|&amp;lt;owner1 in sim (1/0)&amp;gt;|&amp;lt;owner2 key&amp;gt;...&lt;br /&gt;
&lt;br /&gt;
list glExcludeKeys=[&amp;quot;38429ab1-2d0a-4535-962f-a909cee910e0&amp;quot;,&amp;quot;83b1a9ee-d1fa-1e11-486c-1aa470872db5&amp;quot;];&lt;br /&gt;
// You can choose to exclude any person or group from being shown on the list. I have myself and my group in this list.&lt;br /&gt;
&lt;br /&gt;
float gfDataTimeout=3.0;  // How long before giving up on response from the name resolution (owner is a group or &amp;lt;1 day old)&lt;br /&gt;
&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line. &lt;br /&gt;
//&lt;br /&gt;
&lt;br /&gt;
list glRaw; // Stores raw data so we can sort and add to it&lt;br /&gt;
key gkAct; // Target&#039;s key&lt;br /&gt;
integer giCount; // Target&#039;s prim count&lt;br /&gt;
integer giRawLen; // Length of the raw data list&lt;br /&gt;
integer giExcLen; // Length of the key exclusion list&lt;br /&gt;
list glData; // Sorted and completed data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer k; // Counter&lt;br /&gt;
key gkReq; // Dataserver request handle&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
key gkDebugTo=&amp;quot;&amp;quot;; // Key to IM debug messages to. Blank to disable.&lt;br /&gt;
debug2(string mess){if(DEBUG==2){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){if(gkDebugTo==&amp;quot;&amp;quot;){llInstantMessage(gkDebugTo,&amp;quot;Debug: &amp;quot;+mess);}}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();} //Reset when rezzed&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}} // Reset when owner changes&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glData=[]; // Clear data from the last run&lt;br /&gt;
        glRaw=llGetParcelPrimOwners(llGetPos()); // Get keys and prim counts from the parcel&lt;br /&gt;
        giRawLen=llGetListLength(glRaw); // Calculate length of the raw data&lt;br /&gt;
        giExcLen=llGetListLength(glExcludeKeys); // Calculate length of the exclusion list&lt;br /&gt;
        debug1(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // Remove anyone on the exclusion list&lt;br /&gt;
        for(i=0;i&amp;lt;giExcLen;i++){ // Check every entry in the exclusion list&lt;br /&gt;
            string sF=llList2String(glExcludeKeys,i); // Store target key&lt;br /&gt;
            debug2(&amp;quot;sF: &amp;quot;+sF);&lt;br /&gt;
            integer iAt=llListFindList(glRaw,[(key)sF]); // Store location of target key&lt;br /&gt;
            debug2(&amp;quot;iAt: &amp;quot;+(string)iAt);&lt;br /&gt;
            if(iAt!=-1){ glRaw=llDeleteSubList(glRaw,iAt,iAt+1);} // If the target is in the list, remove it&lt;br /&gt;
        }&lt;br /&gt;
        debug2(&amp;quot;glRaw after exclusion: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        // We can only sort by the first item in a strided list, so we need to reverse the list.&lt;br /&gt;
        // Put the prim count first, and make sure it is casted as an integer instead of a string.&lt;br /&gt;
        for(i=0;i&amp;lt;giRawLen;i=i+2){ // Loop through the entire list (stride of 2, note the i=i+2 instead of i++)&lt;br /&gt;
            integer iCount=llList2Integer(glRaw,i+1); // Store prim count as integer to ensure proper typecasting&lt;br /&gt;
            string sOwner=llList2String(glRaw,i); // Store owner key&lt;br /&gt;
            glData=glData+[iCount,sOwner]; // Add these to the new data list in reverse order&lt;br /&gt;
        }&lt;br /&gt;
        // Sort the data by prim count&lt;br /&gt;
        integer iDL=llGetListLength(glData)-4; // There is one blank stride on the list for some reason, note the -4.&lt;br /&gt;
        debug2(&amp;quot;glData before chop: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glData=llDeleteSubList(glData,iDL,-1); // Chop off the extra entry&lt;br /&gt;
        debug2(&amp;quot;glData before sort: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        glRaw=[]; // Blank out the raw info from earlier, we don&#039;t need it&lt;br /&gt;
        glRaw=llListSort(glData,2,FALSE); // Sort data and store it into the empty list&lt;br /&gt;
        glData=[]; // Blank out the data we just sorted from&lt;br /&gt;
        debug2(&amp;quot;glRaw after sort: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        i=0; // Set i to zero so we can use it&lt;br /&gt;
        // The script now has a sorted list of keys and prim counts. We now resolve their names, and find if they are here&lt;br /&gt;
        // We will toggle back and forth between two identical states to resolve the names from the dataserver.&lt;br /&gt;
        state fillA; // Go to the first state&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state fillA{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){ // If the timer event is triggered, the name could not be found, either it is a group or &amp;lt;1 day old.&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1]; // Store their info into the final list&lt;br /&gt;
        i=i+2; // Increment i by 2 since the list is strided&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout); // Set request timeout&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1); // Store target&#039;s key (these are global since they are used in dataserver too)&lt;br /&gt;
        giCount=llList2Integer(glRaw,i); // Store target&#039;s prim count&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);  // Request the name from the dataserver&lt;br /&gt;
        debug2(&amp;quot;Requested (A)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){ // Make sure this is our request, and not some random one&lt;br /&gt;
        llSetTimerEvent(0); // Keep the timeout event from triggering since we got our result&lt;br /&gt;
        debug2(&amp;quot;Dataserver (A): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct); // Store the target&#039;s size (will be &amp;lt;0,0,0&amp;gt; if they are a group, or aren&#039;t in the sim)&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];} // Put their info into the final list, and a 1 for presence&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];} // Put their info into the final list, and a 0 for presence&lt;br /&gt;
        llSleep(0.1); // Wait for a tiny bit to prevent weirdness&lt;br /&gt;
        i=i+2; // Increment i by 2 to advance to the next entry&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillB;} // If there is still more to resolve, go to the next state&lt;br /&gt;
        else{debug2(&amp;quot;show&amp;quot;);state show;} // Otherwise finish and show the results&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state fillB{ // Second verse, same as the first. Only this one goes to state fillA instead.&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        debug1(&amp;quot;Timeout.&amp;quot;);&lt;br /&gt;
        glData=glData+[gkAct,&amp;quot;(unknown)&amp;quot;,giCount,1];&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfDataTimeout);&lt;br /&gt;
        gkAct=llList2Key(glRaw,i+1);&lt;br /&gt;
        giCount=llList2Integer(glRaw,i);&lt;br /&gt;
        gkReq=llRequestAgentData(gkAct,DATA_NAME);&lt;br /&gt;
        debug2(&amp;quot;Requested (B)&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        debug2(&amp;quot;Dataserver (B): &amp;quot;+mess);&lt;br /&gt;
        vector vO=llGetAgentSize(gkAct);&lt;br /&gt;
        if(vO!=ZERO_VECTOR){glData=glData+[gkAct,mess,giCount,1];}&lt;br /&gt;
        else{glData=glData+[gkAct,mess,giCount,0];}&lt;br /&gt;
        llSleep(0.1);&lt;br /&gt;
        i=i+2;&lt;br /&gt;
        if(i+4&amp;lt;giRawLen){state fillA;}else{debug2(&amp;quot;show&amp;quot;);state show;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state show{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfPoll); // Start the timer so we can do this all over again&lt;br /&gt;
        llListen(giChatChan+1,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;); // Listen for a reset message&lt;br /&gt;
        debug1(&amp;quot;glData: &amp;quot;+llList2CSV(glData));&lt;br /&gt;
        string sD=llDumpList2String(glData,&amp;quot;|&amp;quot;); // Dump the whole thing into a string seperated with &amp;quot;|&amp;quot;&lt;br /&gt;
        string sI=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0); // Store the parcel key&lt;br /&gt;
        if(giLinkMsgChan!=0){llMessageLinked(LINK_SET,giLinkMsgChan,sD,(key)sI);} // Output data on linkmsg&lt;br /&gt;
        if(giChatChan!=0){llRegionSay(giChatChan,sI+&amp;quot;|&amp;quot;+sD);debug2((string)giChatChan+&amp;quot;: &amp;quot;+sI+&amp;quot;|&amp;quot;+sD);} // Output on chat&lt;br /&gt;
    }&lt;br /&gt;
    timer(){i=0;glData=[];state default;} // Time to poll again, reset the list and the counter, and start over.&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        if(llSameGroup(id)==TRUE){if(mess==&amp;quot;refresh&amp;quot;){i=0;glData=[];state default;}} // Refresh if told to&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Hovertext prim owner display==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
//This script is meant to provide a easy and fast display that shows the parcel&#039;s prim owner info as hovertext.&lt;br /&gt;
//You can drop this into any object on the parcel.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
vector gvColor=&amp;lt;0.3,0.6,1&amp;gt;; // Text color&lt;br /&gt;
float gfAlpha=1; // Text transparency (0=transparent, 1=opaque)&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
string gsOutput; // Stores final output&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,gvColor,gfAlpha);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        gsOutput=&lt;br /&gt;
         &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z\n&amp;quot;+&lt;br /&gt;
         (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
         &amp;quot; prims remain\n&amp;quot;;&lt;br /&gt;
        for(i=1;i&amp;lt;=llGetListLength(glKeys);i++){&lt;br /&gt;
            key kL=(key)((string)i);&lt;br /&gt;
            gsOutput=gsOutput+&amp;quot; &amp;quot;+llList2String(glNames,i-1)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-1)+&amp;quot;)&amp;quot;;&lt;br /&gt;
            if(llList2String(glPresences,i-1)==&amp;quot;1&amp;quot;){gsOutput=gsOutput+&amp;quot;\n&amp;quot;;}&lt;br /&gt;
            else{gsOutput=gsOutput+&amp;quot; (not here)\n&amp;quot;;}&lt;br /&gt;
        }&lt;br /&gt;
        llSetText(gsOutput,gvColor,gfAlpha);&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Xyzzy text prim owner display==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will make a xyzzytext display show info about the prim owners on your parcel.&lt;br /&gt;
// Drop this and the xyzzy controller into your display, and set the number of lines to match yours.&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on.&lt;br /&gt;
integer giScreenRows=10; // Number of rows in your xytext display.&lt;br /&gt;
vector gvOnColor=&amp;lt;0,0.25,0.5&amp;gt;; // Font color for people who are here.&lt;br /&gt;
vector gvOffColor=&amp;lt;0.5,0.25,0&amp;gt;; // Font color for people who aren&#039;t here.&lt;br /&gt;
vector gvTextColor=&amp;lt;0,0.25,0&amp;gt;; // Font color for normal text&lt;br /&gt;
float gfDelay=90; // How often to poll for changes&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
integer giLinesShown; // Counts number of lines used so we don&#039;t have to blank all of them&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        //for(i=0;i&amp;lt;=giLinesShown+2;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    //timer(){llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giScreenRows++; // Rows start at zero, so add 1 to use normal human numbers&lt;br /&gt;
        //llSetTimerEvent(gfDelay);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,(string)i);&lt;br /&gt;
        }&lt;br /&gt;
        //for(i=0;i&amp;lt;giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&amp;quot;,(string)i);}&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,99292,&amp;quot;poll&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;raw mess: &amp;quot;+mess);&lt;br /&gt;
        if(llGetSubString(mess,36,-1)==&amp;quot;||(unknown)|0|1&amp;quot;){&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
            &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
            (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
            &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            //for(i=4;i&amp;lt;=giScreenRows;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            llMessageLinked(LINK_SET,204006,(string)gvOnColor,&amp;quot;4&amp;quot;);&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&amp;quot;* Welcome! No prims are in use&amp;quot;,&amp;quot;4&amp;quot;);  &lt;br /&gt;
        }else{&lt;br /&gt;
            debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
            glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
            debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
            glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
            debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
            for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
                glKeys=glKeys+[llList2Key(glRaw,0)];&lt;br /&gt;
                glNames=glNames+[llList2String(glRaw,1)];&lt;br /&gt;
                glCounts=glCounts+[llList2Integer(glRaw,2)];&lt;br /&gt;
                glPresences=glPresences+[llList2Integer(glRaw,3)];&lt;br /&gt;
                glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
                debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
            }&lt;br /&gt;
            giLinesShown=llGetListLength(glKeys);&lt;br /&gt;
            for(i=4;i&amp;lt;=giLinesShown+1;i++){llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,(string)i);}&lt;br /&gt;
            glRaw=[];&lt;br /&gt;
            debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
            debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
            debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
            debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
            float fClock=llGetGMTclock();&lt;br /&gt;
            integer iHours=((integer)fClock/3600);&lt;br /&gt;
            integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
            string sHours=(string)iHours;&lt;br /&gt;
            if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
            string sMinutes=(string)iMinutes;&lt;br /&gt;
            if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
            llMessageLinked(LINK_SET,204000,&lt;br /&gt;
             &amp;quot; Updated &amp;quot;+sHours+sMinutes+&amp;quot;Z        &amp;quot;+&lt;br /&gt;
             (string)(llGetParcelMaxPrims(llGetPos(),1)-llGetParcelPrimCount(llGetPos(),PARCEL_COUNT_TOTAL,1))+&lt;br /&gt;
             &amp;quot; prims remain &amp;quot;,&amp;quot;0&amp;quot;);&lt;br /&gt;
            for(i=4;i&amp;lt;giScreenRows;i++){&lt;br /&gt;
                string sM;&lt;br /&gt;
                sM=&amp;quot; &amp;quot;+llList2String(glNames,i-4)+&amp;quot; (&amp;quot;+llList2String(glCounts,i-4)+&amp;quot;)&amp;quot;;&lt;br /&gt;
                debug2(&amp;quot;sM: &amp;quot;+sM);&lt;br /&gt;
                if(llList2String(glKeys,i-4)!=&amp;quot;&amp;quot;){&lt;br /&gt;
                    if(llList2Integer(glPresences,i)==0){&lt;br /&gt;
                        sM=sM+&amp;quot; (not here)&amp;quot;;&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOffColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }else{&lt;br /&gt;
                        llMessageLinked(LINK_SET,204006,(string)gvOnColor,(key)((string)i));&lt;br /&gt;
                        llMessageLinked(LINK_SET,204000,sM,(key)((string)i));&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prim tracker==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
// This script will track who rezzes new prims, removes all their prims, and leaves without cleaning up.&lt;br /&gt;
//&lt;br /&gt;
integer giInputChan=643; // Chat channel to listen for data on&lt;br /&gt;
integer giLeftBehindTol=125; // Don&#039;t nag someone unless they have more than this&lt;br /&gt;
//&lt;br /&gt;
// There are no more settings past this line.&lt;br /&gt;
//&lt;br /&gt;
key gkParcel; // Stores the parcel&#039;s key&lt;br /&gt;
list glKeys; // Stores prim owner&#039;s keys&lt;br /&gt;
list glNames; // Stores prim owner&#039;s names&lt;br /&gt;
list glCounts; // Stores prim counts&lt;br /&gt;
list glPresences; // Stores presence status&lt;br /&gt;
list glOldKeys;&lt;br /&gt;
list glOldNames;&lt;br /&gt;
list glOldCounts;&lt;br /&gt;
list glOldPresences;&lt;br /&gt;
list glWarnList;&lt;br /&gt;
list glRaw; // Stores raw data&lt;br /&gt;
integer i; // Counter&lt;br /&gt;
integer DEBUG=0; // Debug level. 0=none, 1=minimal, 2-verbose&lt;br /&gt;
say(string mess, string hours, string minutes){llOwnerSay(hours+minutes+&amp;quot;Z: &amp;quot;+mess);}&lt;br /&gt;
debug2(string mess){if(DEBUG==2){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Verbose debug function&lt;br /&gt;
debug1(string mess){if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Debug: &amp;quot;+mess);}} // Minimal debug function&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;1,0,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state default;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
        state running;&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llRegionSay(giInputChan+1,&amp;quot;refresh&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetColor(&amp;lt;0,1,0&amp;gt;,-1);&lt;br /&gt;
        gkParcel=llList2Key(llGetParcelDetails(llGetPos(),[PARCEL_DETAILS_ID]),0);&lt;br /&gt;
        llListen(giInputChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(llSameGroup(id)==TRUE){&lt;br /&gt;
        debug2(&amp;quot;mess: &amp;quot;+mess);&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        debug2(&amp;quot;glRaw: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        if(llList2Key(glRaw,0)!=gkParcel){state running;}&lt;br /&gt;
        glRaw=llDeleteSubList(glRaw,0,0);&lt;br /&gt;
        debug2(&amp;quot;glRaw after removed parcel: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        integer iRawLen=llGetListLength(glRaw);&lt;br /&gt;
        for(i=0;i&amp;lt;iRawLen;i=i+4){&lt;br /&gt;
            glKeys=glKeys+[llList2Key(glRaw,i)];&lt;br /&gt;
            glNames=glNames+[llList2String(glRaw,i+1)];&lt;br /&gt;
            glCounts=glCounts+[llList2Integer(glRaw,i+2)];&lt;br /&gt;
            glPresences=glPresences+[llList2Integer(glRaw,i+3)];&lt;br /&gt;
            //glRaw=llDeleteSubList(glRaw,0,3);&lt;br /&gt;
            //debug2(&amp;quot;glRaw entry removal: &amp;quot;+llList2CSV(glRaw));&lt;br /&gt;
        }&lt;br /&gt;
        glRaw=[];&lt;br /&gt;
        debug2(&amp;quot;glKeys: &amp;quot;+llList2CSV(glKeys));&lt;br /&gt;
        debug2(&amp;quot;glNames: &amp;quot;+llList2CSV(glNames));&lt;br /&gt;
        debug2(&amp;quot;glCounts: &amp;quot;+llList2CSV(glCounts));&lt;br /&gt;
        debug2(&amp;quot;glPresences: &amp;quot;+llList2CSV(glPresences));&lt;br /&gt;
        debug2(&amp;quot;glOldKeys: &amp;quot;+llList2CSV(glOldKeys));&lt;br /&gt;
        debug2(&amp;quot;glOldNames: &amp;quot;+llList2CSV(glOldNames));&lt;br /&gt;
        debug2(&amp;quot;glOldCounts: &amp;quot;+llList2CSV(glOldCounts));&lt;br /&gt;
        debug2(&amp;quot;glOldPresences: &amp;quot;+llList2CSV(glOldPresences));&lt;br /&gt;
        float fClock=llGetGMTclock();&lt;br /&gt;
        integer iHours=((integer)fClock/3600);&lt;br /&gt;
        integer iMinutes=((integer)fClock/60)-(iHours*60);&lt;br /&gt;
        string sHours=(string)iHours;&lt;br /&gt;
        if(iHours&amp;lt;10){sHours=&amp;quot;0&amp;quot;+sHours;}&lt;br /&gt;
        string sMinutes=(string)iMinutes;&lt;br /&gt;
        if(iMinutes&amp;lt;10){sMinutes=&amp;quot;0&amp;quot;+sMinutes;}&lt;br /&gt;
        integer iOL=llGetListLength(glOldKeys);&lt;br /&gt;
        debug2(&amp;quot;iOL: &amp;quot;+(string)iOL);&lt;br /&gt;
        integer iKL=llGetListLength(glKeys);&lt;br /&gt;
        debug2(&amp;quot;iKL: &amp;quot;+(string)iKL);&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glKeys,i);&lt;br /&gt;
            string sN=llList2String(glNames,i);&lt;br /&gt;
            integer iNC=llList2Integer(glCounts,i);&lt;br /&gt;
            integer iOC;&lt;br /&gt;
            integer iOCAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOCAt==-1){iOC=-1;}else{iOC=llList2Integer(glOldCounts,iOCAt);}&lt;br /&gt;
            integer iNP=llList2Integer(glPresences,i);&lt;br /&gt;
            integer iOP;&lt;br /&gt;
            integer iOPAt=llListFindList(glOldKeys,[kT]);&lt;br /&gt;
            if(iOPAt==-1){iOP=0;}else{iOP=llList2Integer(glOldPresences,iOPAt);}&lt;br /&gt;
            debug1(&amp;quot;kT: &amp;quot;+(string)kT);&lt;br /&gt;
            debug1(&amp;quot;sN: &amp;quot;+sN);&lt;br /&gt;
            debug1(&amp;quot;iNC: &amp;quot;+(string)iNC);&lt;br /&gt;
            debug1(&amp;quot;iOC: &amp;quot;+(string)iOC);&lt;br /&gt;
            debug1(&amp;quot;iNP: &amp;quot;+(string)iNP);&lt;br /&gt;
            debug1(&amp;quot;iOP: &amp;quot;+(string)iOP);&lt;br /&gt;
            debug1(&amp;quot;\n&amp;quot;);&lt;br /&gt;
            if(kT!=&amp;quot;(unknown)&amp;quot;){if(iOCAt==-1){&lt;br /&gt;
                if(iNC==1){say(sN+&amp;quot; rezzed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)iNC+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==0){if(iNP==1){if(iOPAt!=-1){&lt;br /&gt;
                say(sN+&amp;quot; came back.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
            if(iNC&amp;gt;iOC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iNC-iOC==1){say(sN+&amp;quot; rezzed 1 more prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; rezzed &amp;quot;+(string)(iNC-iOC)+&amp;quot; more prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOC&amp;gt;iNC){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                if(iOC-iNC==1){say(sN+&amp;quot; removed 1 prim.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
                else{say(sN+&amp;quot; removed &amp;quot;+(string)(iOC-iNC)+&amp;quot; prims.&amp;quot;,sHours,sMinutes);}&lt;br /&gt;
            }}&lt;br /&gt;
            if(iOP==1){if(iNP==0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; left &amp;quot;+(string)iNC+&amp;quot; prims behind.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                if(iNC&amp;gt;giLeftBehindTol){&lt;br /&gt;
                    //llInstantMessage(kT,&amp;quot;You have left &amp;quot;+(string)iNC+&amp;quot; prims behind in &amp;quot;+llGetRegionName()+&amp;quot;. Please go back and clean up after yourself so other people can use them.&amp;quot;);&lt;br /&gt;
                    say(sN+&amp;quot; was warned for not cleaning up.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
                }&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        for(i=0;i&amp;lt;iKL;i++){&lt;br /&gt;
            key kT=llList2Key(glOldKeys,i);&lt;br /&gt;
            string sN=llList2String(glOldNames,i);&lt;br /&gt;
            integer iOC=llList2Integer(glOldCounts,i);&lt;br /&gt;
            integer iNKAt=llListFindList(glKeys,[kT]);&lt;br /&gt;
            if(iNKAt==-1){if(iOC&amp;gt;0){if(kT!=&amp;quot;(unknown)&amp;quot;){&lt;br /&gt;
                say(sN+&amp;quot; removed all &amp;quot;+(string)iOC+&amp;quot; of their prims.&amp;quot;,sHours,sMinutes);&lt;br /&gt;
            }}}&lt;br /&gt;
        }&lt;br /&gt;
        glOldKeys=[];&lt;br /&gt;
        glOldNames=[];&lt;br /&gt;
        glOldCounts=[];&lt;br /&gt;
        glOldPresences=[];&lt;br /&gt;
        glOldKeys=glKeys;&lt;br /&gt;
        glOldNames=glNames;&lt;br /&gt;
        glOldCounts=glCounts;&lt;br /&gt;
        glOldPresences=glPresences;&lt;br /&gt;
        glKeys=[];&lt;br /&gt;
        glNames=[];&lt;br /&gt;
        glCounts=[];&lt;br /&gt;
        glPresences=[];&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Cager finder==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
// &lt;br /&gt;
//Bounding box: &amp;lt;-3.659322, -3.659323, -2.942255&amp;gt;, &amp;lt;3.659322, 3.659322, 2.992700&amp;gt;&lt;br /&gt;
//Prim count: 2&lt;br /&gt;
//&lt;br /&gt;
//[22:35] Cager finder: Bounding box: &amp;lt;-3.659322, -3.659323, -2.942255&amp;gt;, &amp;lt;3.659322, 3.659322, 2.992700&amp;gt;&lt;br /&gt;
//Prim count: 2&lt;br /&gt;
//&lt;br /&gt;
//[22:35] Cager finder: Bounding box: &amp;lt;-1.321905, -1.321905, -1.606233&amp;gt;, &amp;lt;1.321905, 1.321905, 1.566233&amp;gt;&lt;br /&gt;
//Prim count: 3&lt;br /&gt;
string gsTarget=&amp;quot;&amp;gt;:)&amp;quot;; // Name of the object to seek&lt;br /&gt;
integer giPrimCount=3; // How many prims the object is&lt;br /&gt;
integer giType; // Type of object&lt;br /&gt;
float gfMass=19.712570; // Mass of object&lt;br /&gt;
//float gfMassTol=0.1; // Mass tolerance&lt;br /&gt;
list glIdiots; // Idiot list&lt;br /&gt;
list glBound=[&amp;lt;-1.321905,-1.321905,-1.606233&amp;gt;,&amp;lt;1.321905,1.321905,1.566233&amp;gt;]; // Bounding box&lt;br /&gt;
//vector gvBoundTol=0.15; // Tolerance of bounding box&lt;br /&gt;
float gfRange=96.0; // Range of sensor&lt;br /&gt;
float gfPoll=2; // How often to poll&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giType=ACTIVE|PASSIVE;&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;0.8,0.8,0.8&amp;gt;,1);&lt;br /&gt;
        llSensorRepeat(gsTarget,&amp;quot;&amp;quot;,giType,gfRange,PI,gfPoll);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){integer i;for(i=0;i&amp;lt;num;i++){&lt;br /&gt;
        string sM;&lt;br /&gt;
        sM=sM+&amp;quot;Bounding box: &amp;quot;+llList2CSV(llGetBoundingBox(llDetectedKey(i)))+&amp;quot;\n&amp;quot;;&lt;br /&gt;
        sM=sM+&amp;quot;Prim count: &amp;quot;+(string)llGetObjectPrimCount(llDetectedKey(i))+&amp;quot;\n&amp;quot;;&lt;br /&gt;
        llOwnerSay(sM);&lt;br /&gt;
        //llSetText(sM,&amp;lt;0.8,0.8,0.8&amp;gt;,1);&lt;br /&gt;
        if(llGetObjectPrimCount(llDetectedKey(i))==giPrimCount){&lt;br /&gt;
            llOwnerSay(&amp;quot;Prim count&amp;quot;);&lt;br /&gt;
        if(gfMass==llGetObjectMass(llDetectedKey(i))){&lt;br /&gt;
            &lt;br /&gt;
        //if(llGetBoundingBox(llDetectedKey(i))==glBound){&lt;br /&gt;
            key kO=llDetectedOwner(i);&lt;br /&gt;
            if(llListFindList(glIdiots,[kO])==-1){glIdiots=glIdiots+[kO];}&lt;br /&gt;
        }}//}&lt;br /&gt;
    }}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        llOwnerSay(&amp;quot;Idiots: &amp;quot;+llList2CSV(glIdiots));&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
==Info Fetcher==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
// This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.&lt;br /&gt;
// To view a copy of this license, visit http://creativecommons.org/licenses/by-nc-sa/3.0/ or send a letter to&lt;br /&gt;
// Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA.&lt;br /&gt;
//&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer giRate;&lt;br /&gt;
vector gvColor=&amp;lt;0,0.25,0&amp;gt;;&lt;br /&gt;
default{&lt;br /&gt;
    //touch_start(integer num){if(llDetectedKey(0)==llGetOwner()){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204006,(string)gvColor,&amp;quot;3&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
        state poll;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state poll{&lt;br /&gt;
    state_entry(){giRate=0;llSetTimerEvent(60);gkReq=llHTTPRequest(&amp;quot;http://secondlife.com/httprequest/homepage.php&amp;quot;,[],&amp;quot;&amp;quot;);}&lt;br /&gt;
    http_response(key req,integer status,list meta,string mess){if(status==200){&lt;br /&gt;
        list lT=llParseString2List(mess,[&amp;quot;\n&amp;quot;],[]);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Grid population: &amp;quot;+llList2String(lT,17),&amp;quot;2&amp;quot;);&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Exchange rate: L$&amp;quot;+(string)llRound(llList2Float(lT,11))+&amp;quot; per USD&amp;quot;,&amp;quot;3&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(num==99292){&lt;br /&gt;
        if(mess==&amp;quot;poll&amp;quot;){state poll;}&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giRate++;&lt;br /&gt;
        llMessageLinked(LINK_SET,204000,&amp;quot;* Sim population: &amp;quot;+(string)llGetRegionAgentCount(),&amp;quot;1&amp;quot;);&lt;br /&gt;
        if(giRate&amp;gt;30){state poll;}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
{{MP}}&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1180521</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1180521"/>
		<updated>2013-08-04T01:39:02Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, if the license info is available). Any script that I have created is free to copy, modify, and yes, even sell. Everything under my userpage is licensed under [https://creativecommons.org/licenses/by-sa/3.0/ the Creative Commons Attribution-ShareAlike 3.0 Unported license]. I might even help you out with any questions you have. I don&#039;t mind teaching, so ask me, online or not. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert or edit if I don&#039;t like it), they must be under the same license, and keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[https://en.wikipedia.org/wiki/Indent_style#Variant:_1TBS one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;b&amp;gt;Be bold.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;br /&gt;
*[[User:Cow Taurog/Sound looper|Sound looper]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1180520</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1180520"/>
		<updated>2013-08-04T01:35:25Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, if the license info is available). Any script that I have created is free to copy, modify, and yes, even sell. Everything under my userpage is licensed under [https://creativecommons.org/licenses/by-sa/3.0/ the Creative Commons Attribution-ShareAlike 3.0 Unported license]. I might even help you out with any questions you have. I don&#039;t mind teaching, so ask me, online or not. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert or edit if I don&#039;t like it), they must be under the same license, and keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;b&amp;gt;Be bold.&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;br /&gt;
*[[User:Cow Taurog/Sound looper|Sound looper]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User_talk:Zai_Lynch&amp;diff=1180509</id>
		<title>User talk:Zai Lynch</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User_talk:Zai_Lynch&amp;diff=1180509"/>
		<updated>2013-08-03T02:01:10Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Reverting the revert */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{User:Zai Lynch/TalkpageNav}}&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
== SLurl ==&lt;br /&gt;
&lt;br /&gt;
Awhile ago, you used bot magic to replace &amp;quot;SLURL&amp;quot; with &amp;quot;SLurl&amp;quot;. I&#039;ve been requested to make sure this is consistent on LLO articles — do you have a list of articles where you found matches but were unable to change them? I did a few manually. {{TorSig}} &amp;lt;font size=&amp;quot;1&amp;quot;&amp;gt;on 2009-11-23 @ 1:47 PM Pacific&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:I don&#039;t have one at the moment, but it&#039;s rather simple to get it :-) Check back in an hour ^_^ --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:22, 23 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Not much to do for you. In LLO, there are only [[Linden Lab Official:What is Second Life Answers?]] and [[Linden Lab Official:Who are Lindens?]] which are still listing SLURL. Besides that there&#039;s only [[How do I use the World Map?]] where it refers to the current viewer&#039;s UI. I guess that one should stay until the UI is changed. Furthermore besides that, there are only image links within [[Using Second Life URLs (SLurls)]] which might probably stay as well, since the image links aren&#039;t visible for the common reader.&lt;br /&gt;
:These are all appearances within [[:Category:Knowledge Base]]. Might very well be that there are some elsewhere... --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:35, 23 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:P.S.: Maybe you can edit [https://blogs.secondlife.com/community/features/blog/2008/02/21/tip-of-the-week-23-using-slurls-for-easy-travel this old blog post] since it&#039;s beeing linked within the KB. --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:39, 23 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:: Sorry I didn&#039;t change these earlier! I like how I get an alert on-Wiki when my talk page is edited, but do you know if we can get alerts if I get responded to, like this? Anyway, on it now... and oh, we&#039;re trying to free ourselves from blog linking dependencies for help articles, so whenever I can make a Wiki page out of an article, we should do that. I&#039;ll find-and-replace that ol&#039; TotW tho... oh wait, rats, an unexpected error keeps happening. But as long as we keep Wiki instances correct, that should be fine. {{TorSig}} &amp;lt;font size=&amp;quot;1&amp;quot;&amp;gt;on 2009-12-09 @ 6:14 AM Pacific&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:::NP :-)&lt;br /&gt;
:::Hm... you mean something like&amp;lt;div class=&amp;quot;usermessage&amp;quot;&amp;gt;You have [[Special:Mytalk|new messages]] ([[Special:Mytalk|last change]]).&amp;lt;/div&amp;gt;? ...Not that I knew of. But that doesn&#039;t mean that it doesn&#039;t exist. AFAIK there are only the options named in the [[subscribe]] article (e.g. watchlist → mail), though I&#039;ll dig a little deeper and see what I can find. So far, I only found the [http://www.mediawiki.org/wiki/Extension:LiquidThreads LiquidThreads] extension that would allow to subscribe to certain discussions. But I&#039;m not sure if it offers on-Wiki alerts or also &amp;quot;just&amp;quot; mail. And it&#039;s developed for MW 1.16, while we&#039;re currently on 1.14.1.&lt;br /&gt;
:::--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 15:38, 9 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== KB and Help Portal sortage ==&lt;br /&gt;
&lt;br /&gt;
So herein is a dilemma: I&#039;m thankful for all the categorization you&#039;ve done with the Help Portal, LONG before the KB ever lived on the Wiki. Now that we&#039;re transitioning, I&#039;ve removed the Help Portal bar and put KBmaster on assorted articles. BUT, I don&#039;t want to be inconsiderate and am concerned if that may remove vital entries, like [[rez]]. What are your thoughts on this? {{TorSig}} &amp;lt;font size=&amp;quot;1&amp;quot;&amp;gt;on 2009-11-23 @ 11:51 AM Pacific&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
:Hmm... I got to say that I&#039;m not too worried about the header since I got an unproven feeling that the bar itself is hardly used. I might back that up by using [http://tr.im tr.im]-ed URLs in the header for a week or two, in order to see how often these are clicked. I think that most people will still travel from article to article either via the search or via links within articles, rather than via categories. But as I said, it&#039;s just a feeling.&lt;br /&gt;
:However, I&#039;m not sure about the future of the help categories... Stuff like [[:Category:Help/Land]] will probably be overshadowed by [[:Category:Land]] soon and slowly fade away while articles become merged. So in the long run, the Help Header will become useless anyway since most categories won&#039;t hold a meaningful amount of articles anymore. And the [[Help Portal]] should probably be redirected to the [[KB]] at that point. [[:Category:Glossary]] seems to be the only category that might remain in the end and it&#039;s items (like [[rez]]) can probably be linked within related articles when the terminology is used. And in case that is really the only category that remains, one might even create a template for glossary articles, having a certain recognizable style and linking to the category again. I&#039;m not afraid that they&#039;ll die out since they&#039;re (and might probably remain) an integral part of SL.&lt;br /&gt;
:--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:22, 23 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== That dang Advanced menu ==&lt;br /&gt;
&lt;br /&gt;
Hey Zai, the Knowledge Base isn&#039;t meant to cover unsupported stuff, as useful as it may be (like [[Rebaking textures]]). I encourage simply linking to the [[Advanced]] page instead of typing the keystroke each time to activate, so that Residents are well-apprised of its benefits AND what they should NOT expect. =) &amp;lt;font color=&amp;quot;#ff0080&amp;quot;&amp;gt;&#039;&#039;&#039;- [[Image:Torley-favicon.png]] [[User:Torley Linden|Torley]] on 2009-11-02 @ 3:38 PM PST&#039;&#039;&#039;&amp;lt;/font&amp;gt;&lt;br /&gt;
:Ah, ok, NP. :-)&lt;br /&gt;
:BTW: Something weird happened to the article... I made my edit and validated it. Then you made your edit and validated it.&lt;br /&gt;
:Expected would be, that it shows your version as default (stable) and that there is &#039;&#039;no draft&#039;&#039; anymore since yours was the latest edit.&lt;br /&gt;
:However, it is showing yours as default and mine as draft. This is a little strange. It might be that we were both editing at the same time and that this was causing it. I&#039;ll fix it in a few, but wanted to mention it, since it&#039;s unexpected and may lead to unwanted outcome in the future, when it&#039;s unnoticed. (An editor editing your stable page will automatically be prompted to my draft. This isn&#039;t desired behaviour.)&lt;br /&gt;
:More BTW: I&#039;d like to incorporate parts of [[User:Lum Pfohl/Troubleshooting#Avatar Covered With Onscreen Textures]] in the article (she mentioned to be fine with using her content in other articles). Also an explanation about how baking works, since it&#039;s often mentioned by Residents that &amp;quot;&#039;&#039;it can&#039;t be my system, since other people are seeing it too!&#039;&#039;&amp;quot;. They need to understand that &#039;&#039;their&#039;&#039; system is not just baking but also &#039;&#039;distributing&#039;&#039; the textures. It seems to be technical overkill but when they don&#039;t understand that part, then they might dismiss the article and search for another, since they might think that it&#039;s not covering their problem.&lt;br /&gt;
:And something completly different: When moving pages to a new spot, please move them including all subpages (I think there should always be a checkbox for that). Reason is, to not bury the redirects to translated pages (e.g. &amp;lt;pagename&amp;gt;/de, &amp;lt;pagename&amp;gt;/fr, etc.).&lt;br /&gt;
:Hm... I think that was all for the moment. And I should go to bed ^^&lt;br /&gt;
:--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 00:05, 3 November 2009 (UTC)&lt;br /&gt;
::I see I didn&#039;t look to closely and what you added meanwhile. The sentence &amp;quot;&#039;&#039;These defects are visible to other people...&#039;&#039;&amp;quot; might be enough for the above mentioned problem.&lt;br /&gt;
::--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 00:24, 3 November 2009 (UTC)&lt;br /&gt;
::: I forgot about moving subpages a few times, I&#039;m sorry, and understand! I&#039;ve been doing it since then.&lt;br /&gt;
::: As usual, you and Lum are free to improve [[Rebaking textures]] or anything else you go, &amp;quot;There&#039;s an important point or two here that will help someone to understand a technical concept &#039;&#039;far&#039;&#039; better!&amp;quot; This is especially true for &#039;&#039;&#039;Advanced&#039;&#039;&#039; features, even if we don&#039;t support &#039;em. {{TorSig}} &amp;lt;font size=&amp;quot;1&amp;quot;&amp;gt;on 2009-11-23 @ 11:49 AM Pacific&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== [[User_talk:Soft_Linden#sensor_caveat]] ==&lt;br /&gt;
&lt;br /&gt;
Strife and Zai, Just a note to ask if you can keep an eye on [[User_talk:Soft_Linden#sensor_caveat]], I noticed that it&#039;s linked at least twice on [[Sensor]] and quite possibly a few other places (unfortunately there&#039;s no what links here for header anchors) so if Soft archives the discussion it will break a bunch of links.  I&#039;m not about to go on Soft&#039;s talk page and ask him not to ever archive a discussion but since you two keep a very close eye on anything that changes anywhere on the wiki I figured you might see if it&#039;s ever disturbed.  Thanks. [[User:Gordon_Wendt|&amp;lt;font color=&amp;quot;green&amp;quot;&amp;gt;&#039;&#039;GW&#039;&#039;&amp;lt;/font&amp;gt;]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Gordon_Wendt|&amp;lt;Font color=&amp;quot;red&amp;quot;&amp;gt;T&amp;lt;/font&amp;gt;]]|[[Special:Contributions/Gordon Wendt|&amp;lt;font color=&amp;quot;blue&amp;quot;&amp;gt;C&amp;lt;/font&amp;gt;]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; -- 15:03, 8 November 2009 (UTC)&lt;br /&gt;
:Heyas! :-)&lt;br /&gt;
:Sure thing. [https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;amp;curid=25082&amp;amp;diff=649383&amp;amp;oldid=649342 As Strife said], maybe it&#039;s best to turn these into version links. Will do that in a minute :-)&lt;br /&gt;
:--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 00:14, 9 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Just a quick question ==&lt;br /&gt;
Hi Zai,&lt;br /&gt;
I was wondering if I empty [https://wiki.secondlife.com/w/index.php?title=User:Torben_Trautman/Sandbox/Translating2&amp;amp;redirect=no this page], will something be broke? Or does the redirect just happen automatically when a page is moved so that I can just clean it up? --[[User:Torben Trautman|Torben Trautman]] 16:50, 19 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
Und ich habe keine Ahnung, warum ich auf englisch frage... --[[User:Torben Trautman|Torben Trautman]] 16:52, 19 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
:lol ^^&lt;br /&gt;
:ganz kurze Antwort, weil ich schnell los muss zu &#039;ner Verabredung ^^:&lt;br /&gt;
:Japp, der Redirect wird beim Verschieben automatisch erstellt und nein, geht nix kaputt, wenn du aufräumst :D&lt;br /&gt;
:&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt;hugz* --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 16:54, 19 November 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== [[Template:SLCert Navbox]] ==&lt;br /&gt;
Hello Zai.  I saw your change to the template.  Very good, I wish I&#039;d thought of it.  Thank you. :-) [[User:Orange Planer|Orange Planer]] 23:54, 4 December 2009 (UTC)&lt;br /&gt;
:Very welcome! :D --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 00:38, 5 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Chat ==&lt;br /&gt;
I took your idea and style and made my own chat box on my page and i made an object inventory thingy :P&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;--&amp;lt;/b&amp;gt;[[File:Uglehsig.png|53px|link=User:Ugleh_Ulrik]]([[User_talk:Ugleh_Ulrik|talk]]) 08:39, 29 May 2010 (UTC)&lt;br /&gt;
:Hehe, noticed :) Looks neat! --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 22:59, 29 May 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== We broke default breadcrumbs ==&lt;br /&gt;
&lt;br /&gt;
Zai,&lt;br /&gt;
I know you&#039;re busy with other stuff these days, but I wanted to let you know that we weren&#039;t able to fix the issue with default breadcrumbs, and decided not to hold up the wiki move because of it or a couple other issues...  I have noted this issue in [[Second Life Wiki Known Issues]], and I hope we can resolve it, but to be honest I don&#039;t currently have an idea of why it is happening.  I believe it may be related to caching, but am not sure.  The problem occurred when the developers made a change to the Breadcrumbs extension that improved performance by an order of magnitude, so it seemed worthwhile keeping it.  We&#039;ll keep looking at it to try to fix it.  If you have any suggestions, we would greatly appreciate your insight.&lt;br /&gt;
&lt;br /&gt;
Thanks,&lt;br /&gt;
--[[User:Rand Linden|Rand Linden]] 00:04, 16 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:Hi Rand,&lt;br /&gt;
:Thanks for the heads-up! I don&#039;t know when I&#039;ll find time, though I&#039;ll investigate and will let you know when I find the cause / a work-around.&lt;br /&gt;
:Cheers :)&lt;br /&gt;
:--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 00:50, 17 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== hmm? ==&lt;br /&gt;
&lt;br /&gt;
[https://wiki.secondlife.com/w/index.php?title=User_talk:Strife_Onizuka&amp;amp;curid=25082&amp;amp;diff=1129510&amp;amp;oldid=1129359 ...] If there were a comment, i&#039;d respond with something like... &amp;quot;... yeah ...&amp;quot;. If I want to talk to someone at the Lab about a project to encourage community involvement and improve wiki content, who should I talk to? I has an ebil idea that will probably work. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 09:10, 28 December 2010 (UTC)&lt;br /&gt;
:Hi Strife :)&lt;br /&gt;
:I made a mistake with my comment and removed it again once I figured out what was going wrong ^^&lt;br /&gt;
:I assumed that you said that you wouldn&#039;t have been aware of the [[Requested LSL Articles]] article and became curious about it, as you were the initial creator. But later I realized that you were talking about the [[llList2Float]] article, so I removed the comment again. I just now notice, that you&#039;ve been the original creator of that one as well ^^ hm ...&lt;br /&gt;
:@Community involvement: Probably a DocTeam office hour or a mail to Torley via the contact form, In case it&#039;s not related to translations. In case it&#039;s about translations, then an email to Lexie :)&lt;br /&gt;
:At least that&#039;s what I think. I&#039;m not really up-to-date anymore...&lt;br /&gt;
:BTW: Do you still get notification emails when your talkpage was changed? I got the feeling that the feature is broken, ever since the wiki-update ...&lt;br /&gt;
:--[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 01:22, 29 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
::I never enabled that feature, I visit the wiki often enough that I usually notice the changes pretty promptly. -- &#039;&#039;&#039;[[User:Strife_Onizuka|Strife]]&#039;&#039;&#039; &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Strife_Onizuka|talk]]|[[Special:Contributions/Strife_Onizuka|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:34, 29 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
:::Ah, I see ... created {{JIRA|WEB-3458}}. --[[File:Zai_signature.png|45px|link=User:Zai Lynch]] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Zai Lynch|talk]]|[[Special:Contributions/Zai Lynch|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt; 18:46, 29 December 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Reverting the revert ==&lt;br /&gt;
&lt;br /&gt;
Hey, thanks for editing my page. It only took me four years to respond! I&#039;ll rewrite the page, or just remove it entirely, it&#039;s a bit old. -[[User:Cow Taurog|Cow Taurog]] 19:01, 2 August 2013 (PDT)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:LlReturnObjectsByOwner&amp;diff=1180370</id>
		<title>Talk:LlReturnObjectsByOwner</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:LlReturnObjectsByOwner&amp;diff=1180370"/>
		<updated>2013-07-25T10:59:06Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: +talk&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page could use a bit of clarification regarding group land, and deeded objects. Well done though, I&#039;ve been wanting this function for years. -[[User:Cow Taurog|Cow Taurog]] 03:59, 25 July 2013 (PDT)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1163435</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1163435"/>
		<updated>2012-02-23T20:11:54Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Rainden/70/30/30/ The pasture, Raiden (70,30,30)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;br /&gt;
*[[User:Cow Taurog/Sound looper|Sound looper]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sound_looper&amp;diff=1162224</id>
		<title>User:Cow Taurog/Sound looper</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sound_looper&amp;diff=1162224"/>
		<updated>2012-01-29T04:57:27Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: create new page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will continuously loop your choice of sounds dropped into it. Click to choose, click and hold to stop, menu responds to owner only. Up to 12 sounds are supported, more if you want to enhance the dialog menu on your own.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;
// Commercial use is allowed.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution for each revision is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
// Cow Taurog&#039;s sound looper, v1.0&lt;br /&gt;
// Drop this script, and up to 12 sounds that you want to loop into an object.&lt;br /&gt;
// Click to choose the sound, click and hold to stop the sound.&lt;br /&gt;
// The menu will automatically update when new sounds are added or removed, no reset or update is required on your part.&lt;br /&gt;
integer giChan=882372;&lt;br /&gt;
float gfHoldFor=2;&lt;br /&gt;
integer giHold;&lt;br /&gt;
list glItems;&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer i;&lt;br /&gt;
builditemlist(){ // Build a list of items in inventory&lt;br /&gt;
    glItems=[]; // Empty the old list&lt;br /&gt;
    integer j=llGetInventoryNumber(INVENTORY_SOUND); // Save the total number of objects&lt;br /&gt;
    for(i=0;i&amp;lt;j;i++){glItems+=[llGetInventoryName(INVENTORY_SOUND,i)];} // Store the items to the list&lt;br /&gt;
}&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    state_entry(){llAllowInventoryDrop(TRUE);builditemlist();llStopSound();}&lt;br /&gt;
    touch_start(integer num){&lt;br /&gt;
        giHold=FALSE;&lt;br /&gt;
        llSetTimerEvent(gfHoldFor);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_INVENTORY){builditemlist();}}&lt;br /&gt;
    touch_end(integer num){if(giHold==FALSE){&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
            if(glItems!=[]){listen0=llListen(giChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);llDialog(llGetOwner(),&amp;quot;Pick a sound to loop...&amp;quot;,glItems,giChan);}&lt;br /&gt;
            else{llOwnerSay(&amp;quot;There aren&#039;t any sounds in this object to loop, drop some in first.&amp;quot;);}&lt;br /&gt;
        }&lt;br /&gt;
    }}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(id==llGetOwner()){&lt;br /&gt;
        llLoopSound(mess,1);&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giHold=TRUE;&lt;br /&gt;
        llStopSound();&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1162223</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1162223"/>
		<updated>2012-01-29T04:55:05Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: +new script&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;br /&gt;
*[[User:Cow Taurog/Sound looper|Sound looper]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sim_map_texture&amp;diff=1151500</id>
		<title>User:Cow Taurog/Sim map texture</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sim_map_texture&amp;diff=1151500"/>
		<updated>2011-08-17T10:50:04Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: blank page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;- Blank, none of this actually works anymore&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Language_scanner&amp;diff=1151499</id>
		<title>User:Cow Taurog/Language scanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Language_scanner&amp;diff=1151499"/>
		<updated>2011-08-17T09:50:21Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: oops, wrong license info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Announces any nearby avatar, and their &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes ISO 639-1]&amp;lt;/span&amp;gt; language code.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;
// Commercial use is allowed.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution for each revision is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
// Cow Taurog&#039;s language code finder, v1.0&lt;br /&gt;
//&lt;br /&gt;
// This script will say the name of every avatar in range (including you), and their detected ISO 639-1 language code when touched.&lt;br /&gt;
// Feel free to use, reuse, or change the code, as long as you abide by the license&lt;br /&gt;
//&lt;br /&gt;
list lD; // stores detected avatars/languages&lt;br /&gt;
integer i; // loops through detected avatars&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){ // when touched...&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT,96,PI); // scan for any avatar within range&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){ // if one or more avatars are found...&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){ // for each avatar found...&lt;br /&gt;
            lD=lD+[llDetectedName(i)+&amp;quot;: &amp;quot;+llGetAgentLanguage(llDetectedKey(i))]; // add the name and language to the list&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0,&amp;quot;\n&amp;quot;+llDumpList2String(lD,&amp;quot;\n&amp;quot;)); // say names and their language code over public chat&lt;br /&gt;
        llResetScript(); // reset the script for the next use&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Exchange_rate&amp;diff=1151498</id>
		<title>User:Cow Taurog/Exchange rate</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Exchange_rate&amp;diff=1151498"/>
		<updated>2011-08-17T09:49:42Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: oops, wrong license info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will say the current L$ exchange rate over public chat when touched.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;
// Commercial use is allowed.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution for each revision is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
// Cow Taurog&#039;s L$ exchange rate finder, v1.0&lt;br /&gt;
//&lt;br /&gt;
// This script will say the current exchange rate of L$ per USD over public chat when touched by anyone&lt;br /&gt;
// There are no options to change, but feel free to change the code, as long as you abide by the license&lt;br /&gt;
//&lt;br /&gt;
string gsURL=&amp;quot;http://secondlife.com/httprequest/homepage.php&amp;quot;; // URL of LL&#039;s data feed&lt;br /&gt;
list glRaw; // Storage of the entire data feed&lt;br /&gt;
key gkReq; // Handler for the HTTP request&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();} // reset when rezzed&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}} // reset when owner changes&lt;br /&gt;
    touch_start(integer num){ // when touched by anybody...&lt;br /&gt;
        gkReq=llHTTPRequest(gsURL,[],&amp;quot;&amp;quot;); // load the URL&lt;br /&gt;
    }&lt;br /&gt;
    http_response(key req,integer status,list meta,string mess){if(req==gkReq){ // when the URL is loaded...&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;\n&amp;quot;],[]); // store the entire contents into a list&lt;br /&gt;
        integer iL=(llListFindList(glRaw,[&amp;quot;exchange_rate&amp;quot;]))+1; // find the entry named &#039;exchange_rate&#039;, the actual rate is next in the list&lt;br /&gt;
        llSay(0,&amp;quot;Current exchange rate: L$&amp;quot;+(string)llRound(llList2Float(glRaw,iL))+&amp;quot; per $1 USD.&amp;quot;); // round off the data to the nearest L$, and say it over public chat&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Language_scanner&amp;diff=1151497</id>
		<title>User:Cow Taurog/Language scanner</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Language_scanner&amp;diff=1151497"/>
		<updated>2011-08-17T09:46:42Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: update script to include license info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Announces any nearby avatar, and their &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/List_of_ISO_639-1_codes ISO 639-1]&amp;lt;/span&amp;gt; language code.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This text is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License.&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
// Resale, or other commercial use is prohibited.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution for each revision is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
// Cow Taurog&#039;s language code finder, v1.0&lt;br /&gt;
//&lt;br /&gt;
// This script will say the name of every avatar in range (including you), and their detected ISO 639-1 language code when touched.&lt;br /&gt;
// Feel free to use, reuse, or change the code, as long as you abide by the license&lt;br /&gt;
//&lt;br /&gt;
list lD; // stores detected avatars/languages&lt;br /&gt;
integer i; // loops through detected avatars&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){ // when touched...&lt;br /&gt;
        llSensor(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT,96,PI); // scan for any avatar within range&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){ // if one or more avatars are found...&lt;br /&gt;
        for(i=0;i&amp;lt;num;i++){ // for each avatar found...&lt;br /&gt;
            lD=lD+[llDetectedName(i)+&amp;quot;: &amp;quot;+llGetAgentLanguage(llDetectedKey(i))]; // add the name and language to the list&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0,&amp;quot;\n&amp;quot;+llDumpList2String(lD,&amp;quot;\n&amp;quot;)); // say names and their language code over public chat&lt;br /&gt;
        llResetScript(); // reset the script for the next use&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Exchange_rate&amp;diff=1151496</id>
		<title>User:Cow Taurog/Exchange rate</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Exchange_rate&amp;diff=1151496"/>
		<updated>2011-08-17T09:16:21Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: create new page&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will say the current L$ exchange rate over public chat when touched.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This text is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 United States License.&lt;br /&gt;
// http://creativecommons.org/licenses/by-nc-sa/3.0/&lt;br /&gt;
// Resale, or other commercial use is prohibited.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution for each revision is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
// Cow Taurog&#039;s L$ exchange rate finder, v1.0&lt;br /&gt;
//&lt;br /&gt;
// This script will say the current exchange rate of L$ per USD over public chat when touched by anyone&lt;br /&gt;
// There are no options to change, but feel free to change the code, as long as you abide by the license&lt;br /&gt;
//&lt;br /&gt;
string gsURL=&amp;quot;http://secondlife.com/httprequest/homepage.php&amp;quot;; // URL of LL&#039;s data feed&lt;br /&gt;
list glRaw; // Storage of the entire data feed&lt;br /&gt;
key gkReq; // Handler for the HTTP request&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();} // reset when rezzed&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}} // reset when owner changes&lt;br /&gt;
    touch_start(integer num){ // when touched by anybody...&lt;br /&gt;
        gkReq=llHTTPRequest(gsURL,[],&amp;quot;&amp;quot;); // load the URL&lt;br /&gt;
    }&lt;br /&gt;
    http_response(key req,integer status,list meta,string mess){if(req==gkReq){ // when the URL is loaded...&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;\n&amp;quot;],[]); // store the entire contents into a list&lt;br /&gt;
        integer iL=(llListFindList(glRaw,[&amp;quot;exchange_rate&amp;quot;]))+1; // find the entry named &#039;exchange_rate&#039;, the actual rate is next in the list&lt;br /&gt;
        llSay(0,&amp;quot;Current exchange rate: L$&amp;quot;+(string)llRound(llList2Float(glRaw,iL))+&amp;quot; per $1 USD.&amp;quot;); // round off the data to the nearest L$, and say it over public chat&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1151495</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=1151495"/>
		<updated>2011-08-17T09:14:52Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;br /&gt;
*[[User:Cow Taurog/Exchange rate|Exchange rate]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=1150314</id>
		<title>User:Cow Taurog/Visitor nagger</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=1150314"/>
		<updated>2011-08-03T08:16:54Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: license tag, update comments&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script is used to nag new visitors with rules, a greeting, MOTD, or the like. Drop a notecard named &amp;lt;code&amp;gt;Rules&amp;lt;/code&amp;gt;, followed by this script into any object. The range is 20m, and it scans for people within range every 10 seconds by default. If someone is found that hasn&#039;t already been nagged, it will IM them the contents of the notecard. There isn&#039;t a way to save the list of people that have already been nagged, and if the script is reset, everyone will be nagged again.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This work is licensed under a Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;br /&gt;
// http://creativecommons.org/licenses/by-sa/3.0/&lt;br /&gt;
// Commercial use is allowed.&lt;br /&gt;
// Modification and/or distribution is allowed, as long as attribution is given, and the same license is used.&lt;br /&gt;
//&lt;br /&gt;
list glLines;&lt;br /&gt;
string gsNotecard=&amp;quot;Rules&amp;quot;;&lt;br /&gt;
float gfPoll=10;&lt;br /&gt;
float gfRange=20;&lt;br /&gt;
list glKeys;&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer i;&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        glLines=glLines+[mess];&lt;br /&gt;
        i++;&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
        if(mess==EOF){state running;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llOwnerSay(&amp;quot;&#039;&amp;quot;+gsNotecard+&amp;quot;&#039; notecard loaded.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT,gfRange,PI,gfPoll);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){for(i=0;i&amp;lt;num;i++){&lt;br /&gt;
        if(llListFindList(glKeys,[llDetectedKey(i)])==-1){&lt;br /&gt;
            glKeys=glKeys+[llDetectedKey(i)];&lt;br /&gt;
            llInstantMessage(llDetectedKey(i),&amp;quot;\n&amp;quot;+llDumpList2String(glLines,&amp;quot;\n&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=TCMalloc_Beta&amp;diff=1044193</id>
		<title>TCMalloc Beta</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=TCMalloc_Beta&amp;diff=1044193"/>
		<updated>2010-09-28T17:55:22Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* TCMalloc Testing Guide */ internal link was formatted as an external link (not sure exactly where, none on that page for sure, navigation still required. Just changed syntax, better than nothing.)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;TCMalloc is potentially slated for a 1.44 release.&lt;br /&gt;
&lt;br /&gt;
= TCMalloc Beta Testing =&lt;br /&gt;
We are in the process of testing the switchover from pthreads2 back to TCMalloc. TCMalloc thread caching memory allocator. More technical details are available here:&lt;br /&gt;
* http://goog-perftools.sourceforge.net/doc/tcmalloc.html&lt;br /&gt;
&lt;br /&gt;
We are hoping for some performance enhancements, but mostly are interested in utilizing the inline performance monitoring tools. This will allow us to get better immediate stats on simulator performance.&lt;br /&gt;
&lt;br /&gt;
If you are interested in helping testing our tcmalloc enabled regions please join the group &amp;quot;TC Malloc Testers&amp;quot; on AGNI.&lt;br /&gt;
&lt;br /&gt;
= TCMalloc Testing Guide =&lt;br /&gt;
I have 4 enabled regions on ADITI. They are open to members of the group Second Life Beta. The regions are as follows:&lt;br /&gt;
 TMallocTest1 : a full region on Class 5 hardware&lt;br /&gt;
 TMallocTest2 : a full region on Class 5 hardware&lt;br /&gt;
 TMallocTest3 : a full region on Class 7 hardware&lt;br /&gt;
 TMallocTest4 : a full region on Class 7 hardware&lt;br /&gt;
&lt;br /&gt;
Each are running the latest server codebase merged with the TCMalloc updates. I encourage you to head out there and mess around. You should be able to do all you need including editing the terrain. &lt;br /&gt;
&lt;br /&gt;
As far as guidelines go I&#039;d like to see you do your worst, however you define that. I&#039;d also like you to poke areas you know have been prone to failure in the past. If you need ideas we have made a large number of [[QA_Portal|test plans available here]]&lt;br /&gt;
&lt;br /&gt;
TCMalloc should be a 100% transparent upgrade with no visible issues and it should all go super smooth and everyone will be happy… or so the developers would have me believe. :-) I hope they&#039;re right. I also hope you can help me prove them wrong.&lt;br /&gt;
&lt;br /&gt;
When you find issues please use the 1.40.4 regions on ADITI to determine that the issues are unique to the TCMalloc enabled regions then file a JIRA. I have added &amp;quot;TCMalloc Beta&amp;quot; to the &amp;quot;Affects Version/s&amp;quot; field.&lt;br /&gt;
&lt;br /&gt;
Contact me if you need something specific set up on ADITI or if you have any questions.&lt;br /&gt;
&lt;br /&gt;
__Oskar&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_News&amp;diff=992652</id>
		<title>Template:LSL News</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_News&amp;diff=992652"/>
		<updated>2010-08-01T04:00:44Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* {{#if:{{{1|}}}|{{{1}}}|LSL News}} */ updating viewer version&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{Multi-lang}}__NOTOC__&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
== {{#if:{{{1|}}}|{{{1}}}|LSL News}} ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em; font-size: x-small&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- THIS IS A GLOBAL TEMPLATE, IF YOU WANT TO LOCALIZE IT, FOLLOW THE LOCALIZATION GUIDELINES!!! --&amp;gt;&lt;br /&gt;
This information may be outdated. Check the [http://secondlife.com/support/downloads.php Downloads Page] for updates.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;line-height:1.1em;&amp;quot;&lt;br /&gt;
| Current Viewer (primary download): &lt;br /&gt;
| [http://secondlife.com/update.php?userserver=userserver.agni.lindenlab.com 2.1.0.207030]&lt;br /&gt;
| ~ [[Release_Notes/Second_Life_Release/2.1.0 | Release Notes]] &lt;br /&gt;
|-&lt;br /&gt;
| Current Release Candidate Viewer: &lt;br /&gt;
| none available.&lt;br /&gt;
| &lt;br /&gt;
|-&lt;br /&gt;
| [[Snowglobe]] Viewer: &lt;br /&gt;
| [[Snowglobe#Release|1.3.2.3219]] &lt;br /&gt;
| ~ [[Release_Notes/Snowglobe_Release/1.3 | Release Notes]]&lt;br /&gt;
&amp;lt;!--&lt;br /&gt;
|- &lt;br /&gt;
| Current Beta: &lt;br /&gt;
| [http://secondlife.com/update.php?userserver=userserver.aditi.lindenlab.com 1.21.0.94415]&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
| Current First Look Viewer: &lt;br /&gt;
| [http://secondlife.com/support/downloads.php 1.21.3.100141]&lt;br /&gt;
|&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the section name pass this template a first variable&lt;br /&gt;
&amp;lt;pre&amp;gt;{{LSL News|LSL Monkeys}}&amp;lt;/pre&amp;gt;&lt;br /&gt;
{{LSL News|LSL Monkeys}}&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=986592</id>
		<title>User:Cow Taurog/Visitor nagger</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=986592"/>
		<updated>2010-07-22T18:40:42Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: whoops&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script is used to nag people who haven&#039;t already been nagged about the rules of your place, or a welcome message. Drop a notecard named &amp;lt;code&amp;gt;Rules&amp;lt;/code&amp;gt;, followed by this script into any object. The range is 20m, and it scans for people within range every 10 seconds by default. If someone is found that hasn&#039;t already been nagged, it will IM them the contents of the notecard line by line. There isn&#039;t a way to save the list, and if the script is reset, everyone will be nagged again.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list glLines;&lt;br /&gt;
string gsNotecard=&amp;quot;Rules&amp;quot;;&lt;br /&gt;
float gfPoll=10;&lt;br /&gt;
float gfRange=20;&lt;br /&gt;
list glKeys;&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer i;&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        glLines=glLines+[mess];&lt;br /&gt;
        i++;&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
        if(mess==EOF){state running;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llOwnerSay(&amp;quot;&#039;&amp;quot;+gsNotecard+&amp;quot;&#039; notecard loaded.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT,gfRange,PI,gfPoll);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){for(i=0;i&amp;lt;num;i++){&lt;br /&gt;
        if(llListFindList(glKeys,[llDetectedKey(i)])==-1){&lt;br /&gt;
            glKeys=glKeys+[llDetectedKey(i)];&lt;br /&gt;
            llInstantMessage(llDetectedKey(i),&amp;quot;\n&amp;quot;+llDumpList2String(glLines,&amp;quot;\n&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=986582</id>
		<title>User:Cow Taurog/Visitor nagger</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Visitor_nagger&amp;diff=986582"/>
		<updated>2010-07-22T18:40:21Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: Created page with &amp;#039;This script is used to nag people who haven&amp;#039;t already been nagged about the rules of your place, or a welcome message. Drop a notecard named &amp;lt;code&amp;gt;Rules&amp;lt;/code&amp;gt;, followed by this ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script is used to nag people who haven&#039;t already been nagged about the rules of your place, or a welcome message. Drop a notecard named &amp;lt;code&amp;gt;Rules&amp;lt;/code&amp;gt;, followed by this script into any object. The range is 20m, and it scans for people within range every 10 seconds by default. If someone is found that hasn&#039;t already been nagged, it will IM them the contents of the notecard line by line. There isn&#039;t a way to save the list, and if the script is reset, everyone will be nagged again.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl&amp;quot;&amp;gt;&lt;br /&gt;
list glLines;&lt;br /&gt;
string gsNotecard=&amp;quot;Rules&amp;quot;;&lt;br /&gt;
float gfPoll=10;&lt;br /&gt;
float gfRange=20;&lt;br /&gt;
list glKeys;&lt;br /&gt;
key gkReq;&lt;br /&gt;
integer i;&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key req,string mess){if(req==gkReq){&lt;br /&gt;
        glLines=glLines+[mess];&lt;br /&gt;
        i++;&lt;br /&gt;
        gkReq=llGetNotecardLine(gsNotecard,i);&lt;br /&gt;
        if(mess==EOF){state running;}&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llOwnerSay(&amp;quot;&#039;&amp;quot;+gsNotecard+&amp;quot;&#039; notecard loaded.&amp;quot;);&lt;br /&gt;
        llSensorRepeat(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,AGENT,gfRange,PI,gfPoll);&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){for(i=0;i&amp;lt;num;i++){&lt;br /&gt;
        if(llListFindList(glKeys,[llDetectedKey(i)])==-1){&lt;br /&gt;
            glKeys=glKeys+[llDetectedKey(i)];&lt;br /&gt;
            llInstantMessage(llDetectedKey(i),&amp;quot;\n&amp;quot;+llDumpList2String(glLines,&amp;quot;\n&amp;quot;));&lt;br /&gt;
        }&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=986572</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=986572"/>
		<updated>2010-07-22T18:36:19Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;br /&gt;
*[[User:Cow Taurog/Visitor nagger|Visitor nagger]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Viewer_2_Tweaks/Beta_3&amp;diff=780873</id>
		<title>Talk:Viewer 2 Tweaks/Beta 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Viewer_2_Tweaks/Beta_3&amp;diff=780873"/>
		<updated>2010-03-03T22:59:35Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Don&amp;#039;t crunch my view in mouselook either */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nearby chat in conversation floater ==&lt;br /&gt;
If anyone has a clue where to start to reattach the Local Chat (or Nearby Chat) the Communications (er, Conversations) window, I&#039;d LOOOVE to know. [[User:Seshat Czeret|Seshat Czeret]] 21:16, 28 February 2010 (UTC)&lt;br /&gt;
:Vote here: {{jira|VWR-17332}} &amp;amp;mdash; [[User:Boroondas Gupte|Boroondas Gupte]] 21:41, 1 March 2010 (UTC)&lt;br /&gt;
:: Thank you! [[User:Seshat Czeret|Seshat Czeret]] 22:50, 1 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t crunch my view in mouselook either ==&lt;br /&gt;
&lt;br /&gt;
I love the patch by [[User:Alexandrea_Fride]] that keeps the sidebar from crunching my camera view. But there&#039;s another annoyance out there to quell, mouselook wrecks your camera view also. I had a quick lookthrough of the xml to see if I could find out where mouselook view keeps all those settings, but found nothing. Does anyone know how to fix this too, disabling the squishy viewscreen problem for good? Unless I&#039;m missing another instance where things get wrecked of course. &lt;br /&gt;
:Edit: Double brownie points for getting rid of the &amp;quot;press esc to return to world view&amp;quot; text. I knew this (or knew trying it wouldn&#039;t kill me) from the very first time I logged on, without anything telling me this. Besides, I just scroll in/out with the mouse anyways, nevermind the keyboard. This is like having &amp;quot;to start car, insert key, turn&amp;quot; etched into your windshield.&lt;br /&gt;
:For the final release, this would be a good opportunity to...&lt;br /&gt;
:#Make this show once in a notification box with the option to &amp;quot;never warn me again&amp;quot; like you get when you quit SL, deed something, etc.&lt;br /&gt;
:#Show for a few seconds each time mouselook is entered, and then fade.&lt;br /&gt;
:#Provide a popup in the bottom right corner as you would see when a sim is restarting, or you recieve an object.&lt;br /&gt;
:#Just let that one person who gets stuck relog every time, or read help and figure it out. Counterintuivity will hold you back your entire life (real or otherwise), this is as good of a time as any to get rid of it.&lt;br /&gt;
:#Anything at all besides having this ugly text shoved down my throat forever and again. I&#039;d rather have another HUD there instead.&lt;br /&gt;
:*[http://jira.secondlife.com/browse/VWR-17983 VWR 17983]&amp;lt;br&amp;gt;&lt;br /&gt;
-[[User:Cow Taurog|Cow Taurog]] 22:59, 3 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Viewer_2_Tweaks/Beta_3&amp;diff=780633</id>
		<title>Talk:Viewer 2 Tweaks/Beta 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Viewer_2_Tweaks/Beta_3&amp;diff=780633"/>
		<updated>2010-03-03T22:01:34Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Don&amp;#039;t crunch my view in mouselook either */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Nearby chat in conversation floater ==&lt;br /&gt;
If anyone has a clue where to start to reattach the Local Chat (or Nearby Chat) the Communications (er, Conversations) window, I&#039;d LOOOVE to know. [[User:Seshat Czeret|Seshat Czeret]] 21:16, 28 February 2010 (UTC)&lt;br /&gt;
:Vote here: {{jira|VWR-17332}} &amp;amp;mdash; [[User:Boroondas Gupte|Boroondas Gupte]] 21:41, 1 March 2010 (UTC)&lt;br /&gt;
:: Thank you! [[User:Seshat Czeret|Seshat Czeret]] 22:50, 1 March 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Don&#039;t crunch my view in mouselook either ==&lt;br /&gt;
&lt;br /&gt;
I love the patch by [[User:Alexandrea_Fride]] that keeps the sidebar from crunching my camera view. But there&#039;s another annoyance out there to quell, mouselook wrecks your camera view also. I had a quick lookthrough of the xml to see if I could find out where mouselook view keeps all those settings, but found nothing. Does anyone know how to fix this too, disabling the squishy viewscreen problem for good? Unless I&#039;m missing another instance where things get wrecked of course. -[[User:Cow Taurog|Cow Taurog]] 22:01, 3 March 2010 (UTC)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=CHANGED_OWNER&amp;diff=497273</id>
		<title>CHANGED OWNER</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=CHANGED_OWNER&amp;diff=497273"/>
		<updated>2009-09-28T06:35:54Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: [http://jira.secondlife.com/browse/VWR-12880 JIRA reports this bug] as resolved around 6 months ago&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Constant&lt;br /&gt;
|name=CHANGED_OWNER&lt;br /&gt;
|type=integer&lt;br /&gt;
|value={{LSL Hex|0x80}}&lt;br /&gt;
|desc=The object has changed owners. This event occurs in the original object when it is purchased or a copy of it is purchased, but not when its contents are purchased. This event occurs in the original object when a user takes it or takes a copy of it or when the owner deeds it to a group. The event occurs in the new object when it is first rezzed. &lt;br /&gt;
|examples=&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    changed(integer change)&lt;br /&gt;
    {&lt;br /&gt;
        if (change &amp;amp; CHANGED_OWNER) //note that it&#039;s &amp;amp; and not &amp;amp;&amp;amp;... it&#039;s bitwise!&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;The owner of the object has changed.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
|functions&lt;br /&gt;
|events=&lt;br /&gt;
{{LSL DefineRow||[[changed]]|}}&lt;br /&gt;
|cat1=Owner&lt;br /&gt;
|cat2&lt;br /&gt;
|cat3&lt;br /&gt;
|cat4&lt;br /&gt;
}}&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Walk_sound&amp;diff=481213</id>
		<title>User:Cow Taurog/Walk sound</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Walk_sound&amp;diff=481213"/>
		<updated>2009-09-04T09:38:39Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: Created page with &amp;#039;This script will loop a sound while you&amp;#039;re pressing the forward key (walking). Drop it into any attachment. Click it to toggle on/off, hold to bring up a menu of loops to choose ...&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will loop a sound while you&#039;re pressing the forward key (walking). Drop it into any attachment. Click it to toggle on/off, hold to bring up a menu of loops to choose from. If you add/remove loops, the name and the key for that song must be in the same position in both of the lists.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// -Options-&lt;br /&gt;
list glNames=[&lt;br /&gt;
    &amp;quot;Jump&amp;quot;,&lt;br /&gt;
    &amp;quot;Insane&amp;quot;,&lt;br /&gt;
    &amp;quot;Rollout&amp;quot;,&lt;br /&gt;
    &amp;quot;Purple&amp;quot;,&lt;br /&gt;
    &amp;quot;Blueberry&amp;quot;,&lt;br /&gt;
    &amp;quot;Stand up&amp;quot;]; // List of menu buttons&lt;br /&gt;
list glKeys=[&lt;br /&gt;
    &amp;quot;4b41e5b0-effa-5183-8247-488b67f9349e&amp;quot;,&lt;br /&gt;
    &amp;quot;e3be4540-8d19-2f20-ad19-66929c6419a3&amp;quot;,&lt;br /&gt;
    &amp;quot;9b004577-b55c-2459-2a0c-eaaf0ae786ab&amp;quot;,&lt;br /&gt;
    &amp;quot;e2eba00c-0556-6d33-f4e7-54626b502c1e&amp;quot;,&lt;br /&gt;
    &amp;quot;674ce8ee-9e64-238a-e695-19c3ee8d8527&amp;quot;,&lt;br /&gt;
    &amp;quot;3eaa225b-d9d2-6d83-c41e-0f9091584ab0&amp;quot;]; // List of sound UUIDs&lt;br /&gt;
float gfHold=2; // How long to click and hold for the menu (default is 2)&lt;br /&gt;
float gfVol=1; // Volume (default is 1)&lt;br /&gt;
 &lt;br /&gt;
// -Declarations-&lt;br /&gt;
integer listen0; // Listen handle&lt;br /&gt;
integer giChan; // Menu channel&lt;br /&gt;
integer giHold; // Counter&lt;br /&gt;
key gkSound; // Selected sound&lt;br /&gt;
 &lt;br /&gt;
// -Default state-&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){llStopSound();gkSound=llList2Key(glKeys,0);state waiting;}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// -Waiting state-&lt;br /&gt;
state waiting{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        giChan=llRound(llFrand((3000-1000)+3000));&lt;br /&gt;
        llStopSound();&lt;br /&gt;
        llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);&lt;br /&gt;
    }&lt;br /&gt;
    run_time_permissions(integer perm){if(perm&amp;amp;PERMISSION_TAKE_CONTROLS){llTakeControls(CONTROL_FWD,TRUE,TRUE);}}&lt;br /&gt;
    control(key id,integer level,integer edge){integer pressed=level&amp;amp;edge;if(pressed&amp;amp;CONTROL_FWD){state running;}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}}&lt;br /&gt;
    touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state off;}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giHold=TRUE;&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        listen0=llListen(giChan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
        llDialog(llGetOwner(),&amp;quot;Pick a sound...&amp;quot;,glNames,giChan);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        gkSound=llList2Key(glKeys,llListFindList(glNames,[mess]));&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// -Running state-&lt;br /&gt;
state running{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){llLoopSound(gkSound,gfVol);llRequestPermissions(llGetOwner(),PERMISSION_TAKE_CONTROLS);}&lt;br /&gt;
    run_time_permissions(integer perm){if(perm&amp;amp;PERMISSION_TAKE_CONTROLS){llTakeControls(CONTROL_FWD,TRUE,TRUE);}}&lt;br /&gt;
    control(key id,integer level,integer edge){integer released=~level&amp;amp;edge;if(released&amp;amp;CONTROL_FWD){state waiting;}}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}}&lt;br /&gt;
    touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state off;}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giHold=TRUE;&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        listen0=llListen(giChan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
        llDialog(llGetOwner(),&amp;quot;Pick a sound...&amp;quot;,glNames,giChan);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        gkSound=llList2Key(glKeys,llListFindList(glNames,[mess]));&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
// -Off state-&lt;br /&gt;
state off{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){llStopSound();}&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){giHold=FALSE;llSetTimerEvent(gfHold);}}&lt;br /&gt;
    touch_end(integer num){if(giHold==FALSE){llSetTimerEvent(0);state waiting;}}&lt;br /&gt;
    timer(){&lt;br /&gt;
        giHold=TRUE;&lt;br /&gt;
        llSetTimerEvent(0);&lt;br /&gt;
        listen0=llListen(giChan,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);&lt;br /&gt;
        llDialog(llGetOwner(),&amp;quot;Pick a sound...&amp;quot;,glNames,giChan);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        gkSound=llList2Key(glKeys,llListFindList(glNames,[mess]));&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=481212</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=481212"/>
		<updated>2009-09-04T09:24:35Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;br /&gt;
*[[User:Cow Taurog/Walk sound|Walk sound]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=LSL_HTTP_server&amp;diff=427853</id>
		<title>LSL HTTP server</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=LSL_HTTP_server&amp;diff=427853"/>
		<updated>2009-07-09T19:51:16Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Script API */ - added LSL portal links, &amp;lt;lsl&amp;gt; tags&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}&lt;br /&gt;
== Intro ==&lt;br /&gt;
This is the counterpart to [[llHTTPRequest]].  While llHTTPRequest lets scripts in Second Life request data from HTTP-accessible sources, this HTTP-in enables outside sources to request data from scripts in Second Life.  The key difference is that llHTTPRequest exchanges data when the script in SL wants; HTTP-in allows outside sources to determine when they need to communicate with scripts in SL.&lt;br /&gt;
&lt;br /&gt;
Prior to HTTP-in, similar functionality could be achieved by polling with [[llHTTPRequest]], [[llEmail]] and [[:Category:LSL_XML-RPC|XML-RPC]].  All three are cumbersome and the latter two have serious scalability bottlenecks.&lt;br /&gt;
&lt;br /&gt;
== Uses ==&lt;br /&gt;
* Easily get data from LSL scripts to outside viewers, scripts or servers.&lt;br /&gt;
** Web front end for a visitor counter or other statistics accumulator.&lt;br /&gt;
* Easily get data into LSL scripts from outside viewers, scripts or servers.&lt;br /&gt;
** A store with a web front end that communicates to an in-world object to exchange L$ and inventory items.&lt;br /&gt;
** A game in-world where the primary game logic is handled by an external program which needs to manipulate in world items.&lt;br /&gt;
&lt;br /&gt;
Gory Technical Details follow.  Or jump straight to the [[LSL_http_server/examples | Script Examples]].&lt;br /&gt;
&lt;br /&gt;
== Script API ==&lt;br /&gt;
* &#039;&#039;&#039;[[LlRequestURL|key llRequestURL()]]&#039;&#039;&#039;&lt;br /&gt;
: Request a new LSL Server public URL. &lt;br /&gt;
: An http_request event will be triggered with success or failure and include the returned key&lt;br /&gt;
&amp;lt;lsl&amp;gt;request_id = llRequestURL();&amp;lt;/lsl&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[LlRequestSecureURL|key llRequestSecureURL()]]&#039;&#039;&#039;&lt;br /&gt;
: Similar to &#039;&#039;llRequestURL&#039;&#039; except requests an HTTPS / SSL URL.&lt;br /&gt;
: An http_request event will be triggered with success or failure and include the returned key&lt;br /&gt;
&amp;lt;lsl&amp;gt;request_id = llRequestSecureURL();&amp;lt;/lsl&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[LlReleaseURL|llReleaseURL(string url)]]&#039;&#039;&#039;&lt;br /&gt;
: Clear the specific URL, used for both secure and non-secure URLs.&lt;br /&gt;
&amp;lt;lsl&amp;gt;llReleaseURL(&amp;quot;http://sim3015.aditi.lindenlab.com:12046/cap/3ff4f3f2-ea08-76c1-cef6-a22b4a573a7c&amp;quot;);&amp;lt;/lsl&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;[[Http_request|http_request(key id, string method, string body)]]&#039;&#039;&#039;&lt;br /&gt;
: Event triggered when an URL is hit:&lt;br /&gt;
:* id is unique to this request&lt;br /&gt;
:* Supported methods are GET/POST/PUT/DELETE&lt;br /&gt;
:* body: The body of the request.&lt;br /&gt;
: Event also triggered with response to &#039;&#039;llRequestURL&#039;&#039; and &#039;&#039;llRequestSecureURL&#039;&#039;&lt;br /&gt;
:* id matches the key returned by &#039;&#039;llRequestURL&#039;&#039; or &#039;&#039;llRequestSecureURL&#039;&#039;&lt;br /&gt;
:* method == URL_REQUEST_GRANTED for success, URL_REQUEST_DENIED for failure to get an URL&lt;br /&gt;
:* body is the public URL.  If unable to get a public URL body will be empty.&lt;br /&gt;
* &#039;&#039;&#039;[[LlHTTPResponse|llHTTPResponse(key id, integer status, string body)]]&#039;&#039;&#039;&lt;br /&gt;
: Send &#039;&#039;body&#039;&#039; to the requester with status code &#039;&#039;status&#039;&#039;&lt;br /&gt;
:* id is the id from http_request that maps to the specific request&lt;br /&gt;
:* sending a response to the requestor will clear the request and delete information associated with it&lt;br /&gt;
* &#039;&#039;&#039;[[LlGetHTTPHeader|string llGetHTTPHeader(key id, string header)]]&#039;&#039;&#039;&lt;br /&gt;
: Returns the string for the specified header in the specified request.&lt;br /&gt;
:* Supported headers are:&lt;br /&gt;
::* &amp;quot;x-script-url&amp;quot;: The base url, as originally recieved from llRequestPublicURL&lt;br /&gt;
::* &amp;quot;x-path-info&amp;quot;: Any trailing path information from the requested url&lt;br /&gt;
::* &amp;quot;x-query-string&amp;quot;: Any query arguments, the text past a ? in the url&lt;br /&gt;
::* &amp;quot;x-remote-ip&amp;quot;: IP address of the host that made the request&lt;br /&gt;
::* &amp;quot;user-agent&amp;quot;: The user-agent header as reported by the requester &lt;br /&gt;
 requested url: &#039;&#039;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322/foo/bar?arg=gra&#039;&#039;&lt;br /&gt;
 x-script-url: &#039;&#039;https://sim3015.aditi.lindenlab.com:12043/cap/a7717681-2c04-e4ac-35e3-1f01c9861322&#039;&#039;&lt;br /&gt;
 x-path-info: &#039;&#039;/foo/bar&#039;&#039;&lt;br /&gt;
 x-query-string: &#039;&#039;arg=gra&#039;&#039;&lt;br /&gt;
: This header information is valid for 30 seconds, or until &#039;&#039;llHTTPResponse()&#039;&#039; is called.&lt;br /&gt;
* &#039;&#039;&#039;[[Changed|changed(integer change)]]&#039;&#039;&#039;&lt;br /&gt;
:* CHANGED_REGION_RESTART: New changed() event triggered on region startup.&lt;br /&gt;
* &#039;&#039;&#039;[[LlGetFreeURLs|integer llGetFreeURLs()]]&#039;&#039;&#039;&lt;br /&gt;
: Returns the number of URLs available to this script.&lt;br /&gt;
&lt;br /&gt;
== URL Lifetime Limitations ==&lt;br /&gt;
* URLs are &#039;&#039;&#039;temporary&#039;&#039;&#039;!&lt;br /&gt;
* URLs will be lost in the following cases, all detectable by the script events listed with them.&lt;br /&gt;
** On object derez/rez: &#039;&#039;on_rez&#039;&#039;&lt;br /&gt;
** On script save/reset: &#039;&#039;default state_entry()&#039;&#039; (trickier in multi-state scripts)&lt;br /&gt;
** On region cross or TP(attachments): &#039;&#039;&#039;changed() event, CHANGED_REGION and CHANGED_TELEPORT&#039;&#039;&lt;br /&gt;
** On region restart: &#039;&#039;changed() event, new flag CHANGED_REGION_START&#039;&#039;&lt;br /&gt;
* When urls are &#039;lost&#039; it means that all public urls for that script are gone, new ones will need to be requested and the new urls will &#039;&#039;&#039;&#039;&#039;not&#039;&#039;&#039;&#039;&#039; resemble the old ones.&lt;br /&gt;
* Maintaining persistent URLs will require building or using an external service similar to how [http://en.wikipedia.org/wiki/Dynamic_DNS Dynamic DNS] services work for tying domain names to dynamic IP addresses.&lt;br /&gt;
A Dynamic DNS service running on Google App Engine has been contributed as an example and can be found in the forums here:&lt;br /&gt;
http://forums.secondlife.com/showthread.php?t=323981&lt;br /&gt;
&lt;br /&gt;
== Resource Limitations ==&lt;br /&gt;
* There are a limited number of URLs available in each region, split by land ownership exactly like prim limits.&lt;br /&gt;
** Use llGetFreeURLs to get the exact number of available URLs for the script.&lt;br /&gt;
** The number of allowed URLs is the same as the number of allowed prims on the parcel the object is over.&lt;br /&gt;
**: &#039;&#039;Object owner does not matter, all objects over a parcel will use the resource pool for that parcel.&#039;&#039;&lt;br /&gt;
**: &#039;&#039;Like prims, all the parcels owned by the same owner and in the same region share the same pool of resources.&#039;&#039;&lt;br /&gt;
**: &#039;&#039;If you have two parcels in a region that each support 100 URLs, then you could use all 200 in object(s) on a single parcel.&#039;&#039;&lt;br /&gt;
** The region&#039;s object bonus factor does not apply to available URLs.&lt;br /&gt;
**: &#039;&#039;If a parcel has a max of 300 prims in a region with a 2x bonus factor there will only be 150 urls allowed.&#039;&#039;&lt;br /&gt;
* Each resident has their own unique pool of available URLs with a max of 38 URLs per resident.&lt;br /&gt;
** This is 1 per attachment point, but all 38 could be used by a single attachment for example.&lt;br /&gt;
* Vehicles are special and lazily moved to resident pools by the following logic:&lt;br /&gt;
** Any object that has a resident sitting on it is a &#039;vehicle&#039;&lt;br /&gt;
** Vehicles will use the url resources from the parcel they are over until the cross a parcel border.&lt;br /&gt;
**: &#039;&#039;Specifically this prevents anyone from breaking your vending machine by sitting on it and making it a &#039;vehicle&#039;.&#039;&#039;&lt;br /&gt;
** When any object using URL resources with a resident sitting on it crosses a parcel boundary the resources will switch to the first sitting resident with enough resources.  If no sitting agents have enough resources then the resources from the parcel being moved onto will be used.  If even then there are not enough resources to use then the vehicle will be blocked from moving.&lt;br /&gt;
**: &#039;&#039;In short we do everything we can to find a pool to host the resources needed by the vehicle, but will block movement if we can&#039;t.&#039;&#039;&lt;br /&gt;
* Parcel Sale: When a parcel is sold such that it changes the total available URLs in the region for either resident (seller or buyer) such that more URLs are being used than are available some objects will be returned.  &lt;br /&gt;
** The objects returned will be from youngest object to oldest object of those using URLs in each category in order of object category: Temporary, Other, Group, Owner, Selected/Sat upon.&lt;br /&gt;
**: &#039;&#039;The &#039;&#039;&#039;only&#039;&#039;&#039; time objects are possibly returned is when parcels change owner, and only if more resources are being used than allowed.&#039;&#039;&lt;br /&gt;
**: &#039;&#039;We return youngest temporary objects before older temporary objects before younger &#039;other&#039; (owned by non-group, non-parcel-owner) objects etc.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Other Limitations ==&lt;br /&gt;
* Size of the body of the requests will be limited to 2k bytes.&lt;br /&gt;
* Size of headers of requests will be limited to 255 bytes.&lt;br /&gt;
* The size of responses to requests is not currently limited, but this is subject to review during testing.&lt;br /&gt;
* The content type of the returned data is always &#039;text/plain; utf-8&#039;&lt;br /&gt;
*: &#039;&#039;Allowing more content type options is a possibility for the future, but not guaranteed.&#039;&#039;&lt;br /&gt;
* There is a cap of 64 in flight requests per script. This is based on the maximum number of pending events in LSL.&lt;br /&gt;
* &#039;&#039;We may throttle the rate we accept hits at the CAP server level as well.  This is possible, but has not yet been decided.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[LSL_http_server/examples | Script Examples]]&lt;br /&gt;
* [[LSL_http_server/design | Design Document]]&lt;br /&gt;
* Design Jira:{{jira|SVC-1086}}&lt;br /&gt;
&lt;br /&gt;
{{LSLC|HTTP}}&lt;br /&gt;
{{LSLC|Communications}}&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=392712</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=392712"/>
		<updated>2009-06-13T23:08:26Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:Landmark_green.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=300463</id>
		<title>User:Cow Taurog/Name to key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=300463"/>
		<updated>2009-04-03T00:25:15Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will listen on any number/channel for a link message with &amp;quot;resolvename&amp;quot; as the string, and &amp;quot;User Name&amp;quot; (a real name of course, not User Name) as the id. It will then resolve the UUID of that person using the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.alpha-fox.com/name2key alpha fox name to key service], and send a link message back on the same number/channel with &amp;quot;resolvedkey&amp;quot; as the string, and the user&#039;s UUID as the id. This service may not be around forever, and the script is subject to breakage should it no longer exist ([http://www.alpha-fox.com/donate/ donations] are good&amp;lt;/span&amp;gt;). Place the first script, and then one of the example scripts below in the same prim, then touch to use it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string gsURL=&amp;quot;http://name2key.alpha-fox.com/?name=&amp;quot;;&lt;br /&gt;
key httpRequestId;&lt;br /&gt;
integer giComm;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvename&amp;quot;){&lt;br /&gt;
        giComm=num;&lt;br /&gt;
        httpRequestId=llHTTPRequest(gsURL+llEscapeURL(id),[],&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    http_response(key request_id,integer status,list metadata,string body){if(request_id==httpRequestId){&lt;br /&gt;
        llMessageLinked(LINK_SET,giComm,&amp;quot;resolvedkey&amp;quot;,llUnescapeURL(body));&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// get key by touch&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){llMessageLinked(LINK_SET,1,&amp;quot;resolvename&amp;quot;,llDetectedName(num-1));&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvedkey&amp;quot;){llOwnerSay(id);}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// get key by chat&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){llOwnerSay(&amp;quot;Say the full name of the avatar you would like to find the UUID for over public chat, or /20.&amp;quot;);llListen(0,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);llListen(20,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);}}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){llMessageLinked(LINK_SET,1,&amp;quot;resolvename&amp;quot;,mess);}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvedkey&amp;quot;){llOwnerSay(id);llResetScript();}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=300453</id>
		<title>User:Cow Taurog/Name to key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=300453"/>
		<updated>2009-04-03T00:06:35Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will listen on any number/channel for a link message with &amp;quot;resolvename&amp;quot; as the string, and &amp;quot;User Name&amp;quot; (a real name of course, not User Name) as the id. It will then resolve the UUID of that person using the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.alpha-fox.com/name2key alpha fox name to key service], and send a link message back on the same number/channel with &amp;quot;resolvedkey&amp;quot; as the string, and the user&#039;s UUID as the id. This service may not be around forever, and the script is subject to breakage should it no longer exist ([http://www.alpha-fox.com/donate/ donations] are good&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string gsURL=&amp;quot;http://name2key.alpha-fox.com/?name=&amp;quot;;&lt;br /&gt;
key httpRequestId;&lt;br /&gt;
integer giComm;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvename&amp;quot;){&lt;br /&gt;
        giComm=num;&lt;br /&gt;
        httpRequestId=llHTTPRequest(gsURL+llEscapeURL(id),[],&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    http_response(key request_id,integer status,list metadata,string body){if(request_id==httpRequestId){&lt;br /&gt;
        llMessageLinked(LINK_SET,giComm,&amp;quot;resolvedkey&amp;quot;,llUnescapeURL(body));&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// get key by touch&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){llMessageLinked(LINK_SET,1,&amp;quot;resolvename&amp;quot;,llDetectedName(num-1));&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvedkey&amp;quot;){llOwnerSay(id);}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// get key by chat&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){llOwnerSay(&amp;quot;Say the full name of the avatar you would like to find the UUID for over public chat, or /20.&amp;quot;);llListen(0,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);llListen(20,&amp;quot;&amp;quot;,llGetOwner(),&amp;quot;&amp;quot;);}}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){llMessageLinked(LINK_SET,1,&amp;quot;resolvename&amp;quot;,mess);}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvedkey&amp;quot;){llOwnerSay(id);llResetScript();}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:GTeam&amp;diff=289953</id>
		<title>Talk:GTeam</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:GTeam&amp;diff=289953"/>
		<updated>2009-03-23T03:53:22Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: Office hours&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Office hours ==&lt;br /&gt;
&lt;br /&gt;
When will the [[Office_Hours/GTeam|office hours]] be restarted? You can&#039;t be THAT busy. I can&#039;t be the only one that [[Talk:Office_Hours/GTeam|feels that the g-team is usless]] in their current state. -[[User:Cow Taurog|Cow Taurog]] 03:53, 23 March 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Office_Hours/GTeam&amp;diff=289943</id>
		<title>Talk:Office Hours/GTeam</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Office_Hours/GTeam&amp;diff=289943"/>
		<updated>2009-03-23T03:50:17Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Office hours */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Perfect timing, shut down authorized vendors with a fraudulent explication then stop people from asking why.  Sadly, I would expect nothing less.&lt;br /&gt;
&lt;br /&gt;
== Office hours ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;float: left; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; background: orange; color: black;&amp;quot; | &amp;lt;b&amp;gt;Please note: we will be suspending all GTeam office hours for the rest of 2008 and restarting sometime next year.&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;h3&amp;gt;Welcome to 2009.&amp;lt;/h3&amp;gt; Me and &amp;lt;b&amp;gt;16,785,531&amp;lt;/b&amp;gt; other people would like to know when (not if) these &amp;quot;office hours&amp;quot; will be restarted, so that the community can properly inform these otherwise uninformed &amp;quot;employees&amp;quot; of where SL stands (lies down) as far as governance goes. It seems that everyone is taking an extended vacation, if you would like to hire anyone else to replace the current &amp;quot;g-team&amp;quot;, then do speak up. Until then, I expect every user to follow the same rules I have to, and to get what I paid (pay) for, even though there haven&#039;t been any new developments since 2008, just the same ones that have been around for years... -[[User:Cow Taurog|Cow Taurog]] 03:50, 23 March 2009 (UTC)&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=280083</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=280083"/>
		<updated>2009-03-16T08:05:32Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:LM-New.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on). Exceptions are counters such as integer i, and handlers such as integer listen0.&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Teleporter&amp;diff=279462</id>
		<title>User:Cow Taurog/Teleporter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Teleporter&amp;diff=279462"/>
		<updated>2009-03-15T22:47:29Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: This script makes a simple teleporter that will warp to anywhere in the sim, provided your objects are allowed to cross property lines. Create an object to use as a teleport beam, make sur...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script makes a simple teleporter that will warp to anywhere in the sim, provided your objects are allowed to cross property lines. Create an object to use as a teleport beam, make sure it is temporary and phantom, and drop the second script inside. Take it back into your inventory. To change the script, you&#039;ll have to make a new one, or rez it and then stop the script rather fast before it deletes itself. Once you&#039;ve got your teleport beam, drop it inside the object you want to use as the teleporter, then drop the first script inside there also. There are a couple of destinations already programmed in, but these are just examples. Once a destination is chosen, the teleporter will scan to see if there is already a beam in place. If there is, it will wait for 5 seconds, and scan again. Once the area is clear, it will rez another beam.&lt;br /&gt;
&lt;br /&gt;
==Teleporter==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer giDialog=9126;   //Change both of these to something unique, match the script below to these&lt;br /&gt;
integer giTPChan=-92760; //&lt;br /&gt;
vector gvOffset=&amp;lt;0,0,0.25&amp;gt;; // Offset to add to the destination&lt;br /&gt;
vector gvRezOffset=&amp;lt;0,0,1.5&amp;gt;; // How far away to rez the TP beam&lt;br /&gt;
float gfTimeout=20; // How long to wait before killing the listen&lt;br /&gt;
string gsMain=&amp;quot;Pick a destination...&amp;quot;;&lt;br /&gt;
list glDestName=[&amp;quot;Sky&amp;quot;,&amp;quot;Ground&amp;quot;];&lt;br /&gt;
list glDestPos=[&amp;quot;&amp;lt;128,128,1000&amp;gt;&amp;quot;,&amp;quot;&amp;lt;128,128,1&amp;gt;&amp;quot;];&lt;br /&gt;
vector gvDest;&lt;br /&gt;
integer listen0;&lt;br /&gt;
key gkId;&lt;br /&gt;
mainmenu(){&lt;br /&gt;
    llSetTimerEvent(gfTimeout);&lt;br /&gt;
    listen0=llListen(giDialog,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(gkId,gsMain,glDestName,giDialog);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    timer(){gkId=&amp;quot;&amp;quot;;llListenRemove(listen0);}&lt;br /&gt;
    touch_start(integer num){&lt;br /&gt;
        gkId=llDetectedKey(num-1);&lt;br /&gt;
        mainmenu();&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        gkId=id;&lt;br /&gt;
        if(llListFindList(glDestName,[mess])!=-1){&lt;br /&gt;
            gvDest=(vector)llList2String(glDestPos,llListFindList(glDestName,[mess]));&lt;br /&gt;
            llSensor(&amp;quot;TP&amp;quot;,&amp;quot;&amp;quot;,SCRIPTED,10,PI);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    sensor(integer num){llSleep(5);llSensor(&amp;quot;TP&amp;quot;,&amp;quot;&amp;quot;,SCRIPTED,10,PI);}&lt;br /&gt;
    no_sensor(){&lt;br /&gt;
        llRezObject(&amp;quot;TP&amp;quot;,llGetPos()+gvRezOffset,ZERO_VECTOR,ZERO_ROTATION,0);&lt;br /&gt;
        llSleep(0.2);&lt;br /&gt;
        llSay(giTPChan,(string)(gvDest+gvOffset));&lt;br /&gt;
        gkId=&amp;quot;&amp;quot;;&lt;br /&gt;
        gvDest=ZERO_VECTOR;&lt;br /&gt;
        llListenRemove(listen0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Teleport beam==&lt;br /&gt;
This script will listen on a given channel for a position. Once a valid position is heard, it will warp there once it is sat upon (click type is also sit, not touch). Once it is there, or once it has been sitting around for too long, it will die. The range of this object is around 4000m in one jump, anything beyond that will use normal llSetPos movement after the initial jump.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer giTPChan=-92760; // change this to match the script above&lt;br /&gt;
float gfTimeout=30;&lt;br /&gt;
float gfPostTimeout=0.2;&lt;br /&gt;
float gfGlow=0.2;&lt;br /&gt;
float gfAlpha=0.85;&lt;br /&gt;
vector gvSitTarget=&amp;lt;0,0,0.1&amp;gt;;&lt;br /&gt;
vector gvDest;&lt;br /&gt;
vector gvOrigin;&lt;br /&gt;
integer listen0;&lt;br /&gt;
warpPos(vector destpos){if(destpos!=ZERO_VECTOR){&lt;br /&gt;
    integer jumps=(integer)(llVecDist(destpos,llGetPos())/10)+1;&lt;br /&gt;
    if(jumps&amp;gt;411){jumps=411;}list rules=[PRIM_POSITION,destpos];integer count=1;&lt;br /&gt;
    while((count=count&amp;lt;&amp;lt;1)&amp;lt;jumps){rules=(rules=[])+rules+rules;}&lt;br /&gt;
    llSetPrimitiveParams((rules=[])+rules+llList2List(rules,(count-jumps)&amp;lt;&amp;lt;1,count)); &lt;br /&gt;
    if(llVecDist(llGetPos(),destpos)&amp;gt;0.001){while(--jumps){llSetPos(destpos);}}&lt;br /&gt;
}}&lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetTimerEvent(gfTimeout);&lt;br /&gt;
        llSetStatus(STATUS_PHANTOM,TRUE);&lt;br /&gt;
        llSitTarget(gvSitTarget,ZERO_ROTATION);&lt;br /&gt;
        gvOrigin=llGetPos();&lt;br /&gt;
        llSetClickAction(CLICK_ACTION_SIT);&lt;br /&gt;
        listen0=llListen(giTPChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if((vector)mess!=ZERO_VECTOR){&lt;br /&gt;
        gvDest=(vector)mess;&lt;br /&gt;
        state running;&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        llDie();&lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
state running{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llSetSitText(&amp;quot;Teleport&amp;quot;);&lt;br /&gt;
        llSetAlpha(gfAlpha,ALL_SIDES);&lt;br /&gt;
        llSetPrimitiveParams([PRIM_GLOW,ALL_SIDES,gfGlow]);&lt;br /&gt;
        llSetTimerEvent(gfTimeout);&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param){&lt;br /&gt;
        llSitTarget(gvSitTarget,ZERO_ROTATION);&lt;br /&gt;
        llSetTimerEvent(gfTimeout);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){&lt;br /&gt;
        key agent=llAvatarOnSitTarget();&lt;br /&gt;
        if(change&amp;amp;CHANGED_LINK){if(agent){&lt;br /&gt;
            if(gvDest!=gvOrigin){if(gvDest!=ZERO_VECTOR){&lt;br /&gt;
                llSetAlpha(0,ALL_SIDES);&lt;br /&gt;
                warpPos(gvDest);&lt;br /&gt;
                llSleep(gfPostTimeout);&lt;br /&gt;
                llDie();&lt;br /&gt;
            }}&lt;br /&gt;
        }}&lt;br /&gt;
    }&lt;br /&gt;
    timer(){&lt;br /&gt;
        llDie();&lt;br /&gt;
    }  &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=279362</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=279362"/>
		<updated>2009-03-15T21:45:24Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: /* Scripts */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:LM-New.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on.)&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;br /&gt;
*[[User:Cow Taurog/Teleporter|Teleporter]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Update_server&amp;diff=278893</id>
		<title>User:Cow Taurog/Update server</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Update_server&amp;diff=278893"/>
		<updated>2009-03-15T00:37:44Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: This script comes in two seperate pieces, one for the server object, and one that goes in the object that checks to see if there is an updated version of itself. The server object will use...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script comes in two seperate pieces, one for the server object, and one that goes in the object that checks to see if there is an updated version of itself. The server object will use the name of the last item dropped into it as the object to send out as an update. The checker object will send the name of the object it is in as an email to the server. Place the server object into a prim, and take note of the object&#039;s email address. Put the checker script into the object to distribute, and enter the server&#039;s email address into the settings. Drop the object to distribute as an update inside. The checker script will send an email with the object&#039;s name as the subject, and the owner&#039;s key as the message. The server will then compare that name to the name stored as the most current version, and send out the object inside the server that has the same name as the most current version of the object if the names don&#039;t match. If they both match, it will send the user an IM telling them they have the latest version. Once the server is in place, it is important that the UUID doesn&#039;t change, so don&#039;t delete it, re-rez it, or put it somewhere that will return it. To move it from one place to another, wear it on your avatar (but don&#039;t detach it), go to wherever, and then drop it (drop, not detach). Resetting the server script won&#039;t break it. If the UUID of the server does change, you&#039;ll have to change each object that uses it by hand, or issue a new update through a group notice or some other method that looks bad, and tells everyone you screwed up.&lt;br /&gt;
&lt;br /&gt;
==Server==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// will keep track of objects, and always send out the latest one dropped in as an update&lt;br /&gt;
// email is the object&#039;s name as the subject, and the owner&#039;s key as the message&lt;br /&gt;
list glInv;&lt;br /&gt;
integer i;&lt;br /&gt;
string gsLatest;&lt;br /&gt;
integer DEBUG=0;&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llOwnerSay(&amp;quot;Update server online, &amp;quot;+(string)llGetKey()+&amp;quot;@lsl.secondlife.com&amp;quot;);&lt;br /&gt;
        llSetTimerEvent(20);&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(&amp;quot;Inv num: &amp;quot;+(string)llGetInventoryNumber(INVENTORY_OBJECT));}&lt;br /&gt;
        for(i=0;i&amp;lt;llGetInventoryNumber(INVENTORY_OBJECT);i++){&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(&amp;quot;Inv name: &amp;quot;+llGetInventoryName(INVENTORY_OBJECT,i));}&lt;br /&gt;
            glInv=glInv+[llGetInventoryName(INVENTORY_OBJECT,i)];&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(llList2CSV(glInv));}&lt;br /&gt;
        }&lt;br /&gt;
        gsLatest=llList2String(glInv,llGetListLength(glInv)-1);&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(&amp;quot;Latest: &amp;quot;+gsLatest);}&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer num){if(llDetectedKey(num-1)==llGetOwner()){&lt;br /&gt;
        glInv=[];&lt;br /&gt;
        for(i=0;i&amp;lt;llGetInventoryNumber(INVENTORY_OBJECT);i++){&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(&amp;quot;Inv name: &amp;quot;+llGetInventoryName(INVENTORY_OBJECT,i));}&lt;br /&gt;
            glInv=glInv+[llGetInventoryName(INVENTORY_OBJECT,i)];&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(llList2CSV(glInv));}&lt;br /&gt;
        }&lt;br /&gt;
        gsLatest=llList2String(glInv,llGetListLength(glInv)-1);&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(&amp;quot;Latest: &amp;quot;+gsLatest);}&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    timer(){&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_INVENTORY){&lt;br /&gt;
        glInv=[];&lt;br /&gt;
        for(i=0;i&amp;lt;llGetInventoryNumber(INVENTORY_OBJECT);i++){&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(&amp;quot;Inv name: &amp;quot;+llGetInventoryName(INVENTORY_OBJECT,i));}&lt;br /&gt;
            glInv=glInv+[llGetInventoryName(INVENTORY_OBJECT,i)];&lt;br /&gt;
            if(DEBUG==2){llOwnerSay(llList2CSV(glInv));}&lt;br /&gt;
        }&lt;br /&gt;
        gsLatest=llList2String(glInv,llGetListLength(glInv)-1);&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(&amp;quot;Latest: &amp;quot;+gsLatest);}&lt;br /&gt;
    }}&lt;br /&gt;
    email(string time,string address,string subject,string message,integer numleft){&lt;br /&gt;
        if(llGetSubString(address,-19,-1)==&amp;quot;@lsl.secondlife.com&amp;quot;)&lt;br /&gt;
        message=llDeleteSubString(message,0,llSubStringIndex(message,&amp;quot;\n\n&amp;quot;)+1);&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(subject+&amp;quot;, &amp;quot;+message);}&lt;br /&gt;
        if(subject!=gsLatest){&lt;br /&gt;
            llInstantMessage((key)message,&amp;quot;There is a new update, &amp;quot;+gsLatest+&amp;quot; is now available. Sending it now...&amp;quot;);&lt;br /&gt;
            llGiveInventory((key)message,gsLatest);&lt;br /&gt;
        }&lt;br /&gt;
        else{llInstantMessage((key)message,&amp;quot;There are no new updates. Please check again later.&amp;quot;);}&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Prim==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// will check for an update if &amp;quot;update&amp;quot; is heard over linkmessage num 100&lt;br /&gt;
// match the email address to the server&#039;s email address&lt;br /&gt;
string gsServer=&amp;quot;&amp;quot;;&lt;br /&gt;
integer giComm=100;&lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(num==giComm){if(mess==&amp;quot;update&amp;quot;){&lt;br /&gt;
        llOwnerSay(&amp;quot;Checking for update...&amp;quot;);llEmail(gsServer,llGetObjectName(),llGetOwner());&lt;br /&gt;
    }}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=278863</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=278863"/>
		<updated>2009-03-15T00:25:38Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:LM-New.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on.)&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;br /&gt;
*[[User:Cow Taurog/Update server|Update server]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Online_indicator&amp;diff=278853</id>
		<title>User:Cow Taurog/Online indicator</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Online_indicator&amp;diff=278853"/>
		<updated>2009-03-15T00:24:13Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: These scripts will make a simple online indicator that will turn red if the user is offline, yellow if they are online, and green if they are in the same sim. It will also show hovertext w...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These scripts will make a simple online indicator that will turn red if the user is offline, yellow if they are online, and green if they are in the same sim. It will also show hovertext when clicked. Place all of these scripts in the same prim, the particle script is optional. You can leave the settings as they are to use yourself, or you can use another person&#039;s key. If that person isn&#039;t in the sim when you start the script for the first time, you&#039;ll have to enter their name in the settings also. The base script will send a link message with &amp;quot;online&amp;quot;, &amp;quot;offline&amp;quot;, or &amp;quot;currentsim&amp;quot; as the string, and the user&#039;s name as the id, which also makes it useful for applications besides this.&lt;br /&gt;
&lt;br /&gt;
==Base==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer DEBUG=0; // 0-none, 1-minimal, 2-verbose&lt;br /&gt;
key gkUser=&amp;quot;&amp;quot;; // The UUID of the user you want to target, leave blank to use yourself&lt;br /&gt;
string gsName=&amp;quot;&amp;quot;; // Defined at startup from the key if blank, otherwise must belong to the key above&lt;br /&gt;
float gfPollFreq=90; // How often to check the target&#039;s status&lt;br /&gt;
integer giNum=39222; // The linkmessage channel to use to output data (offline, online, currentsim)&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    money(key id,integer amount){llInstantMessage(id,&amp;quot;Thanks, &amp;quot;+llKey2Name(id)+&amp;quot;.&amp;quot;);}&lt;br /&gt;
state_entry(){&lt;br /&gt;
        //llSetPayPrice(1,[1,5,10,100]);&lt;br /&gt;
        llAllowInventoryDrop(TRUE);&lt;br /&gt;
        if(gkUser==&amp;quot;&amp;quot;){gkUser=llGetOwner();}&lt;br /&gt;
        if(gsName==&amp;quot;&amp;quot;){gsName=llKey2Name(gkUser);}&lt;br /&gt;
        llSetTimerEvent(gfPollFreq);&lt;br /&gt;
        llRequestAgentData(gkUser,DATA_ONLINE);&lt;br /&gt;
    }&lt;br /&gt;
    timer(){&lt;br /&gt;
        llRequestAgentData(gkUser,DATA_ONLINE);&lt;br /&gt;
    }&lt;br /&gt;
    dataserver(key requested, string data){&lt;br /&gt;
        if(DEBUG==2){llOwnerSay(&amp;quot;Dataserver: &amp;quot;+data);}&lt;br /&gt;
        if(data==&amp;quot;0&amp;quot;){&lt;br /&gt;
            llMessageLinked(LINK_SET,giNum,&amp;quot;offline&amp;quot;,(key)gsName);&lt;br /&gt;
        }&lt;br /&gt;
        if(data==&amp;quot;1&amp;quot;){&lt;br /&gt;
            if(llGetAgentSize(gkUser)!=ZERO_VECTOR){&lt;br /&gt;
                llMessageLinked(LINK_SET,giNum,&amp;quot;currentsim&amp;quot;,(key)gsName);&lt;br /&gt;
            }&lt;br /&gt;
            else{&lt;br /&gt;
                llMessageLinked(LINK_SET,giNum,&amp;quot;online&amp;quot;,(key)gsName);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Text/color==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer DEBUG=0; // 0-none, 1-minimal, 2-verbose&lt;br /&gt;
integer giNum=39222; // The linkmessage channel to use to output data (offline, online, currentsim)&lt;br /&gt;
string gsMess;&lt;br /&gt;
string gsName;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
    changed(integer change){if(change&amp;amp;CHANGED_OWNER){llResetScript();}}&lt;br /&gt;
    state_entry(){llSetText(&amp;quot;&amp;quot;,&amp;lt;0,0,0&amp;gt;,1);}&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(num==giNum){&lt;br /&gt;
        gsMess=mess;&lt;br /&gt;
        gsName=(string)id;&lt;br /&gt;
        if(gsMess==&amp;quot;online&amp;quot;){llSetColor(&amp;lt;1,1,0&amp;gt;,ALL_SIDES);}&lt;br /&gt;
        if(gsMess==&amp;quot;offline&amp;quot;){llSetColor(&amp;lt;1,0,0&amp;gt;,ALL_SIDES);}&lt;br /&gt;
        if(gsMess==&amp;quot;currentsim&amp;quot;){llSetColor(&amp;lt;0,1,0&amp;gt;,ALL_SIDES);}&lt;br /&gt;
    }}&lt;br /&gt;
    touch_start(integer num){&lt;br /&gt;
        if(gsMess==&amp;quot;online&amp;quot;){llSetText(gsName+&amp;quot; is online, and in another sim&amp;quot;,&amp;lt;1,1,0&amp;gt;,1);}&lt;br /&gt;
        if(gsMess==&amp;quot;offline&amp;quot;){llSetText(gsName+&amp;quot; is offline&amp;quot;,&amp;lt;1,0,0&amp;gt;,1);}&lt;br /&gt;
        if(gsMess==&amp;quot;currentsim&amp;quot;){llSetText(gsName+&amp;quot; is online, and in this sim&amp;quot;,&amp;lt;0,1,0&amp;gt;,1);}&lt;br /&gt;
        llSleep(5);&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,&amp;lt;0,0,0&amp;gt;,1);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Particle==&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list glParticle;&lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;online&amp;quot;){state online;}&lt;br /&gt;
        if(mess==&amp;quot;currentsim&amp;quot;){state currentsim;}&lt;br /&gt;
        if(mess==&amp;quot;offline&amp;quot;){state offline;}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state online{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;online&amp;quot;){state online;}&lt;br /&gt;
        if(mess==&amp;quot;currentsim&amp;quot;){state currentsim;}&lt;br /&gt;
        if(mess==&amp;quot;offline&amp;quot;){state offline;}&lt;br /&gt;
        if(mess==&amp;quot;particleoff&amp;quot;){state particleoff;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glParticle=[&lt;br /&gt;
            PSYS_SRC_TEXTURE,(string)&amp;quot;&amp;quot;,&lt;br /&gt;
            PSYS_PART_START_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_COLOR,&amp;lt;1.0,1.0,0.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_ALPHA,1.0,&lt;br /&gt;
            PSYS_PART_END_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_COLOR,&amp;lt;1.0,1.0,0.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_ALPHA,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_PART_COUNT,1,&lt;br /&gt;
            PSYS_SRC_BURST_RATE,5.0,&lt;br /&gt;
            PSYS_PART_MAX_AGE,5.0,&lt;br /&gt;
            PSYS_SRC_MAX_AGE,0.0,&lt;br /&gt;
            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_DROP, &lt;br /&gt;
            PSYS_SRC_BURST_RADIUS,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_BEGIN,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_END,0.0,&lt;br /&gt;
            PSYS_SRC_OMEGA,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_ACCEL,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MIN,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MAX,1.0,&lt;br /&gt;
            PSYS_SRC_TARGET_KEY,llGetKey(),            &lt;br /&gt;
            PSYS_PART_FLAGS,(0|PSYS_PART_EMISSIVE_MASK)&lt;br /&gt;
        ];  &lt;br /&gt;
        llParticleSystem(glParticle);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state currentsim{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;online&amp;quot;){state online;}&lt;br /&gt;
        if(mess==&amp;quot;currentsim&amp;quot;){state currentsim;}&lt;br /&gt;
        if(mess==&amp;quot;offline&amp;quot;){state offline;}&lt;br /&gt;
        if(mess==&amp;quot;particleoff&amp;quot;){state particleoff;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glParticle=[&lt;br /&gt;
            PSYS_SRC_TEXTURE,(string)&amp;quot;&amp;quot;,&lt;br /&gt;
            PSYS_PART_START_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_COLOR,&amp;lt;0.0,1.0,0.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_ALPHA,1.0,&lt;br /&gt;
            PSYS_PART_END_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_COLOR,&amp;lt;0.0,1.0,0.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_ALPHA,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_PART_COUNT,1,&lt;br /&gt;
            PSYS_SRC_BURST_RATE,5.0,&lt;br /&gt;
            PSYS_PART_MAX_AGE,5.0,&lt;br /&gt;
            PSYS_SRC_MAX_AGE,0.0,&lt;br /&gt;
            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_DROP, &lt;br /&gt;
            PSYS_SRC_BURST_RADIUS,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_BEGIN,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_END,0.0,&lt;br /&gt;
            PSYS_SRC_OMEGA,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_ACCEL,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MIN,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MAX,1.0,&lt;br /&gt;
            PSYS_SRC_TARGET_KEY,llGetKey(),            &lt;br /&gt;
            PSYS_PART_FLAGS,(0|PSYS_PART_EMISSIVE_MASK)&lt;br /&gt;
        ];  &lt;br /&gt;
        llParticleSystem(glParticle);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state offline{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;online&amp;quot;){state online;}&lt;br /&gt;
        if(mess==&amp;quot;currentsim&amp;quot;){state currentsim;}&lt;br /&gt;
        if(mess==&amp;quot;offline&amp;quot;){state offline;}&lt;br /&gt;
        if(mess==&amp;quot;particleoff&amp;quot;){state particleoff;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        glParticle=[&lt;br /&gt;
            PSYS_SRC_TEXTURE,(string)&amp;quot;&amp;quot;,&lt;br /&gt;
            PSYS_PART_START_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_COLOR,&amp;lt;0.0,0.0,1.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_START_ALPHA,1.0,&lt;br /&gt;
            PSYS_PART_END_SCALE,&amp;lt;0.5,0.5,0.5&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_COLOR,&amp;lt;0.0,0.0,1.0&amp;gt;,&lt;br /&gt;
            PSYS_PART_END_ALPHA,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_PART_COUNT,1,&lt;br /&gt;
            PSYS_SRC_BURST_RATE,5.0,&lt;br /&gt;
            PSYS_PART_MAX_AGE,5.0,&lt;br /&gt;
            PSYS_SRC_MAX_AGE,0.0,&lt;br /&gt;
            PSYS_SRC_PATTERN,PSYS_SRC_PATTERN_DROP, &lt;br /&gt;
            PSYS_SRC_BURST_RADIUS,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_BEGIN,0.0,&lt;br /&gt;
            PSYS_SRC_ANGLE_END,0.0,&lt;br /&gt;
            PSYS_SRC_OMEGA,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_ACCEL,ZERO_VECTOR, &lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MIN,1.0,&lt;br /&gt;
            PSYS_SRC_BURST_SPEED_MAX,1.0,&lt;br /&gt;
            PSYS_SRC_TARGET_KEY,llGetKey(),            &lt;br /&gt;
            PSYS_PART_FLAGS,(0|PSYS_PART_EMISSIVE_MASK)&lt;br /&gt;
        ];  &lt;br /&gt;
        llParticleSystem(glParticle);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
state particleoff{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        if(mess==&amp;quot;online&amp;quot;){state online;}&lt;br /&gt;
        if(mess==&amp;quot;currentsim&amp;quot;){state currentsim;}&lt;br /&gt;
        if(mess==&amp;quot;offline&amp;quot;){state offline;}&lt;br /&gt;
        if(mess==&amp;quot;particleoff&amp;quot;){state particleoff;}&lt;br /&gt;
    }&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llParticleSystem([]);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=278843</id>
		<title>User:Cow Taurog</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog&amp;diff=278843"/>
		<updated>2009-03-15T00:15:58Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float: right; border: solid black 1px; margin: 1px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; style=&amp;quot;width: 300px; background: silver;&amp;quot;&lt;br /&gt;
| style=&amp;quot;width: 20px; height: 20px; background: #666666; text-align: center;&amp;quot; | [[Image:LM-New.png|20px]]&lt;br /&gt;
| style=&amp;quot;font-size: 8pt; padding: 4pt; line-height: 1.25em; color: black;&amp;quot; | &amp;lt;b&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://slurl.com/secondlife/Grendel/10/200/52/ The pasture, Grendel (10,200,52)]&amp;lt;/span&amp;gt;&amp;lt;/b&amp;gt;&lt;br /&gt;
|}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&lt;br /&gt;
I&#039;ll most likely be found working on the [[LSL_Portal|LSL portal]]. If you want to ask me something, [https://wiki.secondlife.com/w/index.php?title=User_talk:Cow_Taurog&amp;amp;action=edit&amp;amp;section=new leave me a message on my talk page], or IM me. &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;A few (all) people seem to find my style of writing scripts to be rather unorthodox, but I find through my own experience that it makes it easier to look at things and be able to tell what they are at a glance, and edit just one line of code without having to spend more time selecting than typing. I am the sole creator of any LSL script I have listed in my userspace unless otherwise noted, not including PHP or any other text, or any functions that have come from a script library or other source (proper attribution will be given, unless it is just a function). Any script that I have created is free to copy, modify, and yes, even sell. I might even help you out with any questions you have, but I won&#039;t tell you step by step how to do everything forever, that&#039;s what reference materials (and L$) are for. If you&#039;re using my scripts, or editing them in this wiki (feel free, I can always revert if I don&#039;t like it), keep these points in mind...&lt;br /&gt;
&lt;br /&gt;
* I don&#039;t use spaces, unless they are part of a string, or the declaration of a variable.&lt;br /&gt;
* I hardly ever use comments. I find them redundant, as the code already tells me what it does.&lt;br /&gt;
* I use the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Indent_style one true brace style], all that whitespace is annoying and unnecessary.&lt;br /&gt;
* I name variables as you would name an object in &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://en.wikipedia.org/wiki/Visual_Basic VB]. I think using all caps should only be reserved for constants. (glList for a  global list, gsString for a global string, lList for a local list, sString for a local string, gfFloat, grRotation, and so on.)&lt;br /&gt;
* I always use curly brackets to enclose any flow control statement (if, else, while, etc). Using tabs alone isn&#039;t enough, it might still not compile, makes syntax troubleshooting hard, and you have to add brackets if you add too much code inside them later anyways.&lt;br /&gt;
* &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&amp;lt;b&amp;gt;[http://en.wikipedia.org/wiki/Be_bold_in_editing_articles Be bold.]&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Scripts==&lt;br /&gt;
*[[User:Cow Taurog/Radio tuner|Radio tuner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim count|Prim count]]&lt;br /&gt;
*[[User:Cow Taurog/Language scanner|Language scanner]]&lt;br /&gt;
*[[User:Cow Taurog/Prim cloner|Prim cloner]]&lt;br /&gt;
*[[User:Cow Taurog/Sim map texture|Sim map texture]]&lt;br /&gt;
*[[User:Cow Taurog/Sky elevator|Sky elevator]]&lt;br /&gt;
*[[User:Cow Taurog/SMS|SMS]]&lt;br /&gt;
*[[User:Cow Taurog/Email-chat|Email-chat]]&lt;br /&gt;
*[[User:Cow Taurog/Name to key|Name to key]]&lt;br /&gt;
*[[User:Cow Taurog/Online indicator|Online indicator]]&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sky_elevator&amp;diff=278833</id>
		<title>User:Cow Taurog/Sky elevator</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Sky_elevator&amp;diff=278833"/>
		<updated>2009-03-14T23:36:36Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: This script makes a simple elevator that will warp between the ground and a certain height.  ==Sky elevator== Place this script in the main prim after all other objects have been placed in...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script makes a simple elevator that will warp between the ground and a certain height.&lt;br /&gt;
&lt;br /&gt;
==Sky elevator==&lt;br /&gt;
Place this script in the main prim after all other objects have been placed inside.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer giPlatChan=-6665; // Change both of these to something unique to each other&lt;br /&gt;
integer giDialog=55234;   //&lt;br /&gt;
vector gvStartPos;&lt;br /&gt;
vector gvDestPos;&lt;br /&gt;
key gkOwner;&lt;br /&gt;
string gsObjName=&amp;quot;Sky platform&amp;quot;;&lt;br /&gt;
list glBaseMenu=[&amp;quot;Set height&amp;quot;,&amp;quot;Move to height&amp;quot;,&amp;quot;Move to ground&amp;quot;,&amp;quot;Rez plat&amp;quot;,&amp;quot;Unrez plat&amp;quot;,&amp;quot;Unrez all&amp;quot;];&lt;br /&gt;
string gsBaseMenuText=&amp;quot;Pick an action&amp;quot;;&lt;br /&gt;
list glPlatMenu=[&amp;quot;10x10&amp;quot;,&amp;quot;20x20&amp;quot;,&amp;quot;30x30&amp;quot;];&lt;br /&gt;
string gsPlatMenu=&amp;quot;Pick a size&amp;quot;;&lt;br /&gt;
key gkDet;&lt;br /&gt;
list glHeightMenu=[&amp;quot;250&amp;quot;,&amp;quot;500&amp;quot;,&amp;quot;800&amp;quot;,&amp;quot;1000&amp;quot;,&amp;quot;1300&amp;quot;,&amp;quot;1600&amp;quot;,&amp;quot;2000&amp;quot;];&lt;br /&gt;
integer giListen0;&lt;br /&gt;
 &lt;br /&gt;
warpPos(vector destpos){if(destpos!=ZERO_VECTOR){&lt;br /&gt;
    integer jumps=(integer)(llVecDist(destpos,llGetPos())/10)+1;&lt;br /&gt;
    if(jumps&amp;gt;411){jumps=411;}list rules=[PRIM_POSITION,destpos];integer count=1;&lt;br /&gt;
    while((count=count&amp;lt;&amp;lt;1)&amp;lt;jumps){rules=(rules=[])+rules+rules;}&lt;br /&gt;
    llSetPrimitiveParams((rules=[])+rules+llList2List(rules,(count-jumps)&amp;lt;&amp;lt;1,count)); &lt;br /&gt;
    if(llVecDist(llGetPos(),destpos)&amp;gt;0.001){while(--jumps){llSetPos(destpos);}}&lt;br /&gt;
}}&lt;br /&gt;
basemenu(){llDialog(gkOwner,gsBaseMenuText,glBaseMenu,giDialog);}&lt;br /&gt;
heightmenu(){llDialog(gkOwner,&amp;quot;Pick a height&amp;quot;,glHeightMenu,giDialog);}&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        gkOwner=llGetOwner();&lt;br /&gt;
        gvStartPos=llGetPos();&lt;br /&gt;
        giListen0=llListen(giDialog,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
        heightmenu();&lt;br /&gt;
        state idle;&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
}&lt;br /&gt;
state idle{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        gkOwner=llGetOwner();&lt;br /&gt;
        gvStartPos=llGetPos();&lt;br /&gt;
        giListen0=llListen(giDialog,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    touch_start(integer n){&lt;br /&gt;
        basemenu();&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){&lt;br /&gt;
        if(mess==&amp;quot;Set height&amp;quot;){heightmenu();}&lt;br /&gt;
        if(mess==&amp;quot;Move to height&amp;quot;){state up;}&lt;br /&gt;
        if(mess==&amp;quot;Move to ground&amp;quot;){state down;}&lt;br /&gt;
        if(mess==&amp;quot;Rez plat&amp;quot;){llDialog(gkOwner,gsPlatMenu,glPlatMenu,giDialog);}&lt;br /&gt;
        if(mess==&amp;quot;Unrez plat&amp;quot;){llSay(giPlatChan,&amp;quot;unrez plat&amp;quot;);}&lt;br /&gt;
        if(mess==&amp;quot;Unrez all&amp;quot;){llRegionSay(giPlatChan,&amp;quot;unrez plat&amp;quot;);llDie();}&lt;br /&gt;
        if(mess==&amp;quot;150&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;250&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;500&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;650&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;800&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;1000&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;1300&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;1600&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;2000&amp;quot;){gvDestPos=&amp;lt;gvStartPos.x,gvStartPos.y,(float)mess&amp;gt;;basemenu();}&lt;br /&gt;
        if(mess==&amp;quot;10x10&amp;quot;){llRezAtRoot(mess+&amp;quot; platform&amp;quot;,llGetPos()+&amp;lt;0,0,-2&amp;gt;,ZERO_VECTOR,llGetRot(),0);}&lt;br /&gt;
        if(mess==&amp;quot;20x20&amp;quot;){llRezAtRoot(mess+&amp;quot; platform&amp;quot;,llGetPos()+&amp;lt;0,0,-2&amp;gt;,ZERO_VECTOR,llGetRot(),0);}&lt;br /&gt;
        if(mess==&amp;quot;30x30&amp;quot;){llRezAtRoot(mess+&amp;quot; platform&amp;quot;,llGetPos()+&amp;lt;0,0,-2&amp;gt;,ZERO_VECTOR,llGetRot(),0);}&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
state up{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        warpPos(gvDestPos);&lt;br /&gt;
        state idle;&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
}&lt;br /&gt;
state down{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        vector pp=llGetPos();&lt;br /&gt;
        vector dd=&amp;lt;pp.x,pp.y,llGround(&amp;lt;0,0,0.2&amp;gt;)&amp;gt;;&lt;br /&gt;
        warpPos(dd);&lt;br /&gt;
        state idle;&lt;br /&gt;
    }&lt;br /&gt;
    on_rez(integer param){llResetScript();}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Platform killer==&lt;br /&gt;
Place this script into the platform objects that go inside the elevator. They will die when the command is issued to kill them from the elevator.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer giChan=-6665; // Match this to the script above&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        llListen(-6665,&amp;quot;&amp;quot;,NULL_KEY,&amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string mess){&lt;br /&gt;
        if(mess==&amp;quot;unrez plat&amp;quot;){llDie();}&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Email-chat&amp;diff=278703</id>
		<title>User:Cow Taurog/Email-chat</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Email-chat&amp;diff=278703"/>
		<updated>2009-03-14T09:53:27Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: Drop both of these scripts into the same prim. Change the settings in the first script to match your taste. The prim will listen for chat on a given channel, and send any chat to the speci...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Drop both of these scripts into the same prim. Change the settings in the first script to match your taste. The prim will listen for chat on a given channel, and send any chat to the specified email address. It will also check for emails from the same address, and play them over public chat.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string gsOwnerName=&amp;quot;John Doe&amp;quot;; // REPLACE THIS WITH YOUR NAME&lt;br /&gt;
string gsOwner=&amp;quot;nobody@example.com&amp;quot;; // REPLACE THIS WITH YOUR EMAIL ADDRESS&lt;br /&gt;
integer giPubChan=8; // Will send chat heard on this channel over email (not zero, not negative)&lt;br /&gt;
float gfFreq=15; // How often in seconds to check for new email&lt;br /&gt;
integer giTruncate=0; // Chops off the signature of a received email, 0 to keep it or if you don&#039;t have one&lt;br /&gt;
integer giEmailComm=1102; // Linkmessage channel to use for the email wrapper, doesn&#039;t need to be changed&lt;br /&gt;
integer giHovertext=TRUE; // Show instructional hovertext (instructions on replying are also given over chat)&lt;br /&gt;
vector gvTextColor=&amp;lt;1,0.5,0&amp;gt;; // Hovertext color&lt;br /&gt;
integer DEBUG=0; // 0 - No debug, 1 - Minimal debug, 2 - Verbose debug&lt;br /&gt;
// Declarations&lt;br /&gt;
integer listen0;&lt;br /&gt;
integer giOutChan;&lt;br /&gt;
integer giLength;&lt;br /&gt;
string gsSay;&lt;br /&gt;
integer i;&lt;br /&gt;
integer giShout;&lt;br /&gt;
string gsOriginalName;&lt;br /&gt;
string gsHelpMess=&amp;quot;All commands are given in the subject line, (parameters) for commands are put in the body of the message. Only messages from the owner&#039;s email address are used, all others are ignored. \nInput (channel) - Sets the local chat channel used to send messages. \nSay - Incoming messages will be said over local chat. \nShout - Incoming messages will be shouted over local chat. \nOff - Disables the sending of messages using local chat. \nOn - Enables the sending of messages using local chat. \nReset - Resets the script.&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
sendemail(string address,string subject,string message){ // same format as llEmail, uses a wrapper script to eliminate the delay&lt;br /&gt;
    llMessageLinked(LINK_SET,giEmailComm,address+&amp;quot;|&amp;quot;+subject,message);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        string sMyEmail=(string)llGetKey()+&amp;quot;@lsl.secondlife.com&amp;quot;;&lt;br /&gt;
        gsOriginalName=llGetObjectName();&lt;br /&gt;
        if(giPubChan==0){giPubChan=9;}giPubChan=llAbs(giPubChan); // if channel is negative or zero, correct it&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;,ZERO_VECTOR,1);&lt;br /&gt;
        llOwnerSay(&amp;quot;Address: &amp;quot;+sMyEmail);&lt;br /&gt;
        llOwnerSay(&amp;quot;Type on /&amp;quot;+(string)giPubChan+&amp;quot; to send an email, Replies will be played over local chat.&amp;quot;);&lt;br /&gt;
        sendemail(gsOwner,llGetRegionName()+&amp;quot; email/chat relay online.&amp;quot;,&amp;quot;The &amp;quot;+llGetRegionName()+&amp;quot; email/chat relay is online. Send an email with &#039;Help&#039; as the subject line for more info. \n\n&amp;quot;+sMyEmail);&lt;br /&gt;
        state running;&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
state running{&lt;br /&gt;
    state_entry(){&lt;br /&gt;
        if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Running...&amp;quot;);}&lt;br /&gt;
        llSetTimerEvent(gfFreq);&lt;br /&gt;
        listen0=llListen(giPubChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
        if(giHovertext==TRUE){llSetText(&amp;quot;Type on /&amp;quot;+(string)giPubChan+&amp;quot; to send an email, Replies will be played over local chat.&amp;quot;,gvTextColor,1);}&lt;br /&gt;
    }&lt;br /&gt;
    timer(){llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);}&lt;br /&gt;
    listen(integer chan,string name,key id,string mess){if(chan==giPubChan){&lt;br /&gt;
         sendemail(gsOwner,llGetRegionName()+&amp;quot;, &amp;quot;+name,mess);&lt;br /&gt;
         llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    email(string time,string addy,string subj,string mess,integer left){&lt;br /&gt;
        if(subj==&amp;quot;Off&amp;quot;){&lt;br /&gt;
            llListenRemove(listen0);&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Not listening...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, ch. &amp;quot;+(string)giPubChan+&amp;quot; listen off.&amp;quot;,&amp;quot;The listen on ch. &amp;quot;+(string)giPubChan+&amp;quot; has been turned off.&amp;quot;);&lt;br /&gt;
            llSetText(&amp;quot;&amp;quot;,gvTextColor,1);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if(subj==&amp;quot;On&amp;quot;){&lt;br /&gt;
            listen0=llListen(giPubChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Listening...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, ch. &amp;quot;+(string)giPubChan+&amp;quot; listen on.&amp;quot;,&amp;quot;The listen on ch.  &amp;quot;+(string)giPubChan+&amp;quot; has been turned on.&amp;quot;);&lt;br /&gt;
            if(giHovertext==TRUE){llSetText(&amp;quot;Type on /&amp;quot;+(string)giPubChan+&amp;quot; to send an email. Replies will be played over local chat.&amp;quot;,gvTextColor,1);}&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if(subj==&amp;quot;Input&amp;quot;){&lt;br /&gt;
            if(mess==&amp;quot;0&amp;quot;){mess=&amp;quot;1&amp;quot;;}&lt;br /&gt;
            llListenRemove(listen0);&lt;br /&gt;
            giPubChan=(integer)mess;&lt;br /&gt;
            listen0=llListen(giPubChan,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Listen changed to ch. &amp;quot;+(string)giPubChan+&amp;quot;...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, now listening on &amp;quot;+(string)giPubChan,&amp;quot;The listen is now on on ch.  &amp;quot;+(string)giPubChan);&lt;br /&gt;
            if(giHovertext==TRUE){llSetText(&amp;quot;Type on /&amp;quot;+(string)giPubChan+&amp;quot; to send an email. Replies will be played over local chat.&amp;quot;,gvTextColor,1);}&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if(subj==&amp;quot;Reset&amp;quot;){&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Resetting...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, resetting.&amp;quot;,&amp;quot;Resetting...&amp;quot;);&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
        if(subj==&amp;quot;Say&amp;quot;){&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Now using say instead of shout...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, shout off.&amp;quot;,&amp;quot;Now using say instead of shout...&amp;quot;);&lt;br /&gt;
            giShout=FALSE;&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        if(subj==&amp;quot;Shout&amp;quot;){&lt;br /&gt;
            if(DEBUG&amp;gt;0){llOwnerSay(&amp;quot;Now using shout instead of say...&amp;quot;);}&lt;br /&gt;
            sendemail(gsOwner,llGetRegionName()+&amp;quot;, shout off.&amp;quot;,&amp;quot;Now using shout instead of say...&amp;quot;);&lt;br /&gt;
            giShout=TRUE;&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        else if(subj==&amp;quot;Help&amp;quot;){sendemail(gsOwner,llGetRegionName()+&amp;quot; email/chat relay help list.&amp;quot;,gsHelpMess);return;}&lt;br /&gt;
        else if(subj==&amp;quot;&#039;Help&#039;&amp;quot;){sendemail(gsOwner,llGetRegionName()+&amp;quot; email/chat relay help list.&amp;quot;,gsHelpMess);return;} // if they ask for &#039;help&#039;, not help...&lt;br /&gt;
        else if(subj==&amp;quot;&amp;quot;){&lt;br /&gt;
            giLength=llStringLength(mess);&lt;br /&gt;
            gsSay=llGetSubString(mess,0,(giLength-giTruncate));&lt;br /&gt;
            if(addy==gsOwner){llSetObjectName(gsOwnerName);}&lt;br /&gt;
            if(giShout==FALSE){llSay(0,gsSay+&amp;quot; (Reply on /&amp;quot;+(string)giPubChan+&amp;quot;.)&amp;quot;);}&lt;br /&gt;
            if(giShout==TRUE){llShout(0,gsSay+&amp;quot; (Reply on /&amp;quot;+(string)giPubChan+&amp;quot;.)&amp;quot;);}&lt;br /&gt;
            llSetObjectName(gsOriginalName);&lt;br /&gt;
            return;&lt;br /&gt;
        }&lt;br /&gt;
        else{sendemail(gsOwner,llGetRegionName()+&amp;quot;, error.&amp;quot;,&amp;quot;Invalid command given. The subject line is used only for sending commands, not for sending chat. Leave the subject blank to send a message over chat, or send an email with &#039;Help&#039; as the subject line.&amp;quot;);}&lt;br /&gt;
        llGetNextEmail(&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    }    &lt;br /&gt;
} &lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Email wrapper==&lt;br /&gt;
This script gets around that annoying 20 second delay by using a link message to send an email. The other script can carry on without waiting, but you can still only send an email every 20 seconds.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
integer giEmailComm=1102; // must match the main script, no need to change this unless you changed the other one&lt;br /&gt;
list glRaw;&lt;br /&gt;
string gsAddress;&lt;br /&gt;
string gsSubject;&lt;br /&gt;
string gsMessage;&lt;br /&gt;
//sendemail(string address,string subject,string message){llMessageLinked(LINK_SET,1102,address+&amp;quot;|&amp;quot;+subject,message);}&lt;br /&gt;
// ^ the function to use the wrapper in another script, format matches llEmail.&lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){&lt;br /&gt;
        glRaw=llParseString2List(mess,[&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
        gsAddress=llList2String(glRaw,0);&lt;br /&gt;
        gsSubject=llList2String(glRaw,1);&lt;br /&gt;
        gsMessage=(string)id;&lt;br /&gt;
        llEmail(gsAddress,gsSubject,gsMessage);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=278693</id>
		<title>User:Cow Taurog/Name to key</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Cow_Taurog/Name_to_key&amp;diff=278693"/>
		<updated>2009-03-14T08:44:45Z</updated>

		<summary type="html">&lt;p&gt;Cow Taurog: New page: This script will listen on any number/channel for a link message with &amp;quot;resolvename&amp;quot; as the string, and &amp;quot;User Name&amp;quot; (a real name of course, not User Name) as the id. It will then resolve th...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This script will listen on any number/channel for a link message with &amp;quot;resolvename&amp;quot; as the string, and &amp;quot;User Name&amp;quot; (a real name of course, not User Name) as the id. It will then resolve the UUID of that person using the &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;[http://www.alpha-fox.com/name2key alpha fox name to key service], and send a link message back on the same number/channel with &amp;quot;resolvedkey&amp;quot; as the string, and the user&#039;s UUID as the id. This service may not be around forever, and the script is subject to breakage should it no longer exist ([http://www.alpha-fox.com/donate/ donations] are good&amp;lt;/span&amp;gt;). &lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
string gsURL=&amp;quot;http://name2key.alpha-fox.com/?name=&amp;quot;;&lt;br /&gt;
key httpRequestId;&lt;br /&gt;
integer giComm;&lt;br /&gt;
 &lt;br /&gt;
default{&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvename&amp;quot;){&lt;br /&gt;
        giComm=num;&lt;br /&gt;
        httpRequestId=llHTTPRequest(gsURL+llEscapeURL(id),[],&amp;quot;&amp;quot;);&lt;br /&gt;
    }}&lt;br /&gt;
    http_response(key request_id,integer status,list metadata,string body){if(request_id==httpRequestId){&lt;br /&gt;
        llMessageLinked(LINK_SET,giComm,&amp;quot;resolvedkey&amp;quot;,llUnescapeURL(body));&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// example interface&lt;br /&gt;
default{&lt;br /&gt;
    touch_start(integer num){llMessageLinked(LINK_SET,1,&amp;quot;resolvename&amp;quot;,llDetectedName(num-1));&lt;br /&gt;
    link_message(integer sender,integer num,string mess,key id){if(mess==&amp;quot;resolvedkey&amp;quot;){llOwnerSay(id);}}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cow Taurog</name></author>
	</entry>
</feed>