
Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 235

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 274

Warning: Undefined array key "media" in /volume1/web/wiki/feed.php on line 385
<?xml version="1.0" encoding="UTF-8"?>
<!-- generator="FeedCreator 1.8" -->
<?xml-stylesheet href="http://live.spdns.org/wiki/lib/exe/css.php?s=feed" type="text/css"?>
<rss version="2.0">
    <channel xmlns:g="http://base.google.com/ns/1.0">
        <title>move IT Home Base</title>
        <description></description>
        <link>http://live.spdns.org/wiki/</link>
        <lastBuildDate>Sat, 04 Apr 2026 15:01:25 +0000</lastBuildDate>
        <generator>FeedCreator 1.8</generator>
        <image>
            <url>http://live.spdns.org/wiki/lib/tpl/peanutbutter2/images/favicon.ico</url>
            <title>move IT Home Base</title>
            <link>http://live.spdns.org/wiki/</link>
        </image>
        <item>
            <title>Elevator</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/elevator?do=revisions&amp;rev=1575021519</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;elevator&quot;&gt;Elevator&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:1,&amp;quot;range&amp;quot;:&amp;quot;1-22&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit2&quot; id=&quot;elevator_main_script&quot;&gt;Elevator Main Script&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// From the book:
//
// Scripting Recipes for Second Life
// by Jeff Heaton (Encog Dod in SL)
// ISBN: 160439000X
// Copyright 2007 by Heaton Research, Inc.
//
// This script may be freely copied and modified so long as this header
// remains unmodified.
//
// For more information about this book visit the following web site:
//
// http://www.heatonresearch.com/articles/series/22/

integer CHANNEL = 42; // dialog channel
list MENU_MAIN = [&amp;quot;Floor 1&amp;quot;, &amp;quot;Floor 2&amp;quot;, &amp;quot;Floor 3&amp;quot;, &amp;quot;Floor 4&amp;quot;, &amp;quot;Floor 5&amp;quot;, &amp;quot;Floor 6&amp;quot;, &amp;quot;Floor 7&amp;quot;, &amp;quot;Floor 8&amp;quot;, &amp;quot;Floor 9&amp;quot;, &amp;quot;Floor 10&amp;quot;,&amp;quot;Roof&amp;quot;]; // the main menu

float BOTTOM = 22.260;
float FLOOR_HEIGHT = 10;
float SPEED = 2;
float target;


default
{
    state_entry()
    {
        llListen(CHANNEL, &amp;quot;&amp;quot;, NULL_KEY, &amp;quot;&amp;quot;); // listen for dialog answers (from multiple users)
        llSitTarget(&amp;lt;0,-0.5,0.5&amp;gt;, llEuler2Rot(&amp;lt;0,0,-90&amp;gt;) );
        llSetText(&amp;quot;Sit Here to Ride Elevator&amp;quot;,&amp;lt;0,0,0&amp;gt;,1.0);
        target = BOTTOM;
    }
   
    listen(integer channel, string name, key id, string message)
    {
        integer idx = llListFindList(MENU_MAIN, [message]);
        if( idx!=-1 )
        {
            llSay(0,&amp;quot;Elevator heading to &amp;quot; + message + &amp;quot;.&amp;quot; );
            target = BOTTOM + (idx*10);
            state moving;
        }
    }

    changed(integer Change)
    {
        llDialog(llAvatarOnSitTarget(), &amp;quot;Where to?&amp;quot;, MENU_MAIN, CHANNEL);
    }
   
}

state moving
{
   
   
    state_entry()
    {
        llSetTimerEvent(0.1);
    }
   
    timer()
    {
        vector pos = llGetPos();
       
        if( pos.z!=target )
        {
            if( pos.z&amp;gt;target )
            {
                pos.z = pos.z - SPEED;
            }
            else
            {
                pos.z = pos.z + SPEED;
            }
        }
       
        if(  llFabs(pos.z - target) &amp;lt; SPEED )
        {
            pos.z = target;
            llSetTimerEvent(0);
            llSetPos(pos);
            llSay(0,&amp;quot;Elevator has reached its target.&amp;quot; );
            state default;
        }   
       
        llSetPos(pos);
       
    }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator Main Script&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator_main_script&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:0,&amp;quot;secid&amp;quot;:2,&amp;quot;range&amp;quot;:&amp;quot;23-2117&amp;quot;} --&gt;
&lt;h3 class=&quot;sectionedit3&quot; id=&quot;elevator_call_button&quot;&gt;Elevator Call Button&lt;/h3&gt;
&lt;div class=&quot;level3&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;integer CHANNEL = 42; // dialog channel

default
{
    state_entry()
    {
        llSetText(&amp;quot;Touch to Call Elevator&amp;quot;,&amp;lt;0,0,0&amp;gt;,1.0);
    }

    touch_start(integer total_number)
    {
               
        llRegionSay(42, &amp;quot;Floor 1&amp;quot;);
    }
}&lt;/pre&gt;

&lt;/div&gt;
&lt;!-- EDIT{&amp;quot;target&amp;quot;:&amp;quot;section&amp;quot;,&amp;quot;name&amp;quot;:&amp;quot;Elevator Call Button&amp;quot;,&amp;quot;hid&amp;quot;:&amp;quot;elevator_call_button&amp;quot;,&amp;quot;codeblockOffset&amp;quot;:1,&amp;quot;secid&amp;quot;:3,&amp;quot;range&amp;quot;:&amp;quot;2118-&amp;quot;} --&gt;</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:39 +0000</pubDate>
        </item>
        <item>
            <title>Simple Radar</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/simple_radar?do=revisions&amp;rev=1575021523</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;simple_radar&quot;&gt;Simple Radar&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;//Sable Till - Radar/scannar script.
//You can get a copy of the license this script is under at http://www.gnu.org/copyleft/gpl.html
//Copyright (C) 2006 Sable Till

//This program is free software; you can redistribute it and/or
//modify it under the terms of the GNU General Public License
//as published by the Free Software Foundation; either version 2
//of the License, or (at your option) any later version.

//This program is distributed in the hope that it will be useful,
//but WITHOUT ANY WARRANTY; without even the implied warranty of
//MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
//GNU General Public License for more details.

//You should have received a copy of the GNU General Public License
//along with this program; if not, write to the Free Software
//Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.

string status=&amp;quot;none&amp;quot;;
list people;
integer maxScanDistance;
vector color = &amp;lt;0,1,1&amp;gt;;
integer maxPeople = 8;
integer scanType = AGENT;
integer scanFreq=1;

integer count(string name) {
integer i = llListFindList(people, [name]);
if(i ==-1){
people+=[name, 0];
return 0;
} else {
integer count = llList2Integer(people, i+1);
people=llListReplaceList(people, [count+scanFreq], i+1, i+1);
return count;
}
}

//calculate time strings with proper units that are sensibly rounded
string time(integer cnt) {
if(cnt&amp;gt;3600) {
return (string)(cnt/3600)+&amp;quot;hr &amp;quot; + (string)((cnt%3600)/60) +&amp;quot;min&amp;quot;;
}else {
if(cnt&amp;gt;60) {
return (string)(cnt/60)+&amp;quot;min&amp;quot;;
} else {
return (string)cnt+&amp;quot;s&amp;quot;;
}
}
}

//I&amp;#039;m pretty sure there&amp;#039;s a better way to do this but I&amp;#039;m trying to calculate the angle between
//North and the target so I can work out which direction it is in.
float getAngle(vector me, vector target) {
float hyp = llVecDist(me, target);
float yDiff = target.y-me.y;
float xDiff = target.x-me.x;
float angle = llSin(yDiff/hyp);
if(xDiff&amp;gt;0 &amp;amp;&amp;amp; yDiff&amp;gt;0) {
return angle*RAD_TO_DEG;
}
if(xDiff&amp;gt;0 &amp;amp;&amp;amp; yDiff&amp;lt;0) {
return 90-angle*RAD_TO_DEG;
}
if(xDiff&amp;lt;0 &amp;amp;&amp;amp; yDiff&amp;gt;0) {
return angle*RAD_TO_DEG+270;
}
if(xDiff&amp;lt;0 &amp;amp;&amp;amp; yDiff&amp;lt;0) {
return angle*RAD_TO_DEG + 270;
}
return angle*RAD_TO_DEG;
}

default
{
state_entry()
{
llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;,scanType, 96, PI, scanFreq);
llSetTimerEvent(6);
}

sensor(integer num_detected) {
people=[];
string result;
integer n=-1;
integer distance=0;
integer detDist;
string name;

vector pos = llGetPos();
//get the dist, name and direction of everyone we just scanned.
for(n=0;n&amp;lt;num_detected &amp;amp;&amp;amp; n&amp;lt;maxPeople;++n) {
vector detPos = llDetectedPos(n);
detDist = (integer)llVecDist(pos, detPos);
float angle = getAngle(llGetPos(), detPos);
name = llKey2Name(llDetectedKey(n));
if(detDist&amp;lt;96) {
people+=detDist;
people+=name;
people+=angle;
}
}
//sort the strided list
people = llListSort(people, 3, TRUE);
//construct settext
num_detected = llGetListLength(people)/3;
for(n=0;n&amp;lt;num_detected;++n) {
detDist=llList2Integer(people, n*3);
name = llList2String(people, n*3+1);
float dir = llList2Float(people, n*3+2);
if(detDist&amp;gt;20 &amp;amp;&amp;amp; distance&amp;lt;=20) {
result+=&amp;quot;&amp;lt;- Chat Range Limit -&amp;gt;\n&amp;quot;;
}
result+=name;
if(detDist&amp;lt;20) {
integer cnt = count(name);
result+=&amp;quot; [&amp;quot;+time(cnt)+&amp;quot;]&amp;quot;;
}
result+=&amp;quot; [&amp;quot;+(string)detDist+&amp;quot;m]&amp;quot;;

if(dir &amp;lt; 0 || dir &amp;gt; 360) {
llOwnerSay(&amp;quot;Error:&amp;quot;+(string)dir+&amp;quot;:&amp;quot;+name);
}
//determine which compass direction they are in.
if(dir &amp;lt;= 22.5) {
result+=&amp;quot; N\n&amp;quot;;
} else {
if(dir &amp;gt; 22.5 &amp;amp;&amp;amp; dir &amp;lt;= 67.5) {
result+=&amp;quot; NE\n&amp;quot;;
} else {
if(dir &amp;gt; 67.5 &amp;amp;&amp;amp; dir &amp;lt;= 112.5) {
result+=&amp;quot; E\n&amp;quot;;
} else {
if(dir &amp;gt; 112.5 &amp;amp;&amp;amp; dir &amp;lt;= 157.5) {
result+=&amp;quot; SE\n&amp;quot;;
} else {
if(dir &amp;gt; 157.5 &amp;amp;&amp;amp; dir &amp;lt;= 202.5) {
result+=&amp;quot; S\n&amp;quot;;
} else {
if(dir &amp;gt; 202.5 &amp;amp;&amp;amp; dir &amp;lt;= 247.5) {
result+=&amp;quot; SW\n&amp;quot;;
} else {
if(dir &amp;gt; 247.5 &amp;amp;&amp;amp; dir &amp;lt;= 292.5) {
result+=&amp;quot; W\n&amp;quot;;
} else {
if(dir &amp;gt; 292.5 &amp;amp;&amp;amp; dir &amp;lt;= 337.5) {
result+=&amp;quot; NW\n&amp;quot;;
} else {
if(dir &amp;gt; 337.5 &amp;amp;&amp;amp; dir &amp;lt; 360) {
result+=&amp;quot; N\n&amp;quot;;
}
}
}

}}}}}}

distance=detDist;
}


//If we detected more (or the same number of) people as maxPeople then shrink down the scan distance to just
//the distance to the furthest one. Otherwise increment it a bit in case there are people further out.
if(num_detected&amp;gt;=maxPeople) {
maxScanDistance=distance+10;
} else {
maxScanDistance+=10;
}

result+=&amp;quot;\nStatus:&amp;quot;+status;
//adjust max people based on the length of result
if(llStringLength(result)&amp;gt;254) {
maxPeople--;
llOwnerSay(&amp;quot;Length is &amp;quot;+(string)llStringLength(result) +
&amp;quot; Decrementing maxPeople to &amp;quot;+(string)maxPeople);
} else {
if(llStringLength(result)&amp;lt;200 &amp;amp;&amp;amp; num_detected&amp;gt;maxPeople) {
maxPeople++;
llOwnerSay(&amp;quot;Length is &amp;quot;+(string)llStringLength(result) +
&amp;quot; Incrementing maxPeople to &amp;quot;+(string)maxPeople);
}
}
llSetText(result, color, 1);
}

no_sensor() {
llSetText(&amp;quot;Status:&amp;quot;+status, color, 1);
maxScanDistance+=10;
llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, scanType, maxScanDistance, PI, scanFreq);
}

//all we do here is check the sims fps and dilation and tone down our scanning if necessary.
timer() {
float fps = llGetRegionFPS();
float timeDilation = llGetRegionTimeDilation();

integer scanDistance;
if(fps&amp;lt;35 || timeDilation &amp;lt;0.9) {
if(maxScanDistance&amp;gt;30) {
scanDistance=30;
}
scanFreq=240;
status = &amp;quot;poor&amp;quot;;
llSetTimerEvent(240);
color=&amp;lt;1,0,0&amp;gt;;
} else
{
if(fps&amp;lt;40 || timeDilation&amp;lt;0.95) {
if(maxScanDistance&amp;gt;64) {
scanDistance=64;
} else {
scanDistance=maxScanDistance;
}
scanFreq=30;
status = &amp;quot;ok&amp;quot;;
llSetTimerEvent(120);
color=&amp;lt;1,1,0&amp;gt;;
} else
{
if(maxScanDistance&amp;gt;96) {
scanDistance=96;
} else {
scanDistance=maxScanDistance;
}
scanFreq=1;
llSetTimerEvent(60);
status = &amp;quot;good&amp;quot;;
color=&amp;lt;0,1,1&amp;gt;;
}}
llSensorRepeat(&amp;quot;&amp;quot;, &amp;quot;&amp;quot;, scanType, scanDistance, PI, scanFreq);
}

}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:43 +0000</pubDate>
        </item>
        <item>
            <title>Teleport</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/teleport?do=revisions&amp;rev=1575021524</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;teleport&quot;&gt;Teleport&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;//Teleport v2.02 by Pablo Pharmanaut
//based on code by Cubey Terra

integer totalPos = 4;                    //This integer should equal total number of positions
integer currentPos = 1;
string currentpos;

vector vPos1 = &amp;lt;117,152,22&amp;gt;;             //These are vectors for the positions to
vector vPos2 = &amp;lt;81,23, 103&amp;gt;;             //which you wish to teleport
vector vPos3 = &amp;lt;83, 49.00, 29&amp;gt;;
vector vPos4 = &amp;lt;67,120,22&amp;gt;;
//vector vPos5 = &amp;lt;143.3,238.8,50.2&amp;gt;;

string sPos1 = &amp;quot;Position One&amp;quot;;           //name of positions, if desired.  This helps
string sPos2 = &amp;quot;Position Two&amp;quot;;           //you to know where you are going!
string sPos3 = &amp;quot;Position Three&amp;quot;;
string sPos4 = &amp;quot;Position Four&amp;quot;;
//string sPos5 = &amp;quot;Position Five&amp;quot;;

vector currentvPos;

setPos()
{
    if (currentPos == 1)
    {
        currentpos = sPos1;
        currentvPos = vPos1;
    }
    else if (currentPos == 2)             
    {                                     
        currentpos = sPos2;               
        currentvPos = vPos2;             
    }                                     
    else if (currentPos == 3)
    {
        currentpos = sPos3;
        currentvPos = vPos3;
    }
    else if (currentPos == 4)
    {
        currentpos = sPos4;
        currentvPos = vPos4;
    }
//  else if (currentPos == 5)
//  {
//      currentpos = sPos5;
//      currentvPos = vPos5;
//  }
   
    //add else if section here with higher currentPos integer to add TP destinations.
    //Don&amp;#039;t forget to increase totalPos integer at top of script

    vector pos = llGetPos();
    llSetText(&amp;quot;Teleport to &amp;quot;+currentpos+&amp;quot;\nTouch me to change destination&amp;quot;,&amp;lt;1,1,1&amp;gt;,1.0);
    vector offset = currentvPos - pos;
    llSitTarget(offset, ZERO_ROTATION);
}

default
{
    state_entry()
    {
        llSetSitText(&amp;quot;Teleport&amp;quot;);            //This changes HUD display from &amp;quot;sit&amp;quot; to &amp;quot;Teleport&amp;quot;
    }
    touch_start(integer total_number)
    {
        currentPos += 1;
        if (currentPos &amp;gt; totalPos) currentPos = 1;
        setPos();
    }
    changed(integer change)
    {
        if ((change &amp;amp; CHANGED_LINK)==CHANGED_LINK)
        {
            if (llAvatarOnSitTarget() != NULL_KEY)
            {
                llUnSit(llAvatarOnSitTarget());
            }
        }
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:44 +0000</pubDate>
        </item>
        <item>
            <title>Fire Particle</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/fire_particle?do=revisions&amp;rev=1575021520</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;fire_particle&quot;&gt;Fire Particle&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;//// &amp;quot;Fire&amp;quot; PARTICLE TEMPLATE v1 - by Jopsy Pendragon - 4/8/2008
//// You are free to use this script as you please, so long as you include this line:
//** The original &amp;#039;free&amp;#039; version of this script came from THE PARTICLE LABORATORY. **//

// SETUP:  Drop one optional particle texture and this script into a prim.
// Particles should start automatically. (Reset) the script if you insert a
// particle texture later on.  Add one or more CONTROLLER TEMPLATES to any
// prims in the linked object to control when particles turn ON and OFF.

// Customize the particle_parameter values below to create your unique 
// particle effect and click SAVE.  Values are explained along with their
// min/max and default values further down in this script.


string  CONTROLLER_ID = &amp;quot;A&amp;quot;; // See comments at end regarding CONTROLLERS.
integer AUTO_START = TRUE;   // Optionally FALSE only if using CONTROLLERS.

list particle_parameters=[]; // stores your custom particle effect, defined below.
list target_parameters=[]; // remembers targets found using TARGET TEMPLATE scripts.

default {
    state_entry() {
        particle_parameters = [  // start of particle settings
           // Texture Parameters:
           PSYS_SRC_TEXTURE, llGetInventoryName(INVENTORY_TEXTURE, 0), 
           PSYS_PART_START_SCALE, &amp;lt;.4,.4,FALSE&amp;gt;,  PSYS_PART_END_SCALE, &amp;lt;.5,.5, FALSE&amp;gt;, 
           PSYS_PART_START_COLOR, &amp;lt;1,1,1&amp;gt;,    PSYS_PART_END_COLOR, &amp;lt;.4,.1,0&amp;gt;, 
           PSYS_PART_START_ALPHA, (float).8,            PSYS_PART_END_ALPHA, (float).0,     
         
           // Production Parameters:
           PSYS_SRC_BURST_PART_COUNT, (integer)1, 
           PSYS_SRC_BURST_RATE, (float) 0.0,  
           PSYS_PART_MAX_AGE, (float)1.5, 
           PSYS_SRC_MAX_AGE,(float) 0.0,  
        
           // Placement Parameters:
           PSYS_SRC_PATTERN, (integer)2, // 1=DROP, 2=EXPLODE, 4=ANGLE, 8=ANGLE_CONE,
           
           // Placement Parameters (for any non-DROP pattern):
           PSYS_SRC_BURST_SPEED_MIN, (float).1,   PSYS_SRC_BURST_SPEED_MAX, (float).3, 
        // PSYS_SRC_BURST_RADIUS, 0.0,
        
           // Placement Parameters (only for ANGLE &amp;amp; CONE patterns):
           PSYS_SRC_ANGLE_BEGIN, (float) .03*PI,     PSYS_SRC_ANGLE_END, (float)0.00*PI,  
        // PSYS_SRC_OMEGA, &amp;lt;0,0,0&amp;gt;, 
        
           // After-Effect &amp;amp; Influence Parameters:
           PSYS_SRC_ACCEL, &amp;lt;0.0,0.0,1.5&amp;gt;,  
        // PSYS_SRC_TARGET_KEY,      llGetLinkKey(llGetLinkNum() + 1),       
              
           PSYS_PART_FLAGS, (integer)( 0         // Texture Options:     
                                | PSYS_PART_INTERP_COLOR_MASK   
                                | PSYS_PART_INTERP_SCALE_MASK   
                                | PSYS_PART_EMISSIVE_MASK   
                                | PSYS_PART_FOLLOW_VELOCITY_MASK
                                                  // After-effect &amp;amp; Influence Options:
                                | PSYS_PART_WIND_MASK            
                                | PSYS_PART_BOUNCE_MASK          
                             // | PSYS_PART_FOLLOW_SRC_MASK     
                             // | PSYS_PART_TARGET_POS_MASK     
                             // | PSYS_PART_TARGET_LINEAR_MASK   
                            ) 
            //end of particle settings                     
        ];
        
        if ( AUTO_START ) llParticleSystem( particle_parameters );
        
    }
    
    link_message( integer sibling, integer num, string mesg, key target_key ) {
        if ( mesg != CONTROLLER_ID ) { // this message isn&amp;#039;t for me.  Bail out.
            return;
        } else if ( num == 0 ) { // Message says to turn particles OFF:
            llParticleSystem( [ ] );
        } else if ( num == 1 ) { // Message says to turn particles ON:
            llParticleSystem( particle_parameters + target_parameters );
        } else if ( num == 2 ) { // Turn on, and remember and use the key sent us as a target:
            target_parameters = [ PSYS_SRC_TARGET_KEY, target_key ];
            llParticleSystem( particle_parameters + target_parameters );
        } else { // bad instruction number
            // do nothing.
        }            
    }
        
}


//============================= About Parameters =============================
// There are 22-ish NAMED attributes that affect a particle display.
// To customize a display you give each a VALUE.
// For example: PSYS_PART_START_COLOR is a named attribute,
// and &amp;lt;1.0, 0.5, 0.0&amp;gt; is a color VALUE (orange, in this case).
// 
// As long as your &amp;#039;names&amp;#039; and &amp;#039;values&amp;#039; are paired up properly, they can
// be in any order!  Any you omit a pair, it reverts to a default value.

//============================= Texture Parameters =============================
//
// TEXTURE, can be an &amp;quot;Asset UUID&amp;quot; key copied from a texture 
//          that you have full permissions to, or the name of
//          a texture in the prim&amp;#039;s inventory.
//
// SCALE, (size) 0.0 to 4.0 meters wide, by 0.0 to 4.0 meters tall. (default 1x1)
//          Textures are FLAT, so the &amp;#039;z&amp;#039; part of the vector is ignored.
//          Values smaller than 0.04x0.04 may not get rendered at all.
//          Tiny particles vanish if the viewer is not near them.
//
// BEGIN_SCALE sets particle start size.  
// END_SCALE (end size) is ignored, if the INTERP_SCALE_MASK option is disabled.
//
// COLOR, &amp;lt; RED, GREEN, BLUE &amp;gt; from &amp;lt;0.00,0.00,0.00&amp;gt; (black) to &amp;lt;1.00,1.00,1.00&amp;gt; (white/default)
// ALPHA, 1.0 = 100% visible(default), 0.0 = invisible.  Less than 0.1 might not get seen.
// START_COLOR and START_ALPHA set the color and transparency of newly created particles. 
// END_COLOR and END_ALPHA are ignored, if the INTERP_COLOR_MASK option is disabled.
         
         
//============================= Production Parameters =============================
//
// BURST_PART_COUNT: quantity of particles per burst, 1 to 4096 (default 1), 
//
// BURST_RATE: seconds to delay between particle bursts. 0.0 to 30.0 (default 0.1)
//
// PART_MAX_AGE: particle lifespan in seconds, 0.00 to 30.0 (default=10.0)
//               PART_MAX_AGE less than 0.5 might not be visible.
//
// The default total number of particles that can be seen is 4096, if one or more 
// emitters try to create more than that, many will not be seen, and it may cause
// viewer lag.  Use as few particles as you can for your effect:
// AGE/RATE * COUNT will tell you approximately how many particles your emitter creates.
//
// SRC_MAX_AGE: emitter auto shut-off timer. 1.0 to 60.0 seconds. 0.0 = never stop. (default)


//============================= Placement Parameters =============================
//                
// PATTERN:   
//      DROP, ignores all other placement settings.
//      EXPLODE, spray particles in all directions
//      ANGLE, sprays a flat &amp;quot;fan&amp;quot; shape defined by ANGLE_BEGIN and END values
//      CONE, sprays &amp;quot;ring&amp;quot; or &amp;quot;cone&amp;quot; shapes defined by ANGLE_BEGIN and END values
//
// RADIUS:  0.0 to 50.0?  distance from emitter to create new particles
//      (RADIUS is disabled with DROP pattern and the FOLLOW_SRC &amp;amp; TARGET_LINEAR options)
//        
// SPEED: 0.00 to 50.0?  Sets min/max starting velocities for non-drop patterns. (default: 1.0)
//        
// ANGLE_BEGIN &amp;amp; END:  0.00*PI (up) to 1.00*PI (down),  (Only for ANGLE &amp;amp; CONE patterns)
//       (Values work much like the Sphere-prim&amp;#039;s DIMPLE attributes.) (defaults: 0.0)
//
// OMEGA: &amp;lt;x,y,z&amp;gt; Sets how much to rotate angle/cone spray direction after
//                every burst. 0.0 to PI?  (default: &amp;lt;0,0,0&amp;gt;)

//======================== After-Effects &amp;amp; Influence Parameters ================
//
// ACCEL, x,y,z 0.0 to 50.0?  sets a constant force, (affects all patterns)
//          Causes particles to drift up/down or in a compass direction.
//          Use ACCEL to create the illusion of (anti-)gravity or a directional wind.
//          (ineffective with TARGET_LINEAR option)
//       
// TARGET_KEY,  &amp;quot;key&amp;quot;, (requires the TARGET option be enabled).  
//       &amp;quot;key&amp;quot; can be a variety of many different things:
         // llGetOwner()
         // llGetKey() target self 
         // llGetLinkKey(1) target parent prim
         // llGetLinkKey(llGetLinkNum() + 1) target next prim in link set 
         //
         // WARNING: New copies of objects get new keys, you can&amp;#039;t simply paste
         // a prim&amp;#039;s key into your script and expect it to always work.  Visit
         // the Particle Laboratory&amp;#039;s section on TARGETS for a variety of ways
         // to dynamically find your target&amp;#039;s key. There are different &amp;#039;best ways&amp;#039;
         // depending on if your target is linked to your emitter or not.


//============================= About Options =============================
//    
// Each option may be ON/ENABLED (no leading // )
// or OFF/DISABLED (by putting a // in front of it.)
// Options are combined together in a special way, (using the | symbol).
// This creates one single Parameter for PSYS_PART_FLAGS.

              
//============================= Texture Options =============================
//
// EMISSIVE: identical to &amp;quot;full bright&amp;quot; setting on prims     
//   
// FOLLOW_VELOCITY: particle texture &amp;#039;tilts&amp;#039; towards the direction it&amp;#039;s moving
//
// INTERP_COLOR: causes particle COLOR and ALPHA(transparency) to change over it&amp;#039;s lifespan
//
// INTERP_SCALE: causes particle SCALE(size) to change over it&amp;#039;s lifespan


//======================== After-Effects &amp;amp; Influences Options ================
//
// BOUNCE:  particles bounce up from the z-altitude of emitter, and cannot fall below it.
//
// WIND: the sim&amp;#039;s wind will push particles around
//
// FOLLOW_SRC: makes particles move (but not rotate) if their emitter moves, (disables RADIUS)
//
// TARGET_POS: causes particles to arrive at a some target at end of of their lifespan.
//
// TARGET_LINEAR: forces particles to form into an even line from emitter to target
//                and forces a DROP-like pattern and disables effects of WIND and ACCEL



//========================================================================
//======================== USING CONTROL TEMPLATES =======================
//
// Want to control when your particles turn ON and OFF?   You can!
// 
// Drop one (or more) of the CONTROL TEMPLATES from the particle laboratory
// into your object containing this script.  That&amp;#039;s it!

// Your controls should be effective immediately.  (Some controllers can be
// adjusted and tuned, open them and read the USAGE notes to see.)
//
// One control template can control several particle templates in the
// same object.   (keep in mind that each prim can only have ONE
// particle effect active at a time).
//
// The &amp;#039;particle_effect_name&amp;#039; value must be the same in both the control
// and particle template to work.  You can change that value and have
// a controller for one effect, and a different controller for a different
// effect in the same object.
//


//======================================== END ===============================default&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:40 +0000</pubDate>
        </item>
        <item>
            <title>Invisible Prim 2</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/invisible_prim_2?do=revisions&amp;rev=1575021521</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;invisible_prim_2&quot;&gt;Invisible Prim 2&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;// Invisible Prim Public v1.1b
// last updated Mar. 22, 2006

init()
{
llSetPrimitiveParams([PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_NONE, PRIM_BUMP_BRIGHT]);
llOffsetTexture(0.468, 0.0, ALL_SIDES);
llScaleTexture(0.0, 0.0, ALL_SIDES);
llSetAlpha(1.0, ALL_SIDES);
}

refresh()
{
llSetTexture(&amp;quot;38b86f85-2575-52a9-a531-23108d8da837&amp;quot;, ALL_SIDES);
llSleep(30);
llSetTexture(&amp;quot;e97cf410-8e61-7005-ec06-629eba4cd1fb&amp;quot;, ALL_SIDES);
}

default
{
state_entry()
{
init();
llSetTimerEvent(5);
}

on_rez(integer start_param)
{
init();
}

timer()
{
if ((integer)llGetWallclock() % 60 &amp;lt; 10)
{
refresh();
}
}
} &lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:41 +0000</pubDate>
        </item>
        <item>
            <title>Pool Water</title>
            <link>http://live.spdns.org/wiki/archiv/opensim/downloads/scripts/pool_water?do=revisions&amp;rev=1575021522</link>
            <description>
&lt;h2 class=&quot;sectionedit1&quot; id=&quot;pool_water&quot;&gt;Pool Water&lt;/h2&gt;
&lt;div class=&quot;level2&quot;&gt;
&lt;pre class=&quot;code&quot;&gt;default
{
    state_entry()
    {
        llSetAlpha(0.50, ALL_SIDES);
        llSetTexture(&amp;quot;00000000-0000-2222-3333-100000001041&amp;quot;, ALL_SIDES);
        llSetTextureAnim(ANIM_ON | SMOOTH | LOOP, ALL_SIDES,1,1,1.0, 1,0.1);
    }
}&lt;/pre&gt;

&lt;/div&gt;
</description>
            <author>anonymous@undisclosed.example.com (Anonymous)</author>
        <category>archiv:opensim:downloads:scripts</category>
            <pubDate>Fri, 29 Nov 2019 10:58:42 +0000</pubDate>
        </item>
    </channel>
</rss>
