<?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=Daemonika+Nightfire</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=Daemonika+Nightfire"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Daemonika_Nightfire"/>
	<updated>2026-07-27T08:07:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Anti_Rezz&amp;diff=1218782</id>
		<title>User:Daemonika Nightfire/Scripts/Anti Rezz</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Anti_Rezz&amp;diff=1218782"/>
		<updated>2026-04-14T11:59:21Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Anti Rezz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{KBwarning|There are no scripts available in Second Life that can protect objects against copybots!}}&lt;br /&gt;
* It is unrealistic to believe that the control event is of any use here, because if scripts are already disabled on the parcel, a script like this cannot even start in the first place. I have also seen creators trying to force such scripts into working with brute force like methods, but the only result is unnecessary lag. It does not improve anything when both version 1 and version 2 are placed into the same object, the effect remains exactly the same, if scripts are already disabled on the parcel before rezzing, any object can still be rezzed on the ground without issue.&lt;br /&gt;
&lt;br /&gt;
* If clothing is stuffed with useless scripts like these, it can even cause customers to be kicked or banned from certain locations because they may end up wearing too many scripts without even knowing it. The result is simple, your clothing will not be seen in clubs or similar places, which also means no free advertising for your products.&lt;br /&gt;
&lt;br /&gt;
==*DS* Anti Rezz==&lt;br /&gt;
* Thats just a great tool to annoy your customers. It delete the complete object by rezzing on ground.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Anti Rezz&lt;br /&gt;
    Dear content creator, this script will not protect your creations from copybots.&lt;br /&gt;
    It is nothing more than a stupid placebo, because a copybot only needs a few seconds to copy everything it can see.&lt;br /&gt;
    Rezzing is not required for that, mesh objects and attachments are equally insecure.&lt;br /&gt;
    This script also does not work on no-script parcels, even if it requests control permissions, because it cannot start on parcels where scripts are disabled.&lt;br /&gt;
    &lt;br /&gt;
    The only thing you achieve with scripts like this is losing customers.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        if(llGetAttached() == 0) // check for rezzing on ground&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This placebo delete your object when you rez it on ground&amp;quot;);&lt;br /&gt;
            llDie(); // delete the complete object&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Anti Rezz &amp;amp; DEMO Detach==&lt;br /&gt;
* It delete the complete object by rezzing on ground and detach it after 5 minutes from avatar.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Anti Rezz&lt;br /&gt;
    Dear content creator, this script will not protect your creations from copybots.&lt;br /&gt;
    It is nothing more than a stupid placebo, because a copybot only needs a few seconds to copy everything it can see.&lt;br /&gt;
    Rezzing is not required for that, mesh objects and attachments are equally insecure.&lt;br /&gt;
    This script also does not work on no-script parcels, even if it requests control permissions, because it cannot start on parcels where scripts are disabled.&lt;br /&gt;
    &lt;br /&gt;
    The only thing you achieve with scripts like this is losing customers.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
integer Limit = 300;    // 5 minutes&lt;br /&gt;
integer count = 0;      // empty counter&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        //llSay(0, &amp;quot;Hello, Avatar!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    attach(key id) // gets AvatarKey who wear it automatically&lt;br /&gt;
    {&lt;br /&gt;
        if(id) // check the available key&lt;br /&gt;
        {&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_ATTACH); // asks for permissions to attach/detach&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH) // check the requested permission&lt;br /&gt;
        {&lt;br /&gt;
            if(count &amp;lt; Limit) // check the counter-limit&lt;br /&gt;
            {&lt;br /&gt;
                llSetTimerEvent(1); // start the timer&lt;br /&gt;
                llSay(0, &amp;quot;This placebo detach your object after 5 minutes.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if(count &amp;gt;= Limit) // check the counter-limit&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Time&#039;s up, this placebo will now always remove the object immediately.&amp;quot;);&lt;br /&gt;
                llDetachFromAvatar(); // detach the object from avatar when permission is given&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(count == Limit) // check the counter-limit&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0); // stop the timer&lt;br /&gt;
            llDetachFromAvatar(); // detach the object from avatar when permission is given&lt;br /&gt;
            return; // leave the event immediately&lt;br /&gt;
        }&lt;br /&gt;
        count += 1; // counts the seconds&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        if(llGetAttached() == 0) // check for rezzing on ground&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This placebo delete your object when you rez it on ground&amp;quot;);&lt;br /&gt;
            llDie(); // delete the complete object&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Anti_Rezz&amp;diff=1218781</id>
		<title>User:Daemonika Nightfire/Scripts/Anti Rezz</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Anti_Rezz&amp;diff=1218781"/>
		<updated>2026-04-14T11:55:21Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Anti Rezz */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{KBwarning|There are no scripts available in Second Life that can protect objects against copybots!}}&lt;br /&gt;
* It is unrealistic to believe that the control event is of any use here, because if scripts are already disabled on the parcel, a script like this cannot even start in the first place. I have also seen creators trying to force such scripts into working with brute force like methods, but the only result is unnecessary lag. It does not improve anything when both version 1 and version 2 are placed into the same object, the effect remains exactly the same, if scripts are already disabled on the parcel before rezzing, any object can still be rezzed on the ground without issue.&lt;br /&gt;
&lt;br /&gt;
* If clothing is stuffed with useless scripts like these, it can even cause customers to be kicked or banned from certain locations because they may end up wearing too many scripts without even knowing it. The result is simple, your clothing will not be seen in clubs or similar places, which also means no free advertising for your products.&lt;br /&gt;
&lt;br /&gt;
==*DS* Anti Rezz==&lt;br /&gt;
* Thats just a great tool to annoy your customers. It delete the complete object by rezzing on ground.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Anti Rezz&lt;br /&gt;
    Dear content creator, this script will not protect your creations from copybots.&lt;br /&gt;
    It is nothing more than a stupid placebo, because a copybot only needs a few seconds to copy everything it can see.&lt;br /&gt;
    Rezzing is not required for that, mesh objects and attachments are equally insecure.&lt;br /&gt;
    This script also does not work on no-script parcels, even if it requests control permissions, because it cannot start on parcels where scripts are disabled.&lt;br /&gt;
    &lt;br /&gt;
    The only thing you achieve with scripts like this is losing customers.&lt;br /&gt;
*/ &lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        if(llGetAttached() == 0) // check for rezzing on ground&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This placebo delete your object when you rez it on ground&amp;quot;);&lt;br /&gt;
            llDie(); // delete the complete object&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Anti Rezz &amp;amp; DEMO Detach==&lt;br /&gt;
* It delete the complete object by rezzing on ground and detach it after 5 minutes from avatar.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Anti Rezz&lt;br /&gt;
    Dear content creator, this script will not protect your creations from copybots.&lt;br /&gt;
    It is nothing more than a stupid placebo, because a copybot only needs a few seconds to copy everything it can see.&lt;br /&gt;
    Rezzing is not required for that, mesh objects and attachments are equally insecure.&lt;br /&gt;
    This script also does not work on no-script parcels, even if it requests control permissions, because it cannot start on parcels where scripts are disabled.&lt;br /&gt;
    &lt;br /&gt;
    The only thing you achieve with scripts like this is losing customers.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
integer Limit = 300;    // 5 minutes&lt;br /&gt;
integer count = 0;      // empty counter&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        //llSay(0, &amp;quot;Hello, Avatar!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    attach(key id) // gets AvatarKey who wear it automatically&lt;br /&gt;
    {&lt;br /&gt;
        if(id) // check the available key&lt;br /&gt;
        {&lt;br /&gt;
            llRequestPermissions(id, PERMISSION_ATTACH); // asks for permissions to attach/detach&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(perm &amp;amp; PERMISSION_ATTACH) // check the requested permission&lt;br /&gt;
        {&lt;br /&gt;
            if(count &amp;lt; Limit) // check the counter-limit&lt;br /&gt;
            {&lt;br /&gt;
                llSetTimerEvent(1); // start the timer&lt;br /&gt;
                llSay(0, &amp;quot;This placebo detach your object after 5 minutes.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if(count &amp;gt;= Limit) // check the counter-limit&lt;br /&gt;
            {&lt;br /&gt;
                llSay(0, &amp;quot;Time&#039;s up, this placebo will now always remove the object immediately.&amp;quot;);&lt;br /&gt;
                llDetachFromAvatar(); // detach the object from avatar when permission is given&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(count == Limit) // check the counter-limit&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0); // stop the timer&lt;br /&gt;
            llDetachFromAvatar(); // detach the object from avatar when permission is given&lt;br /&gt;
            return; // leave the event immediately&lt;br /&gt;
        }&lt;br /&gt;
        count += 1; // counts the seconds&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        if(llGetAttached() == 0) // check for rezzing on ground&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, &amp;quot;This placebo delete your object when you rez it on ground&amp;quot;);&lt;br /&gt;
            llDie(); // delete the complete object&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218628</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218628"/>
		<updated>2026-02-16T00:28:57Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.01 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
Diese Version verwendet die vollstaendig ausgeschriebenen Konstantennamen des Partikelsystems.&lt;br /&gt;
Sie dient in erster Linie dem Verstaendnis der einzelnen Parameter und deren Wirkung.&lt;br /&gt;
&lt;br /&gt;
Durch die explizite Benennung aller Werte ist die Struktur leichter nachvollziehbar und eignet sich besonders fuer Einsteiger oder zur gezielten Analyse einzelner Einstellungen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02==&lt;br /&gt;
Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte.&lt;br /&gt;
Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Particles aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Particle bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Particle bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Particle werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Particle zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Particle entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Particlefarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Particlefarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Particle Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Particle | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Particle Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Particle Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218627</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218627"/>
		<updated>2026-02-16T00:22:11Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.02 */  typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
Diese Version verwendet die vollständig ausgeschriebenen Konstantennamen des Partikelsystems.&lt;br /&gt;
Sie dient in erster Linie dem Verstaendnis der einzelnen Parameter und deren Wirkung.&lt;br /&gt;
&lt;br /&gt;
Durch die explizite Benennung aller Werte ist die Struktur leichter nachvollziehbar und eignet sich besonders fuer Einsteiger oder zur gezielten Analyse einzelner Einstellungen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02==&lt;br /&gt;
Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte.&lt;br /&gt;
Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Particles aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Particle bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Particle bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Particle werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Particle zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Particle entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Particlefarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Particlefarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Particle Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Particle | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Particle Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Particle Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218626</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218626"/>
		<updated>2026-02-16T00:16:43Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.01 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
Diese Version verwendet die vollständig ausgeschriebenen Konstantennamen des Partikelsystems.&lt;br /&gt;
Sie dient in erster Linie dem Verstaendnis der einzelnen Parameter und deren Wirkung.&lt;br /&gt;
&lt;br /&gt;
Durch die explizite Benennung aller Werte ist die Struktur leichter nachvollziehbar und eignet sich besonders fuer Einsteiger oder zur gezielten Analyse einzelner Einstellungen.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02==&lt;br /&gt;
Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte.&lt;br /&gt;
Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Partikel abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Partikel sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Partikel behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Partikels aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Partikel bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Partikel bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Partikel werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Partikel zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Partikel entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Partikel entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Partikel entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Partikelfarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Partikelfarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Partikel Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Partikel | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Partikel Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Partikel Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218625</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218625"/>
		<updated>2026-02-16T00:15:25Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.02 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02==&lt;br /&gt;
Dieses ist mein bevorzugtes Format zum Erstellen saemtlicher Particle Effekte.&lt;br /&gt;
Der Vorteil besteht darin, dass sich diese Kurzfassung uebersichtlich und kompakt an jeder gewuenschten Stelle in ein Script einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
Die Darstellung verwendet bewusst die reinen Parameter Indizes des Partikelsystems anstelle der ausgeschriebenen Konstantennamen. Dadurch bleibt die Struktur naeher an der internen Systemlogik und reduziert visuelle Ueberladung auf das Wesentliche.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Partikel abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Partikel sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Partikel behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Partikels aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Partikel bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Partikel bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Partikel werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Partikel zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Partikel entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Partikel entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Partikel entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Partikelfarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Partikelfarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Partikel Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Partikel | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Partikel Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Partikel Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218624</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218624"/>
		<updated>2026-02-16T00:13:11Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.02 (2021-05-16 17:14:43 lsl2 script) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02==&lt;br /&gt;
Dieses ist mein beforzugtes Format zum erstellen saemtlicher Particle-Effecte.&lt;br /&gt;
Der Vorteil besteht darin, das sich diese Kurzfassung uebersichtlich in ein Script an die gewuenschte stelle einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Partikel abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Partikel sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Partikel behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Partikels aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Partikel bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Partikel bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Partikel werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Partikel zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Partikel entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Partikel entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Partikel entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Partikelfarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Partikelfarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Partikel Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Partikel | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Partikel Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Partikel Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218623</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218623"/>
		<updated>2026-02-16T00:12:56Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v4.0.03 (2021-05-09 23:01:10 lsl2 script) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v5.0.01==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
 &lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // Particle sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
                                 //PSYS_PART_BOUNCE_MASK              // Der Emitter definiert eine kuenstliche Ebene auf Hoehe seiner Position, an der die Particle abprallen&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 //| PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_SRC_MASK          // Particle behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur richtet sich in Flugrichtung aus. (Das gegenteil erinnert an die Y-Hefte.)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // Particle bewegen sich linear direkt zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // Particle bewegen sich durch PSYS_SRC_ACCEL beschleunigt im Bogen zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !PSYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Particle werden nur auf der Kegelfläche erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Particle werden innerhalb des Kegels erzeugt&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // Ring bzw Scheibenform, Particle werden in einer Ebene erzeugt&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // volle Quellfarbe wird addiert, sehr helles Ergebnis&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Quellfarbe wird ignoriert&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // multipliziert mit der Hintergrundfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // multipliziert mit eigener Quellfarbe&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // invertierte Hintergrundfarbe als Faktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // invertierte Quellfarbe als Faktor&lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // nutzt Alpha der Quelle als Mischfaktor&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // nutzt invertierte Alpha der Quelle&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // Ziel bleibt voll erhalten&lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // Ziel wird vollstaendig ueberschrieben&lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // Ziel wird mit eigener Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // Ziel wird mit Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // Ziel wird mit invertierter Ziel-Farbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // Ziel wird mit invertierter Quellfarbe multipliziert&lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            // Ziel wird mit Alpha der Quelle gewichtet&lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // klassisches Alpha-Blending, transparente Ueberblendung&lt;br /&gt;
                                 ,&lt;br /&gt;
 &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)             | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          3.0,                // Lebensdauer                          | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                       | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                          | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                           | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.50,0.50,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.30,0.90,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;                | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                    | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                     | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                        | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                         | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Zeitintervall zwischen zwei Bursts   | min. = 0.01 Secunden&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                      | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.50,               // Radius                               | max. = 50.0 Meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.01,               // minimal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.05,               // maximal Austritts-Geschwindigkeit    |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum          | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum        | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                             | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.50&amp;gt;,   // Beschleunigung                       | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich             | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
 &lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02 (2021-05-16 17:14:43 lsl2 script)==&lt;br /&gt;
Dieses ist mein beforzugtes Format zum erstellen saemtlicher Particle-Effecte.&lt;br /&gt;
Der Vorteil besteht darin, das sich diese Kurzfassung uebersichtlich in ein Script an die gewuenschte stelle einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Partikel abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Partikel sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Partikel behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Partikels aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Partikel bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Partikel bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Partikel werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Partikel zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Partikel entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Partikel entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Partikel entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Partikelfarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Partikelfarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Partikel Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Partikel | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Partikel Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Partikel Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218622</id>
		<title>User:Daemonika Nightfire/Scripts/Daes Particle</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Daes_Particle&amp;diff=1218622"/>
		<updated>2026-02-16T00:10:52Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Particle Wiki v5.0.00 (2021-05-16 17:14:43 lsl2 script) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Particle Wiki v4.0.03 (2021-05-09 23:01:10 lsl2 script)==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
        ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
        ║ Dae&#039;s Particle by Daemonika Nightfire&lt;br /&gt;
        ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
        http://wiki.secondlife.com/wiki/LlLinkParticleSystem#llLinkParticleSystem&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
Particle()&lt;br /&gt;
{&lt;br /&gt;
    llLinkParticleSystem(LINK_THIS,[&lt;br /&gt;
    PSYS_PART_FLAGS,             PSYS_PART_EMISSIVE_MASK              // option ganz hell&lt;br /&gt;
                                 //| PSYS_PART_BOUNCE_MASK              // bleiben auf ebene&lt;br /&gt;
                                 | PSYS_PART_INTERP_COLOR_MASK        // erlaubt den Farbwechsel&lt;br /&gt;
                                 | PSYS_PART_INTERP_SCALE_MASK        // erlaubt die Groessenaenderung&lt;br /&gt;
                                 | PSYS_PART_WIND_MASK                // Particle folgen dem wind&lt;br /&gt;
                                 //| PSYS_PART_FOLLOW_SRC_MASK          // Particle halten relative position zum Prim (!PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 | PSYS_PART_FOLLOW_VELOCITY_MASK     // Textur Ausrichtung &amp;quot;Oben&amp;quot; zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_TARGET_LINEAR_MASK       // auf direktem weg zum Ziel (!PSYS_SRC_ACCEL &amp;amp; !PSYS_SRC_BURST_RADIUS)&lt;br /&gt;
                                 //| PSYS_PART_TARGET_POS_MASK          // auf Umweg zum Ziel&lt;br /&gt;
                                 //| PSYS_PART_RIBBON_MASK              // verbindet die Particle zu einem Faden (!PSYS_PART_FOLLOW_VELOCITY_MASK)&lt;br /&gt;
                                 ,&lt;br /&gt;
    &lt;br /&gt;
    PSYS_SRC_PATTERN,            PSYS_SRC_PATTERN_EXPLODE             // Explusion&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_DROP                // Tropfen (!PSYS_SRC_BURST_RADIUS &amp;amp; !SYS_SRC_BURST_SPEED_MIN &amp;amp; !PSYS_SRC_BURST_SPEED_MAX)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // unvollstaendige Implementierung (NUTZLOS)&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE_CONE          // kugelfoermiger Effekt mit start und end Begrenzung&lt;br /&gt;
                                 //PSYS_SRC_PATTERN_ANGLE               // ringfoermiger Effekt mit start und end Begrenzung&lt;br /&gt;
                                 ,&lt;br /&gt;
                                &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_SOURCE, //PSYS_PART_BF_ONE                     // &lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // &lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // &lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // &lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // &lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // &lt;br /&gt;
                                 PSYS_PART_BF_SOURCE_ALPHA            // Standard&lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  //&lt;br /&gt;
                                 ,&lt;br /&gt;
                                 &lt;br /&gt;
    PSYS_PART_BLEND_FUNC_DEST,   //PSYS_PART_BF_ONE                     // &lt;br /&gt;
                                 //PSYS_PART_BF_ZERO                    // &lt;br /&gt;
                                 //PSYS_PART_BF_DEST_COLOR              // &lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_COLOR            // &lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_DEST_COLOR    // &lt;br /&gt;
                                 //PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR  // &lt;br /&gt;
                                 //PSYS_PART_BF_SOURCE_ALPHA            //   &lt;br /&gt;
                                 PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA  // Standard&lt;br /&gt;
                                 ,&lt;br /&gt;
    &lt;br /&gt;
    //PSYS_SRC_TARGET_KEY,        &amp;quot;&amp;quot;,                 // Particle zum Ziel (UUID)          | PSYS_PART_TARGET_LINEAR_MASK oder PSYS_PART_TARGET_POS_MASK&lt;br /&gt;
/**/PSYS_PART_MAX_AGE,          5.0,                // Lebensdauer                       | max. 30.0 Sekunden&lt;br /&gt;
    PSYS_SRC_MAX_AGE,           0.0,                // Abschalt-Timer                    | nicht mit Lebensdauer verwechseln (0.0 = dauerbetrieb)&lt;br /&gt;
    PSYS_PART_START_COLOR,      &amp;lt;1.0,0.0,0.0&amp;gt;,      // Farbe Begin                       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_COLOR,        &amp;lt;0.0,0.0,1.0&amp;gt;,      // Farbe Ende                        | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_SCALE,      &amp;lt;0.30,0.30,0.00&amp;gt;,   // Groesse Begin &amp;lt;x,y,z&amp;gt;             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   PSYS_PART_INTERP_SCALE_MASK&lt;br /&gt;
    PSYS_PART_END_SCALE,        &amp;lt;0.15,0.15,0.00&amp;gt;,   // Groesse Ende  &amp;lt;x,y,z&amp;gt;             | min. = 0.03125 | max. = 4.00 | z = ungenutzt   &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_ALPHA,      1.00,               // Transparenz Begin                 | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_ALPHA,        0.00,               // Transparenz Ende                  | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
    PSYS_PART_START_GLOW,       0.10,               // Gluehen Begin                     | 0.0 bis 1.0    PSYS_PART_INTERP_COLOR_MASK&lt;br /&gt;
    PSYS_PART_END_GLOW,         0.00,               // Gluehen Ende                      | 0.0 bis 1.0    &#039;&#039;&lt;br /&gt;
/**/PSYS_SRC_BURST_RATE,        0.05,               // Geschwindigkeit pro Sekunde       | min. = 0.01&lt;br /&gt;
/**/PSYS_SRC_BURST_PART_COUNT,  1,                  // Particle Anzahl                   | Viewer Limit berechnen, /**/ _COUNT x _RATE x _MAX_AGE = Total&lt;br /&gt;
    PSYS_SRC_BURST_RADIUS,      0.75,               // Radius                            | max. = 50.0 meter Radius (!PSYS_PART_FOLLOW_SRC_MASK)&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MIN,   0.10,               // minimal Austritts-Geschwindigkeit |&lt;br /&gt;
    PSYS_SRC_BURST_SPEED_MAX,   0.25,               // maximal Austritts-Geschwindigkeit |&lt;br /&gt;
    PSYS_SRC_ANGLE_BEGIN,       0.00,               // innerer Abstand zum Zentrum       | PSYS_SRC_PATTERN_ANGLE oder PSYS_SRC_PATTERN_ANGLE_CONE&lt;br /&gt;
    PSYS_SRC_ANGLE_END,         0.00,               // aeusserer Abstand zum Zentrum     | &#039;&#039;&lt;br /&gt;
    PSYS_SRC_OMEGA,             &amp;lt;1,1,1&amp;gt;,            // Rotation                          | Globale Achse &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_ACCEL,             &amp;lt;0.00,0.00,0.10&amp;gt;,   // Beschleunigung                    | Globale Ausrichtung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
    PSYS_SRC_TEXTURE,           &amp;quot;&amp;quot;                  // Textur UUID erforderlich          | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
    ]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// hier unten beginnt das eigentliche script&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Particle(); // startet hier das oben angepasste Particlesystem&lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==*DS* Particle Wiki v5.0.02 (2021-05-16 17:14:43 lsl2 script)==&lt;br /&gt;
Dieses ist mein beforzugtes Format zum erstellen saemtlicher Particle-Effecte.&lt;br /&gt;
Der Vorteil besteht darin, das sich diese Kurzfassung uebersichtlich in ein Script an die gewuenschte stelle einfuegen laesst.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
&lt;br /&gt;
    ╔════════════════════════════════−−−−−−−−−→&lt;br /&gt;
    ║ *DS* Particle Wiki by Daemonika Nightfire (daemonika.nightfire)&lt;br /&gt;
    ╚═══════════════════−−−−−−−−−→&lt;br /&gt;
    &lt;br /&gt;
    Daemonika&#039;s Particle Wiki fuer Fortgeschrittene (extrem kurzfassung, Deutsch)&lt;br /&gt;
    Nachfolgende Zeilen dienen ausschliesslich zur Information!&lt;br /&gt;
    Dieses Script eignet sich hervorragend zum vorbereiten von Particle fuer ein entgueltiges Produkt.&lt;br /&gt;
    &lt;br /&gt;
    [ Type (gruen) | Value-Zahl (schwarz) | Value-Text (blau) | Beschreibung (orange) ]&lt;br /&gt;
&lt;br /&gt;
System Behavior&lt;br /&gt;
integer        0 = PSYS_PART_FLAGS                   // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x004 = PSYS_PART_BOUNCE_MASK             // Der Emitter definiert eine kuenstliche horizontale Ebene auf Hoehe seiner Position, an der die Partikel abprallen&lt;br /&gt;
integer    0x100 = PSYS_PART_EMISSIVE_MASK           // Partikel sind lichtunabhaengig wie &amp;quot;Ganz hell&amp;quot; im Baumenue&lt;br /&gt;
integer    0x010 = PSYS_PART_FOLLOW_SRC_MASK         // Partikel behalten ihren Startoffset relativ zum Prim und folgen dessen Bewegung&lt;br /&gt;
integer    0x020 = PSYS_PART_FOLLOW_VELOCITY_MASK    // Textur richtet sich entlang der Bewegungsrichtung des Partikels aus&lt;br /&gt;
integer    0x001 = PSYS_PART_INTERP_COLOR_MASK       // beeinflusst Farbe und Alpha&lt;br /&gt;
integer    0x002 = PSYS_PART_INTERP_SCALE_MASK       // beeinflusst Groesse&lt;br /&gt;
integer    0x080 = PSYS_PART_TARGET_LINEAR_MASK      // Partikel bewegen sich linear direkt zum Ziel, Beschleunigung und Radius verlieren ihre uebliche Wirkung&lt;br /&gt;
integer    0x040 = PSYS_PART_TARGET_POS_MASK         // Partikel bewegen sich physikalisch beeinflusst zum Ziel unter Beruecksichtigung von Beschleunigung&lt;br /&gt;
integer    0x008 = PSYS_PART_WIND_MASK               // Partikel werden vom simulierten Wind beeinflusst&lt;br /&gt;
integer    0x200 = PSYS_PART_RIBBON_MASK             // verbindet aufeinanderfolgende Partikel zu einem Band&lt;br /&gt;
&lt;br /&gt;
System Presentation&lt;br /&gt;
integer       9 = PSYS_SRC_PATTERN                     // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x02 = PSYS_SRC_PATTERN_EXPLODE             // Explosion&lt;br /&gt;
integer    0x08 = PSYS_SRC_PATTERN_ANGLE_CONE          // Vollkegel, Partikel entstehen innerhalb eines Kegels&lt;br /&gt;
integer    0x04 = PSYS_SRC_PATTERN_ANGLE               // Ring oder Scheibenform in einer Ebene&lt;br /&gt;
integer    0x01 = PSYS_SRC_PATTERN_DROP                // Partikel entstehen direkt unter dem Emitter ohne Startgeschwindigkeit&lt;br /&gt;
integer    0x10 = PSYS_SRC_PATTERN_ANGLE_CONE_EMPTY    // Hohlkegel, Partikel entstehen nur auf der Mantelflaeche&lt;br /&gt;
&lt;br /&gt;
System Blending Source&lt;br /&gt;
integer      24 = PSYS_PART_BLEND_FUNC_SOURCE           // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // volle Quellfarbe wird in die Mischung uebernommen&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Quellfarbe wird ignoriert&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Quellfarbe wird mit der Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Quellfarbe verstaerkt sich selbst&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Quellfarbe wird mit invertierter Hintergrundfarbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Quellfarbe wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Quellfarbe wird mit eigener Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // Quellfarbe wird mit invertierter eigener Alpha gewichtet&lt;br /&gt;
&lt;br /&gt;
System Blending Dest&lt;br /&gt;
integer      25 = PSYS_PART_BLEND_FUNC_DEST             // fuer folgende Befehle wichtig:&lt;br /&gt;
integer    0x01 = PSYS_PART_BF_ONE                      // Hintergrund bleibt voll erhalten&lt;br /&gt;
integer    0x00 = PSYS_PART_BF_ZERO                     // Hintergrund wird komplett ersetzt&lt;br /&gt;
integer    0x03 = PSYS_PART_BF_DEST_COLOR               // Hintergrund wird mit eigener Farbe multipliziert&lt;br /&gt;
integer    0x02 = PSYS_PART_BF_SOURCE_COLOR             // Hintergrund wird mit Partikelfarbe multipliziert&lt;br /&gt;
integer    0x05 = PSYS_PART_BF_ONE_MINUS_DEST_COLOR     // Hintergrund wird mit invertierter eigener Farbe multipliziert&lt;br /&gt;
integer    0x04 = PSYS_PART_BF_ONE_MINUS_SOURCE_COLOR   // Hintergrund wird mit invertierter Partikelfarbe multipliziert&lt;br /&gt;
integer    0x07 = PSYS_PART_BF_SOURCE_ALPHA             // Hintergrund wird mit Partikel Alpha gewichtet&lt;br /&gt;
integer    0x06 = PSYS_PART_BF_ONE_MINUS_SOURCE_ALPHA   // klassisches Alpha Blending, transparente Ueberblendung&lt;br /&gt;
&lt;br /&gt;
Particle Parameter&lt;br /&gt;
integer      0 = // (System Behavior)           Beispiel: 0, 0x100 | 0x004 | 0x001 | 0x002 | 0x020 | u.s.w.,&lt;br /&gt;
vector       1 = PSYS_PART_START_COLOR          // Start Farbe            braucht 0x001 | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        2 = PSYS_PART_START_ALPHA          // Transparenz Start      &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       3 = PSYS_PART_END_COLOR            // End Farbe              &#039;&#039;       | &amp;lt;0.0,0.0,0.0&amp;gt; bis &amp;lt;1.0,1.0,1.0&amp;gt;&lt;br /&gt;
float        4 = PSYS_PART_END_ALPHA            // Transparenz Ende       &#039;&#039;       | 0.0 bis 1.0&lt;br /&gt;
vector       5 = PSYS_PART_START_SCALE          // Anfangsgroesse &amp;lt;x,y,z&amp;gt; braucht 0x002 | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
vector       6 = PSYS_PART_END_SCALE            // Endgroesse     &amp;lt;x,y,z&amp;gt; &#039;&#039;       | min. = 0.03125 | max. = 4.00 | z = ungenutzt&lt;br /&gt;
float        7 = PSYS_PART_MAX_AGE              // Lebensdauer der Partikel | max. 30.0 Sekunden&lt;br /&gt;
vector       8 = PSYS_SRC_ACCEL                 // Globale Beschleunigung &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
integer      9 = // (System Presentation)       Beispiel: 9, 0x08,&lt;br /&gt;
-------     10 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
-------     11 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
string      12 = PSYS_SRC_TEXTURE               // Textur UUID erforderlich | Beispiel: &amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;&lt;br /&gt;
float       13 = PSYS_SRC_BURST_RATE            // Zeitintervall zwischen zwei Bursts in Sekunden | min. = 0.01&lt;br /&gt;
-------     14 =                                // --- unused reserved slot, not implemented ---&lt;br /&gt;
integer     15 = PSYS_SRC_BURST_PART_COUNT      // Partikel Anzahl pro Burst&lt;br /&gt;
float       16 = PSYS_SRC_BURST_RADIUS          // Startverteilung im Radius | 0.50 = 0.5 Meter Radius | max. = 50.0 Meter&lt;br /&gt;
float       17 = PSYS_SRC_BURST_SPEED_MIN       // Mindest Austritts Geschwindigkeit&lt;br /&gt;
float       18 = PSYS_SRC_BURST_SPEED_MAX       // Maximale Austritts Geschwindigkeit&lt;br /&gt;
float       19 = PSYS_SRC_MAX_AGE               // Abschalt Timer des Emitters | nicht mit Partikel Lebensdauer verwechseln (0.0 = Dauerbetrieb)&lt;br /&gt;
key         20 = PSYS_SRC_TARGET_KEY            // Ziel UUID fuer TARGET_LINEAR oder TARGET_POS&lt;br /&gt;
vector      21 = PSYS_SRC_OMEGA                 // Rotationsgeschwindigkeit in Radiant pro Sekunde um &amp;lt;x,y,z&amp;gt;&lt;br /&gt;
float       22 = PSYS_SRC_ANGLE_BEGIN           // Innerer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
float       23 = PSYS_SRC_ANGLE_END             // Aeusserer Winkelbereich bei ANGLE oder ANGLE_CONE&lt;br /&gt;
integer     24 = // (System Blending Source)    Beispiel: 0x07&lt;br /&gt;
integer     25 = // (System Blending Dest)      Beispiel: 0x06&lt;br /&gt;
float       26 = PSYS_PART_START_GLOW           // Glow Start | 0.0 bis 1.0&lt;br /&gt;
float       27 = PSYS_PART_END_GLOW             // Glow Ende  | 0.0 bis 1.0&lt;br /&gt;
&lt;br /&gt;
    Hier endet die Particle Wiki.&lt;br /&gt;
    &lt;br /&gt;
*/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 ### Hier beginnt der Scriptbereich ###&lt;br /&gt;
 Im Scriptbefehl werden ausschliesslich die Value Zahlen verwendet.&lt;br /&gt;
 Das dient der Uebersichtlichkeit im eigentlichen Script&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        // In der Liste verwende ich nur benoetigte Parameter.&lt;br /&gt;
        &lt;br /&gt;
        llLinkParticleSystem(LINK_THIS,[7,3.0,  0,0x100 | 0x001 | 0x002,  9,0x02,&lt;br /&gt;
        1,&amp;lt;0.8,0.6,0.2&amp;gt;,  3,&amp;lt;1.0,0.0,0.0&amp;gt;,  5,&amp;lt;0.10,0.10,0.00&amp;gt;,  6,&amp;lt;0.05,0.05,0.00&amp;gt;,  8,&amp;lt;0.00,0.00,0.1&amp;gt;, &lt;br /&gt;
        13,0.1,  15,2,  16,0.5,  17,0.01,  18,0.02,  22,0.0,  23,0.0,  21,&amp;lt;0,0,1&amp;gt;,&lt;br /&gt;
        12,&amp;quot;b1d84ecb-2a83-d3c4-7bfb-592648dcb20d&amp;quot;,  2,1.0,  4,0.5]);&lt;br /&gt;
        &lt;br /&gt;
        //llLinkParticleSystem(LINK_SET, []); // loescht die Particle&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218513</id>
		<title>User:Daemonika Nightfire/Scripts/DynamischesLinkset</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218513"/>
		<updated>2025-11-09T23:01:39Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jeder, der ein LINK_SET scripten moechte, kennt das Problem mit den Linknummern. Je nach Verwendungszweck muessen diese direkt in Befehle eingetragen oder beim Verlinken der Prims in der richtigen Reihenfolge beachtet werden, um eine fehlerfreie Funktion zu sichern. Mit den folgenden Beispielen ist das nicht mehr noetig, da wir einfach die individuellen Namen der einzelnen Links im LINK_SET verwenden und das Script die passenden Nummern automatisch ermittelt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== alle Links mit gleichem Namen aendern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel aendert alle Links im Linkset, die den gleichen Namen tragen. Die Schleife durchlaeuft dabei jede Linknummer einzeln und prueft den Namen. Wenn dieser uebereinstimmt, wird die entsprechende Funktion ausgefuehrt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer link_set = llGetNumberOfPrims();&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            string link_name = llGetLinkName(i);&lt;br /&gt;
            &lt;br /&gt;
            if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llSetLinkColor(i, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt;= link_set);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== unterschiedliche Linknummern speichern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel zeigt, wie man einzelne Linknummern dauerhaft in globalen Variablen speichert. Fuer jeden Link, der spaeter gezielt angesprochen werden soll, wird eine eigene Variable angelegt. Die gespeicherten Linknummern koennen danach in allen Events genutzt werden. Auch hier wird wieder eine Schleife verwendet, die alle Links nacheinander prueft. Wenn der Name eines Links uebereinstimmt, wird dessen Linknummer in die entsprechende Variable eingetragen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer link_01;&lt;br /&gt;
integer link_02;&lt;br /&gt;
integer link_03;&lt;br /&gt;
&lt;br /&gt;
GetLinks()&lt;br /&gt;
{&lt;br /&gt;
    integer link_set = llGetNumberOfPrims();&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string link_name = llGetLinkName(i);&lt;br /&gt;
        &lt;br /&gt;
        if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_01 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Sculptie_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_02 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Mesh_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_03 = i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= link_set);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(link_01, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_02, &amp;lt;0,1,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_03, &amp;lt;0,0,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            GetLinks();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        // llResetScript();&lt;br /&gt;
        // oder&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== spezielle Linknamen erkennen &amp;amp; verwenden ==&lt;br /&gt;
&lt;br /&gt;
Klein, aber wirkungsvoll: Dieses Beispiel eignet sich hervorragend fuer HUDs und andere Objekte, bei denen Avatare nur mit bestimmten Links interagieren sollen. Bei einem HUD koennen die Namen der einzelnen Buttons sogar direkt auf einen Channel gesendet werden, um mit anderen gescripteten Objekten zu kommunizieren. Dadurch entfaellt die Notwendigkeit, ein aufwendiges Menue zu erstellen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall brauchen wir keine Schleife, da wir direkt die Linknummer des geklickten Prims verwenden koennen. Die Null in llDetectedLinkNumber(0); steht dabei nicht fuer die Linknummer selbst, sondern bezeichnet den ersten erkannten Klick. Die else-Abfrage ist in diesem Beispiel eigentlich ueberfluessig, wurde aber der Vollstaendigkeit halber hinzugefuegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;Hello, Avatar!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        integer num = llDetectedLinkNumber(0);&lt;br /&gt;
        string name = llGetLinkName(num);&lt;br /&gt;
        &lt;br /&gt;
        if(name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if(name == &amp;quot;Link_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Linknummer auf Abruf ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel zeigt eine sehr flexible Methode, um gezielt mit bestimmten Links zu arbeiten, ohne fuer jeden eine eigene Variable anlegen zu muessen. Die Funktion LinkOnDemand sucht anhand des angegebenen Namens automatisch die passende Linknummer und gibt sie zurueck. Dadurch kann sie in beliebigen Events oder Funktionen verwendet werden, um gezielt auf einzelne Prims im Linkset zuzugreifen.&lt;br /&gt;
&lt;br /&gt;
Diese Vorgehensweise ist besonders nuetzlich, wenn man mehrere Funktionen oder Events hat, die auf unterschiedliche Links reagieren sollen, aber den Code zum Ermitteln der Linknummer nicht mehrfach schreiben moechte. So bleibt das Script uebersichtlich und leicht erweiterbar.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer LinkOnDemand(string search)&lt;br /&gt;
{&lt;br /&gt;
    integer link_set = llGetNumberOfPrims();&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    while(++i &amp;lt;= link_set)&lt;br /&gt;
    {&lt;br /&gt;
        string link_name = llGetLinkName(i);&lt;br /&gt;
        if(link_name == search)&lt;br /&gt;
        {&lt;br /&gt;
            return i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LinkOnDemand(&amp;quot;Prim_Name&amp;quot;), &amp;lt;0,0,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218512</id>
		<title>User:Daemonika Nightfire/Scripts/DynamischesLinkset</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218512"/>
		<updated>2025-11-09T22:57:19Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jeder, der ein LINK_SET scripten moechte, kennt das Problem mit den Linknummern. Je nach Verwendungszweck muessen diese direkt in Befehle eingetragen oder beim Verlinken der Prims in der richtigen Reihenfolge beachtet werden, um eine fehlerfreie Funktion zu sichern. Mit den folgenden Beispielen ist das nicht mehr noetig, da wir einfach die individuellen Namen der einzelnen Links im LINK_SET verwenden und das Script die passenden Nummern automatisch ermittelt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== alle Links mit gleichem Namen aendern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel aendert alle Links im Linkset, die den gleichen Namen tragen. Die Schleife durchlaeuft dabei jede Linknummer einzeln und prueft den Namen. Wenn dieser uebereinstimmt, wird die entsprechende Funktion ausgefuehrt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer link_set = llGetNumberOfPrims();&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            string link_name = llGetLinkName(i);&lt;br /&gt;
            &lt;br /&gt;
            if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llSetLinkColor(i, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt;= link_set);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== unterschiedliche Linknummern speichern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel zeigt, wie man einzelne Linknummern dauerhaft in globalen Variablen speichert. Fuer jeden Link, der spaeter gezielt angesprochen werden soll, wird eine eigene Variable angelegt. Die gespeicherten Linknummern koennen danach in allen Events genutzt werden. Auch hier wird wieder eine Schleife verwendet, die alle Links nacheinander prueft. Wenn der Name eines Links uebereinstimmt, wird dessen Linknummer in die entsprechende Variable eingetragen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer link_01;&lt;br /&gt;
integer link_02;&lt;br /&gt;
integer link_03;&lt;br /&gt;
&lt;br /&gt;
GetLinks()&lt;br /&gt;
{&lt;br /&gt;
    integer link_set = llGetNumberOfPrims();&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string link_name = llGetLinkName(i);&lt;br /&gt;
        &lt;br /&gt;
        if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_01 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Sculptie_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_02 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Mesh_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_03 = i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= link_set);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(link_01, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_02, &amp;lt;0,1,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_03, &amp;lt;0,0,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            GetLinks();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        // llResetScript();&lt;br /&gt;
        // oder&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== spezielle Linknamen erkennen &amp;amp; verwenden ==&lt;br /&gt;
&lt;br /&gt;
Klein, aber wirkungsvoll: Dieses Beispiel eignet sich hervorragend fuer HUDs und andere Objekte, bei denen Avatare nur mit bestimmten Links interagieren sollen. Bei einem HUD koennen die Namen der einzelnen Buttons sogar direkt auf einen Channel gesendet werden, um mit anderen gescripteten Objekten zu kommunizieren. Dadurch entfaellt die Notwendigkeit, ein aufwendiges Menue zu erstellen.&lt;br /&gt;
&lt;br /&gt;
In diesem Fall brauchen wir keine Schleife, da wir direkt die Linknummer des geklickten Prims verwenden koennen. Die Null in llDetectedLinkNumber(0); steht dabei nicht fuer die Linknummer selbst, sondern bezeichnet den ersten erkannten Klick. Die else-Abfrage ist in diesem Beispiel eigentlich ueberfluessig, wurde aber der Vollstaendigkeit halber hinzugefuegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;Hello, Avatar!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        integer num = llDetectedLinkNumber(0);&lt;br /&gt;
        string name = llGetLinkName(num);&lt;br /&gt;
        &lt;br /&gt;
        if(name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if(name == &amp;quot;Link_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218511</id>
		<title>User:Daemonika Nightfire/Scripts/DynamischesLinkset</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/DynamischesLinkset&amp;diff=1218511"/>
		<updated>2025-11-09T22:54:42Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jeder, der ein LINK_SET scripten moechte, kennt das Problem mit den Linknummern. Je nach Verwendungszweck muessen diese direkt in Befehle eingetragen oder beim Verlinken der Prims in der richtigen Reihenfolge beachtet werden, um eine fehlerfreie Funktion zu sichern. Mit den folgenden Beispielen ist das nicht mehr noetig, da wir einfach die individuellen Namen der einzelnen Links im LINK_SET verwenden und das Script die passenden Nummern automatisch ermittelt.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== alle Links mit gleichem Namen aendern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel aendert alle Links im Linkset, die den gleichen Namen tragen. Die Schleife durchlaeuft dabei jede Linknummer einzeln und prueft den Namen. Wenn dieser uebereinstimmt, wird die entsprechende Funktion ausgefuehrt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        integer link_set = llGetNumberOfPrims();&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            string link_name = llGetLinkName(i);&lt;br /&gt;
            &lt;br /&gt;
            if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llSetLinkColor(i, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt;= link_set);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== unterschiedliche Linknummern speichern ==&lt;br /&gt;
&lt;br /&gt;
Dieses Beispiel dient dazu, einzelne Linknummern in Variablen global zu speichern. Fuer jeden Link den man ansprechen moechte muss eine eigene Variable angelegt werden. Die global gespeicherten Linknummern koennen jetzt in jedem Event verwendet werden. Auch hier verwenden wir wieder eine Schleife, um alle Links einzeln nach den Namen zu fragen. Stimmt dieser ueberein, wird die entsprechende Linknummer in die dafuer vorgesehene Variable gespeichert.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer link_01;&lt;br /&gt;
integer link_02;&lt;br /&gt;
integer link_03;&lt;br /&gt;
&lt;br /&gt;
GetLinks()&lt;br /&gt;
{&lt;br /&gt;
    integer link_set = llGetNumberOfPrims();&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string link_name = llGetLinkName(i);&lt;br /&gt;
        &lt;br /&gt;
        if(link_name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_01 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Sculptie_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_02 = i;&lt;br /&gt;
        }&lt;br /&gt;
        else if(link_name == &amp;quot;Mesh_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            link_03 = i;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= link_set);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(LINK_SET, &amp;lt;1,1,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer num)&lt;br /&gt;
    {&lt;br /&gt;
        llSetLinkColor(link_01, &amp;lt;1,0,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_02, &amp;lt;0,1,0&amp;gt;, ALL_SIDES);&lt;br /&gt;
        llSetLinkColor(link_03, &amp;lt;0,0,1&amp;gt;, ALL_SIDES);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            GetLinks();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        // llResetScript();&lt;br /&gt;
        // oder&lt;br /&gt;
        GetLinks();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== spezielle Linknamen erkennen &amp;amp; verwenden ==&lt;br /&gt;
&lt;br /&gt;
Klein aber Oho, das folgende Beispiel eignet sich prima fuer Huds und andere Objekte, bei denen Avatare nur mit gewuenschten Links interagieren duerfen. Im Falle eines Huds kann man die Namen der einzelnen Button sogar direkt in den Channel senden um mit anderen gescripteten Objekten zu interagieren. Wir muessen also nicht erst ein aufwendiges Menue schreiben. Hier brauchen wir also keine Schleife um die einzelnen Links durch zu zaehlen, sondern koennen direkt die Linknummer verwenden die wir geklickt haben. Die Null in diesem Befehl llDetectedLinkNumber(0); bedeutet nicht die Linknummer, sondern der erste Link der geklickt wurde. Die else in diesem Beispiel ist eigentlich ueberfluessig, ich habe sie nur wegen der Vollstaendigkeit hinzugefuegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;Hello, Avatar!&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        integer num = llDetectedLinkNumber(0);&lt;br /&gt;
        string name = llGetLinkName(num);&lt;br /&gt;
        &lt;br /&gt;
        if(name == &amp;quot;Prim_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else if(name == &amp;quot;Link_Name&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llSay(0, name + &amp;quot; touched.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1217655</id>
		<title>User:Daemonika Nightfire</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1217655"/>
		<updated>2024-11-16T17:35:23Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* My personal LSL Script Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
{{SL-hCard/2.0&lt;br /&gt;
|image=Sl_image.png&lt;br /&gt;
|name=Daemonika Nightfire&lt;br /&gt;
|rezday=16 december 2007&lt;br /&gt;
|about=Owner of *DaeSigns*&lt;br /&gt;
|fields={{SL-hCard/field|Inworld|&lt;br /&gt;
* Second Life Profil:&lt;br /&gt;
**{{SL-Profile|Daemonika Nightfire}}&lt;br /&gt;
* Mainstore Region:&lt;br /&gt;
**{{SLurl|Polkadot|212|37|99|title=Polkadot}}&lt;br /&gt;
* Marketplace:&lt;br /&gt;
**[https://marketplace.secondlife.com/stores/30293 *DaeSigns*]&lt;br /&gt;
* Homepage:&lt;br /&gt;
**[https://daesigns.de daesigns.de]&lt;br /&gt;
* Delivery capped, even Notecards!&lt;br /&gt;
** Don&#039;t send me Notecards when i&#039;m offline, i receive your IM as Email. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Second Life Profil: [http://my.secondlife.com/daemonika.nightfire &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;D&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;aemonika &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;N&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;ightfire&amp;lt;/span&amp;gt;&#039;&#039;&#039;] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Daemonika Nightfire|talk]]|[[Special:Contributions/Daemonika Nightfire|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About my scripts==&lt;br /&gt;
* All my scripts and snippets that I publish here are licensed under [https://wiki.secondlife.com/wiki/Project:Terms_of_Service Creative Commons Attribution-Share Alike 3.0]&lt;br /&gt;
 &lt;br /&gt;
* Basically I use the Second Life standard format in my scripts. You will not find any script from me with a Javascript based style, where the clamps are behind the commands. I will not support scripts with this style. Very rarely do I pull longer chains of command together in unstyled way to generate an overview, learn more [https://wiki.secondlife.com/wiki/LSL_Style_Guide Style Guide]. Furthermore the events are always sorted by priority.&lt;br /&gt;
 &lt;br /&gt;
* I know my English is not the best, if you find stupid comments or spelling mistakes in my descriptions, feel free and correct the spelling, but never change any part of the scripts themselves.&lt;br /&gt;
&lt;br /&gt;
==Script Schule (deutsch)==&lt;br /&gt;
* Die einzelnen Seiten fuer die Schule koennen gegebenenfalls sehr lang sein, das liegt daran das ich versuche die Scripte schrittweise aufzubauen. Je weiter man nach unten scrollt desto aufwendiger / komplizierter werden die Beispiele. Trotz alle dem bemuehe ich mich, die Scripte auf ein Minimum zu beschraenken und auf unnoetige Beiwerke zu verzichten, wenn sie dem Verstaendnis-Prozess nicht dienlich sind.&lt;br /&gt;
 &lt;br /&gt;
* Bei saemtlichen Inhalten in dieser Kategorie handelt es sich um Beispiele und nicht zwingend um fertige Scripte.&lt;br /&gt;
* Inworld findet woechentlich Sonntags um 18 Uhr Unterricht statt. Voice hoeren notwendig.&lt;br /&gt;
* Mittlerweile haben sich in den letzten Jahren einige Projekte in unserem Kurs angesammelt, da es sich aber meist um Object-bezogene Scripte handelt, sind sie in der [http://maps.secondlife.com/secondlife/Polkadot/215/103/99 Schule] in blaue Kisten archiviert. Jede Kiste verfuegt ueber Fullperm Beispiele und koennen von jedem mitgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|custom=Geplante Termine:&#039;&#039;&#039; jeden &#039;&#039;&#039;Sonntag&#039;&#039;&#039; um &#039;&#039;&#039;18 Uhr&#039;&#039;&#039; auf [http://maps.secondlife.com/secondlife/Polkadot/206/106/99 Polkadot (Moderat)]}}&lt;br /&gt;
#&#039;&#039;&#039;Videos:&#039;&#039;&#039;&lt;br /&gt;
##[https://www.youtube.com/watch?v=d60zBQsZYLM Dae&#039;s Skript Kurs -Teil 1]&lt;br /&gt;
##[https://www.youtube.com/watch?v=bHmOFlzjEzE Dae&#039;s Skript Kurs -Teil 2]&lt;br /&gt;
##[https://www.youtube.com/watch?v=rzpKwIMHc3Y Dae&#039;s Skript Kurs -Teil 3]&lt;br /&gt;
##[https://www.youtube.com/watch?v=PdmJoDc1hhc Dae&#039;s Skript Kurs -Teil 4]&lt;br /&gt;
##[https://www.youtube.com/watch?v=VwpofniYmCk Dae&#039;s Skript Kurs -Teil 5]&lt;br /&gt;
##[https://www.youtube.com/watch?v=TGmacsNz0_g Dae&#039;s Skript Kurs -Teil 6]&lt;br /&gt;
#:&#039;&#039;Vielen Dank an [https://my.secondlife.com/uli.jansma Uli Jansma] fuer die tollen Videos.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Forum:&#039;&#039;&#039; Im Thread [https://www.slinfo.de/threads/scripten-lernen-deutsch.42120/ Scripten Lernen (Deutsch)] auf [https://www.slinfo.de/portal/ SLinfo.de] koennen natuerlich Fragen gestellt und diskutiert werden.&lt;br /&gt;
&lt;br /&gt;
{{DSNavSchool}}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Grundlagen | Grundlagen]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Wie ein Script aufgebaut ist.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Funktion | Funktion]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer global verwendete Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Schalter | Schalter]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Status-Wechsel TRUE &amp;amp; FALSE in unterschiedlichen Beispielen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Liste | Liste]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer die Verarbeitung von Listen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Ablaufsteuerung | Ablaufsteuerung]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer Schleifen &amp;amp; Co.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Tutorials==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Dynamic_Menu|*DS* Dynamisches Menue]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sich selbst automatisch generierendes Menue.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter|*DS* Single Pose Sitter]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches 1 Avatar Pose Script mit Notecard Verwaltung.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/linkset_data_example |*DS* llLinksetData Texture Changer (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Menue basierter Texture Changer mit Passwort geschuetztem LinksetData als Textur-Speicher.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/rezday_giver |*DS* Rezday Giver (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Ein einfacher Giver der Geschenke nur am entsprechenden Avatar-Geburtstag ausgibt.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/perm_trigger_anim |*DS* Permission Trigger Animation (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Die wichtigsten Funktionen fuer den reibungslosen Ablauf zum Animieren eines Avatars durch ein Attachment.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/xytText_Example |*DS* xyzText Example (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sehr kleines Beispiel fuer ein xyzText.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DynamischesLinkset |*DS* Dynamisches Linkset (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele zur Verwendung von Linknamen anstelle von Linknummern.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Tools_(de)|*DS* Tools (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Nuetzliche kleine Helfer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Memory_Walkthrough|*DS* Memory-Walkthrough (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script show you how you can limit the maximal memory for each mono-script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Variable_Tutorial|*DS* Variable Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer die unterschiedlichen Verwendungen von Variablen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Giver_Tutorial|*DS* Giver Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer einfache und erweiterte Giver.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Access_Tutorial|*DS* Access Tutorial (DE)]]&lt;br /&gt;
[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|*DS* Access Tutorial (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele zum Thema Berechtigung in ausfuehrbaren Befehlen.&lt;br /&gt;
Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Hovertext_Helper|*DS*_Hovertext_Helper (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Copy / paste this script into a New Prim and change the Primcolor with the Editmenu.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|*DS* LinkNumber-List_in_llSetLinkPrimitiveParamsFast (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==My personal LSL Script Library==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Scripts&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Advent_Giver|*DS* Advent Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script sends a different item to everyone who clicks on it every day of Advent.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Bot_Ejecter|*DS* Bot Ejecter (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sends bots home automatically.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|*DS* Building Rezzer 2024 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Doors|*DS* Smooth rotate door (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Neue Tuer-Scripte ohne lltargetOmega(... welche sowohl verlinkt, als auch unverlinkt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Privat_Sky|*DS* Privat-Sky (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches Script zum sperren des Luftraums ueber eine bestimmten hoehe fuer die ganze Parzelle oder Region.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Greeter%26Co|*DS* Greeter &amp;amp; Co (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Scripte fuer die Grundausstattung eines Shops, Clubs, oder andere oeffentliche Locations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Vendor|*DS* Vendor (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Vendor (Verkaufsautomat) Scripte zum verkaufen von geboxten Items.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|*DS* Anti (copy &amp;amp; transfer) (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|*DS* Anti Rezz (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|*DS* Rental-Cube v3.0.10 (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This is an Open-Source version of a Rental-Cube from Daemonika Nightfire.  Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Easy_LM_NC_Giver|*DS* Easy LM/NC Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Giver is useful as simple giver for NCs and/or LMs or as giver for inviting-cards.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Region_Reboot_Messenger|*DS*_Region_Reboot_Messenger (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, find all that are specified in the list when the Sim is back after a restart. So you must then not always look on the map, if the sim is back there. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Animation_Sit|*DS*_Animation_Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script must be placed together with a Pose / Animation in the Object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire &amp;amp; Simon Illyar]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Daes_Particle|*DS* Dae&#039;s Particle (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 More scripts and snippets follow in the future.&lt;br /&gt;
&lt;br /&gt;
==My fast blanko Textures==&lt;br /&gt;
* I created these very small textures to equip unimportant areas, because all textures are rendered by the viewer. If many surfaces are equipped with these small textures, the sim will rez faster.&lt;br /&gt;
* If you like the textures and want to have them fullperm, just contact me Inworld via IM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;UUID&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;size&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;red&#039;&#039;&#039;&lt;br /&gt;
||78a18236-f6e5-09ce-289c-3ffea180fb34&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;green&#039;&#039;&#039;&lt;br /&gt;
||9f3a7cee-7040-756b-0786-ea026601c451&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;blue&#039;&#039;&#039;&lt;br /&gt;
||c083207a-0c7c-f64f-77e5-da7675ca4e00&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;yellow&#039;&#039;&#039;&lt;br /&gt;
||16364314-ebcf-7d6a-dbab-f1a1331dd2cd&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;black&#039;&#039;&#039;&lt;br /&gt;
||8fd4a8ea-e5b4-af57-7d01-3b173d3608ce&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;white&#039;&#039;&#039;&lt;br /&gt;
||40ca82a1-c00d-39db-6c7d-ec7d48df4de3&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;transparent&#039;&#039;&#039;&lt;br /&gt;
||7cae828c-2d5d-ec8c-b8f6-855870bb2b66&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Advent_Giver&amp;diff=1217654</id>
		<title>User:Daemonika Nightfire/Scripts/Advent Giver</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Advent_Giver&amp;diff=1217654"/>
		<updated>2024-11-16T17:32:05Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Created page with &amp;quot;==*DS* Advent Giver v1.0.09== This script sends a different item to everyone who clicks on it every day of Advent. Group mode is also possible.  &amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt; /*     *D...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==*DS* Advent Giver v1.0.09==&lt;br /&gt;
This script sends a different item to everyone who clicks on it every day of Advent. Group mode is also possible.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Advent Giver (UTC time zone)&lt;br /&gt;
    Place 24 gifts in the content of this giver and enter the names in the desired order in the list.&lt;br /&gt;
    This script automatically selects an item for each day from the provided list.&lt;br /&gt;
    &lt;br /&gt;
    Example: On 6th december you will receive the 6th item from the list.&lt;br /&gt;
    &lt;br /&gt;
    It is recommended that you only insert gifts that can be copied, because everyone can click multiple times.&lt;br /&gt;
    This means that no Redelivery is required for the gifts.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Replace the 24 entries with the names of the gifts between the quotation marks.&lt;br /&gt;
list items = [&lt;br /&gt;
&amp;quot;one&amp;quot;,&lt;br /&gt;
&amp;quot;two&amp;quot;,&lt;br /&gt;
&amp;quot;three&amp;quot;,&lt;br /&gt;
&amp;quot;four&amp;quot;,&lt;br /&gt;
&amp;quot;five&amp;quot;,&lt;br /&gt;
&amp;quot;six&amp;quot;,&lt;br /&gt;
&amp;quot;seven&amp;quot;,&lt;br /&gt;
&amp;quot;eight&amp;quot;,&lt;br /&gt;
&amp;quot;nine&amp;quot;,&lt;br /&gt;
&amp;quot;ten&amp;quot;,&lt;br /&gt;
&amp;quot;eleven&amp;quot;,&lt;br /&gt;
&amp;quot;twelve&amp;quot;,&lt;br /&gt;
&amp;quot;thirteen&amp;quot;,&lt;br /&gt;
&amp;quot;fourteen&amp;quot;,&lt;br /&gt;
&amp;quot;fifteen&amp;quot;,&lt;br /&gt;
&amp;quot;sixteen&amp;quot;,&lt;br /&gt;
&amp;quot;seventeen&amp;quot;,&lt;br /&gt;
&amp;quot;eighteen&amp;quot;,&lt;br /&gt;
&amp;quot;nineteen&amp;quot;,&lt;br /&gt;
&amp;quot;twenty&amp;quot;,&lt;br /&gt;
&amp;quot;twenty-one&amp;quot;,&lt;br /&gt;
&amp;quot;twenty-two&amp;quot;,&lt;br /&gt;
&amp;quot;twenty-three&amp;quot;,&lt;br /&gt;
&amp;quot;twenty-four&amp;quot;&lt;br /&gt;
];&lt;br /&gt;
&lt;br /&gt;
// Set TRUE if you only want to send the gifts to group members.&lt;br /&gt;
// Set FALSE if you want to send the gifts to everyone.&lt;br /&gt;
integer group_mode = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Enter the key(uuid) of your group here.&lt;br /&gt;
key group_uuid = &amp;quot;6fcac03d-2c09-d5a7-e73f-ff73e15965d4&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// NOTHING TO DO BELOW THIS LINE&lt;br /&gt;
// _______________________________________________________________________________________________________&lt;br /&gt;
&lt;br /&gt;
integer date2num(string data)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(data, [&amp;quot;-&amp;quot;], []);&lt;br /&gt;
    //string year = llList2String(parsed, 0);&lt;br /&gt;
    string month = llList2String(parsed, 1);&lt;br /&gt;
    string day = llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    if(month != &amp;quot;12&amp;quot;) // It only works with this in december.&lt;br /&gt;
    {&lt;br /&gt;
        return -1;&lt;br /&gt;
    }&lt;br /&gt;
    return (integer)day;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
integer error = 0;&lt;br /&gt;
CheckInv()&lt;br /&gt;
{&lt;br /&gt;
    integer count = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
    llSetText(&amp;quot;floating text disappears after setup\nItems loaded: &amp;quot; + (string)count, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    &lt;br /&gt;
    integer length = llGetListLength(items);&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string name = llList2String(items, i);&lt;br /&gt;
        if(llGetInventoryType(name) != INVENTORY_OBJECT)&lt;br /&gt;
        {&lt;br /&gt;
            error++;&lt;br /&gt;
            llOwnerSay(&amp;quot;/me misspelled or missing item: &amp;quot; + name);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt; length);&lt;br /&gt;
    &lt;br /&gt;
    if(error == 0)&lt;br /&gt;
    {&lt;br /&gt;
        llSetText(&amp;quot;&amp;quot;, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        CheckInv();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        integer index = date2num(llGetDate());&lt;br /&gt;
        &lt;br /&gt;
        if(index &amp;gt; 0 &amp;amp;&amp;amp; index &amp;lt; 25) // This means that Advent is limited from 1 - 24&lt;br /&gt;
        {&lt;br /&gt;
            string current_item = llList2String(items, index-1);&lt;br /&gt;
            //llSay(0, current_item);&lt;br /&gt;
            &lt;br /&gt;
            if(error == 0)&lt;br /&gt;
            {&lt;br /&gt;
                if(!group_mode)&lt;br /&gt;
                {&lt;br /&gt;
                    llGiveInventory(agent, current_item);&lt;br /&gt;
                }&lt;br /&gt;
                else if(group_mode)&lt;br /&gt;
                {&lt;br /&gt;
                    integer group = llSameGroup(agent);&lt;br /&gt;
                    &lt;br /&gt;
                    if(group)&lt;br /&gt;
                    {&lt;br /&gt;
                        llGiveInventory(agent, current_item);&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        llRegionSayTo(agent, 0, &amp;quot;Please join the group secondlife:///app/group/&amp;quot; + (string)group_uuid + &amp;quot;/about first.&amp;quot;);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Please correct your list, one or more items cannot be found.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else&lt;br /&gt;
        {&lt;br /&gt;
            llRegionSayTo(agent, 0, &amp;quot;I&#039;m sorry, it&#039;s not the Advent season.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            CheckInv();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217224</id>
		<title>User:Daemonika Nightfire/Scripts/Bot Ejecter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217224"/>
		<updated>2024-09-07T16:37:12Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Bot Ejecter v1.0.01 ==&lt;br /&gt;
This little script sends every agent with the scritped agent status (usually called bot) home within a second without warning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.00 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
Refresh()&lt;br /&gt;
{&lt;br /&gt;
    string msg = &amp;quot;Ejected Bots: &amp;quot; + (string)counter;&lt;br /&gt;
    llSetText(msg, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    llSetObjectDesc(msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = (integer)llLinksetDataRead(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        Refresh();&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                    &lt;br /&gt;
                    counter++;&lt;br /&gt;
                    llLinksetDataWrite(&amp;quot;ejects&amp;quot;, (string)counter);&lt;br /&gt;
                    Refresh();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataDelete(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== *DS* Bot Ejecter v1.0.04 ==&lt;br /&gt;
Extended Version with individual statistics.&lt;br /&gt;
 Chat Output Example:&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 1. Known bot: osiventhy (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 2. Known bot: iongensp (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 3. Known bot: Natalia Porchers (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 4. Known bot: ecublem (2)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 5. Known bot: plishloromb (2)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 6. Known bot: oventero (2)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 7. Known bot: asiourawfl (2)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 8. Known bot: ltiventab (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 9. Known bot: froaphorc (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 10. Known bot: erypnoid (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 11. Known bot: ntudece (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 12. Known bot: blesequativ (3)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 13. Known bot: ychorap (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 14. Known bot: boatonic (2)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 15. Known bot: gadroupb (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 16. Known bot: pictichea (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 17. Known bot: DVBT (1)&lt;br /&gt;
 [09:19:30] *DS* Bot Ejecter v1.0.04 (free to copy) 18. Known bot: Selena Zalivstok (1)&lt;br /&gt;
 [09:19:31] *DS* Bot Ejecter v1.0.04 (free to copy) 19. Known bot: cononym (1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.04 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
list known_bots = [];&lt;br /&gt;
integer num = 0;&lt;br /&gt;
&lt;br /&gt;
integer total = 0;&lt;br /&gt;
Refresh()&lt;br /&gt;
{&lt;br /&gt;
    string msg = &amp;quot;Ejected bots: &amp;quot; + (string)total;&lt;br /&gt;
    llSetText(msg, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    llSetObjectDesc(msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Refresh();&lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0); // stops the timer temporarily to process the list&lt;br /&gt;
        &lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    if(!~llListFindList(known_bots, [agent]))&lt;br /&gt;
                    {&lt;br /&gt;
                        known_bots += agent;&lt;br /&gt;
                        known_bots += 1;&lt;br /&gt;
                        &lt;br /&gt;
                        if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            llDeleteSubList(known_bots, 0, 1);&lt;br /&gt;
                        }&lt;br /&gt;
                        num = llGetListLength(known_bots);&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        integer index = llListFindList(known_bots, [agent]);&lt;br /&gt;
                        integer count = llList2Integer(known_bots, index+1);&lt;br /&gt;
                        &lt;br /&gt;
                        count++;&lt;br /&gt;
                        known_bots = llListReplaceList(known_bots, [count], index+1, index+1);&lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                    total++;&lt;br /&gt;
                    Refresh();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1.0); // restart the timer&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        key user = llDetectedKey(0);&lt;br /&gt;
        key current_uuid;&lt;br /&gt;
        integer current_number;&lt;br /&gt;
        integer counter = 0;&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            if(num &amp;gt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                if(!(i&amp;amp;1))&lt;br /&gt;
                {&lt;br /&gt;
                    current_uuid = llList2Key(known_bots, i);&lt;br /&gt;
                }&lt;br /&gt;
                else if(i&amp;amp;1)&lt;br /&gt;
                {&lt;br /&gt;
                    current_number = llList2Integer(known_bots, i);&lt;br /&gt;
                    &lt;br /&gt;
                    counter++;&lt;br /&gt;
                    llRegionSayTo(user, 0, &amp;quot;/me &amp;quot; + (string)counter + &amp;quot;. Known bot: secondlife:///app/agent/&amp;quot; + (string)current_uuid + &amp;quot;/about (&amp;quot; + (string)current_number + &amp;quot;)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRegionSayTo(user, 0, &amp;quot;Currently no bot stored.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; num);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217223</id>
		<title>User:Daemonika Nightfire/Scripts/Bot Ejecter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217223"/>
		<updated>2024-09-07T16:34:52Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: extended version added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Bot Ejecter v1.0.01 ==&lt;br /&gt;
This little script sends every agent with the scritped agent status (usually called bot) home within a second without warning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.00 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
Refresh()&lt;br /&gt;
{&lt;br /&gt;
    string msg = &amp;quot;Ejected Bots: &amp;quot; + (string)counter;&lt;br /&gt;
    llSetText(msg, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    llSetObjectDesc(msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = (integer)llLinksetDataRead(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        Refresh();&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                    &lt;br /&gt;
                    counter++;&lt;br /&gt;
                    llLinksetDataWrite(&amp;quot;ejects&amp;quot;, (string)counter);&lt;br /&gt;
                    Refresh();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataDelete(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== *DS* Bot Ejecter v1.0.04 =&lt;br /&gt;
Extended Version with individual statistics.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.04 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
list known_bots = [];&lt;br /&gt;
integer num = 0;&lt;br /&gt;
&lt;br /&gt;
integer total = 0;&lt;br /&gt;
Refresh()&lt;br /&gt;
{&lt;br /&gt;
    string msg = &amp;quot;Ejected bots: &amp;quot; + (string)total;&lt;br /&gt;
    llSetText(msg, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    llSetObjectDesc(msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        Refresh();&lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0); // stops the timer temporarily to process the list&lt;br /&gt;
        &lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    if(!~llListFindList(known_bots, [agent]))&lt;br /&gt;
                    {&lt;br /&gt;
                        known_bots += agent;&lt;br /&gt;
                        known_bots += 1;&lt;br /&gt;
                        &lt;br /&gt;
                        if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            llDeleteSubList(known_bots, 0, 1);&lt;br /&gt;
                        }&lt;br /&gt;
                        num = llGetListLength(known_bots);&lt;br /&gt;
                    }&lt;br /&gt;
                    else&lt;br /&gt;
                    {&lt;br /&gt;
                        integer index = llListFindList(known_bots, [agent]);&lt;br /&gt;
                        integer count = llList2Integer(known_bots, index+1);&lt;br /&gt;
                        &lt;br /&gt;
                        count++;&lt;br /&gt;
                        known_bots = llListReplaceList(known_bots, [count], index+1, index+1);&lt;br /&gt;
                    }&lt;br /&gt;
                    &lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                    total++;&lt;br /&gt;
                    Refresh();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1.0); // restart the timer&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer number)&lt;br /&gt;
    {&lt;br /&gt;
        key user = llDetectedKey(0);&lt;br /&gt;
        key current_uuid;&lt;br /&gt;
        integer current_number;&lt;br /&gt;
        integer counter = 0;&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            if(num &amp;gt; 0)&lt;br /&gt;
            {&lt;br /&gt;
                if(!(i&amp;amp;1))&lt;br /&gt;
                {&lt;br /&gt;
                    current_uuid = llList2Key(known_bots, i);&lt;br /&gt;
                }&lt;br /&gt;
                else if(i&amp;amp;1)&lt;br /&gt;
                {&lt;br /&gt;
                    current_number = llList2Integer(known_bots, i);&lt;br /&gt;
                    &lt;br /&gt;
                    counter++;&lt;br /&gt;
                    llRegionSayTo(user, 0, &amp;quot;/me &amp;quot; + (string)counter + &amp;quot;. Known bot: secondlife:///app/agent/&amp;quot; + (string)current_uuid + &amp;quot;/about (&amp;quot; + (string)current_number + &amp;quot;)&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else&lt;br /&gt;
            {&lt;br /&gt;
                llRegionSayTo(user, 0, &amp;quot;Currently no bot stored.&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; num);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1217125</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1217125"/>
		<updated>2024-08-13T14:22:36Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter v5.0.04 ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;0, 0, 0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string choice;&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key uuid, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(uuid, title + &amp;quot;\nCurrent choice: [ &amp;quot; + choice + &amp;quot; ]&amp;quot;, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    &lt;br /&gt;
                    choice = llList2String(button_index, 0);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        posen += line;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                choice = cmd;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            if(id == owner)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Insert the following line into the notecard or replace it.\n&amp;quot; + store);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    llStopAnimation(Animation);&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217119</id>
		<title>User:Daemonika Nightfire/Scripts/Bot Ejecter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1217119"/>
		<updated>2024-08-12T15:35:07Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Bot Ejecter v1.0.01 ==&lt;br /&gt;
This little script sends every agent with the scritped agent status (usually called bot) home within a second without warning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.00 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
integer counter = 0;&lt;br /&gt;
Refresh()&lt;br /&gt;
{&lt;br /&gt;
    string msg = &amp;quot;Ejected Bots: &amp;quot; + (string)counter;&lt;br /&gt;
    llSetText(msg, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
    llSetObjectDesc(msg);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        counter = (integer)llLinksetDataRead(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        Refresh();&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                    &lt;br /&gt;
                    counter++;&lt;br /&gt;
                    llLinksetDataWrite(&amp;quot;ejects&amp;quot;, (string)counter);&lt;br /&gt;
                    Refresh();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataDelete(&amp;quot;ejects&amp;quot;);&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217006</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217006"/>
		<updated>2024-08-03T16:03:09Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Automatisch generiertes Menue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht fuer alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. Beachte in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
=== Inhalt ===&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende Berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notecard ===&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agentlist (Radar) ===&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt und in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1217005</id>
		<title>User:Daemonika Nightfire</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1217005"/>
		<updated>2024-08-03T15:43:15Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* General Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
{{SL-hCard/2.0&lt;br /&gt;
|image=Sl_image.png&lt;br /&gt;
|name=Daemonika Nightfire&lt;br /&gt;
|rezday=16 december 2007&lt;br /&gt;
|about=Owner of *DaeSigns*&lt;br /&gt;
|fields={{SL-hCard/field|Inworld|&lt;br /&gt;
* Second Life Profil:&lt;br /&gt;
**{{SL-Profile|Daemonika Nightfire}}&lt;br /&gt;
* Mainstore Region:&lt;br /&gt;
**{{SLurl|Polkadot|212|37|99|title=Polkadot}}&lt;br /&gt;
* Marketplace:&lt;br /&gt;
**[https://marketplace.secondlife.com/stores/30293 *DaeSigns*]&lt;br /&gt;
* Homepage:&lt;br /&gt;
**[https://daesigns.de daesigns.de]&lt;br /&gt;
* Delivery capped, even Notecards!&lt;br /&gt;
** Don&#039;t send me Notecards when i&#039;m offline, i receive your IM as Email. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Second Life Profil: [http://my.secondlife.com/daemonika.nightfire &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;D&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;aemonika &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;N&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;ightfire&amp;lt;/span&amp;gt;&#039;&#039;&#039;] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Daemonika Nightfire|talk]]|[[Special:Contributions/Daemonika Nightfire|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About my scripts==&lt;br /&gt;
* All my scripts and snippets that I publish here are licensed under [https://wiki.secondlife.com/wiki/Project:Terms_of_Service Creative Commons Attribution-Share Alike 3.0]&lt;br /&gt;
 &lt;br /&gt;
* Basically I use the Second Life standard format in my scripts. You will not find any script from me with a Javascript based style, where the clamps are behind the commands. I will not support scripts with this style. Very rarely do I pull longer chains of command together in unstyled way to generate an overview, learn more [https://wiki.secondlife.com/wiki/LSL_Style_Guide Style Guide]. Furthermore the events are always sorted by priority.&lt;br /&gt;
 &lt;br /&gt;
* I know my English is not the best, if you find stupid comments or spelling mistakes in my descriptions, feel free and correct the spelling, but never change any part of the scripts themselves.&lt;br /&gt;
&lt;br /&gt;
==Script Schule (deutsch)==&lt;br /&gt;
* Die einzelnen Seiten fuer die Schule koennen gegebenenfalls sehr lang sein, das liegt daran das ich versuche die Scripte schrittweise aufzubauen. Je weiter man nach unten scrollt desto aufwendiger / komplizierter werden die Beispiele. Trotz alle dem bemuehe ich mich, die Scripte auf ein Minimum zu beschraenken und auf unnoetige Beiwerke zu verzichten, wenn sie dem Verstaendnis-Prozess nicht dienlich sind.&lt;br /&gt;
 &lt;br /&gt;
* Bei saemtlichen Inhalten in dieser Kategorie handelt es sich um Beispiele und nicht zwingend um fertige Scripte.&lt;br /&gt;
* Inworld findet woechentlich Sonntags um 18 Uhr Unterricht statt. Voice hoeren notwendig.&lt;br /&gt;
* Mittlerweile haben sich in den letzten Jahren einige Projekte in unserem Kurs angesammelt, da es sich aber meist um Object-bezogene Scripte handelt, sind sie in der [http://maps.secondlife.com/secondlife/Polkadot/215/103/99 Schule] in blaue Kisten archiviert. Jede Kiste verfuegt ueber Fullperm Beispiele und koennen von jedem mitgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|custom=Geplante Termine:&#039;&#039;&#039; jeden &#039;&#039;&#039;Sonntag&#039;&#039;&#039; um &#039;&#039;&#039;18 Uhr&#039;&#039;&#039; auf [http://maps.secondlife.com/secondlife/Polkadot/206/106/99 Polkadot (Moderat)]}}&lt;br /&gt;
#&#039;&#039;&#039;Videos:&#039;&#039;&#039;&lt;br /&gt;
##[https://www.youtube.com/watch?v=d60zBQsZYLM Dae&#039;s Skript Kurs -Teil 1]&lt;br /&gt;
##[https://www.youtube.com/watch?v=bHmOFlzjEzE Dae&#039;s Skript Kurs -Teil 2]&lt;br /&gt;
##[https://www.youtube.com/watch?v=rzpKwIMHc3Y Dae&#039;s Skript Kurs -Teil 3]&lt;br /&gt;
##[https://www.youtube.com/watch?v=PdmJoDc1hhc Dae&#039;s Skript Kurs -Teil 4]&lt;br /&gt;
##[https://www.youtube.com/watch?v=VwpofniYmCk Dae&#039;s Skript Kurs -Teil 5]&lt;br /&gt;
##[https://www.youtube.com/watch?v=TGmacsNz0_g Dae&#039;s Skript Kurs -Teil 6]&lt;br /&gt;
#:&#039;&#039;Vielen Dank an [https://my.secondlife.com/uli.jansma Uli Jansma] fuer die tollen Videos.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Forum:&#039;&#039;&#039; Im Thread [https://www.slinfo.de/threads/scripten-lernen-deutsch.42120/ Scripten Lernen (Deutsch)] auf [https://www.slinfo.de/portal/ SLinfo.de] koennen natuerlich Fragen gestellt und diskutiert werden.&lt;br /&gt;
&lt;br /&gt;
{{DSNavSchool}}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Grundlagen | Grundlagen]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Wie ein Script aufgebaut ist.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Funktion | Funktion]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer global verwendete Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Schalter | Schalter]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Status-Wechsel TRUE &amp;amp; FALSE in unterschiedlichen Beispielen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Liste | Liste]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer die Verarbeitung von Listen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Ablaufsteuerung | Ablaufsteuerung]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer Schleifen &amp;amp; Co.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Tutorials==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Dynamic_Menu|*DS* Dynamisches Menue]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sich selbst automatisch generierendes Menue.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter|*DS* Single Pose Sitter]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches 1 Avatar Pose Script mit Notecard Verwaltung.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/linkset_data_example |*DS* llLinksetData Texture Changer (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Menue basierter Texture Changer mit Passwort geschuetztem LinksetData als Textur-Speicher.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/rezday_giver |*DS* Rezday Giver (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Ein einfacher Giver der Geschenke nur am entsprechenden Avatar-Geburtstag ausgibt.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/perm_trigger_anim |*DS* Permission Trigger Animation (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Die wichtigsten Funktionen fuer den reibungslosen Ablauf zum Animieren eines Avatars durch ein Attachment.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/xytText_Example |*DS* xyzText Example (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sehr kleines Beispiel fuer ein xyzText.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DynamischesLinkset |*DS* Dynamisches Linkset (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele zur Verwendung von Linknamen anstelle von Linknummern.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Tools_(de)|*DS* Tools (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Nuetzliche kleine Helfer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Memory_Walkthrough|*DS* Memory-Walkthrough (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script show you how you can limit the maximal memory for each mono-script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Variable_Tutorial|*DS* Variable Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer die unterschiedlichen Verwendungen von Variablen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Giver_Tutorial|*DS* Giver Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer einfache und erweiterte Giver.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Access_Tutorial|*DS* Access Tutorial (DE)]]&lt;br /&gt;
[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|*DS* Access Tutorial (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele zum Thema Berechtigung in ausfuehrbaren Befehlen.&lt;br /&gt;
Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Hovertext_Helper|*DS*_Hovertext_Helper (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Copy / paste this script into a New Prim and change the Primcolor with the Editmenu.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|*DS* LinkNumber-List_in_llSetLinkPrimitiveParamsFast (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==My personal LSL Script Library==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Scripts&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Bot_Ejecter|*DS* Bot Ejecter (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sends bots home automatically.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|*DS* Building Rezzer 2024 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Doors|*DS* Smooth rotate door (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Neue Tuer-Scripte ohne lltargetOmega(... welche sowohl verlinkt, als auch unverlinkt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Privat_Sky|*DS* Privat-Sky (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches Script zum sperren des Luftraums ueber eine bestimmten hoehe fuer die ganze Parzelle oder Region.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Greeter%26Co|*DS* Greeter &amp;amp; Co (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Scripte fuer die Grundausstattung eines Shops, Clubs, oder andere oeffentliche Locations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Vendor|*DS* Vendor (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Vendor (Verkaufsautomat) Scripte zum verkaufen von geboxten Items.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|*DS* Anti (copy &amp;amp; transfer) (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|*DS* Anti Rezz (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|*DS* Rental-Cube v3.0.10 (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This is an Open-Source version of a Rental-Cube from Daemonika Nightfire.  Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Easy_LM_NC_Giver|*DS* Easy LM/NC Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Giver is useful as simple giver for NCs and/or LMs or as giver for inviting-cards.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Region_Reboot_Messenger|*DS*_Region_Reboot_Messenger (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, find all that are specified in the list when the Sim is back after a restart. So you must then not always look on the map, if the sim is back there. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Animation_Sit|*DS*_Animation_Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script must be placed together with a Pose / Animation in the Object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire &amp;amp; Simon Illyar]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Daes_Particle|*DS* Dae&#039;s Particle (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 More scripts and snippets follow in the future.&lt;br /&gt;
&lt;br /&gt;
==My fast blanko Textures==&lt;br /&gt;
* I created these very small textures to equip unimportant areas, because all textures are rendered by the viewer. If many surfaces are equipped with these small textures, the sim will rez faster.&lt;br /&gt;
* If you like the textures and want to have them fullperm, just contact me Inworld via IM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;UUID&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;size&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;red&#039;&#039;&#039;&lt;br /&gt;
||78a18236-f6e5-09ce-289c-3ffea180fb34&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;green&#039;&#039;&#039;&lt;br /&gt;
||9f3a7cee-7040-756b-0786-ea026601c451&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;blue&#039;&#039;&#039;&lt;br /&gt;
||c083207a-0c7c-f64f-77e5-da7675ca4e00&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;yellow&#039;&#039;&#039;&lt;br /&gt;
||16364314-ebcf-7d6a-dbab-f1a1331dd2cd&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;black&#039;&#039;&#039;&lt;br /&gt;
||8fd4a8ea-e5b4-af57-7d01-3b173d3608ce&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;white&#039;&#039;&#039;&lt;br /&gt;
||40ca82a1-c00d-39db-6c7d-ec7d48df4de3&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;transparent&#039;&#039;&#039;&lt;br /&gt;
||7cae828c-2d5d-ec8c-b8f6-855870bb2b66&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217004</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217004"/>
		<updated>2024-08-03T15:36:43Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Automatisch generiertes Menue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht fuer alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
=== Inhalt ===&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende Berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notecard ===&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agentlist (Radar) ===&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt und in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217003</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217003"/>
		<updated>2024-08-03T15:34:12Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
=== Inhalt ===&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende Berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Notecard ===&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Agentlist (Radar) ===&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt und in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217002</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217002"/>
		<updated>2024-08-03T15:31:47Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Agentlist (Radar) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende Berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notecard ==&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agentlist (Radar) ==&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt und in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217001</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217001"/>
		<updated>2024-08-03T15:31:18Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Inhalt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende Berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notecard ==&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agentlist (Radar) ==&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt un in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217000</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1217000"/>
		<updated>2024-08-03T15:30:58Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Automatisch generiertes Menue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden Befehle befinden.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notecard ==&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agentlist (Radar) ==&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt un in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216999</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216999"/>
		<updated>2024-08-03T15:30:29Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Inhalts Basierendes Menue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Automatisch generiertes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden befehle befinden.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notecard ==&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agentlist (Radar) ==&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt un in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216998</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216998"/>
		<updated>2024-08-03T15:29:43Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Inhalts Basierendes Menue ==&lt;br /&gt;
Ich werde hier nicht für alle moeglichen Varianten das gesamte Menue wiederholen. Stattdessen beschreibe ich, wie die Liste gefuellt werden kann. beachte dabei, in welchen Events sich die entsprechenden befehle befinden.&lt;br /&gt;
&lt;br /&gt;
== Inhalt ==&lt;br /&gt;
In diesem Beispiel siehst du, wie der Inhalt eines Objekts ausgelesen, durchgezaehlt und die Namen in der Liste gespeichert werden. Denke daran, wenn du Animationen auflisten und per Knopfdruck abspielen moechtest, das du zusaetzlich noch entsprechende berechtigungen schaffen musst. (siehe [[LlRequestPermissions]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(qty &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string qty_name = llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
                entrys += qty_name;&lt;br /&gt;
                &lt;br /&gt;
                if(llGetFreeMemory() &amp;lt; 10000)&lt;br /&gt;
                {&lt;br /&gt;
                    llOwnerSay(&amp;quot;/me Memory Control: Unable to add more entrys.&amp;quot;);&lt;br /&gt;
                    i = qty;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; qty);&lt;br /&gt;
            &lt;br /&gt;
            qty = llGetListLength(entrys);&lt;br /&gt;
        }&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Notecard ==&lt;br /&gt;
Dieses Beispiel liest eine Notecard aus, dabei werden die einzelnen Zeilen gezaehlt und die Texte der Zeilen in der Liste gespeichert.&lt;br /&gt;
Hierfuer ist eine Notecard erforderlich, aehnlich wie folgendes Beispiel.&lt;br /&gt;
 New Note&lt;br /&gt;
&lt;br /&gt;
 text01&lt;br /&gt;
 text02&lt;br /&gt;
 text03&lt;br /&gt;
 text04&lt;br /&gt;
 text05&lt;br /&gt;
 text06&lt;br /&gt;
 text07&lt;br /&gt;
 text08&lt;br /&gt;
 text09&lt;br /&gt;
 text10&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
string nc_name = &amp;quot;&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        nc_name = llGetInventoryName(INVENTORY_NOTECARD, 0);&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    qty = llGetListLength(entrys);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        if(llGetFreeMemory() &amp;gt;= 10000)&lt;br /&gt;
                        {&lt;br /&gt;
                            entrys += line;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Agentlist (Radar) ==&lt;br /&gt;
Aehnlich wie die New Age Radar, wird auch hier lediglich die Agentlist auf der Region abgefragt un in die Liste eingepflegt.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [];&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        entrys = llGetAgentList(AGENT_LIST_REGION, []); // AGENT_LIST_PARCEL&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&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>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216997</id>
		<title>User:Daemonika Nightfire/Scripts/Dynamic Menu</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Dynamic_Menu&amp;diff=1216997"/>
		<updated>2024-08-03T15:10:01Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Created page with &amp;quot;== Dynamisches Menue == Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Me...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Dynamisches Menue ==&lt;br /&gt;
Ein dynamisches Menue ist ein Menue, das sich anhand der verfuegbaren Daten aus einer Liste selbst generiert. In diesem Basis-Beispiel haben wir ein Menue mit einer vordefinierten Liste, in der lediglich schriftlich auf Englisch von 1 bis 10 gezaehlt wird. Wenn wir nun im Menue einen stellvertretenden Button druecken, wird das entsprechende Wort im Chat ausgegeben.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
// Liste mit Eintraegen&lt;br /&gt;
integer qty = 0;&lt;br /&gt;
list entrys = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;,&amp;quot;Ten&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Generiert ein menue aus der Liste&lt;br /&gt;
list menubutton = [];&lt;br /&gt;
list navigation = [];&lt;br /&gt;
string menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
integer index_start = 0;&lt;br /&gt;
integer index_end = 5;&lt;br /&gt;
integer selection = 6;&lt;br /&gt;
BuildMenu()&lt;br /&gt;
{&lt;br /&gt;
    menubutton = [];&lt;br /&gt;
    navigation = [];&lt;br /&gt;
    menudesc = &amp;quot;&amp;quot;;&lt;br /&gt;
    &lt;br /&gt;
    // Startpunkt befindet sich unter 0.&lt;br /&gt;
    if(index_start &amp;lt; 0)&lt;br /&gt;
    {&lt;br /&gt;
        // Der Startpunkt ist das Maximum abzueglich des unteilbaren Rests von Maximum/selection.&lt;br /&gt;
        index_start = qty - (qty%selection);&lt;br /&gt;
        if(index_start == qty)&lt;br /&gt;
        {&lt;br /&gt;
            index_start = qty - selection;&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // The Startpunkt liegt ueber dem Maximum&lt;br /&gt;
    if(index_start &amp;gt; qty-1)&lt;br /&gt;
    {&lt;br /&gt;
        // Damit fangen wir dann einfach wieder bei 0 an.&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Das anzuzeigende Ende wird vom endgueltigen Startpunkt aus bestimmt.&lt;br /&gt;
    index_end = index_start + selection-1;&lt;br /&gt;
    if(index_end &amp;gt;= qty)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    navigation = [&amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;];&lt;br /&gt;
    if(qty &amp;lt;= selection)&lt;br /&gt;
    {&lt;br /&gt;
        index_end = qty-1;&lt;br /&gt;
        navigation = [] + [&amp;quot;...&amp;quot;, &amp;quot;Close&amp;quot;, &amp;quot;...&amp;quot;];&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    menudesc = &amp;quot;\nChoose your options.\n\n&amp;quot;;&lt;br /&gt;
    integer i = index_start;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        string number = (string)(i+1);&lt;br /&gt;
        menudesc += number + &amp;quot;) &amp;quot; + llGetSubString(llList2String(entrys, i), 0, 39) + &amp;quot;\n&amp;quot;;&lt;br /&gt;
        menubutton += number;&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt;= index_end);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Generiert einen zufaelligen Menue-Channel&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
OpenMenu(key user, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    llSetTimerEvent(60.0);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        qty = llGetListLength(entrys);&lt;br /&gt;
        llSay(0, &amp;quot;\n&amp;quot; + (string)qty + &amp;quot; entrys loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        index_start = 0;&lt;br /&gt;
        index_end = selection-1;&lt;br /&gt;
        BuildMenu();&lt;br /&gt;
        OpenMenu(agent, menudesc, navigation + menubutton);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        list parsed = llParseString2List(msg, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(parsed, 0);&lt;br /&gt;
        //string data = llList2String(parsed, 1); // Falls wir zweiteilige Commandos nutzen&lt;br /&gt;
        &lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {            &lt;br /&gt;
            if(cmd == &amp;quot;Close&amp;quot; || cmd == &amp;quot;...&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                llSetTimerEvent(0.0);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;gt;&amp;gt;&amp;gt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start += selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(cmd == &amp;quot;&amp;lt;&amp;lt;&amp;lt;&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                index_start -= selection;&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
            else if(~llListFindList(menubutton, [cmd]))&lt;br /&gt;
            {&lt;br /&gt;
                string choice = llList2String(entrys, (integer)cmd-1);&lt;br /&gt;
                llOwnerSay(&amp;quot;entry: &amp;quot; + choice);&lt;br /&gt;
                &lt;br /&gt;
                BuildMenu();&lt;br /&gt;
                OpenMenu(id, menudesc, navigation + menubutton);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216983</id>
		<title>User:Daemonika Nightfire</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216983"/>
		<updated>2024-08-01T16:20:55Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* My personal LSL Script Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
{{SL-hCard/2.0&lt;br /&gt;
|image=Sl_image.png&lt;br /&gt;
|name=Daemonika Nightfire&lt;br /&gt;
|rezday=16 december 2007&lt;br /&gt;
|about=Owner of *DaeSigns*&lt;br /&gt;
|fields={{SL-hCard/field|Inworld|&lt;br /&gt;
* Second Life Profil:&lt;br /&gt;
**{{SL-Profile|Daemonika Nightfire}}&lt;br /&gt;
* Mainstore Region:&lt;br /&gt;
**{{SLurl|Polkadot|212|37|99|title=Polkadot}}&lt;br /&gt;
* Marketplace:&lt;br /&gt;
**[https://marketplace.secondlife.com/stores/30293 *DaeSigns*]&lt;br /&gt;
* Homepage:&lt;br /&gt;
**[https://daesigns.de daesigns.de]&lt;br /&gt;
* Delivery capped, even Notecards!&lt;br /&gt;
** Don&#039;t send me Notecards when i&#039;m offline, i receive your IM as Email. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Second Life Profil: [http://my.secondlife.com/daemonika.nightfire &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;D&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;aemonika &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;N&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;ightfire&amp;lt;/span&amp;gt;&#039;&#039;&#039;] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Daemonika Nightfire|talk]]|[[Special:Contributions/Daemonika Nightfire|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About my scripts==&lt;br /&gt;
* All my scripts and snippets that I publish here are licensed under [https://wiki.secondlife.com/wiki/Project:Terms_of_Service Creative Commons Attribution-Share Alike 3.0]&lt;br /&gt;
 &lt;br /&gt;
* Basically I use the Second Life standard format in my scripts. You will not find any script from me with a Javascript based style, where the clamps are behind the commands. I will not support scripts with this style. Very rarely do I pull longer chains of command together in unstyled way to generate an overview, learn more [https://wiki.secondlife.com/wiki/LSL_Style_Guide Style Guide]. Furthermore the events are always sorted by priority.&lt;br /&gt;
 &lt;br /&gt;
* I know my English is not the best, if you find stupid comments or spelling mistakes in my descriptions, feel free and correct the spelling, but never change any part of the scripts themselves.&lt;br /&gt;
&lt;br /&gt;
==Script Schule (deutsch)==&lt;br /&gt;
* Die einzelnen Seiten fuer die Schule koennen gegebenenfalls sehr lang sein, das liegt daran das ich versuche die Scripte schrittweise aufzubauen. Je weiter man nach unten scrollt desto aufwendiger / komplizierter werden die Beispiele. Trotz alle dem bemuehe ich mich, die Scripte auf ein Minimum zu beschraenken und auf unnoetige Beiwerke zu verzichten, wenn sie dem Verstaendnis-Prozess nicht dienlich sind.&lt;br /&gt;
 &lt;br /&gt;
* Bei saemtlichen Inhalten in dieser Kategorie handelt es sich um Beispiele und nicht zwingend um fertige Scripte.&lt;br /&gt;
* Inworld findet woechentlich Sonntags um 18 Uhr Unterricht statt. Voice hoeren notwendig.&lt;br /&gt;
* Mittlerweile haben sich in den letzten Jahren einige Projekte in unserem Kurs angesammelt, da es sich aber meist um Object-bezogene Scripte handelt, sind sie in der [http://maps.secondlife.com/secondlife/Polkadot/215/103/99 Schule] in blaue Kisten archiviert. Jede Kiste verfuegt ueber Fullperm Beispiele und koennen von jedem mitgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|custom=Geplante Termine:&#039;&#039;&#039; jeden &#039;&#039;&#039;Sonntag&#039;&#039;&#039; um &#039;&#039;&#039;18 Uhr&#039;&#039;&#039; auf [http://maps.secondlife.com/secondlife/Polkadot/206/106/99 Polkadot (Moderat)]}}&lt;br /&gt;
#&#039;&#039;&#039;Videos:&#039;&#039;&#039;&lt;br /&gt;
##[https://www.youtube.com/watch?v=d60zBQsZYLM Dae&#039;s Skript Kurs -Teil 1]&lt;br /&gt;
##[https://www.youtube.com/watch?v=bHmOFlzjEzE Dae&#039;s Skript Kurs -Teil 2]&lt;br /&gt;
##[https://www.youtube.com/watch?v=rzpKwIMHc3Y Dae&#039;s Skript Kurs -Teil 3]&lt;br /&gt;
##[https://www.youtube.com/watch?v=PdmJoDc1hhc Dae&#039;s Skript Kurs -Teil 4]&lt;br /&gt;
##[https://www.youtube.com/watch?v=VwpofniYmCk Dae&#039;s Skript Kurs -Teil 5]&lt;br /&gt;
##[https://www.youtube.com/watch?v=TGmacsNz0_g Dae&#039;s Skript Kurs -Teil 6]&lt;br /&gt;
#:&#039;&#039;Vielen Dank an [https://my.secondlife.com/uli.jansma Uli Jansma] fuer die tollen Videos.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Forum:&#039;&#039;&#039; Im Thread [https://www.slinfo.de/threads/scripten-lernen-deutsch.42120/ Scripten Lernen (Deutsch)] auf [https://www.slinfo.de/portal/ SLinfo.de] koennen natuerlich Fragen gestellt und diskutiert werden.&lt;br /&gt;
&lt;br /&gt;
{{DSNavSchool}}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Grundlagen | Grundlagen]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Wie ein Script aufgebaut ist.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Funktion | Funktion]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer global verwendete Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Schalter | Schalter]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Status-Wechsel TRUE &amp;amp; FALSE in unterschiedlichen Beispielen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Liste | Liste]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer die Verarbeitung von Listen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Ablaufsteuerung | Ablaufsteuerung]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer Schleifen &amp;amp; Co.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Tutorials==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter|*DS* Single Pose Sitter]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches 1 Avatar Pose Script mit Notecard Verwaltung&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/linkset_data_example |*DS* llLinksetData Texture Changer (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Menue basierter Texture Changer mit Passwort geschuetztem LinksetData als Textur-Speicher.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/rezday_giver |*DS* Rezday Giver (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Ein einfacher Giver der Geschenke nur am entsprechenden Avatar-Geburtstag ausgibt.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/perm_trigger_anim |*DS* Permission Trigger Animation (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Die wichtigsten Funktionen fuer den reibungslosen Ablauf zum Animieren eines Avatars durch ein Attachment.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/xytText_Example |*DS* xyzText Example (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sehr kleines Beispiel fuer ein xyzText.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DynamischesLinkset |*DS* Dynamisches Linkset (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele zur Verwendung von Linknamen anstelle von Linknummern.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Tools_(de)|*DS* Tools (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Nuetzliche kleine Helfer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Memory_Walkthrough|*DS* Memory-Walkthrough (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script show you how you can limit the maximal memory for each mono-script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Variable_Tutorial|*DS* Variable Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer die unterschiedlichen Verwendungen von Variablen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Giver_Tutorial|*DS* Giver Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer einfache und erweiterte Giver.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Access_Tutorial|*DS* Access Tutorial (DE)]]&lt;br /&gt;
[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|*DS* Access Tutorial (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele zum Thema Berechtigung in ausfuehrbaren Befehlen.&lt;br /&gt;
Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Hovertext_Helper|*DS*_Hovertext_Helper (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Copy / paste this script into a New Prim and change the Primcolor with the Editmenu.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|*DS* LinkNumber-List_in_llSetLinkPrimitiveParamsFast (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==My personal LSL Script Library==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Scripts&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Bot_Ejecter|*DS* Bot Ejecter (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sends bots home automatically.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|*DS* Building Rezzer 2024 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Doors|*DS* Smooth rotate door (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Neue Tuer-Scripte ohne lltargetOmega(... welche sowohl verlinkt, als auch unverlinkt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Privat_Sky|*DS* Privat-Sky (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches Script zum sperren des Luftraums ueber eine bestimmten hoehe fuer die ganze Parzelle oder Region.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Greeter%26Co|*DS* Greeter &amp;amp; Co (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Scripte fuer die Grundausstattung eines Shops, Clubs, oder andere oeffentliche Locations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Vendor|*DS* Vendor (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Vendor (Verkaufsautomat) Scripte zum verkaufen von geboxten Items.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|*DS* Anti (copy &amp;amp; transfer) (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|*DS* Anti Rezz (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|*DS* Rental-Cube v3.0.10 (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This is an Open-Source version of a Rental-Cube from Daemonika Nightfire.  Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Easy_LM_NC_Giver|*DS* Easy LM/NC Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Giver is useful as simple giver for NCs and/or LMs or as giver for inviting-cards.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Region_Reboot_Messenger|*DS*_Region_Reboot_Messenger (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, find all that are specified in the list when the Sim is back after a restart. So you must then not always look on the map, if the sim is back there. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Animation_Sit|*DS*_Animation_Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script must be placed together with a Pose / Animation in the Object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire &amp;amp; Simon Illyar]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Daes_Particle|*DS* Dae&#039;s Particle (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 More scripts and snippets follow in the future.&lt;br /&gt;
&lt;br /&gt;
==My fast blanko Textures==&lt;br /&gt;
* I created these very small textures to equip unimportant areas, because all textures are rendered by the viewer. If many surfaces are equipped with these small textures, the sim will rez faster.&lt;br /&gt;
* If you like the textures and want to have them fullperm, just contact me Inworld via IM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;UUID&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;size&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;red&#039;&#039;&#039;&lt;br /&gt;
||78a18236-f6e5-09ce-289c-3ffea180fb34&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;green&#039;&#039;&#039;&lt;br /&gt;
||9f3a7cee-7040-756b-0786-ea026601c451&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;blue&#039;&#039;&#039;&lt;br /&gt;
||c083207a-0c7c-f64f-77e5-da7675ca4e00&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;yellow&#039;&#039;&#039;&lt;br /&gt;
||16364314-ebcf-7d6a-dbab-f1a1331dd2cd&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;black&#039;&#039;&#039;&lt;br /&gt;
||8fd4a8ea-e5b4-af57-7d01-3b173d3608ce&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;white&#039;&#039;&#039;&lt;br /&gt;
||40ca82a1-c00d-39db-6c7d-ec7d48df4de3&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;transparent&#039;&#039;&#039;&lt;br /&gt;
||7cae828c-2d5d-ec8c-b8f6-855870bb2b66&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1216982</id>
		<title>User:Daemonika Nightfire/Scripts/Bot Ejecter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Bot_Ejecter&amp;diff=1216982"/>
		<updated>2024-08-01T16:17:42Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Created page with &amp;quot;== *DS* Bot Ejecter v1.0.00 == This little script sends every agent with the scritped agent status (usually called bot) home within a second without warning.  &amp;lt;source lang=&amp;quot;ls...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Bot Ejecter v1.0.00 ==&lt;br /&gt;
This little script sends every agent with the scritped agent status (usually called bot) home within a second without warning.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Bot Ejecter v1.0.00 by Daemonika nightfire&lt;br /&gt;
    &lt;br /&gt;
    The motivation behind this script is to make it as difficult as possible for data collectors to use bots.&lt;br /&gt;
    Bots are teleported home by this script within a second without warning.&lt;br /&gt;
    The height at which a bot is located is irrelevant.&lt;br /&gt;
    The bot is also ejected at the highest point at 2147483647 metres.&lt;br /&gt;
    &lt;br /&gt;
    It is expressly permitted and even desired to pass on this script free &amp;amp; fullperm.&lt;br /&gt;
    &lt;br /&gt;
    Please see https://wiki.secondlife.com/wiki/LlTeleportAgentHome#Ownership_Limitations for details.&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(1.0); // don&#039;t set faster than once per second&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        list agents = llGetAgentList(AGENT_LIST_PARCEL, []); // use AGENT_LIST_REGION if you own the whole region&lt;br /&gt;
        integer length = llGetListLength(agents);&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        do&lt;br /&gt;
        {&lt;br /&gt;
            key agent = llList2Key(agents, i);&lt;br /&gt;
            integer info = llGetAgentInfo(agent);&lt;br /&gt;
            if(info &amp;amp; AGENT_AUTOMATED)&lt;br /&gt;
            {&lt;br /&gt;
                if(!llSameGroup(agent)) // your own bots are save with the same group&lt;br /&gt;
                {&lt;br /&gt;
                    llTeleportAgentHome(agent);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        while(++i &amp;lt; length);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216955</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216955"/>
		<updated>2024-07-27T08:12:48Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter v5.0.03 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter v5.0.03 ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;0, 0, 0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string choice;&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key uuid, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(uuid, title + &amp;quot;\nCurrent choice: [ &amp;quot; + choice + &amp;quot; ]&amp;quot;, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    &lt;br /&gt;
                    choice = llList2String(button_index, 0);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        posen += line;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                choice = cmd;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            if(id == owner)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Insert the following line into the notecard or replace it.\n&amp;quot; + store);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216954</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216954"/>
		<updated>2024-07-27T07:56:17Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter v5.0.03 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter v5.0.03 ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string choice;&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key uuid, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(uuid, title + &amp;quot;\nCurrent choice: [ &amp;quot; + choice + &amp;quot; ]&amp;quot;, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    &lt;br /&gt;
                    choice = llList2String(button_index, 0);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        posen += line;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                choice = cmd;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            if(id == owner)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Insert the following line into the notecard or replace it.\n&amp;quot; + store);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216953</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216953"/>
		<updated>2024-07-27T07:55:16Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter v5.0.03 ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string choice;&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key uuid, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(uuid, title + &amp;quot;\nCurrent choice: [ &amp;quot; + choice + &amp;quot; ]&amp;quot;, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    &lt;br /&gt;
                    choice = llList2String(button_index, 0);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        posen += line;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                choice = cmd;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            if(id == owner)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Insert the following line into the notecard or replace it.\n&amp;quot; + store);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216952</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216952"/>
		<updated>2024-07-27T07:51:00Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter */ some optimizations&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;One&amp;quot;,&amp;quot;Two&amp;quot;,&amp;quot;Three&amp;quot;,&amp;quot;Four&amp;quot;,&amp;quot;Five&amp;quot;,&amp;quot;Six&amp;quot;,&amp;quot;Seven&amp;quot;,&amp;quot;Eight&amp;quot;,&amp;quot;Nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string choice;&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key uuid, string title, list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(uuid, title + &amp;quot;\nCurrent choice: [ &amp;quot; + choice + &amp;quot; ]&amp;quot;, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    &lt;br /&gt;
                    choice = llList2String(button_index, 0);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    if(line != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        posen += line;&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                choice = cmd;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            if(id == owner)&lt;br /&gt;
            {&lt;br /&gt;
                llOwnerSay(&amp;quot;Insert the following line into the notecard or replace it.\n&amp;quot; + store);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216940</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216940"/>
		<updated>2024-07-26T05:43:20Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter */ &amp;quot;\n&amp;quot; +  removed&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,&amp;quot;three&amp;quot;,&amp;quot;four&amp;quot;,&amp;quot;five&amp;quot;,&amp;quot;six&amp;quot;,&amp;quot;seven&amp;quot;,&amp;quot;eight&amp;quot;,&amp;quot;nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    posen += line;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            llOwnerSay(store);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216937</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216937"/>
		<updated>2024-07-25T09:15:13Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* *DS* Single Pose Sitter */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht pro Zeile wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,&amp;quot;three&amp;quot;,&amp;quot;four&amp;quot;,&amp;quot;five&amp;quot;,&amp;quot;six&amp;quot;,&amp;quot;seven&amp;quot;,&amp;quot;eight&amp;quot;,&amp;quot;nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    posen += line;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = &amp;quot;\n&amp;quot; + Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            llOwnerSay(store);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216936</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216936"/>
		<updated>2024-07-25T09:14:36Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 Dazu trage jeweils einen Eintrag pro Zeile in die Notecard ein.&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,&amp;quot;three&amp;quot;,&amp;quot;four&amp;quot;,&amp;quot;five&amp;quot;,&amp;quot;six&amp;quot;,&amp;quot;seven&amp;quot;,&amp;quot;eight&amp;quot;,&amp;quot;nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    posen += line;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = &amp;quot;\n&amp;quot; + Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            llOwnerSay(store);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216935</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216935"/>
		<updated>2024-07-25T07:47:02Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,&amp;quot;three&amp;quot;,&amp;quot;four&amp;quot;,&amp;quot;five&amp;quot;,&amp;quot;six&amp;quot;,&amp;quot;seven&amp;quot;,&amp;quot;eight&amp;quot;,&amp;quot;nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missing or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    posen += line;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = &amp;quot;\n&amp;quot; + Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            llOwnerSay(store);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216933</id>
		<title>User:Daemonika Nightfire</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216933"/>
		<updated>2024-07-25T06:51:33Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* General Tutorials */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
{{SL-hCard/2.0&lt;br /&gt;
|image=Sl_image.png&lt;br /&gt;
|name=Daemonika Nightfire&lt;br /&gt;
|rezday=16 december 2007&lt;br /&gt;
|about=Owner of *DaeSigns*&lt;br /&gt;
|fields={{SL-hCard/field|Inworld|&lt;br /&gt;
* Second Life Profil:&lt;br /&gt;
**{{SL-Profile|Daemonika Nightfire}}&lt;br /&gt;
* Mainstore Region:&lt;br /&gt;
**{{SLurl|Polkadot|212|37|99|title=Polkadot}}&lt;br /&gt;
* Marketplace:&lt;br /&gt;
**[https://marketplace.secondlife.com/stores/30293 *DaeSigns*]&lt;br /&gt;
* Homepage:&lt;br /&gt;
**[https://daesigns.de daesigns.de]&lt;br /&gt;
* Delivery capped, even Notecards!&lt;br /&gt;
** Don&#039;t send me Notecards when i&#039;m offline, i receive your IM as Email. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Second Life Profil: [http://my.secondlife.com/daemonika.nightfire &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;D&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;aemonika &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;N&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;ightfire&amp;lt;/span&amp;gt;&#039;&#039;&#039;] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Daemonika Nightfire|talk]]|[[Special:Contributions/Daemonika Nightfire|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About my scripts==&lt;br /&gt;
* All my scripts and snippets that I publish here are licensed under [https://wiki.secondlife.com/wiki/Project:Terms_of_Service Creative Commons Attribution-Share Alike 3.0]&lt;br /&gt;
 &lt;br /&gt;
* Basically I use the Second Life standard format in my scripts. You will not find any script from me with a Javascript based style, where the clamps are behind the commands. I will not support scripts with this style. Very rarely do I pull longer chains of command together in unstyled way to generate an overview, learn more [https://wiki.secondlife.com/wiki/LSL_Style_Guide Style Guide]. Furthermore the events are always sorted by priority.&lt;br /&gt;
 &lt;br /&gt;
* I know my English is not the best, if you find stupid comments or spelling mistakes in my descriptions, feel free and correct the spelling, but never change any part of the scripts themselves.&lt;br /&gt;
&lt;br /&gt;
==Script Schule (deutsch)==&lt;br /&gt;
* Die einzelnen Seiten fuer die Schule koennen gegebenenfalls sehr lang sein, das liegt daran das ich versuche die Scripte schrittweise aufzubauen. Je weiter man nach unten scrollt desto aufwendiger / komplizierter werden die Beispiele. Trotz alle dem bemuehe ich mich, die Scripte auf ein Minimum zu beschraenken und auf unnoetige Beiwerke zu verzichten, wenn sie dem Verstaendnis-Prozess nicht dienlich sind.&lt;br /&gt;
 &lt;br /&gt;
* Bei saemtlichen Inhalten in dieser Kategorie handelt es sich um Beispiele und nicht zwingend um fertige Scripte.&lt;br /&gt;
* Inworld findet woechentlich Sonntags um 18 Uhr Unterricht statt. Voice hoeren notwendig.&lt;br /&gt;
* Mittlerweile haben sich in den letzten Jahren einige Projekte in unserem Kurs angesammelt, da es sich aber meist um Object-bezogene Scripte handelt, sind sie in der [http://maps.secondlife.com/secondlife/Polkadot/215/103/99 Schule] in blaue Kisten archiviert. Jede Kiste verfuegt ueber Fullperm Beispiele und koennen von jedem mitgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|custom=Geplante Termine:&#039;&#039;&#039; jeden &#039;&#039;&#039;Sonntag&#039;&#039;&#039; um &#039;&#039;&#039;18 Uhr&#039;&#039;&#039; auf [http://maps.secondlife.com/secondlife/Polkadot/206/106/99 Polkadot (Moderat)]}}&lt;br /&gt;
#&#039;&#039;&#039;Videos:&#039;&#039;&#039;&lt;br /&gt;
##[https://www.youtube.com/watch?v=d60zBQsZYLM Dae&#039;s Skript Kurs -Teil 1]&lt;br /&gt;
##[https://www.youtube.com/watch?v=bHmOFlzjEzE Dae&#039;s Skript Kurs -Teil 2]&lt;br /&gt;
##[https://www.youtube.com/watch?v=rzpKwIMHc3Y Dae&#039;s Skript Kurs -Teil 3]&lt;br /&gt;
##[https://www.youtube.com/watch?v=PdmJoDc1hhc Dae&#039;s Skript Kurs -Teil 4]&lt;br /&gt;
##[https://www.youtube.com/watch?v=VwpofniYmCk Dae&#039;s Skript Kurs -Teil 5]&lt;br /&gt;
##[https://www.youtube.com/watch?v=TGmacsNz0_g Dae&#039;s Skript Kurs -Teil 6]&lt;br /&gt;
#:&#039;&#039;Vielen Dank an [https://my.secondlife.com/uli.jansma Uli Jansma] fuer die tollen Videos.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Forum:&#039;&#039;&#039; Im Thread [https://www.slinfo.de/threads/scripten-lernen-deutsch.42120/ Scripten Lernen (Deutsch)] auf [https://www.slinfo.de/portal/ SLinfo.de] koennen natuerlich Fragen gestellt und diskutiert werden.&lt;br /&gt;
&lt;br /&gt;
{{DSNavSchool}}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Grundlagen | Grundlagen]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Wie ein Script aufgebaut ist.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Funktion | Funktion]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer global verwendete Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Schalter | Schalter]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Status-Wechsel TRUE &amp;amp; FALSE in unterschiedlichen Beispielen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Liste | Liste]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer die Verarbeitung von Listen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Ablaufsteuerung | Ablaufsteuerung]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer Schleifen &amp;amp; Co.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Tutorials==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter|*DS* Single Pose Sitter]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches 1 Avatar Pose Script mit Notecard Verwaltung&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/linkset_data_example |*DS* llLinksetData Texture Changer (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Menue basierter Texture Changer mit Passwort geschuetztem LinksetData als Textur-Speicher.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/rezday_giver |*DS* Rezday Giver (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Ein einfacher Giver der Geschenke nur am entsprechenden Avatar-Geburtstag ausgibt.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/perm_trigger_anim |*DS* Permission Trigger Animation (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Die wichtigsten Funktionen fuer den reibungslosen Ablauf zum Animieren eines Avatars durch ein Attachment.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/xytText_Example |*DS* xyzText Example (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sehr kleines Beispiel fuer ein xyzText.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DynamischesLinkset |*DS* Dynamisches Linkset (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele zur Verwendung von Linknamen anstelle von Linknummern.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Tools_(de)|*DS* Tools (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Nuetzliche kleine Helfer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Memory_Walkthrough|*DS* Memory-Walkthrough (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script show you how you can limit the maximal memory for each mono-script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Variable_Tutorial|*DS* Variable Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer die unterschiedlichen Verwendungen von Variablen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Giver_Tutorial|*DS* Giver Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer einfache und erweiterte Giver.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Access_Tutorial|*DS* Access Tutorial (DE)]]&lt;br /&gt;
[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|*DS* Access Tutorial (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele zum Thema Berechtigung in ausfuehrbaren Befehlen.&lt;br /&gt;
Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Hovertext_Helper|*DS*_Hovertext_Helper (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Copy / paste this script into a New Prim and change the Primcolor with the Editmenu.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|*DS* LinkNumber-List_in_llSetLinkPrimitiveParamsFast (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==My personal LSL Script Library==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Scripts&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|*DS* Building Rezzer 2024 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Doors|*DS* Smooth rotate door (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Neue Tuer-Scripte ohne lltargetOmega(... welche sowohl verlinkt, als auch unverlinkt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Privat_Sky|*DS* Privat-Sky (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches Script zum sperren des Luftraums ueber eine bestimmten hoehe fuer die ganze Parzelle oder Region.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Greeter%26Co|*DS* Greeter &amp;amp; Co (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Scripte fuer die Grundausstattung eines Shops, Clubs, oder andere oeffentliche Locations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Vendor|*DS* Vendor (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Vendor (Verkaufsautomat) Scripte zum verkaufen von geboxten Items.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|*DS* Anti (copy &amp;amp; transfer) (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|*DS* Anti Rezz (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|*DS* Rental-Cube v3.0.10 (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This is an Open-Source version of a Rental-Cube from Daemonika Nightfire.  Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Easy_LM_NC_Giver|*DS* Easy LM/NC Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Giver is useful as simple giver for NCs and/or LMs or as giver for inviting-cards.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Region_Reboot_Messenger|*DS*_Region_Reboot_Messenger (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, find all that are specified in the list when the Sim is back after a restart. So you must then not always look on the map, if the sim is back there. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Animation_Sit|*DS*_Animation_Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script must be placed together with a Pose / Animation in the Object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire &amp;amp; Simon Illyar]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Daes_Particle|*DS* Dae&#039;s Particle (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 More scripts and snippets follow in the future.&lt;br /&gt;
&lt;br /&gt;
==My fast blanko Textures==&lt;br /&gt;
* I created these very small textures to equip unimportant areas, because all textures are rendered by the viewer. If many surfaces are equipped with these small textures, the sim will rez faster.&lt;br /&gt;
* If you like the textures and want to have them fullperm, just contact me Inworld via IM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;UUID&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;size&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;red&#039;&#039;&#039;&lt;br /&gt;
||78a18236-f6e5-09ce-289c-3ffea180fb34&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;green&#039;&#039;&#039;&lt;br /&gt;
||9f3a7cee-7040-756b-0786-ea026601c451&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;blue&#039;&#039;&#039;&lt;br /&gt;
||c083207a-0c7c-f64f-77e5-da7675ca4e00&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;yellow&#039;&#039;&#039;&lt;br /&gt;
||16364314-ebcf-7d6a-dbab-f1a1331dd2cd&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;black&#039;&#039;&#039;&lt;br /&gt;
||8fd4a8ea-e5b4-af57-7d01-3b173d3608ce&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;white&#039;&#039;&#039;&lt;br /&gt;
||40ca82a1-c00d-39db-6c7d-ec7d48df4de3&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;transparent&#039;&#039;&#039;&lt;br /&gt;
||7cae828c-2d5d-ec8c-b8f6-855870bb2b66&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216932</id>
		<title>User:Daemonika Nightfire/Scripts/Single Pose Sitter</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Single_Pose_Sitter&amp;diff=1216932"/>
		<updated>2024-07-25T06:47:34Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Created page with &amp;quot;== *DS* Single Pose Sitter == Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfue...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Single Pose Sitter ==&lt;br /&gt;
Dieses Script ist das Ergebnis unseres Unterrichts. Es eignet sich ideal fuer einzelne Moebel die fuer 1 Avatar gedacht sind. Des weiteren verfuegt dieses Script ueber saemtliche bis dato aktuellen Funktionen, also es ist technich auf dem neusten Stand (Juli. 2024).&lt;br /&gt;
&lt;br /&gt;
 Das Format der Notecard um die Animationen zu verwalten sieht wiefolgt aus.&lt;br /&gt;
 AnimationsName|VectorPosition|VectorRotation&lt;br /&gt;
 &lt;br /&gt;
 Warum haben wir uns bei der Rotation fuer den Vector entschieden?&lt;br /&gt;
 Ganz einfach, den Vector kann man im freihant editieren und das Script rechnet es selbst in ein Quaternion um.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Single Pose Sitter by *DS* Script-Schule&lt;br /&gt;
    &lt;br /&gt;
    Single Pose bedeutet 1 Avatar pro Link_Set.&lt;br /&gt;
    Weitere Avatare mit zusaetzlichen Scripten werden nicht beruecksichtigt.&lt;br /&gt;
    Im Gegenteil, es kann zu irretationen fuerhren.&lt;br /&gt;
    &lt;br /&gt;
    Dieses Script kann bis zu 9 verschiedene Posen nutzen.&lt;br /&gt;
    Jede Pose kann individuell angepasst und gespeichert werden.&lt;br /&gt;
    Bei bedarf kann man die entsprechende Einstellung ebenfalls in die Notecard uebertragen.&lt;br /&gt;
    &lt;br /&gt;
    Es sind 9 Button-Namen fuer die jeweiligen Posen vorgegeben.&lt;br /&gt;
    Die Liste dieser Button passt sich automatisch der Anzahl Posen an.&lt;br /&gt;
    Werden also nur 2 Posen aus der notecard gelesen, erhaeltst du nur die Button [ one ] &amp;amp; [ two ].&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
// Notecard auslesen.&lt;br /&gt;
string nc_name = &amp;quot;posen&amp;quot;;&lt;br /&gt;
key read_nc;&lt;br /&gt;
&lt;br /&gt;
// Avatar Key, Status &amp;amp; Berechtigung.&lt;br /&gt;
key Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
integer Sitting = FALSE;&lt;br /&gt;
integer Permission = FALSE;&lt;br /&gt;
&lt;br /&gt;
// Grund-Einstellungen fuer den SitTarget.&lt;br /&gt;
integer LinkTarget = LINK_THIS;&lt;br /&gt;
vector Position = &amp;lt;0.00, -0.00, 0.43&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;00, 00, 00&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Auswahl der Animationen inclusive individueller Vectoren.&lt;br /&gt;
list button_index = [&amp;quot;one&amp;quot;,&amp;quot;two&amp;quot;,&amp;quot;three&amp;quot;,&amp;quot;four&amp;quot;,&amp;quot;five&amp;quot;,&amp;quot;six&amp;quot;,&amp;quot;seven&amp;quot;,&amp;quot;eight&amp;quot;,&amp;quot;nine&amp;quot;];&lt;br /&gt;
list posen = [];&lt;br /&gt;
string Animation = &amp;quot;&amp;quot;;&lt;br /&gt;
integer avi_link;&lt;br /&gt;
vector avi_pos = &amp;lt;0,0,0.65&amp;gt;;&lt;br /&gt;
vector avi_rot = &amp;lt;0,0,90&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
// Menue mit dynamischen Channel.&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(60);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Anpassbare Vectoren fuers Einstellungs-Menue.&lt;br /&gt;
list pos_step_button = [&amp;quot;1cm&amp;quot;, &amp;quot;5cm&amp;quot;, &amp;quot;25cm&amp;quot;];&lt;br /&gt;
list pos_steps = [0.01, 0.05, 0.25];&lt;br /&gt;
integer pos_counter = 0;&lt;br /&gt;
float pos_step = 0.01;&lt;br /&gt;
postion_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nPositioning\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(pos_step_button, pos_counter),&amp;quot;Save&amp;quot;,&amp;quot;Pos x-&amp;quot;,&amp;quot;Pos y-&amp;quot;,&amp;quot;Pos z-&amp;quot;,&amp;quot;Pos x+&amp;quot;,&amp;quot;Pos y+&amp;quot;,&amp;quot;Pos z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
list rot_step_button = [&amp;quot;1°&amp;quot;,&amp;quot;6°&amp;quot;,&amp;quot;30°&amp;quot;];&lt;br /&gt;
list rot_steps = [1.0, 6.0, 30.0];&lt;br /&gt;
integer rot_counter = 0;&lt;br /&gt;
float rot_step = 1.0;&lt;br /&gt;
rotation_menu(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    menu(uuid, &amp;quot;\nOrientation\n&amp;quot;, [&amp;quot;Main&amp;quot;,llList2String(rot_step_button, rot_counter), &amp;quot;Save&amp;quot;,&amp;quot;Rot x-&amp;quot;,&amp;quot;Rot y-&amp;quot;,&amp;quot;Rot z-&amp;quot;,&amp;quot;Rot x+&amp;quot;,&amp;quot;Rot y+&amp;quot;,&amp;quot;Rot z+&amp;quot;]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Ausfuehrung der individuellen Vectoren.&lt;br /&gt;
string current_animation;&lt;br /&gt;
integer index = 0;&lt;br /&gt;
Change(key uuid)&lt;br /&gt;
{&lt;br /&gt;
    list parsed = llParseString2List(llList2String(posen, index), [&amp;quot;|&amp;quot;],[]);&lt;br /&gt;
    current_animation = llList2String(parsed, 0);&lt;br /&gt;
    avi_pos = (vector)llList2String(parsed, 1);&lt;br /&gt;
    avi_rot = (vector)llList2String(parsed, 2);&lt;br /&gt;
    &lt;br /&gt;
    llStartAnimation(current_animation);&lt;br /&gt;
    if(current_animation != Animation)&lt;br /&gt;
    {&lt;br /&gt;
        llStopAnimation(Animation);&lt;br /&gt;
    }&lt;br /&gt;
    Animation = current_animation;&lt;br /&gt;
    llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
    menu(uuid, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinkSitTarget(LinkTarget, Position, llEuler2Rot(Rotation * DEG_TO_RAD));&lt;br /&gt;
        &lt;br /&gt;
        if(llGetInventoryNumber(INVENTORY_ANIMATION) &amp;gt; 0 &amp;amp;&amp;amp; Animation == &amp;quot;&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            Animation = llGetInventoryName(INVENTORY_ANIMATION, 0);&lt;br /&gt;
        }&lt;br /&gt;
        read_nc = llGetNumberOfNotecardLines(nc_name);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    dataserver(key request, string data)&lt;br /&gt;
    {&lt;br /&gt;
        if(request == read_nc)&lt;br /&gt;
        {&lt;br /&gt;
            integer count = (integer)data;&lt;br /&gt;
            integer i;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                string line = llGetNotecardLineSync(nc_name, i);&lt;br /&gt;
                if(line == NAK)&lt;br /&gt;
                {&lt;br /&gt;
                    llSay(0, &amp;quot;---NAK---\nNotecard are missong or not readable.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else if(line == EOF)&lt;br /&gt;
                {&lt;br /&gt;
                    // An dieser Stelle wird die Liste mit den 9 Button an die Laenge der Liste Posen angepasst.&lt;br /&gt;
                    // Hier wird lediglich jeder weitere unnoetige Button einfach geloescht.&lt;br /&gt;
                    integer bl = llGetListLength(posen);&lt;br /&gt;
                    button_index = llDeleteSubList(button_index, i, -1);&lt;br /&gt;
                    llSay(0,&amp;quot;---EOF---\n&amp;quot; + (string)bl + &amp;quot; poses loaded.\n&amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes memory in use.&amp;quot;);&lt;br /&gt;
                }&lt;br /&gt;
                else&lt;br /&gt;
                {&lt;br /&gt;
                    posen += line;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt;= count);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == Avatar)&lt;br /&gt;
        {&lt;br /&gt;
            menu(agent, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        list temp = llParseString2List(message, [&amp;quot; &amp;quot;], []);&lt;br /&gt;
        string cmd = llList2String(temp, 0);&lt;br /&gt;
        string data = llList2String(temp, 1);&lt;br /&gt;
        &lt;br /&gt;
        if(cmd == &amp;quot;Close&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(0.0);&lt;br /&gt;
            llListenRemove(menu_handler);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Main&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            menu(id, &amp;quot;\nChoose your options.\n&amp;quot;, [&amp;quot;Position&amp;quot;,&amp;quot;Rotation&amp;quot;,&amp;quot;Close&amp;quot;] + button_index);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(button_index, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            integer i = llListFindList(button_index, [cmd]);&lt;br /&gt;
            if(i != -1)&lt;br /&gt;
            {&lt;br /&gt;
                index = i;&lt;br /&gt;
                Change(id);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Positions-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Position&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(pos_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            pos_counter++;&lt;br /&gt;
            if(pos_counter == llGetListLength(pos_steps))&lt;br /&gt;
            {&lt;br /&gt;
                pos_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            pos_step = llList2Float(pos_steps, pos_counter);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Pos&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_pos.x -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_pos.x += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_pos.y -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_pos.y += pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_pos.z -= pos_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_pos.z += pos_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            postion_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Rotations-Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Rotation&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(~llListFindList(rot_step_button, [cmd]))&lt;br /&gt;
        {&lt;br /&gt;
            rot_counter++;&lt;br /&gt;
            if(rot_counter == llGetListLength(rot_steps))&lt;br /&gt;
            {&lt;br /&gt;
                rot_counter = 0;&lt;br /&gt;
            }&lt;br /&gt;
            rot_step = llList2Float(rot_steps, rot_counter);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        else if(cmd == &amp;quot;Rot&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            if(data == &amp;quot;x-&amp;quot;)      { avi_rot.x -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;x+&amp;quot;) { avi_rot.x += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y-&amp;quot;) { avi_rot.y -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;y+&amp;quot;) { avi_rot.y += rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z-&amp;quot;) { avi_rot.z -= rot_step; }&lt;br /&gt;
            else if(data == &amp;quot;z+&amp;quot;) { avi_rot.z += rot_step; }&lt;br /&gt;
            &lt;br /&gt;
            llSetLinkPrimitiveParamsFast(avi_link, [PRIM_POS_LOCAL, avi_pos, PRIM_ROT_LOCAL, llEuler2Rot(avi_rot * DEG_TO_RAD)]);&lt;br /&gt;
            rotation_menu(id);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // Speichern der Einstellungen&lt;br /&gt;
        else if(cmd == &amp;quot;Save&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            string store = &amp;quot;\n&amp;quot; + Animation + &amp;quot;|&amp;quot; + (string)avi_pos + &amp;quot;|&amp;quot; + (string)avi_rot;&lt;br /&gt;
            posen = llListReplaceList(posen, [store], index, index);&lt;br /&gt;
            llOwnerSay(store);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer Change)&lt;br /&gt;
    {&lt;br /&gt;
        if(Change &amp;amp; CHANGED_LINK)&lt;br /&gt;
        {&lt;br /&gt;
            if(!Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                Avatar = llAvatarOnLinkSitTarget(LinkTarget);&lt;br /&gt;
                if(Avatar)&lt;br /&gt;
                {&lt;br /&gt;
                    Sitting = TRUE;&lt;br /&gt;
                    integer prims = llGetNumberOfPrims();&lt;br /&gt;
                    integer i = 0;&lt;br /&gt;
                    do&lt;br /&gt;
                    {&lt;br /&gt;
                        string name = llGetLinkName(i);&lt;br /&gt;
                        if(name == llKey2Name(Avatar))&lt;br /&gt;
                        {&lt;br /&gt;
                            avi_link = i;&lt;br /&gt;
                        }&lt;br /&gt;
                    }&lt;br /&gt;
                    while(++i &amp;lt;= prims);&lt;br /&gt;
                    &lt;br /&gt;
                    if(Animation != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRequestPermissions(Avatar, PERMISSION_TRIGGER_ANIMATION);&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(Sitting)&lt;br /&gt;
            {&lt;br /&gt;
                if(Permission)&lt;br /&gt;
                {&lt;br /&gt;
                    if(llKey2Name(Avatar) != &amp;quot;&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llStopAnimation(Animation);&lt;br /&gt;
                    }&lt;br /&gt;
                    Permission = FALSE;&lt;br /&gt;
                }&lt;br /&gt;
                Sitting = FALSE;&lt;br /&gt;
                Avatar = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        else if(Change &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    run_time_permissions(integer Permission)&lt;br /&gt;
    {&lt;br /&gt;
        if(Permission &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            llStopAnimation(&amp;quot;sit_generic&amp;quot;);&lt;br /&gt;
            llStopAnimation(&amp;quot;sit&amp;quot;);&lt;br /&gt;
            Change(Avatar);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1216861</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=1216861"/>
		<updated>2024-07-01T19:08:05Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* LSL Script Library */ new building rezzer added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
NOTE: Please add your scripts to this page and then add them to a category on the [[:Category:LSL Categorized Library|Categorized Library]] page.&lt;br /&gt;
&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There is a treasure trove of user developed scripts that have become hard to find over time throughout Second Life&#039;s web server revisions and redesigns. The [http://community.secondlife.com/t5/Community-General/Upgrading-the-Forums/bc-p/77385 Huge Leap] to the new [http://www.jivesoftware.com/ Jive software], while traumatic and disruptive, has failed to dispose of  what&#039;s come before at the moment of your reading. These valuable community generated resources do indeed still remain and can be browsed/retrieved from several disjointed and disparate locations. While some links may point to duplicated, revised, or downright ancient wisdom, you may derive some enlightened perspective researching their hard won, timely solutions we encounter day to day.&lt;br /&gt;
&lt;br /&gt;
# [[Old forum Scripting Library index| Old Forums -Scripting Library index (wiki)]],&lt;br /&gt;
# &amp;lt;s&amp;gt;[http://community.secondlife.com/t5/Scripting/bd-p/2108 Old Forums -Scripting Forum Archive]&amp;lt;/s&amp;gt;,&lt;br /&gt;
# &amp;lt;s&amp;gt;[http://forums-archive.secondlife.com/15/1.html Old Forums -Scripting Library]&amp;lt;/s&amp;gt;,&lt;br /&gt;
# &amp;lt;s&amp;gt;[http://community.secondlife.com/t5/Scripting-Library/bd-p/2122 new Forums -Archives &amp;gt; Scripting Library]&amp;lt;/s&amp;gt;,&lt;br /&gt;
# &amp;lt;s&amp;gt;[http://community.secondlife.com/t5/LSL-Scripting-Library/bd-p/LSLScriptingLibrary new Forums -LSL Library]&amp;lt;/s&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The wiki medium is well-suited for a script library due to its revision based historical foundation. If you feel inclined to release your scripts to the entire community, there&#039;s no better place to preserve your work/love/energy/gift as a unified and cohesive repository. Feel free to add your script page links here as well as adding it to the [[:Category:LSL Categorized Library|Categorized Library]].&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;code&amp;gt;&amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||{{User|Daemonika Nightfire}}&lt;br /&gt;
|| Useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands for scripts, local chat, instant message, group chat, group notice &amp;amp; profiles.&lt;br /&gt;
|-&lt;br /&gt;
|[[Teleporter_Anywhere]]&lt;br /&gt;
|{{User|Luxen Resident}}&lt;br /&gt;
| Zx Teleporter Anywhere v5.1.&lt;br /&gt;
|-&lt;br /&gt;
|[[Ultimate_Radar]]&lt;br /&gt;
|{{User|Luxen Resident}}&lt;br /&gt;
| Zx Ultimate Radar v5.&lt;br /&gt;
|-&lt;br /&gt;
|[[Language_Scanner]]&lt;br /&gt;
|{{User|Luxen Resident}}&lt;br /&gt;
|Zx Language Scanner v5.&lt;br /&gt;
|-&lt;br /&gt;
|[[Visitor_Counter_Tracker]]&lt;br /&gt;
|{{User|Luxen Resident}}&lt;br /&gt;
|Zx Visitor Counter - Tracker v3.1.&lt;br /&gt;
|-&lt;br /&gt;
|[[Notecard_Configuration_Reader_by_Maddox_Deluxe]]&lt;br /&gt;
|{{User2|Maddox Deluxe}}&lt;br /&gt;
|Notecard Multi-line Entries Configuration Reader v1.6.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Yumi Murakami/Addiction Moderator|Addiction Moderator and World Clock]]&lt;br /&gt;
|{{User|Yumi Murakami}}&lt;br /&gt;
|Keep tabs on usage of SL and easily share local times with other users.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Yumi Murakami/Bijocam And Other Camera Scripts|Bijocam and Other Camera Scripts]]&lt;br /&gt;
|{{User|Yumi Murakami}}&lt;br /&gt;
|Various camera control systems for machinima, security, and other effects.&lt;br /&gt;
|-&lt;br /&gt;
|[[Recent Avatar Scanner]]&lt;br /&gt;
|{{User|Ackley Bing|Ackley}}&lt;br /&gt;
|Recent Avatar Scanner notifies you as it collects avatar names. Touch it to see a list of recently collected names.&lt;br /&gt;
|-&lt;br /&gt;
|[[Target Crosshair HUD]]&lt;br /&gt;
|{{User|Ackley Bing|Ackley}}&lt;br /&gt;
|A 2 prim HUD with crosshair targets nearby players names, profiles and user key&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Ackley Bing/Basic Sim Status Button Indicator HUD|Basic Sim Status Button Indicator HUD]]&lt;br /&gt;
|{{User|Ackley Bing|Ackley}}&lt;br /&gt;
|A single prim HUD. Color indicates sim status changes.&lt;br /&gt;
|-&lt;br /&gt;
|[[Basic Target Scanner HUD]]&lt;br /&gt;
|{{User|Ackley Bing|Ackley}}&lt;br /&gt;
|A single prim HUD.  Scrolls through nearby players names, photos and user key.&lt;br /&gt;
|-&lt;br /&gt;
|[[StringIsNum|(Function) StringIsNum]]&lt;br /&gt;
|{{User|Zion Tristan}}&lt;br /&gt;
|A User Made Function to return TRUE if a string based input consists entirely of a whole number, and return FALSE otherwise.&lt;br /&gt;
|-&lt;br /&gt;
|[[Remove all scripts from a linkset]]&lt;br /&gt;
|{{User2|Dahlia Orfan}}&lt;br /&gt;
|Remove all scripts from a linkset.&lt;br /&gt;
|-&lt;br /&gt;
|[[RLV Viewer Titler]]&lt;br /&gt;
||{{User2|Jenna Felton}}&lt;br /&gt;
|Titler displaying viewer and it&#039;s version, revealed via RLV interface.&lt;br /&gt;
|-&lt;br /&gt;
|[[Sim Restart Notifyer]]&lt;br /&gt;
||{{User2|Jenna Felton}}&lt;br /&gt;
|On region restart, notifyes registered residents about the sim is online and the current sim version&lt;br /&gt;
|-&lt;br /&gt;
|[[Script Vitality plug-in]]&lt;br /&gt;
||{{User2|Jenna Felton}}&lt;br /&gt;
|Uses vehicle technology to allow scripts (in same prim) to run in &#039;dead&#039;, i.e. no-script areas.&lt;br /&gt;
|-&lt;br /&gt;
|[[Chat Painter]]&lt;br /&gt;
||{{User2|Jenna Felton}}&lt;br /&gt;
|Changes texture and collor properties of named prims in a linkset by using chat commands.&lt;br /&gt;
|-&lt;br /&gt;
|[[1st necessity of SL]]&lt;br /&gt;
|{{User|Beer Dailey}}&lt;br /&gt;
|Monitors for avatars and (de)activates scripts states to control script performance/lag.&lt;br /&gt;
|-&lt;br /&gt;
|[[3D Radar]]&lt;br /&gt;
|{{User|Jesse Barnett}}&lt;br /&gt;
|Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
|[[RegionSitTeleport]]&lt;br /&gt;
|{{User|Vincent Nacon}}&lt;br /&gt;
|A very simple and clean sit/unsit teleporter.&lt;br /&gt;
|-&lt;br /&gt;
|[[Avatar Position Adjustement to Avatar Height When Sitting]]&lt;br /&gt;
|{{User|Cay Trudeau}}&lt;br /&gt;
|Animation Adjustement According to Avatar Height. A simple snippet to calculate avatar position upwards.&lt;br /&gt;
|-&lt;br /&gt;
|[[AbcText]]&lt;br /&gt;
|{{User|Ange Capalini}}&lt;br /&gt;
|EXPERIMENTAL Hyper low prim Display. only 2 prims for 25char.&lt;br /&gt;
|-&lt;br /&gt;
|[[Access (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|An easy to use script for permissions on who can use the script, Public/Group/Owner&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|Access Tutorial (EN)]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
|[[Aim Detection]]&lt;br /&gt;
|{{User2|Han Shuffle|Dugley Reanimator}}&lt;br /&gt;
|Monitors for avatars and reports back to owner about who is aiming at them.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|Anti (copy &amp;amp; transfer)]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|Anti Rezz]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
|[[AntiDelay Node]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Uses [[llMessageLinked]] to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
|[[AO Overriding Pose Ball]]&lt;br /&gt;
|{{User|Jesse Barnett}}&lt;br /&gt;
|No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
|[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
|{{User2|Nekow42 Zarf}}&lt;br /&gt;
|An LSL implementation of ARCFOUR, the most popular stream cipher still in use.&lt;br /&gt;
|-&lt;br /&gt;
|[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
|[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
|{{User2|Alynna Vixen}}&lt;br /&gt;
|This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
|[[AvatarFollower]]&lt;br /&gt;
|{{User|Dale Innis}}&lt;br /&gt;
|Allows one avatar to automatically follow another.&lt;br /&gt;
|-&lt;br /&gt;
|[[Avatar Radar (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|Version 1.2; A nice new avatar radar script i just finish that you can place in your hud, Also features avatar locator&lt;br /&gt;
|-&lt;br /&gt;
|[[Base2Dec]]&lt;br /&gt;
|{{User|Siann Beck}}&lt;br /&gt;
|Convert a number to decimal from any base.&lt;br /&gt;
|-&lt;br /&gt;
|[[BaseN]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
|Variable base compression, dynamically maps to usable UTF code points.&lt;br /&gt;
|-&lt;br /&gt;
|[[Basic Encryption Modules]]&lt;br /&gt;
|{{User|Beverly Larkin}}&lt;br /&gt;
|Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
|[[Be happy]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
|[[Beat The Average Vendor]]&lt;br /&gt;
|{{User2|Kristen Giano}}&lt;br /&gt;
|A vendor script based on humblebundle.com&lt;br /&gt;
|-&lt;br /&gt;
|[[Best Neighbor Ad Hiding Script|Best Neighbor]]&lt;br /&gt;
|{{User2|Doran Zemlja}}&lt;br /&gt;
|Reduce ad clutter by hiding ads when users are on their own land nearby.&lt;br /&gt;
|-&lt;br /&gt;
|[[BigNum|BigNum Library (RSA Encryption)]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|A BigNum Library for dealing with big numbers! Specialized for modular multiplication, and RSA encryption.&lt;br /&gt;
|-&lt;br /&gt;
|[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
|{{User|Fox Diller}}&lt;br /&gt;
|A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
|[[BinaryDecimalConverter]]&lt;br /&gt;
|{{User2|Soundless Smalls}}&lt;br /&gt;
|Converts a binary value to a decimal value and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|[[Blacklist and Remote Kill|Blacklist and Remote Kill]]&lt;br /&gt;
|{{User|Chase Quinnell}}&lt;br /&gt;
|Blacklist (denial of use) or a creator kill script (can delete someone&#039;s item by command on private channel).&lt;br /&gt;
|-&lt;br /&gt;
|[[User_talk:Rolig_Loon/Bookmark_URLs|Bookmark URLs]]&lt;br /&gt;
|{{User|Rolig Loon}}&lt;br /&gt;
|Dialog-driven HUD reads bookmarked URLs from notecards and navigates directly to them with user&#039;s in-world browser.&lt;br /&gt;
|-&lt;br /&gt;
|[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
|{{User|Newfie Pendragon}}&lt;br /&gt;
|Script to easily move/rotate large builds that exceed the linkable size [[limits]].&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|Building Rezzer 2024]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|This rezzer is my interpretation of a building rezzer. &lt;br /&gt;
|-&lt;br /&gt;
|[[Button Click Detector]]&lt;br /&gt;
|{{User2|Sendao Goodman}}&lt;br /&gt;
|Use [[llDetectedTouchUV]] to determine which button was pressed on a texture.&lt;br /&gt;
|-&lt;br /&gt;
|[[Camera following prim]]&lt;br /&gt;
|{{User|Dale Innis}}&lt;br /&gt;
|Pair of scripts to make a prim follow your camera position around (for lights etc).&lt;br /&gt;
|-&lt;br /&gt;
|[[Camera Sync]]&lt;br /&gt;
|{{User|Meyermagic Salome}} and {{User2|Nomad Padar}}&lt;br /&gt;
|A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
|[[Chatbot]]&lt;br /&gt;
|Anonymous&lt;br /&gt;
|Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
|[[Chat Logger (GPL)]]&lt;br /&gt;
|{{User|Nobody Fugazi}}&lt;br /&gt;
|Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
|[[Chat_Relay|Chat Relay]]&lt;br /&gt;
|{{User|grumble Loudon}}&lt;br /&gt;
|A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
|[[ClickAndDrag]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Lou_Netizen/HTTP_GET_Example_(GridSurvey)|HTTP Get Example (GridSurvey)]]&lt;br /&gt;
|{{User|Lou Netizen}}&lt;br /&gt;
|Shows how to use LSL to perform an HTTP GET to retreive the name of a random online region from GridSurvey.&lt;br /&gt;
|-&lt;br /&gt;
|[[Code Racer]]&lt;br /&gt;
|Anonymous&lt;br /&gt;
|Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
|[[Code Sizer]]&lt;br /&gt;
|Anonymous&lt;br /&gt;
|Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
|[[Collision message sender]]&lt;br /&gt;
|{{User2|Taff Nouvelle}}&lt;br /&gt;
|Give a message to an avatar on collision if the message has not been sent in the last 10 minutes.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Programs#v7-D_Enh._Color_Picker|Color Changer]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Dialog driven color changer. Supports 16million+ colors, web color codes, multiple targeted prims, with save and recall.&lt;br /&gt;
|-&lt;br /&gt;
|[[Color Changer|Color Changer Plus]]&lt;br /&gt;
|{{User2|Neo Calcutt}}&lt;br /&gt;
|A color changer with 14 colors, a random function, and a custom vector function.&lt;br /&gt;
|-&lt;br /&gt;
|[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
|{{User|Sally LaSalle}}&lt;br /&gt;
|Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
|[[ColorConvert]]&lt;br /&gt;
|{{User|Siann Beck}}&lt;br /&gt;
|Convert color values to vector from RGB, hex or HTML color name.&lt;br /&gt;
|-&lt;br /&gt;
|[[Color script]]&lt;br /&gt;
|{{User2|Masakazu Kojima}}&lt;br /&gt;
|Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
|[[Library Combined Library|Combined Library]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
|[[Computer:jaycoonlanguage]]&lt;br /&gt;
|{{User|jayco121 Bing}}&lt;br /&gt;
| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
|[[Read Note Card Configuration|Configuration Notecard Reader]]&lt;br /&gt;
|{{User|Dedric Mauriac}}&lt;br /&gt;
|A script to read configuration information from a notecard. Parses notecard to extract key words and their assigned values. Allows for comment lines and many more useful features.&lt;br /&gt;
|-&lt;br /&gt;
|[[AdvancedNotecardReader|Configuration Notecard Reader (advanced)]]&lt;br /&gt;
|[[Lear Cale|Lear Cale]]&lt;br /&gt;
|Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
|[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
|{{User|Jippen Faddoul}}&lt;br /&gt;
|Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
|[[Curtain script]]&lt;br /&gt;
|{{User|Zilla Larsson}}&lt;br /&gt;
|A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
|[[Library_Cycle_Dialog_Items|Cycle Dialog Items w/ Callback]]&lt;br /&gt;
|{{User|Hawkster Westmoreland}}&lt;br /&gt;
|A customizable way to cycle dialog items with pagination&lt;br /&gt;
|-&lt;br /&gt;
|[[Dataserver API]]&lt;br /&gt;
|{{User|Revolution Perenti}}&lt;br /&gt;
|Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
|[[Date Library]]&lt;br /&gt;
|{{User|Corto Maltese}}&lt;br /&gt;
| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
|[[Day of the Week]]&lt;br /&gt;
|{{User|DoteDote Edison}}&lt;br /&gt;
|Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
|[[Days in Month]]&lt;br /&gt;
|{{User|IntLibber Brautigan}}&lt;br /&gt;
|Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
|[[Deed Tools]]&lt;br /&gt;
|{{User|Falados Kapuskas}}&lt;br /&gt;
|Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|DEMO_Shield]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
|[[Describe Chatter]]&lt;br /&gt;
|Anonymous&lt;br /&gt;
|Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
|[[Dialog Control]]&lt;br /&gt;
|{{User|Nargus Asturias}}&lt;br /&gt;
| A (not-so) simple dialog &amp;amp; menu control script. Call dialog and receive selected value via [[link_message]], with built-in timer and [[link_message]] notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
Latest version also has [[Dialog Menus Control]] built-in; which allow multi-level menus through SL dialog system.&lt;br /&gt;
|-&lt;br /&gt;
|[[MultiUser_Dialog_Handler|Dialog Menus (multiuser)]]&lt;br /&gt;
|{{User|SimonT Quinnell}}&lt;br /&gt;
| Menu dialog handler that supports multiple menus open at once from the single script. Displays multi-page menus if necessary as well as allowing for fixed header and footer buttons.  Timeouts as well as Text and button size limits are handled.&lt;br /&gt;
|-&lt;br /&gt;
|[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
|{{User|DoteDote Edison}}&lt;br /&gt;
|Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
|[[Display Names Radar]]&lt;br /&gt;
|{{User|Cerise Sorbet}}&lt;br /&gt;
|Simple HUD type avatar radar that can show [[display names]] and script memory usage&lt;br /&gt;
|-&lt;br /&gt;
|[[Display Names to Key]]&lt;br /&gt;
|{{User|Joran Yoshikawa}}&lt;br /&gt;
|Simple way to get UUIDs from displaynames&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|Display-Username_Online_Indicator]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner.&lt;br /&gt;
|-&lt;br /&gt;
|[[Displayer Script]]&lt;br /&gt;
|{{User|Akinori Kimagawa}}&lt;br /&gt;
|Display Words On Top Of An Object&lt;br /&gt;
|-&lt;br /&gt;
|[[Drink script]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|Single_AO-Sit]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
|[[TOXDropBox|DropBox]]&lt;br /&gt;
|{{User|Dimentox Travanti}}&lt;br /&gt;
| This is a Drop box which allows people to drop certain items in a object &amp;amp; has many config options.&lt;br /&gt;
|-&lt;br /&gt;
|[[Efficiency Tester]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
|[[Email-to-IM|Email2IM]]&lt;br /&gt;
|{{User|DoteDote Edison}}&lt;br /&gt;
|Send IMs to SL friends via [[email]].&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kireji_Haiku/SIMchat_headset|Encrypted Region-wide chat]]&lt;br /&gt;
|{{User|Kireji Haiku}}&lt;br /&gt;
|Encrypted Region-wide chat&lt;br /&gt;
|-&lt;br /&gt;
|[[ExplodingObjects]]&lt;br /&gt;
|{{User|Dale Innis}}&lt;br /&gt;
|Causes an object (of the appropriate type) to explode on command.&lt;br /&gt;
|-&lt;br /&gt;
|[[FadeEasy]]&lt;br /&gt;
|{{User2|Nika Rugani}}&lt;br /&gt;
|The easy way of fading objects in or out (Using llSetLinkAlpha)&lt;br /&gt;
|-&lt;br /&gt;
|[[FastConeSpread]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Fast Algorithmn to achieve cone spread, main use in weaponry systems.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PixelProphet Lane/Scripts#Fast List Prim Contents|Fast List Prim Contents]]&lt;br /&gt;
|{{User|PixelProphet Lane}}&lt;br /&gt;
|Fast and efficient method to print Object Inventory (Name, Type and next Owner permissions)&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PixelProphet_Lane/Scripts#Grid_Status_Feed|Grid Status Feed]]&lt;br /&gt;
|{{User|PixelProphet Lane}}&lt;br /&gt;
|Receive important Grid information in-world&lt;br /&gt;
|-&lt;br /&gt;
|[[Find Avatar Key|Find Avatar Key]]&lt;br /&gt;
|{{User2|Huney Jewell}}&lt;br /&gt;
|Explores [[UUID]] of avatar whose name is said in local chat or who touches the prim.&lt;br /&gt;
|-&lt;br /&gt;
|[[First Name Letter Prize]]&lt;br /&gt;
|{{User|RaithSphere Whybrow}}&lt;br /&gt;
|Gives a prize if the person who sits on it&#039;s first letter of first name matches the random letter!&lt;br /&gt;
|-&lt;br /&gt;
|[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
|{{User|Emma Nowhere}}&lt;br /&gt;
|Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
|[[Float2Hex]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
|[[Float Box Contents]]&lt;br /&gt;
|{{User|Rolig Loon}}&lt;br /&gt;
|Displays object inventory in hover text, identified by type and updated marquee-style.&lt;br /&gt;
|-&lt;br /&gt;
|[[Follower (script)|Follower]]&lt;br /&gt;
|Unknown, uploaded by {{User|Slik Swindlehurst}}&lt;br /&gt;
|Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
|[[FURWARE_text]]&lt;br /&gt;
|{{User|Ochi Wolfe}}&lt;br /&gt;
|Versatile text-on-prim script, open source under the MIT license&lt;br /&gt;
|-&lt;br /&gt;
|[[GA Event Notifier]]&lt;br /&gt;
|{{User|Victor Hua}}&lt;br /&gt;
|Gathers seven days event data from a Google calendar and display it through a simple interface. The lsl script can access several calendars at once through seperate php files. One file per calendar. Host the included php on your own web server.&lt;br /&gt;
|-&lt;br /&gt;
|[[Geometric|Geometric Library]]&lt;br /&gt;
|Community Project&lt;br /&gt;
|A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
|[[Get Profile Picture]]&lt;br /&gt;
|{{User2|Valentine Foxdale}}&lt;br /&gt;
|Sets the texture of the object to profile picture of the person that touches ot&lt;br /&gt;
|-&lt;br /&gt;
|[[GetTimestampOffset]]&lt;br /&gt;
|{{User|Siann Beck}}&lt;br /&gt;
|Returns [[llGetTimestamp]] with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
|[[Give InvItem every n hours]]&lt;br /&gt;
|{{User|Criz Collins}}&lt;br /&gt;
|Will give an inventory item on touch only every n hours, even if somebody touches the object more than once.&lt;br /&gt;
|-&lt;br /&gt;
|[[Give random object]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|Touch to receive a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Yumi Murakami/Golden Vendor|Golden Vendor]]&lt;br /&gt;
|{{User|Yumi Murakami}}&lt;br /&gt;
|A cross between a vendor and a game.&lt;br /&gt;
|-&lt;br /&gt;
|[[Google Charts]]&lt;br /&gt;
|{{User|Dedric Mauriac}}&lt;br /&gt;
|Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
|[[Google_Translator]]&lt;br /&gt;
|{{User|Ugleh Ulrik}}&lt;br /&gt;
|Translates spanish to english, and its simple to make it any other way.&lt;br /&gt;
|-&lt;br /&gt;
|[[Go transparent when walking]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|An attachment that goes invisible when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
|[[Group Authorization]]&lt;br /&gt;
|{{User|Chase Quinnell}}&lt;br /&gt;
|Checks to see if object is set to appropriate group (checks by [[Group key finder|group key]])&lt;br /&gt;
|-&lt;br /&gt;
|[[Group key finder]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
|[[Group Privacy]]&lt;br /&gt;
|{{User|Chance Unknown}}&lt;br /&gt;
|Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hello Avatar]]&lt;br /&gt;
|Linden Lab&lt;br /&gt;
|SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hello Avatar Companion]]&lt;br /&gt;
|[[Chase Quinnell]]&lt;br /&gt;
|Companion to the original [[Hello Avatar]] script&lt;br /&gt;
|-&lt;br /&gt;
|[[HexText]]&lt;br /&gt;
|{{User|Hexadeci Mole}}&lt;br /&gt;
|Unicode display script. Roughly 28,000 characters supported. Open source under the MIT license&lt;br /&gt;
|-&lt;br /&gt;
|[[Hierarchics]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Advanced script to create an efficient self-aware hierarchic structure.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hierarchics2]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Second generation, one script per object. Only two functions, can be embedded in others. Uses the new [[llSetLinkPrimitiveParamsFast]]/[[llGetLinkPrimitiveParams]] functions.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Rolig_Loon/High-Capacity_Greeter-Counter|High-Capacity Greeter-Counter]]&lt;br /&gt;
|{{User|Rolig Loon}}&lt;br /&gt;
|Uses a memory compression algorithm to store hashed visitor UUID&#039;s in a string instead of using a list.&lt;br /&gt;
|-&lt;br /&gt;
|[[Holodeck]]&lt;br /&gt;
|{{User|Revolution Perenti}}&lt;br /&gt;
|Home Rezzing System.&lt;br /&gt;
|-&lt;br /&gt;
|[[HUD Dots Radar]]&lt;br /&gt;
|{{User|Cerise Sorbet|Cerise}}&lt;br /&gt;
|HUD target example, draws dots on the HUD over avatars in view.&lt;br /&gt;
|-&lt;br /&gt;
|[[Interpolation|Interpolation Library]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
|A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
|[[Intra-Region Update Server]]&lt;br /&gt;
|{{User|Emma Nowhere}}&lt;br /&gt;
|Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
|[[Inventory_Based_Menu]]&lt;br /&gt;
|{{User|Revolution Perenti}}&lt;br /&gt;
|Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
|[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
|{{User|Fox Diller}}&lt;br /&gt;
|iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
|[[Key Frame Animator|Keyframe Animator]]&lt;br /&gt;
|{{User|Jasper Flossberg}}&lt;br /&gt;
| This is a KeyFrame Animator Script to simplify construction of keyframed animations.&lt;br /&gt;
|-&lt;br /&gt;
|[[Key Pad Door|Keypad Door]]&lt;br /&gt;
|{{User|Tdub Dowler}}&lt;br /&gt;
| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
|[[Key2Name]]&lt;br /&gt;
|{{User2|Nika Rugani}}&lt;br /&gt;
| Key2Name service where a user no longer needs to be in the same region to get users name&lt;br /&gt;
|-&lt;br /&gt;
|[[Kilt Editor|Kilt / Skirt Editor]]&lt;br /&gt;
|{{User|Brangus Weir}}&lt;br /&gt;
| This changes all the parameters of all the flexis in the link set in one swell foop!&lt;br /&gt;
|-&lt;br /&gt;
|[[landmark2slurl]]&lt;br /&gt;
|{{User|Tapple Gao}}&lt;br /&gt;
|Convert all landmarks in inventory to slurls&lt;br /&gt;
|-&lt;br /&gt;
|[[Last Sound System]]&lt;br /&gt;
|Babbage Linden&lt;br /&gt;
|An LSL [http://Last.fm Last.fm] client.&lt;br /&gt;
|-&lt;br /&gt;
|[[LibObj]]&lt;br /&gt;
|{{User|Ochi Wolfe}}&lt;br /&gt;
|A library to manage state in LSL using an object-oriented approach.&lt;br /&gt;
|-&lt;br /&gt;
|[[LibraryDisplayLandScreenshot]]&lt;br /&gt;
|{{User|Jon Desmoulins}}&lt;br /&gt;
|A modified version of LibraryDisplayProfilePic using the new [[PARCEL_DETAILS_ID]] Implemented in Server v1.36&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|LinkNumber-List_in_llSetLinkPrimitiveParamsFast]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|-&lt;br /&gt;
|[[Linkset resizer]]&lt;br /&gt;
|Maestro Linden&lt;br /&gt;
|Systematically rescales a linkset by moving and resizing each prim (by using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]])&lt;br /&gt;
|-&lt;br /&gt;
|[[Linkset resizer with menu]]&lt;br /&gt;
|{{User|Brilliant Scientist}}&lt;br /&gt;
|A menu-driven script that rescales a linkset by moving and resizing the prims using [[llGetLinkPrimitiveParams]] and [[llSetLinkPrimitiveParamsFast]] functions. Based on [[Linkset resizer]].&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|Single resize script for a complete linkset with save and restore option.&lt;br /&gt;
|-&lt;br /&gt;
|[[Pointing Stick]]&lt;br /&gt;
|{{User|rhonin Nissondorf}}&lt;br /&gt;
|A device that takes controls of your arrow keys and directs the device in the relative direction its pointing, forward and back of course.&lt;br /&gt;
|-&lt;br /&gt;
|[[Gun Script]]&lt;br /&gt;
|{{User|rhonin Nissondorf}}&lt;br /&gt;
|Shoots out &amp;quot;ammo&amp;quot; from the root prim of your &amp;quot;gun&amp;quot;.&lt;br /&gt;
|-&lt;br /&gt;
|[[Grenade Script]]&lt;br /&gt;
|{{User|rhonin Nissondorf}}&lt;br /&gt;
|Uses a timed factor to add influence to the velocity of a throw object.&lt;br /&gt;
|-&lt;br /&gt;
|[[Linkset Resizer 2]]&lt;br /&gt;
|{{User|Emma Nowhere}}&lt;br /&gt;
|A more user-friendly resizer script designed for either drop-in use by the end-user or builder or for use in products. Based on [[Fix Small Prims]].&lt;br /&gt;
|-&lt;br /&gt;
|[[List2CSV]]&lt;br /&gt;
|{{User|Kunnis Basiat}}&lt;br /&gt;
|Similar to [[llList2CSV]] &amp;amp; [[llCSV2List]] which includes preserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
|[[list_cast]]&lt;br /&gt;
|{{User2|Fractured Crystal}}&lt;br /&gt;
|Casts a list of strings into the type they appear to be. Designed for preprocessing user input for feeding into [[llSetPrimitiveParams]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Listener Script]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|Use to [[listen]] to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#List:_Find_Last_Index|List: Find Last Index]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Returns the last index of searched item in a source list. (backwards version of [[llListFindList]])&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#List:_Multi-Find_Index_.28First_or_Last.29|List: Multi Find]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Returns the first found index of multiple search items in a list. (Multi-item version of [[llListFindList]]. Fwd and Rev versions included)&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#List:_Get_Reverse_Order|List: Reverse]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Returns an input List in reverse order&lt;br /&gt;
|-&lt;br /&gt;
|[[LinksetIndexing]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
|Functions for indexing a linkset by patterns or names down to their linkset numbers.&lt;br /&gt;
|-&lt;br /&gt;
|[[llGetAgentList Sim-Wide Radar]]&lt;br /&gt;
|{{User|Tiaeld Tolsen}}&lt;br /&gt;
|Simple radar implementation using the new [[llGetAgentList]] LSL Function.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kephra_Nurmi/lsDancemachine|lsDancemachine]]&lt;br /&gt;
|{{User|Kephra Nurmi}}&lt;br /&gt;
| Low lag client server dancemachine.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kephra_Nurmi/lsDeejay|lsDeejay Home Edition]]&lt;br /&gt;
|{{User|Kephra Nurmi}}&lt;br /&gt;
| Client server media control for music, video, youtube, pictures, and texture animations.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kephra_Nurmi/lsDialog|lsDialog]]&lt;br /&gt;
|{{User|Kephra Nurmi}}&lt;br /&gt;
| Universal notecard driven menu dialog system.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kephra_Nurmi/lsDisplay|lsDisplay]]&lt;br /&gt;
|{{User|Kephra Nurmi}}&lt;br /&gt;
| Picture cycler with preloader.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Kephra_Nurmi/lsDistributor|lsDistributor]]&lt;br /&gt;
|{{User|Kephra Nurmi}}&lt;br /&gt;
| Simple &#039;try&#039; and &#039;buy&#039; vendor system.&lt;br /&gt;
|-&lt;br /&gt;
|[[LSL_languageAPI]]&lt;br /&gt;
|{{User|Gypsy Paz}}&lt;br /&gt;
|Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
|[[Mandelbrot Explorer]]&lt;br /&gt;
|{{User|Babbage Linden}}&lt;br /&gt;
|An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
|[[Materialization Effects]]&lt;br /&gt;
|{{User|Overbrain Unplugged}}&lt;br /&gt;
| Special effects to add to rezzing events to simulate a teleportation or materialization.&lt;br /&gt;
|-&lt;br /&gt;
|[[Materialization Effects 2]]&lt;br /&gt;
|{{User2|Nika Rugani}}&lt;br /&gt;
| More efficient and faster version of Materialization Effects by Overbrain Unplugged.&lt;br /&gt;
|-&lt;br /&gt;
|[[Matrix Functions]]&lt;br /&gt;
|{{User2|Kyle Flynn}}&lt;br /&gt;
| A set of 3x3 matrix functions, multiplication, division, inversion, transposition, etc.&lt;br /&gt;
|-&lt;br /&gt;
|[[Merge Sort]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
|[[Minesweeper]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
|[[Morse Code]]&lt;br /&gt;
|{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
|A script that allows for the conversion to and from morse code and can &amp;quot;play&amp;quot; morse code.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multi-displays Texture Cycler]]&lt;br /&gt;
|{{User|Nargus Asturias}}&lt;br /&gt;
|A simple texture rotator designed for multiple display screens. With delay between each screen AND delay between each loop.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multi Item Rezzer|Multi Item Rezzer]]&lt;br /&gt;
|{{User|Jesse Barnett}}&lt;br /&gt;
|A rework of my old High Altitude Rezzer. Place the objects that you wish to choose from to be rezzed inside. Sit on the rezzer and pick the item and the height. It will go to target height and rez the object.&lt;br /&gt;
|-&lt;br /&gt;
|[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
|{{User2|Beet Streeter}}&lt;br /&gt;
|Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Allen_Kerensky/Myriad_Lite_Preview_5|Myriad Lite Preview 5 RPG System]]&lt;br /&gt;
|{{User|Allen Kerensky}}&lt;br /&gt;
|Working preview of the Myriad Universal RPG System by Ashok Desai, converted to LSL as a roleplay meter with quest NPC and goals, hand-to-hand and melee close combat, ranged combat, armor, healing, bullet, firearm, holster, practice target, and much more&lt;br /&gt;
|-&lt;br /&gt;
|[[Name2Key in LSL]]&lt;br /&gt;
|{{User|Maeva Anatine}}&lt;br /&gt;
|Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
|[[Name2Key]]&lt;br /&gt;
|{{User2|Nika Rugani}}&lt;br /&gt;
|Newest and fastest Name2Key search, While the database is small it is also connected to Second Life&#039;s search.&lt;br /&gt;
|-&lt;br /&gt;
|[[NexiiText]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Text Renderer, specialised in features, performance and a compact nature. It features unique per character control, such as Colour, Bold, Italics, Underline, Stroke, Icons. The high performance means it comes in at a 5 char / prim ratio, but it is perfect where highly dynamic and rich text is required.&lt;br /&gt;
|-&lt;br /&gt;
|[[NexiiText2]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Second Gen Text Renderer. Same as above but features use of [[PRIM_LINK_TARGET]] and an awesome dynamic prim allocation architecture.&lt;br /&gt;
|-&lt;br /&gt;
|[[No Auto-Return]]&lt;br /&gt;
|{{User|Bellla Clarity}}&lt;br /&gt;
|To stop your long and hard builds from getting returned in sandboxes (&#039;&#039;only single prims, though!&#039;&#039;).&lt;br /&gt;
|-&lt;br /&gt;
|[[No Auto-Return NR]]&lt;br /&gt;
|{{User|Jor3l Boa}}&lt;br /&gt;
|This really works (29-05-09), needs a nearby region to do the trick and avoid auto return. (Tested on Blue and Rausch)&lt;br /&gt;
|-&lt;br /&gt;
|[[No Auto-Return (Multi)]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|A revision of Bella&#039;s that works for multi-prim objects.&lt;br /&gt;
|-&lt;br /&gt;
|[[No Limit Teleporter]]&lt;br /&gt;
|{{User|Morgam Biedermann}}&lt;br /&gt;
|Teleport to infinite altitudes (up to 4096m)&lt;br /&gt;
|-&lt;br /&gt;
|[[Object Size]]&lt;br /&gt;
|{{User|Chase Quinnell}}&lt;br /&gt;
|Gets the dimensions and footprint of a linkset&lt;br /&gt;
|-&lt;br /&gt;
|[[Object to Data v1.4|Object to Data]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Turns an object into text (and back). Allows people to transfer objects through notecards (or otherwise).&lt;br /&gt;
|-&lt;br /&gt;
|[[Online Indicator|Online Indicator]]&lt;br /&gt;
|{{User|Kristy Fanshaw}}&lt;br /&gt;
|Will show if the user is online or not. Displays users profile picture and allows to send IM&#039;s to user. Also gives a link to open the users profile&lt;br /&gt;
|-&lt;br /&gt;
|[[Open Group Join]]&lt;br /&gt;
|{{User|Alicia Stella}}&lt;br /&gt;
|User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
|[[Open Prim Animator]]&lt;br /&gt;
|{{User|Todd Borst}}&lt;br /&gt;
|Single script prim animation tool.  Menu driven, easy to use.&lt;br /&gt;
|-&lt;br /&gt;
|[[Open Zyngo Skin Installer]]&lt;br /&gt;
|{{User2|Tmzasz Luminos}}&lt;br /&gt;
|A Simple Script designed to install skins on the popular Skill machines.&lt;br /&gt;
|-&lt;br /&gt;
|[[One Script, many doors]]&lt;br /&gt;
|{{User|Kyrah Abattoir}}&lt;br /&gt;
|Door script able to manage more than 50 linked doors from a single script instance.&lt;br /&gt;
|-&lt;br /&gt;
|[[ParseString2List]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
|[[Password Generator]]&lt;br /&gt;
|{{User2|Syntrax Canucci}}&lt;br /&gt;
|This is an over-complicated, semi-complex password generator, which goes through multiple steps.&lt;br /&gt;
|-&lt;br /&gt;
|[[Pathfinder]]&lt;br /&gt;
|Babbage Linden&lt;br /&gt;
|A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
|[[Personal ATM Machine]]&lt;br /&gt;
|{{User|Jessikiti Nikitin}}&lt;br /&gt;
|Allows deposits and withdrawals into another of your accounts, without the account being logged in.&lt;br /&gt;
|-&lt;br /&gt;
|[[Phantom Child]]&lt;br /&gt;
|{{User|Aeron Kohime}}&lt;br /&gt;
|Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
|[[PHP_RegionFunctions]]&lt;br /&gt;
|{{User|Gypsy Paz}} and {{User2|Zayne Exonar}}&lt;br /&gt;
|Three useful PHP functions to get region info&lt;br /&gt;
|-&lt;br /&gt;
|[[PhysicsLib]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Interesting set of fun physics functions.&lt;br /&gt;
|-&lt;br /&gt;
|[[Play and Loop Sound]]&lt;br /&gt;
|{{User|Bellla Clarity}}&lt;br /&gt;
|Very short and simple script; plays and loops a sound in an object.&lt;br /&gt;
|-&lt;br /&gt;
|[[Posing stand|Posing Stand]]&lt;br /&gt;
|{{User|Bellla Clarity}}&lt;br /&gt;
|Just a pose script to edit [[attachments]] more easily.&lt;br /&gt;
|-&lt;br /&gt;
|[[PosJump]]&lt;br /&gt;
|{{User|Uchi Desmoulins}}&lt;br /&gt;
|A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
|[[Prefix Calculator]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
| A calculator that evaluates expressions in prefix notation.&lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|[[Profile Picture]]&lt;br /&gt;
|{{User|Jor3l Boa}}&lt;br /&gt;
|A working profile picture script with the new SecondLife API (1/11/2011)&lt;br /&gt;
|-&lt;br /&gt;
|[[Progress Bar]]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
| Flexible and powerful little function for creating progress bars useful in hovertext.&lt;br /&gt;
|-&lt;br /&gt;
|[[Pseudo-random Number Generator]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Rolig_Loon/Quiz_From_Notecard|Quiz From Notecard]]&lt;br /&gt;
|{{User|Rolig Loon}}&lt;br /&gt;
|A multiple-choice testing script that reads questions and answer choices from a notecard and presents them in dialog boxes.&lt;br /&gt;
|-&lt;br /&gt;
|[[Rainbow_palette]]&lt;br /&gt;
|{{User|Rui Clary}}&lt;br /&gt;
|Build a color picker, using only one prim, and a few lines of code.&lt;br /&gt;
|-&lt;br /&gt;
|[[Random Gaussian Number Generator]]&lt;br /&gt;
|{{User2|Vlad Davidson}}&lt;br /&gt;
|Generates a random number drawn from a normal (Gaussian; bell-curve) distribution, based on a specified mean/stdev&lt;br /&gt;
|-&lt;br /&gt;
|[[Random AV Profile Projector]]&lt;br /&gt;
|{{User|Debbie Trilling}}&lt;br /&gt;
|Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image&lt;br /&gt;
|-&lt;br /&gt;
|[[Random Object Vendor]]&lt;br /&gt;
|{{User|CodeBastard Redgrave}}&lt;br /&gt;
|Simple vendor that gives out random objects when paid the right amount&lt;br /&gt;
|-&lt;br /&gt;
|[[Random Password Generator]]&lt;br /&gt;
|{{User|Jor3l Boa}}&lt;br /&gt;
|Generate Random passwords based on String Length.&lt;br /&gt;
|-&lt;br /&gt;
|[[RandomPrimParams]]&lt;br /&gt;
|{{User|Xintar Citron}}&lt;br /&gt;
|Simple script which randoms Prim Parameteres, in this example i used color, but you can use everything.&lt;br /&gt;
|-&lt;br /&gt;
|[[RavText]]&lt;br /&gt;
|{{User|Ravenous Dingo}}&lt;br /&gt;
|An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PixelProphet Lane/Scripts#Real Object Inventory To Dialog|Real Object Inventory To Dialog]]&lt;br /&gt;
|{{User|PixelProphet Lane}}&lt;br /&gt;
|Display any amount of items contained in an Object in a Dialog, regardless of item name length.&lt;br /&gt;
|-&lt;br /&gt;
|[[RentalBoxv1|Rental Box, Simply]]&lt;br /&gt;
|{{User2|Sendao Goodman}}&lt;br /&gt;
|Simple explanation of how to make rental boxes.&lt;br /&gt;
|-&lt;br /&gt;
|[[Rental Cube]]&lt;br /&gt;
|{{User|Hank Ramos}}&lt;br /&gt;
|Simple cube for renting out a space.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|Rental-Cube]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|This is an Open-Source version of a Rental-Cube from Daemonika Nightfire. Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Ackley Bing/Textbox2Hovertext|Textbox2Hovertext]]&lt;br /&gt;
|{{User|Ackley Bing|Ackley}}&lt;br /&gt;
|A simple script to allow hovertext to be set with a dialog text box.&lt;br /&gt;
|-&lt;br /&gt;
|[[Remote Texture Loader]]&lt;br /&gt;
|{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
|A set of scripts for remotely loading textures within a sim. This means that a single &amp;quot;texture server&amp;quot; can manage multiple changing billboards within a sim.&lt;br /&gt;
|-&lt;br /&gt;
|[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
|{{User2|Heymeriou Mystakidou}}&lt;br /&gt;
| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
|[[Resizer multi-prims|Resizer multi-prims]]&lt;br /&gt;
|{{User2|Christy Mansbridge}}&lt;br /&gt;
|1 Mono script to resize object (1 to 256 prims) by blue menu. Avoid risk to break the build by increasing link distance.&lt;br /&gt;
|-&lt;br /&gt;
|[[RLV Collision Grabber]]&lt;br /&gt;
|{{User|Vala Vella}}&lt;br /&gt;
|Grab people colliding with the object and sit them on a set target using RLV&lt;br /&gt;
|-&lt;br /&gt;
|[[sbDialog]]&lt;br /&gt;
|{{User|Siann Beck}}&lt;br /&gt;
|A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
|[[Scheduler]]&lt;br /&gt;
|{{User|Haravikk Mistral}}&lt;br /&gt;
|Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
|[[Scheme_Interpreter|Scheme Interpreter]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|A scheme interpreter capable of handling most scheme expressions, including lambda and lists.&lt;br /&gt;
|-&lt;br /&gt;
|[[Script Override Functions]]&lt;br /&gt;
|{{User|Revolution Perenti}}&lt;br /&gt;
|bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Toady_Nakamura/Scrubber_Script|Script Scrubber]]&lt;br /&gt;
|{{User|Toady Nakamura}}&lt;br /&gt;
|Script scrubs memory resident script functions from prim and self-deletes the script. Does not damage the prim, or remove other scripts.  Use this to kill bling or other particle effects!&lt;br /&gt;
|-&lt;br /&gt;
|[[Scripted Attachment Detector.lsl|Scripted Attachment Detector]]&lt;br /&gt;
|{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
|A script that will display avatars wearing scripted attatchments in hovertext. This may be worn as an hud or rezzed.&lt;br /&gt;
|-&lt;br /&gt;
|[[Self Upgrading Script Enhanced]]&lt;br /&gt;
|{{User|Cron Stardust}}&lt;br /&gt;
|Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
|[[Sensor Visualizer]]&lt;br /&gt;
|{{User|Cerise Sorbet}}&lt;br /&gt;
|Shows the size and shape you get with [[llSensor]] range and arc parameters&lt;br /&gt;
|-&lt;br /&gt;
|[[Serverless Key Exchange]]&lt;br /&gt;
|{{User2|Sendao Goodman}}&lt;br /&gt;
|Maintains a network of object keys without using an external server.&lt;br /&gt;
|-&lt;br /&gt;
|[[SetLinkText]]&lt;br /&gt;
|{{User2|Tacusin Memo}}&lt;br /&gt;
|Custom function like [[llSetText]] only applying to linked sets.&lt;br /&gt;
|-&lt;br /&gt;
|[[SHA-1|SHA-1 Hash]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Performs a SHA-1 Hash on an input text. Similar to MD5 only (slightly) more secure.&lt;br /&gt;
|-&lt;br /&gt;
|[[SHA-2|SHA-2 Hash]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Performs a SHA-2 Hash on an input text. Similar to SHA-1 only (slightly) more secure.&lt;br /&gt;
|-&lt;br /&gt;
|[[Shoutcast - radio controller v0.3 (remake of similar scripts)]]&lt;br /&gt;
|{{User|Flennan Roffo}}&lt;br /&gt;
|Control your shoutcast radio stations with this shoutcast controller. Uses notecard for info about genres and stations and menu to select the station. Sends info to Xytext display.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:PixelProphet Lane/Scripts#Show Agent Script Count and memory|Show Agent Script Count and memory]]&lt;br /&gt;
|{{User|PixelProphet Lane}}&lt;br /&gt;
|Fast and efficient method to display the amount of scripts and memory usage for an agent&lt;br /&gt;
|-&lt;br /&gt;
|[[Sim Map Particle Projector]]&lt;br /&gt;
|{{User|Jesse Barnett}}&lt;br /&gt;
|Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
|[[Sim Performance Collector (Web-based]]&lt;br /&gt;
|{{User2|DeniseHoorn Slade}}&lt;br /&gt;
|Makes some graphs for your website on the sim-performance (DIL,FPS, PING). PHP and Round Robin Database on Server needed!&lt;br /&gt;
|-&lt;br /&gt;
|[[Sim Restart Logger]]&lt;br /&gt;
|{{User|Kyrah Abattoir}}&lt;br /&gt;
|Counts region restarts and displays log of last 9 restarts together with region FPS and dilation.&lt;br /&gt;
|-&lt;br /&gt;
|[[Simple Elevator in a Box]]&lt;br /&gt;
|{{User|Hank Ramos}}&lt;br /&gt;
|Simple elevator example.&lt;br /&gt;
|-&lt;br /&gt;
|[[Simple Pay Door]]&lt;br /&gt;
|{{User|Giygas Static}}&lt;br /&gt;
|Simple door you pay to get access.&lt;br /&gt;
|-&lt;br /&gt;
|[[Skillingo AntiHack Script]]&lt;br /&gt;
|{{User2|Tmzasz Luminos}}&lt;br /&gt;
|A simple Protection script for skillingo thats modifyable to work with other machines.&lt;br /&gt;
|-&lt;br /&gt;
|[[Skunk Money]]&lt;br /&gt;
|{{User|Hank Ramos}}&lt;br /&gt;
|Fun gambling machine of yesteryear, which only supports freeplay now due to SL regulations against gambling.&lt;br /&gt;
|-&lt;br /&gt;
|[[SLateIt]]&lt;br /&gt;
|Babbage Linden&lt;br /&gt;
|An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
|[[SLetanque]]&lt;br /&gt;
|Babbage Linden&lt;br /&gt;
|An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
|[[SLURL HUD]]&lt;br /&gt;
|{{User|CodeBastard Redgrave}}&lt;br /&gt;
|Touch this HUD to get a SLURL through IM, email and floating text.&lt;br /&gt;
|-&lt;br /&gt;
|[[BuildSlurl (NewAge)]]&lt;br /&gt;
|{{User2|Archile Azalee}}&lt;br /&gt;
|A way to create a SLurl in a single function BuildSlurl&lt;br /&gt;
|-&lt;br /&gt;
|[[SL Mail V1.2]]&lt;br /&gt;
|{{User|Flennan Roffo}}&lt;br /&gt;
|Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon!&lt;br /&gt;
|-&lt;br /&gt;
|[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|{{User|SignpostMarv Martin}}&lt;br /&gt;
|Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
|[[Smooth Rotating Door]]&lt;br /&gt;
|{{User|Toy Wylie}}&lt;br /&gt;
|A script for doors that open and close smoothly using llTargetOmega&lt;br /&gt;
|-&lt;br /&gt;
|[[Smooth Rotating Linked Door With Hinge]]&lt;br /&gt;
|{{User2|Lyn Mimistrobell}}&lt;br /&gt;
|A script for linked uncut (mesh) doors that smoothly rotates around a virtual hinge without the use of timers&lt;br /&gt;
|-&lt;br /&gt;
|[[Smooth Sliding Door]]&lt;br /&gt;
|{{User|SimonT Quinnell}}&lt;br /&gt;
|A script for sliding doors that open and close smoothly using [[llMoveToTarget]]. Asjusts for prim orientation.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sound Preloader]]&lt;br /&gt;
|{{User2|Trinity Dejavu}}&lt;br /&gt;
||A tripwire that preloads a selection of sound files when avatar collides with prim.&lt;br /&gt;
|-&lt;br /&gt;
|[[Speed Tester]]&lt;br /&gt;
|{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
|Similar to the [[Efficiency Tester]], this script allows you to test the speed of a particular function or snippet with multiple trials giving min/max/avg/median and the standard deviation.&lt;br /&gt;
|-&lt;br /&gt;
|[[Spiral Staircase Generator]]&lt;br /&gt;
|{{User|Meyermagic Salome}}&lt;br /&gt;
|Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
|[[String Compare]]&lt;br /&gt;
|{{User|Xaviar Czervik}}&lt;br /&gt;
|Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
|[[Synchronize]]&lt;br /&gt;
|{{User|Cay Trudeau}}&lt;br /&gt;
|Makes synchronized start to a task on even/odd seconds&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#String:_Find_Last_Index|String: Reverse]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Returns an input string in reverse order&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#String:_Get_Reverse_Order|String: Last Index]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Returns the last index of search found in string (the backward equivalent of [[llSubStringIndex]])&lt;br /&gt;
|-&lt;br /&gt;
|[[Tail Messages (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|A super nice easy to use script for those non-scripters out there! NewAge coding has done it again where you no longer need to scroll up and down adding buttons and adding messages, Features a tag system (you&#039;ll see what i mean :P)&lt;br /&gt;
|-&lt;br /&gt;
|[[Taper Door (minimalistic)]]&lt;br /&gt;
|{{User2|Kopilo Hallard}}&lt;br /&gt;
|A basic script for doors which open and close using taper.&lt;br /&gt;
|-&lt;br /&gt;
|[[Teleport HUD]]&lt;br /&gt;
|{{User|Jesse Barnett}}&lt;br /&gt;
|WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Programs#v7-D_Enh._Landmark-2-Map|Teleporter (landmark based)]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Uses Landmarks to offer map teleports. Works as Hud or inworld objects, just drop in landmarks and go.&lt;br /&gt;
|-&lt;br /&gt;
|[[Text_Scroller|Text Scroller]]&lt;br /&gt;
|{{User|Fred Gandt}}&lt;br /&gt;
|A simple text display object that scrolls text (applied as a texture) from right to left (like &#039;&#039;those&#039;&#039; LED signs) in a continuous loop.&lt;br /&gt;
|-&lt;br /&gt;
|[[Bobbyb&#039;s texture changer|Texture Changers]]&lt;br /&gt;
|{{User|Bobbyb30 Swashbuckler}}&lt;br /&gt;
|A collection of texture changing scripts.&lt;br /&gt;
|-&lt;br /&gt;
|[[Texture Menu Management|Texture Management]]&lt;br /&gt;
|{{User|Revolution Perenti}}&lt;br /&gt;
|Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Xen_Lisle/Texture_Slide|Texture Slide]]&lt;br /&gt;
|{{User|Xen Lisle}}&lt;br /&gt;
|Slides a texture on mouse movement&lt;br /&gt;
|-&lt;br /&gt;
|[[Tic Tac Toe]]&lt;br /&gt;
|CG Linden&lt;br /&gt;
|Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
|[[TightList]]&lt;br /&gt;
|{{User|Strife Onizuka}}&lt;br /&gt;
|Tight List is a family of functions for encoding lists as strings and then decoding them back into lists.&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type.&lt;br /&gt;
|-&lt;br /&gt;
|[[Timer Module]]&lt;br /&gt;
|{{User|Isabelle Aquitaine}}&lt;br /&gt;
|Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
|[[Two Avatars on single prim]]&lt;br /&gt;
|{{User2|Pale Janus|Cay Trudeau}}&lt;br /&gt;
|Allow two (or more) avatars to sit on same prim&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#Unix_time_code_to_list_format|Timestamp:&amp;lt;br&amp;gt;Unix time code to list format]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|converts Unix timestamps to their [Y, M, D, h, m, s] equivalents (ex: 1234567890 to [2009, 2, 13, 3, 31, 30])&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#List_format_to_Unix_time_code.|Timestamp:&amp;lt;br&amp;gt;List format to Unix time code]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|converts [Y, M, D, h, m, s] timestamps to their Unix equivalents (ex: [2009, 2, 13, 3, 31, 30] to 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#Weekday_from_Unix_timestamp|Timestamp:&amp;lt;br&amp;gt;Weekday from Unix timestamp]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Gets weekday from Unix timestamps (ex: &amp;quot;Friday&amp;quot; from 1234567890)&lt;br /&gt;
|-&lt;br /&gt;
|[[Texture Repeater]]&lt;br /&gt;
|{{User2|Jenna Felton}}&lt;br /&gt;
|Observes textures and texture parameters on the prim. If changed, bulk-updates other prims in linkset.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Functions#Weekday_from_.28_Y.2C_M.2C_D_.29_format|Timestamp:&amp;lt;br&amp;gt;Weekday from (Y, M, D) format]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Gets weekday from (Y, M, D) timestamps (ex: &amp;quot;Friday&amp;quot; from (2009, 2, 13))&lt;br /&gt;
|-&lt;br /&gt;
|[[Touch A Quote]]&lt;br /&gt;
|{{User|CodeBastard Redgrave}}&lt;br /&gt;
|Touch an object to read quotes sequentially from a notecard&lt;br /&gt;
|-&lt;br /&gt;
|[[Touring Balloon]]&lt;br /&gt;
|{{User|Hank Ramos}}&lt;br /&gt;
|Automated touring balloon with many options from long ago.  Always seems to work on one SL release, and not the other.&lt;br /&gt;
|-&lt;br /&gt;
|[[Under Age Boot]]&lt;br /&gt;
|{{User|Chance Unknown}}&lt;br /&gt;
|Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Rolig_Loon/UNDO_PosRot|UNDO_PosRot]]&lt;br /&gt;
|{{User|Rolig Loon}}&lt;br /&gt;
|Allows user to undo position and rotation changes that have been made &amp;quot;manually&amp;quot; to any or all prims in a linkset.&lt;br /&gt;
|-&lt;br /&gt;
|[[Universal Translator]]&lt;br /&gt;
|{{User|Hank Ramos}}&lt;br /&gt;
|Chat listener that handles seamless translation of public chat between 50+ written languages without the need for configuration.  Handles numerous avatars, auto-detects languages, and works together with multiple copies of translators to spread-workload using a sophisticated back-end communications sub-system.&lt;br /&gt;
|-&lt;br /&gt;
|[[Unix2DateTime]]&lt;br /&gt;
|{{User|Flennan Roffo}}&lt;br /&gt;
|Conversion from Unix time ([[llGetUnixTime]]()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
|[[Unmutable Descript Nagger]]&lt;br /&gt;
|{{User|Bobbyb30 Zohari}}&lt;br /&gt;
|To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
|[[Unpacker On Rez (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|A very simple to use script for all you creators out there, This script will enable you to send out boxed items and make it easier for users to unpack, Also features auto die on completion. Very simple to configure!&lt;br /&gt;
|-&lt;br /&gt;
|[[Unpacker On Touch (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|Exactly like Unpacker On Rez, But changed some things about to make it Unpack On Touch&lt;br /&gt;
|-&lt;br /&gt;
|[[Update distributor]]&lt;br /&gt;
|{{User|Dale Innis}}&lt;br /&gt;
|Distribute an object (like a project update) to a list of people named in a notecard.&lt;br /&gt;
|-&lt;br /&gt;
|[[UUID2Channel]]&lt;br /&gt;
|{{User|Project Neox}}&lt;br /&gt;
|Optimised version of the original key2channel generators.&lt;br /&gt;
|-&lt;br /&gt;
|[[UUID Song Generator]]&lt;br /&gt;
|{{User2|Sendao Goodman}}&lt;br /&gt;
|Translates a UUID into a simple song and plays it.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/Programs#v7-D_Advanced_Visitor_Greeter|Visitor Greeter]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Reduced spam visitor greeter, highly configurable, easy to modify.&lt;br /&gt;
|-&lt;br /&gt;
|[[VariText]]&lt;br /&gt;
|{{User|Geneko Nemeth|Geneko Nemeth (Kakurady)}}&lt;br /&gt;
|Display text on a prim, without looking like from a typewriter&lt;br /&gt;
|-&lt;br /&gt;
|[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|{{User|Buddy Sprocket}}&lt;br /&gt;
|A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
|[[Vote Simple]]&lt;br /&gt;
|{{User|JB Kraft}}&lt;br /&gt;
|Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
|[[Walking Sound (NewAge)]]&lt;br /&gt;
|{{User|Asia Snowfall}}&lt;br /&gt;
|Very powerful walking sound script, Featuring customer ability to add their own sounds with the API Sound Feature!&lt;br /&gt;
|-&lt;br /&gt;
|[[WarpPos]]&lt;br /&gt;
|{{User2|Keknehv Psaltery}}&lt;br /&gt;
|Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
|[[Watchdog]]&lt;br /&gt;
|{{User|Tika Oberueng}}&lt;br /&gt;
|LSL Watchdog scripts to monitor other scripts in the prim and restart them if they crash or stop running.&lt;br /&gt;
|-&lt;br /&gt;
|[[Wiki3DBuilder]] [[Wiki3DBuilder1.0]]&lt;br /&gt;
|{{User|Salahzar Stenvaag}}&lt;br /&gt;
|Allows a group of people to collectively build up complex 3D mindmaps with connected concepts. Uses particles for connections and low prim usage. Nodes can be textured, colored, changed form size moved collectively by everybody and can distribute notecards, landmarks, URL, objects, textures. I provide two version 0.1 and 1.0 and probably next version will communicate with moodle and sloodle external websites.&lt;br /&gt;
|-&lt;br /&gt;
|[[Window Control]]&lt;br /&gt;
|{{User|Emmas Seetan}}&lt;br /&gt;
|For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
|[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
|{{User|Morse Dillon}}&lt;br /&gt;
|An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
|[[XyText 1.5|XyText]]&lt;br /&gt;
|{{User2|Xylor Baysklef}}&lt;br /&gt;
| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Daemonika_Nightfire/Scripts/xytText_Example|xyzText Example]]&lt;br /&gt;
|{{User|Daemonika Nightfire}}&lt;br /&gt;
|Very small example. Display text (up to 8 characters) on a mesh with up to 8 faces. 10 links will have 5 land impact.&lt;br /&gt;
|-&lt;br /&gt;
|[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
|{{User|Criz Collins}}&lt;br /&gt;
| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
|[[XyzzyText|XyzzyText]]&lt;br /&gt;
|{{User|Thraxis Epsilon}} and {{User|Gigs Taggart}}&lt;br /&gt;
| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
|[[Youtube TV]]&lt;br /&gt;
|{{User|Morgam Biedermann}}&lt;br /&gt;
|Watch your favorite Youtube videos / auto set the texture to the parcel media texture.&lt;br /&gt;
|-&lt;br /&gt;
|[[Input number of seconds, get a string back that shows days, hours, minutes, seconds]]&lt;br /&gt;
|{{User|Fire Centaur}}&lt;br /&gt;
|Returns a string that displays days, hours, seconds&lt;br /&gt;
|-&lt;br /&gt;
|[[Presenter with Timer]]&lt;br /&gt;
|{{User|Fire Centaur}}&lt;br /&gt;
|Yet another texture presenter with a timer, lock, next/prev etc&lt;br /&gt;
|-&lt;br /&gt;
|[[Random Giver Prim]]&lt;br /&gt;
|{{User|Damian Darkwyr}}&lt;br /&gt;
|A randomized item giver with a game-like twist&lt;br /&gt;
|-&lt;br /&gt;
|[[Client Specific Contents Giver]]&lt;br /&gt;
|{{User|Damian Darkwyr}}&lt;br /&gt;
|Give Contents only to users of a specific Client. Such as Phoenix, CoolVL or 2.0&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Void_Singer/v7-D_Zen_Resizer|Zen Resizer]]&lt;br /&gt;
|{{User|Void Singer}}&lt;br /&gt;
|Single script object resizer w/ multi-language &amp;amp; multi-menu support, + many other features for simple or advanced use.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Yumi Murakami/Weaver Spell Grid|Weaver Spell Grid]]&lt;br /&gt;
|{{User|Yumi Murakami}}&lt;br /&gt;
|Designs simple objects and creates them with magic words.&lt;br /&gt;
|-&lt;br /&gt;
|[[Zero Lag Poseball]]&lt;br /&gt;
|{{User|Jippen Faddoul}} and {{User|Daemonika Nightfire}}&lt;br /&gt;
|A simple poseball with no lag&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Dora_Gustafson/bezier_toy|Bézier Toy]]&lt;br /&gt;
|{{User|Dora Gustafson}}&lt;br /&gt;
|Strictly for fun! The toy is made by one prim and a script. The prim will move along a smooth closed Bézier curve in space until it is stopped.&lt;br /&gt;
|-&lt;br /&gt;
|[[HTML HUD Demo]]&lt;br /&gt;
|{{User|Kelly Linden}}&lt;br /&gt;
|HTML-based, single script HUD (some assembly required)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/Nexii-Malthus/phpPathfinding phpPathfinding]&lt;br /&gt;
|{{User|Nexii Malthus}}&lt;br /&gt;
|PHP script for offloading complex pathfinding operations away from heavy use simulators onto external servers. Primarily A* Algorithm. Flexible -- works with any type of node graph. Public Domain. Clean and minimalistic code.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Ina Centaur/UUID/calimg.api|Calendar Image UUID API]]&lt;br /&gt;
|{{User|Ina Centaur}}&lt;br /&gt;
|API that gives the UUID of an image of a calendar image give month and year arguments.&lt;br /&gt;
|-&lt;br /&gt;
|[[HTTP Post request to a PHP server]]&lt;br /&gt;
|{{User|Corto Maltese}}&lt;br /&gt;
|This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Ina Centaur/PHP/k2n.php|Key2Name.php]]&lt;br /&gt;
|{{User|Ina Centaur}}&lt;br /&gt;
|Get Avatar&#039;s Name using Second Life search service. (like in LSL Key2Name)&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Darien_Caldwell/HTTP-DNS|HTTP-IN DNS]]&lt;br /&gt;
|{{User|Darien Caldwell}}&lt;br /&gt;
|Public Domain DNS and HTTP-IN URL Distribution system running on GAE (the original). Deploy your own for maximum utility and security.&lt;br /&gt;
|-&lt;br /&gt;
|[[Lame_Object_DNS_and_Cross_Sim_Messaging|Lame Object DNS and Cross Sim Messaging]]&lt;br /&gt;
|{{User2|Liandra Ceawlin}}&lt;br /&gt;
|Simple, cheeseball method of doing cross-sim communications with http-in and an external object DNS service.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|{{User|SignpostMarv Martin}}&lt;br /&gt;
|An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|[[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|{{User|SignpostMarv Martin}}&lt;br /&gt;
|A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Jor3l Boa/PHP/n2k.php|Name2Key.php]]&lt;br /&gt;
|{{User|Jor3l Boa}}&lt;br /&gt;
|Get Avatar&#039;s UUID using Second Life search service. (like in LSL Name2Key)&lt;br /&gt;
|-&lt;br /&gt;
|[[Public_Object_DNS|Public Object DNS]]&lt;br /&gt;
|{{User2|Liandra Ceawlin}}&lt;br /&gt;
|Public object DNS-like system running on GAE, for http-in. Hopefully scalable enough for wide-spread usage.&lt;br /&gt;
|-&lt;br /&gt;
|Silo&lt;br /&gt;
|{{User2|Zero Linden}}&lt;br /&gt;
|General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* &amp;lt;s&amp;gt;[http://www.notabene-sl.com/misc/silo-README.txt README] file&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;[http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball &amp;lt;/s&amp;gt;&lt;br /&gt;
* forum post [http://forums-archive.secondlife.com/54/69/119570/1.html Announcement].&lt;br /&gt;
&lt;br /&gt;
* Readme and Archive apparently no longer there or WP stole the redirect for them. {{User|Talia Tokugawa}} 24/03/17&lt;br /&gt;
|-&lt;br /&gt;
|[[Silverday ObjectDNS]]&lt;br /&gt;
|{{User|Till Stirling}}&lt;br /&gt;
|Dynamic Object-DNS-System to provide dynamic mapping of LSL-URLs to persistent domains. Features include redirect service, password protected domains, write protected domains, LSL-API for all necessary functions, optional web-interface.&lt;br /&gt;
|-&lt;br /&gt;
|[https://github.com/jgpippin/sldb SLDB]&lt;br /&gt;
|{{User2|Luc Aubret}}&lt;br /&gt;
|Flexible web database storage using PHP/MySQL.  Used to store per-user field/value pairs from in-world objects using [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;s&amp;gt;[https://tlabsfoundry.atlassian.net/wiki/display/SLAD/SL+Asset+Data SL Asset Data]&amp;lt;/s&amp;gt;&lt;br /&gt;
|{{User|Trimda Hedges}}&lt;br /&gt;
|A set of Java classes to retrieve information about Groups, Parcels and Agents/Avatars based on their key (UUID).  Includes caching of requests and results and example application.  Copyright under Eclipse Public License v1&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://tlabsfoundry.atlassian.net/wiki/display/SLAD/Downloads Downloads]&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;[http://trimda.com/javadocs/slassetdata/1.1.0/ JavaDocs]&amp;lt;/s&amp;gt;&lt;br /&gt;
* &amp;lt;s&amp;gt;[https://tlabsfoundry.atlassian.net/wiki/display/TF/TLabs+Foundry Other Projects]&amp;lt;/s&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Dead Links, Page is still there but there is nothing available for download. - {{User|Talia Tokugawa}} 24/03/17&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{LSLC|}}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216857</id>
		<title>User:Daemonika Nightfire</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire&amp;diff=1216857"/>
		<updated>2024-07-01T18:28:48Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* My personal LSL Script Library */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
{{SL-hCard/2.0&lt;br /&gt;
|image=Sl_image.png&lt;br /&gt;
|name=Daemonika Nightfire&lt;br /&gt;
|rezday=16 december 2007&lt;br /&gt;
|about=Owner of *DaeSigns*&lt;br /&gt;
|fields={{SL-hCard/field|Inworld|&lt;br /&gt;
* Second Life Profil:&lt;br /&gt;
**{{SL-Profile|Daemonika Nightfire}}&lt;br /&gt;
* Mainstore Region:&lt;br /&gt;
**{{SLurl|Polkadot|212|37|99|title=Polkadot}}&lt;br /&gt;
* Marketplace:&lt;br /&gt;
**[https://marketplace.secondlife.com/stores/30293 *DaeSigns*]&lt;br /&gt;
* Homepage:&lt;br /&gt;
**[https://daesigns.de daesigns.de]&lt;br /&gt;
* Delivery capped, even Notecards!&lt;br /&gt;
** Don&#039;t send me Notecards when i&#039;m offline, i receive your IM as Email. &lt;br /&gt;
}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* Second Life Profil: [http://my.secondlife.com/daemonika.nightfire &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;D&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;aemonika &amp;lt;span style=&amp;quot;color:red;&amp;quot;&amp;gt;N&amp;lt;span style=&amp;quot;color:black;&amp;quot;&amp;gt;ightfire&amp;lt;/span&amp;gt;&#039;&#039;&#039;] &amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;([[User talk:Daemonika Nightfire|talk]]|[[Special:Contributions/Daemonika Nightfire|contribs]])&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==About my scripts==&lt;br /&gt;
* All my scripts and snippets that I publish here are licensed under [https://wiki.secondlife.com/wiki/Project:Terms_of_Service Creative Commons Attribution-Share Alike 3.0]&lt;br /&gt;
 &lt;br /&gt;
* Basically I use the Second Life standard format in my scripts. You will not find any script from me with a Javascript based style, where the clamps are behind the commands. I will not support scripts with this style. Very rarely do I pull longer chains of command together in unstyled way to generate an overview, learn more [https://wiki.secondlife.com/wiki/LSL_Style_Guide Style Guide]. Furthermore the events are always sorted by priority.&lt;br /&gt;
 &lt;br /&gt;
* I know my English is not the best, if you find stupid comments or spelling mistakes in my descriptions, feel free and correct the spelling, but never change any part of the scripts themselves.&lt;br /&gt;
&lt;br /&gt;
==Script Schule (deutsch)==&lt;br /&gt;
* Die einzelnen Seiten fuer die Schule koennen gegebenenfalls sehr lang sein, das liegt daran das ich versuche die Scripte schrittweise aufzubauen. Je weiter man nach unten scrollt desto aufwendiger / komplizierter werden die Beispiele. Trotz alle dem bemuehe ich mich, die Scripte auf ein Minimum zu beschraenken und auf unnoetige Beiwerke zu verzichten, wenn sie dem Verstaendnis-Prozess nicht dienlich sind.&lt;br /&gt;
 &lt;br /&gt;
* Bei saemtlichen Inhalten in dieser Kategorie handelt es sich um Beispiele und nicht zwingend um fertige Scripte.&lt;br /&gt;
* Inworld findet woechentlich Sonntags um 18 Uhr Unterricht statt. Voice hoeren notwendig.&lt;br /&gt;
* Mittlerweile haben sich in den letzten Jahren einige Projekte in unserem Kurs angesammelt, da es sich aber meist um Object-bezogene Scripte handelt, sind sie in der [http://maps.secondlife.com/secondlife/Polkadot/215/103/99 Schule] in blaue Kisten archiviert. Jede Kiste verfuegt ueber Fullperm Beispiele und koennen von jedem mitgenommen werden.&lt;br /&gt;
&lt;br /&gt;
{{KBnote|custom=Geplante Termine:&#039;&#039;&#039; jeden &#039;&#039;&#039;Sonntag&#039;&#039;&#039; um &#039;&#039;&#039;18 Uhr&#039;&#039;&#039; auf [http://maps.secondlife.com/secondlife/Polkadot/206/106/99 Polkadot (Moderat)]}}&lt;br /&gt;
#&#039;&#039;&#039;Videos:&#039;&#039;&#039;&lt;br /&gt;
##[https://www.youtube.com/watch?v=d60zBQsZYLM Dae&#039;s Skript Kurs -Teil 1]&lt;br /&gt;
##[https://www.youtube.com/watch?v=bHmOFlzjEzE Dae&#039;s Skript Kurs -Teil 2]&lt;br /&gt;
##[https://www.youtube.com/watch?v=rzpKwIMHc3Y Dae&#039;s Skript Kurs -Teil 3]&lt;br /&gt;
##[https://www.youtube.com/watch?v=PdmJoDc1hhc Dae&#039;s Skript Kurs -Teil 4]&lt;br /&gt;
##[https://www.youtube.com/watch?v=VwpofniYmCk Dae&#039;s Skript Kurs -Teil 5]&lt;br /&gt;
##[https://www.youtube.com/watch?v=TGmacsNz0_g Dae&#039;s Skript Kurs -Teil 6]&lt;br /&gt;
#:&#039;&#039;Vielen Dank an [https://my.secondlife.com/uli.jansma Uli Jansma] fuer die tollen Videos.&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;Forum:&#039;&#039;&#039; Im Thread [https://www.slinfo.de/threads/scripten-lernen-deutsch.42120/ Scripten Lernen (Deutsch)] auf [https://www.slinfo.de/portal/ SLinfo.de] koennen natuerlich Fragen gestellt und diskutiert werden.&lt;br /&gt;
&lt;br /&gt;
{{DSNavSchool}}&lt;br /&gt;
 &lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Grundlagen | Grundlagen]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Wie ein Script aufgebaut ist.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Funktion | Funktion]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer global verwendete Funktionen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Schalter | Schalter]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Status-Wechsel TRUE &amp;amp; FALSE in unterschiedlichen Beispielen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Liste | Liste]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer die Verarbeitung von Listen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Ablaufsteuerung | Ablaufsteuerung]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele fuer Schleifen &amp;amp; Co.&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==General Tutorials==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Tutorials&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/AppLinks|&amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt;]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||useful &amp;lt;nowiki&amp;gt;secondlife:///app/...&amp;lt;/nowiki&amp;gt; commands&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/linkset_data_example |*DS* llLinksetData Texture Changer (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Menue basierter Texture Changer mit Passwort geschuetztem LinksetData als Textur-Speicher.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/rezday_giver |*DS* Rezday Giver (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Ein einfacher Giver der Geschenke nur am entsprechenden Avatar-Geburtstag ausgibt.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/perm_trigger_anim |*DS* Permission Trigger Animation (DE)]] &#039;&#039;&#039;&amp;lt;span style=&amp;quot;color:green;&amp;quot;&amp;gt;&#039;&#039;NEW&#039;&#039;&amp;lt;/span&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Die wichtigsten Funktionen fuer den reibungslosen Ablauf zum Animieren eines Avatars durch ein Attachment.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/xytText_Example |*DS* xyzText Example (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Sehr kleines Beispiel fuer ein xyzText.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DynamischesLinkset |*DS* Dynamisches Linkset (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Beispiele zur Verwendung von Linknamen anstelle von Linknummern.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Tools_(de)|*DS* Tools (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Nuetzliche kleine Helfer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Memory_Walkthrough|*DS* Memory-Walkthrough (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script show you how you can limit the maximal memory for each mono-script.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Variable_Tutorial|*DS* Variable Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer die unterschiedlichen Verwendungen von Variablen.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Giver_Tutorial|*DS* Giver Tutorial (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele fuer einfache und erweiterte Giver.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Access_Tutorial|*DS* Access Tutorial (DE)]]&lt;br /&gt;
[[User:Daemonika_Nightfire/Scripts/Access_Tutorial_EN|*DS* Access Tutorial (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Kurze Beispiele zum Thema Berechtigung in ausfuehrbaren Befehlen.&lt;br /&gt;
Short examples about permission to executable commands.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Hovertext_Helper|*DS*_Hovertext_Helper (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Copy / paste this script into a New Prim and change the Primcolor with the Editmenu.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/LinkNumber-List_in_llSetLinkPrimitiveParamsFast|*DS* LinkNumber-List_in_llSetLinkPrimitiveParamsFast (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Changed several prims in linkset with the same parameters, with a list. Without separate llSetLinkPrimitiveParams for each prim. (ideal for show/hide effects)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==My personal LSL Script Library==&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot; width=&amp;quot;100%&amp;quot; {{Prettytable}}&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Scripts&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Building_Rezzer|*DS* Building Rezzer 2024 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Doors|*DS* Smooth rotate door (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Neue Tuer-Scripte ohne lltargetOmega(... welche sowohl verlinkt, als auch unverlinkt funktionieren.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Privat_Sky|*DS* Privat-Sky (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfaches Script zum sperren des Luftraums ueber eine bestimmten hoehe fuer die ganze Parzelle oder Region.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Greeter%26Co|*DS* Greeter &amp;amp; Co (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Scripte fuer die Grundausstattung eines Shops, Clubs, oder andere oeffentliche Locations.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Vendor|*DS* Vendor (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Einfache Vendor (Verkaufsautomat) Scripte zum verkaufen von geboxten Items.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_copy_trans|*DS* Anti (copy &amp;amp; transfer) (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This funktion allows you to give away scripts with copy &amp;amp; transfer permissions and force the reseller to change the permission.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Anti_Rezz|*DS* Anti Rezz (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This script delete the complete object by rezzing on ground and detach it after 5 minutes from avatar. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DEMO_Shield|*DS*_DEMO_Shield (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, it is impossible to use these scripts in copied (Copybot) object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Rental-Cube|*DS* Rental-Cube v3.0.10 (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This is an Open-Source version of a Rental-Cube from Daemonika Nightfire.  Just copy/paste this script into a inworld lsl-script and add one notecard called Info/Rules to the content of your cube. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/*DS*_Resize_Script|*DS* Resize Example v3.0.00 (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||Single resize script for a complete linkset with save and restore option. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Easy_LM_NC_Giver|*DS* Easy LM/NC Giver (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Giver is useful as simple giver for NCs and/or LMs or as giver for inviting-cards.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Region_Reboot_Messenger|*DS*_Region_Reboot_Messenger (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||With this script, find all that are specified in the list when the Sim is back after a restart. So you must then not always look on the map, if the sim is back there. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Display-Username_Online_Indicator|*DS*_Display-Username_Online_Indicator (EN)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This simple hover text-based script is used to shop owners in Second Life, customers at the current display name and user name to display publicly. Additionally shows the status of the Userkey and online. Furthermore, there are click of a chat link that opens the profile owner. &lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Animation_Sit|*DS*_Animation_Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||This Script must be placed together with a Pose / Animation in the Object.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/DS_Single_AO-Sit|*DS*_Single_AO-Sit (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire &amp;amp; Simon Illyar]]&lt;br /&gt;
||Posescript for use with or without AO and with or without Animation. With the menu it is possible the seated Avatar to move.&lt;br /&gt;
|-&lt;br /&gt;
||[[User:Daemonika_Nightfire/Scripts/Daes_Particle|*DS* Dae&#039;s Particle (DE)]]&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
||I never use a particle generator. This Particle-Script serves me as a Basis for all of my Particle-Effects.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
 More scripts and snippets follow in the future.&lt;br /&gt;
&lt;br /&gt;
==My fast blanko Textures==&lt;br /&gt;
* I created these very small textures to equip unimportant areas, because all textures are rendered by the viewer. If many surfaces are equipped with these small textures, the sim will rez faster.&lt;br /&gt;
* If you like the textures and want to have them fullperm, just contact me Inworld via IM.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;text-align: center;&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
|- {{Hl2}}&lt;br /&gt;
! &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;UUID&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;size&#039;&#039;&#039;&lt;br /&gt;
! &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;red&#039;&#039;&#039;&lt;br /&gt;
||78a18236-f6e5-09ce-289c-3ffea180fb34&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;green&#039;&#039;&#039;&lt;br /&gt;
||9f3a7cee-7040-756b-0786-ea026601c451&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;blue&#039;&#039;&#039;&lt;br /&gt;
||c083207a-0c7c-f64f-77e5-da7675ca4e00&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;yellow&#039;&#039;&#039;&lt;br /&gt;
||16364314-ebcf-7d6a-dbab-f1a1331dd2cd&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;black&#039;&#039;&#039;&lt;br /&gt;
||8fd4a8ea-e5b4-af57-7d01-3b173d3608ce&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;white&#039;&#039;&#039;&lt;br /&gt;
||40ca82a1-c00d-39db-6c7d-ec7d48df4de3&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|-&lt;br /&gt;
||&#039;&#039;&#039;transparent&#039;&#039;&#039;&lt;br /&gt;
||7cae828c-2d5d-ec8c-b8f6-855870bb2b66&lt;br /&gt;
||16 x 16 pixel&lt;br /&gt;
||[[User:Daemonika Nightfire|Daemonika Nightfire]]&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Building_Rezzer&amp;diff=1216856</id>
		<title>User:Daemonika Nightfire/Scripts/Building Rezzer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Building_Rezzer&amp;diff=1216856"/>
		<updated>2024-07-01T18:24:31Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Examples added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== *DS* Building Rezzer 2024 ==&lt;br /&gt;
You need both scripts, the rezzer script is for your rezzer, the client script is for the objects you want to rezz.&lt;br /&gt;
&lt;br /&gt;
== *DS* Building Rezzer v2024.0.02 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
/*&lt;br /&gt;
    *DS* Building Rezzer 2024 by Daemonika Nightfire&lt;br /&gt;
    &lt;br /&gt;
    This rezzer is my interpretation of a building rezzer.&lt;br /&gt;
    With this tool you can manage structures region-wide.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    ➤ Setup&lt;br /&gt;
    Place the &#039;*DS* Building Rezzer&#039; script in a desired object that is to represent your rezzer.&lt;br /&gt;
    The second script &#039;*DS* Building Client&#039; is intended for the root content of your buildings.&lt;br /&gt;
    &lt;br /&gt;
    Once all your buildings have a script, click on the rezzer and select the [record] button in the menu.&lt;br /&gt;
    All objects will report back to you, then take all objects into your inventory and transfer them to the contents of your rezzer.&lt;br /&gt;
    &lt;br /&gt;
    It is not absolutely necessary to give all objects an individual name.&lt;br /&gt;
    Individual names are only of interest to you so that they are not numbered in the Rezzer.&lt;br /&gt;
    &lt;br /&gt;
    ➤ Rezzing&lt;br /&gt;
    Of course, all objects are rezzed at the same position, but are then moved to the valid position/rotation by the client script.&lt;br /&gt;
    If you then move or rotate the rezzer, the objects with the client script follow after 1 second.&lt;br /&gt;
    &lt;br /&gt;
    &lt;br /&gt;
    You can find updates here: https://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Building_Rezzer&lt;br /&gt;
*/&lt;br /&gt;
&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////// Communication \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&lt;br /&gt;
&lt;br /&gt;
// Any channel is possible. (is automatically transmitted to the clients)&lt;br /&gt;
integer com_channel = -123456;&lt;br /&gt;
&lt;br /&gt;
// Must be the same in the client script.&lt;br /&gt;
integer record_channel = -123456789;&lt;br /&gt;
float seconds = 1.0;&lt;br /&gt;
&lt;br /&gt;
string menu_desc = &amp;quot;\n[record] the clients save the coordinates\n[rez] your building is rezzed\n[derez] will delete your building\n[del. scripts] removes the scripts from the clients\n[reset] resetting me\n&amp;quot;;&lt;br /&gt;
integer menu_status = 0;&lt;br /&gt;
integer menu_countdown = 60;&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
integer dynamic_channel()&lt;br /&gt;
{&lt;br /&gt;
    menu_status = 1;&lt;br /&gt;
    menu_countdown = 60;&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    &lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    &lt;br /&gt;
    return menu_channel;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////// Rezzer \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&lt;br /&gt;
&lt;br /&gt;
// Coordinates where the objects are to be rezzed (not the final place).&lt;br /&gt;
vector Position = &amp;lt;0.0, 0.5, 0.5&amp;gt;;&lt;br /&gt;
vector Rotation = &amp;lt;0.0, 0.0, 0.0&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
list content = [];&lt;br /&gt;
integer items;&lt;br /&gt;
Rezzer()&lt;br /&gt;
{&lt;br /&gt;
    integer i = 0;&lt;br /&gt;
    do&lt;br /&gt;
    {&lt;br /&gt;
        vector BasePos = llGetPos();&lt;br /&gt;
        rotation BaseRot = llGetRot();&lt;br /&gt;
        rotation quat = llEuler2Rot(Rotation * DEG_TO_RAD);&lt;br /&gt;
        llRezObjectWithParams(llList2String(content, i), [REZ_PARAM, com_channel,&lt;br /&gt;
                                                          REZ_POS, BasePos + (Position * BaseRot), FALSE, TRUE,&lt;br /&gt;
                                                          REZ_ROT, quat * BaseRot, FALSE]);&lt;br /&gt;
    }&lt;br /&gt;
    while(++i &amp;lt; items);&lt;br /&gt;
    &lt;br /&gt;
    // After all objects have been rezzed, the command to move to the final place is triggered.&lt;br /&gt;
    llRegionSay(com_channel, &amp;quot;move|&amp;quot; + coordinates());&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//////////////////////////////////////// Coordinates \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\&lt;br /&gt;
&lt;br /&gt;
string stored_message;&lt;br /&gt;
string coordinates()&lt;br /&gt;
{&lt;br /&gt;
    vector pos = llGetPos();&lt;br /&gt;
    rotation rot = llGetRot();&lt;br /&gt;
    return (string)pos + &amp;quot;|&amp;quot; + (string)rot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        stored_message = coordinates();&lt;br /&gt;
        &lt;br /&gt;
        items = llGetInventoryNumber(INVENTORY_OBJECT);&lt;br /&gt;
        if(items &amp;gt; 0)&lt;br /&gt;
        {&lt;br /&gt;
            integer i = 0;&lt;br /&gt;
            do&lt;br /&gt;
            {&lt;br /&gt;
                content += llGetInventoryName(INVENTORY_OBJECT, i);&lt;br /&gt;
            }&lt;br /&gt;
            while(++i &amp;lt; items);&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        llSetText(&amp;quot;Items loaded &amp;quot; + (string)items, &amp;lt;1,1,1&amp;gt;, 1.0);&lt;br /&gt;
        llRegionSayTo(owner, 0, &amp;quot;/me - &amp;quot; + llGetScriptName() + &amp;quot; Memory: &amp;quot; + (string)llGetUsedMemory() + &amp;quot; bytes in use.&amp;quot;);&lt;br /&gt;
        &lt;br /&gt;
        llSetTimerEvent(1);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        if(agent == owner)&lt;br /&gt;
        {&lt;br /&gt;
            llDialog(agent, menu_desc, [&amp;quot;del. scripts&amp;quot;,&amp;quot;reset&amp;quot;,&amp;quot;close&amp;quot;,&amp;quot;record&amp;quot;,&amp;quot;rez&amp;quot;,&amp;quot;derez&amp;quot;], dynamic_channel());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        if(chan == menu_channel)&lt;br /&gt;
        {&lt;br /&gt;
            if(msg == &amp;quot;close&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                menu_status = 0;&lt;br /&gt;
                menu_countdown = 0;&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
            else if(msg == &amp;quot;del. scripts&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llRegionSay(com_channel, &amp;quot;remove_scripts&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if(msg == &amp;quot;derez&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llRegionSay(com_channel, &amp;quot;delete&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
            else if(msg == &amp;quot;rez&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                // Prevents multiple objects at the same place.&lt;br /&gt;
                llRegionSay(com_channel, &amp;quot;delete&amp;quot;);&lt;br /&gt;
                &lt;br /&gt;
                // Rezzing is only triggered if there are objects in the content.&lt;br /&gt;
                if(items &amp;gt; 0)&lt;br /&gt;
                {&lt;br /&gt;
                    Rezzer();&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(msg == &amp;quot;record&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llRegionSay(record_channel, &amp;quot;record|&amp;quot; + coordinates());&lt;br /&gt;
            }&lt;br /&gt;
            else if(msg == &amp;quot;reset&amp;quot;)&lt;br /&gt;
            {&lt;br /&gt;
                llResetScript();&lt;br /&gt;
            }&lt;br /&gt;
            llDialog(id, menu_desc, [&amp;quot;del. scripts&amp;quot;,&amp;quot;reset&amp;quot;,&amp;quot;close&amp;quot;,&amp;quot;record&amp;quot;,&amp;quot;rez&amp;quot;,&amp;quot;derez&amp;quot;], dynamic_channel());&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        if(menu_status)&lt;br /&gt;
        {&lt;br /&gt;
            menu_countdown--;&lt;br /&gt;
            if(menu_countdown == 0)&lt;br /&gt;
            {&lt;br /&gt;
                menu_status = 0;&lt;br /&gt;
                menu_countdown = 60;&lt;br /&gt;
                llListenRemove(menu_handler);&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        // If the rezzer is moved, the coordinates no longer match.&lt;br /&gt;
        if(stored_message != coordinates())&lt;br /&gt;
        {&lt;br /&gt;
            // In this case, the move command is triggered again.&lt;br /&gt;
            llRegionSay(com_channel, &amp;quot;move|&amp;quot; + coordinates());&lt;br /&gt;
            stored_message = coordinates();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    changed(integer ch)&lt;br /&gt;
    {&lt;br /&gt;
        if(ch &amp;amp; CHANGED_INVENTORY)&lt;br /&gt;
        {&lt;br /&gt;
            llResetScript();&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== *DS* Building Client v2024.0.02 ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
key owner;&lt;br /&gt;
&lt;br /&gt;
// automatically received by the rezzer&lt;br /&gt;
integer com_channel = -1978; // dummy channel (do not change)&lt;br /&gt;
&lt;br /&gt;
// Must be the same in the rezzer script.&lt;br /&gt;
integer record_channel = -123456789;&lt;br /&gt;
integer channel_handler; &lt;br /&gt;
&lt;br /&gt;
vector relative_position;&lt;br /&gt;
rotation relative_rotation;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        channel_handler = llListen(record_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    listen(integer chan, string name, key id, string msg)&lt;br /&gt;
    {&lt;br /&gt;
        // Prevents interference from other objects in the same channel.&lt;br /&gt;
        if(llGetOwnerKey(id) == owner)&lt;br /&gt;
        {&lt;br /&gt;
            list temp = llParseString2List(msg, [&amp;quot;|&amp;quot;], []);&lt;br /&gt;
            string cmd = llList2String(temp, 0);&lt;br /&gt;
            vector rezzer_pos = (vector)llList2String(temp, 1);&lt;br /&gt;
            rotation rezzer_rot = (rotation)llList2String(temp, 2);&lt;br /&gt;
                &lt;br /&gt;
            if(chan == record_channel)&lt;br /&gt;
            {&lt;br /&gt;
                if(cmd == &amp;quot;record&amp;quot;)&lt;br /&gt;
                {&lt;br /&gt;
                    relative_position = (llGetPos() - rezzer_pos) / rezzer_rot;&lt;br /&gt;
                    relative_rotation = llGetRot() / rezzer_rot;&lt;br /&gt;
                    llRegionSayTo(owner, 0, &amp;quot;stored: &amp;quot; + (string)relative_position + &amp;quot; | &amp;quot; + (string)relative_rotation);&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
            else if(chan == com_channel)&lt;br /&gt;
            {&lt;br /&gt;
                // Prevents other rezzers of the same owner from interfering.&lt;br /&gt;
                list details = llGetObjectDetails(llGetKey(), [OBJECT_REZZER_KEY]);&lt;br /&gt;
                key rezzer = llList2Key(details, 0);&lt;br /&gt;
                if(rezzer == id)&lt;br /&gt;
                {&lt;br /&gt;
                    if(cmd == &amp;quot;move&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        vector dest = rezzer_pos + (relative_position * rezzer_rot);&lt;br /&gt;
                        float ground = llGround(dest);&lt;br /&gt;
                        &lt;br /&gt;
                        // Make sure that the target coordinates are within the region.&lt;br /&gt;
                        if(dest.x &amp;gt; 0 &amp;amp;&amp;amp; dest.x &amp;lt; 256 &amp;amp;&amp;amp; dest.y &amp;gt; 0 &amp;amp;&amp;amp; dest.y &amp;lt; 256 &amp;amp;&amp;amp; dest.z &amp;gt; ground &amp;amp;&amp;amp; dest.z &amp;lt; 4096)&lt;br /&gt;
                        {&lt;br /&gt;
                            llSetRegionPos(dest); // Move imediately to the target coordinates.&lt;br /&gt;
                        }&lt;br /&gt;
                        else&lt;br /&gt;
                        {&lt;br /&gt;
                            llRegionSayTo(owner, 0, &amp;quot;\nImpossible position, destination would be outside possible coordinates of this region.\nPlease move the rezzer back a little or change the altitude.&amp;quot;);&lt;br /&gt;
                        }&lt;br /&gt;
                        llSetRot(relative_rotation * rezzer_rot);&lt;br /&gt;
                    }&lt;br /&gt;
                    else if(cmd == &amp;quot;delete&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llDie();&lt;br /&gt;
                    }&lt;br /&gt;
                    else if(cmd == &amp;quot;remove_scripts&amp;quot;)&lt;br /&gt;
                    {&lt;br /&gt;
                        llRemoveInventory(llGetScriptName());&lt;br /&gt;
                    }&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        owner = llGetOwner();&lt;br /&gt;
        llListenRemove(channel_handler);&lt;br /&gt;
        &lt;br /&gt;
        // Overwrites the dummy channel with the one from the rezzer.&lt;br /&gt;
        com_channel = Dae;&lt;br /&gt;
        llListen(com_channel, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;, &amp;quot;&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Building_Rezzer&amp;diff=1216855</id>
		<title>User:Daemonika Nightfire/Scripts/Building Rezzer</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/Building_Rezzer&amp;diff=1216855"/>
		<updated>2024-07-01T18:18:20Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: Created page with &amp;quot;coming soon&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;coming soon&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Name&amp;diff=1216677</id>
		<title>Template:LSL All Functions/Name</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Name&amp;diff=1216677"/>
		<updated>2024-05-20T15:29:08Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;!-- If you are going to edit this, please edit Template:LSL_All_Functions/Generate instead. This was last updated on 2016-04-03--&amp;gt;&lt;br /&gt;
&amp;lt;ul style=&amp;quot;{{NewStyle|column-width|20.5em|moz=*|webkit=*}}&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAbs{{#var:lang}}|llAbs]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAcos{{#var:lang}}|llAcos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAddToLandBanList{{#var:lang}}|llAddToLandBanList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAddToLandPassList{{#var:lang}}|llAddToLandPassList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAdjustDamage{{#var:lang}}|llAdjustDamage]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAdjustSoundVolume{{#var:lang}}|llAdjustSoundVolume]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAgentInExperience{{#var:lang}}|llAgentInExperience]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAllowInventoryDrop{{#var:lang}}|llAllowInventoryDrop]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAngleBetween{{#var:lang}}|llAngleBetween]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llApplyImpulse{{#var:lang}}|llApplyImpulse]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llApplyRotationalImpulse{{#var:lang}}|llApplyRotationalImpulse]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAsin{{#var:lang}}|llAsin]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAtan2{{#var:lang}}|llAtan2]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAttachToAvatar{{#var:lang}}|llAttachToAvatar]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAttachToAvatarTemp{{#var:lang}}|llAttachToAvatarTemp]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAvatarOnLinkSitTarget{{#var:lang}}|llAvatarOnLinkSitTarget]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAvatarOnSitTarget{{#var:lang}}|llAvatarOnSitTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAxes2Rot{{#var:lang}}|llAxes2Rot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llAxisAngle2Rot{{#var:lang}}|llAxisAngle2Rot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llBase64ToInteger{{#var:lang}}|llBase64ToInteger]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llBase64ToString{{#var:lang}}|llBase64ToString]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llBreakAllLinks{{#var:lang}}|llBreakAllLinks]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llBreakLink{{#var:lang}}|llBreakLink]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCastRay{{#var:lang}}|llCastRay]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCeil{{#var:lang}}|llCeil]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llChar{{#var:lang}}|llChar]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llClearCameraParams{{#var:lang}}|llClearCameraParams]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llClearLinkMedia{{#var:lang}}|llClearLinkMedia]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llClearPrimMedia{{#var:lang}}|llClearPrimMedia]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llCloseRemoteDataChannel{{#var:lang}}|llCloseRemoteDataChannel]]&amp;lt;/s&amp;gt; {{LSL D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llCloud{{#var:lang}}|llCloud]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCollisionFilter{{#var:lang}}|llCollisionFilter]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCollisionSound{{#var:lang}}|llCollisionSound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCollisionSprite{{#var:lang}}|llCollisionSprite]] {{LSL BR}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llComputeHash{{#var:lang}}|llGetComputeHash]] {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCos{{#var:lang}}|llCos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCreateCharacter{{#var:lang}}|llCreateCharacter]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCreateKeyValue{{#var:lang}}|llCreateKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCreateLink{{#var:lang}}|llCreateLink]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llCSV2List{{#var:lang}}|llCSV2List]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDamage{{#var:lang}}|llDamage]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDataSizeKeyValue{{#var:lang}}|llDataSizeKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDeleteCharacter{{#var:lang}}|llDeleteCharacter]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDeleteKeyValue{{#var:lang}}|llDeleteKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDeleteSubList{{#var:lang}}|llDeleteSubList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDeleteSubString{{#var:lang}}|llDeleteSubString]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetachFromAvatar{{#var:lang}}|llDetachFromAvatar]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedDamage{{#var:lang}}|llDetectedDamage]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedGrab{{#var:lang}}|llDetectedGrab]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedGroup{{#var:lang}}|llDetectedGroup]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedKey{{#var:lang}}|llDetectedKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedLinkNumber{{#var:lang}}|llDetectedLinkNumber]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedName{{#var:lang}}|llDetectedName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedOwner{{#var:lang}}|llDetectedOwner]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedPos{{#var:lang}}|llDetectedPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedRezzer{{#var:lang}}|llDetectedRezzer]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedRot{{#var:lang}}|llDetectedRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchBinormal{{#var:lang}}|llDetectedTouchBinormal]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchFace{{#var:lang}}|llDetectedTouchFace]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchNormal{{#var:lang}}|llDetectedTouchNormal]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchPos{{#var:lang}}|llDetectedTouchPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchST{{#var:lang}}|llDetectedTouchST]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedTouchUV{{#var:lang}}|llDetectedTouchUV]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedType{{#var:lang}}|llDetectedType]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDetectedVel{{#var:lang}}|llDetectedVel]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDialog{{#var:lang}}|llDialog]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDie{{#var:lang}}|llDie]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llDumpList2String{{#var:lang}}|llDumpList2String]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEdgeOfWorld{{#var:lang}}|llEdgeOfWorld]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEjectFromLand{{#var:lang}}|llEjectFromLand]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEmail{{#var:lang}}|llEmail]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEscapeURL{{#var:lang}}|llEscapeURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEuler2Rot{{#var:lang}}|llEuler2Rot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llEvade{{#var:lang}}|llEvade]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llExecCharacterCmd{{#var:lang}}|llExecCharacterCmd]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llFabs{{#var:lang}}|llFabs]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llFleeFrom{{#var:lang}}|llFleeFrom]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llFloor{{#var:lang}}|llFloor]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llForceMouselook{{#var:lang}}|llForceMouselook]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llFrand{{#var:lang}}|llFrand]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGenerateKey{{#var:lang}}|llGenerateKey]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAccel{{#var:lang}}|llGetAccel]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAgentInfo{{#var:lang}}|llGetAgentInfo]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAgentLanguage{{#var:lang}}|llGetAgentLanguage]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAgentList{{#var:lang}}|llGetAgentList]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAgentSize{{#var:lang}}|llGetAgentSize]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAlpha{{#var:lang}}|llGetAlpha]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAndResetTime{{#var:lang}}|llGetAndResetTime]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAnimation{{#var:lang}}|llGetAnimation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAnimationList{{#var:lang}}|llGetAnimationList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAnimationOverride{{#var:lang}}|llGetAnimationOverride]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAttached{{#var:lang}}|llGetAttached]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetAttachedList{{#var:lang}}|llGetAttachedList]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetBoundingBox{{#var:lang}}|llGetBoundingBox]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCameraAspect{{#var:lang}}|llGetCameraAspect]] {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCameraFOV{{#var:lang}}|llGetCameraFOV]] {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCameraPos{{#var:lang}}|llGetCameraPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCameraRot{{#var:lang}}|llGetCameraRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCenterOfMass{{#var:lang}}|llGetCenterOfMass]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetClosestNavPoint{{#var:lang}}|llGetClosestNavPoint]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetColor{{#var:lang}}|llGetColor]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetCreator{{#var:lang}}|llGetCreator]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetDate{{#var:lang}}|llGetDate]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetDayLength{{#var:lang}}|llGetDayLength]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetDayOffset{{#var:lang}}|llGetDayOffset]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetDisplayName{{#var:lang}}|llGetDisplayName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetEnergy{{#var:lang}}|llGetEnergy]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetEnv{{#var:lang}}|llGetEnv]] {{LSL UPD}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetEnvironment{{#var:lang}}|llGetEnvironment]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetExperienceDetails{{#var:lang}}|llGetExperienceDetails]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetExperienceErrorMessage{{#var:lang}}|llGetExperienceErrorMessage]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetForce{{#var:lang}}|llGetForce]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetFreeMemory{{#var:lang}}|llGetFreeMemory]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetFreeURLs{{#var:lang}}|llGetFreeURLs]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetGeometricCenter{{#var:lang}}|llGetGeometricCenter]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetGMTclock{{#var:lang}}|llGetGMTclock]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetHealth{{#var:lang}}|llGetHealth]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetHTTPHeader{{#var:lang}}|llGetHTTPHeader]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryAcquireTime{{#var:lang}}|llGetInventoryAcquireTime]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryCreator{{#var:lang}}|llGetInventoryCreator]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryKey{{#var:lang}}|llGetInventoryKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryName{{#var:lang}}|llGetInventoryName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryDesc{{#var:lang}}|llGetInventoryDesc]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryNumber{{#var:lang}}|llGetInventoryNumber]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryPermMask{{#var:lang}}|llGetInventoryPermMask]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetInventoryType{{#var:lang}}|llGetInventoryType]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetKey{{#var:lang}}|llGetKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLandOwnerAt{{#var:lang}}|llGetLandOwnerAt]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkKey{{#var:lang}}|llGetLinkKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkMedia{{#var:lang}}|llGetLinkMedia]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkName{{#var:lang}}|llGetLinkName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkNumber{{#var:lang}}|llGetLinkNumber]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkNumberOfSides{{#var:lang}}|llGetLinkNumberOfSides]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkPrimitiveParams{{#var:lang}}|llGetLinkPrimitiveParams]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetListEntryType{{#var:lang}}|llGetListEntryType]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetListLength{{#var:lang}}|llGetListLength]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLocalPos{{#var:lang}}|llGetLocalPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLocalRot{{#var:lang}}|llGetLocalRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMass{{#var:lang}}|llGetMass]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMassMKS{{#var:lang}}|llGetMassMKS]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMaxScaleFactor{{#var:lang}}|llGetMaxScaleFactor]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMemoryLimit{{#var:lang}}|llGetMemoryLimit]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMinScaleFactor{{#var:lang}}|llGetMinScaleFactor]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMoonDirection{{#var:lang}}|llGetMoonDirection]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetMoonRotation{{#var:lang}}|llGetMoonRotation]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNextEmail{{#var:lang}}|llGetNextEmail]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNotecardLine{{#var:lang}}|llGetNotecardLine]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNotecardLineSync{{#var:lang}}|llGetNotecardLineSync]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNumberOfNotecardLines{{#var:lang}}|llGetNumberOfNotecardLines]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNumberOfPrims{{#var:lang}}|llGetNumberOfPrims]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetNumberOfSides{{#var:lang}}|llGetNumberOfSides]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectAnimationNames{{#var:lang}}|llGetObjectAnimationNames]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectDesc{{#var:lang}}|llGetObjectDesc]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectDetails{{#var:lang}}|llGetObjectDetails]] {{LSL UPD}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetLinkKey#llGetObjectLinkKey{{#var:lang}}|llGetObjectLinkKey]]  {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectMass{{#var:lang}}|llGetObjectMass]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectName{{#var:lang}}|llGetObjectName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectPermMask{{#var:lang}}|llGetObjectPermMask]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetObjectPrimCount{{#var:lang}}|llGetObjectPrimCount]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetOmega{{#var:lang}}|llGetOmega]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetOwner{{#var:lang}}|llGetOwner]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetOwnerKey{{#var:lang}}|llGetOwnerKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelDetails{{#var:lang}}|llGetParcelDetails]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelFlags{{#var:lang}}|llGetParcelFlags]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelMaxPrims{{#var:lang}}|llGetParcelMaxPrims]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelMusicURL{{#var:lang}}|llGetParcelMusicURL]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelPrimCount{{#var:lang}}|llGetParcelPrimCount]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetParcelPrimOwners{{#var:lang}}|llGetParcelPrimOwners]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPermissions{{#var:lang}}|llGetPermissions]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPermissionsKey{{#var:lang}}|llGetPermissionsKey]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPhysicsMaterial{{#var:lang}}|llGetPhysicsMaterial]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPos{{#var:lang}}|llGetPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPrimitiveParams{{#var:lang}}|llGetPrimitiveParams]] &lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetPrimMediaParams{{#var:lang}}|llGetPrimMediaParams]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionAgentCount{{#var:lang}}|llGetRegionAgentCount]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionCorner{{#var:lang}}|llGetRegionCorner]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionDayLength{{#var:lang}}|llGetRegionDayLength]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionDayOffset{{#var:lang}}|llGetRegionDayOffset]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionFlags{{#var:lang}}|llGetRegionFlags]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionFPS{{#var:lang}}|llGetRegionFPS]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionMoonDirection{{#var:lang}}|llGetRegionMoonDirection]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionMoonRotation{{#var:lang}}|llGetRegionMoonRotation]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionName{{#var:lang}}|llGetRegionName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionSunDirection{{#var:lang}}|llGetRegionSunDirection]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionSunRotation{{#var:lang}}|llGetRegionSunRotation]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRegionTimeDilation{{#var:lang}}|llGetRegionTimeDilation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRootPosition{{#var:lang}}|llGetRootPosition]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRootRotation{{#var:lang}}|llGetRootRotation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetRot{{#var:lang}}|llGetRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetScale{{#var:lang}}|llGetScale]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetScriptName{{#var:lang}}|llGetScriptName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetScriptState{{#var:lang}}|llGetScriptState]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSimStats{{#var:lang}}|llGetSimStats]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSimulatorHostname{{#var:lang}}|llGetSimulatorHostname]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSPMaxMemory{{#var:lang}}|llGetSPMaxMemory]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetStartParameter{{#var:lang}}|llGetStartParameter]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetStartString{{#var:lang}}|llGetStartString]] {{LSL TEST}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetStaticPath{{#var:lang}}|llGetStaticPath]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetStatus{{#var:lang}}|llGetStatus]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSubString{{#var:lang}}|llGetSubString]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSunDirection{{#var:lang}}|llGetSunDirection]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetSunRotation{{#var:lang}}|llGetSunRotation]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTexture{{#var:lang}}|llGetTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTextureOffset{{#var:lang}}|llGetTextureOffset]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTextureRot{{#var:lang}}|llGetTextureRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTextureScale{{#var:lang}}|llGetTextureScale]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTime{{#var:lang}}|llGetTime]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTimeOfDay{{#var:lang}}|llGetTimeOfDay]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTimestamp{{#var:lang}}|llGetTimestamp]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetTorque{{#var:lang}}|llGetTorque]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetUnixTime{{#var:lang}}|llGetUnixTime]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetUsedMemory{{#var:lang}}|llGetUsedMemory]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetUsername{{#var:lang}}|llGetUsername]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetVel{{#var:lang}}|llGetVel]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetVisualParams{{#var:lang}}||llGetVisualParams]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGetWallclock{{#var:lang}}|llGetWallclock]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGiveInventory{{#var:lang}}|llGiveInventory]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGiveInventoryList{{#var:lang}}|llGiveInventoryList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGiveMoney{{#var:lang}}|llGiveMoney]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llGodLikeRezObject{{#var:lang}}|llGodLikeRezObject]]&amp;lt;/s&amp;gt; {{LSL_GM}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGround{{#var:lang}}|llGround]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGroundContour{{#var:lang}}|llGroundContour]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGroundNormal{{#var:lang}}|llGroundNormal]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGroundRepel{{#var:lang}}|llGroundRepel]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llGroundSlope{{#var:lang}}|llGroundSlope]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llHash{{#var:lang}}|llHash]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llHMAC{{#var:lang}}|llHMAC]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llHTTPRequest{{#var:lang}}|llHTTPRequest]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llHTTPResponse{{#var:lang}}|llHTTPResponse]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llInsertString{{#var:lang}}|llInsertString]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llInstantMessage{{#var:lang}}|llInstantMessage]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llIntegerToBase64{{#var:lang}}|llIntegerToBase64]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llIsFriend{{#var:lang}}|llIsFriend]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llJson2List{{#var:lang}}|llJson2List]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llJsonGetValue{{#var:lang}}|llJsonGetValue]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llJsonSetValue{{#var:lang}}|llJsonSetValue]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llJsonValueType{{#var:lang}}|llJsonValueType]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llKey2Name{{#var:lang}}|llKey2Name]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llKeyCountKeyValue{{#var:lang}}|llKeyCountKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llKeysKeyValue{{#var:lang}}|llKeysKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinear2sRGB{{#var:lang}}|llLinear2sRGB]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkAdjustSoundVolume{{#var:lang}}|llLinkAdjustSoundVolume]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkParticleSystem{{#var:lang}}|llLinkParticleSystem]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkPlaySound{{#var:lang}}|llLinkPlaySound]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataAvailable{{#var:lang}}|llLinksetDataAvailable]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataCountFound{{#var:lang}}|llLinksetDataCountFound]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataCountKeys{{#var:lang}}|llLinksetDataCountKeys]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataDelete{{#var:lang}}|llLinksetDataDelete]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataDeleteFound{{#var:lang}}|llLinksetDataDeleteFound]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataDeleteProtected{{#var:lang}}|llLinksetDataDeleteProtected]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataFindKeys{{#var:lang}}|llLinksetDataFindKeys]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataListKeys{{#var:lang}}|llLinksetDataListKeys]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataRead{{#var:lang}}|llLinksetDataRead]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataReadProtected{{#var:lang}}|llLinksetDataReadProtected]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataReset{{#var:lang}}|llLinksetDataReset]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataWrite{{#var:lang}}|llLinksetDataWrite]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinksetDataWriteProtected{{#var:lang}}|llLinksetDataWriteProtected]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkSetSoundQueueing{{#var:lang}}|llLinkSetSoundQueueing]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkSetSoundRadius{{#var:lang}}|llLinkSetSoundRadius]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkSitTarget{{#var:lang}}|llLinkSitTarget]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLinkStopSound{{#var:lang}}|llLinkStopSound]] {{LSL I}} &lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2CSV{{#var:lang}}|llList2CSV]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Float{{#var:lang}}|llList2Float]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Integer{{#var:lang}}|llList2Integer]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Json{{#var:lang}}|llList2Json]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Key{{#var:lang}}|llList2Key]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2List{{#var:lang}}|llList2List]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2ListSlice{{#var:lang}}|llList2ListSlice]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2ListStrided{{#var:lang}}|llList2ListStrided]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Rot{{#var:lang}}|llList2Rot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2String{{#var:lang}}|llList2String]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llList2Vector{{#var:lang}}|llList2Vector]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListen{{#var:lang}}|llListen]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListenControl{{#var:lang}}|llListenControl]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListenRemove{{#var:lang}}|llListenRemove]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListFindList{{#var:lang}}|llListFindList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListFindListNext{{#var:lang}}|llListFindListNext]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListFindStrided{{#var:lang}}|llListFindStrided]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListInsertList{{#var:lang}}|llListInsertList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListRandomize{{#var:lang}}|llListRandomize]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListReplaceList{{#var:lang}}|llListReplaceList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListSort{{#var:lang}}|llListSort]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListSortStrided{{#var:lang}}|llListSortStrided]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llListStatistics{{#var:lang}}|llListStatistics]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLoadURL{{#var:lang}}|llLoadURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLog{{#var:lang}}|llLog]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLog10{{#var:lang}}|llLog10]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLookAt{{#var:lang}}|llLookAt]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLoopSound{{#var:lang}}|llLoopSound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLoopSoundMaster{{#var:lang}}|llLoopSoundMaster]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llLoopSoundSlave{{#var:lang}}|llLoopSoundSlave]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llMakeExplosion{{#var:lang}}|llMakeExplosion]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llMakeFire{{#var:lang}}|llMakeFire]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llMakeFountain{{#var:lang}}|llMakeFountain]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llMakeSmoke{{#var:lang}}|llMakeSmoke]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llManageEstateAccess{{#var:lang}}|llManageEstateAccess]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llMapDestination{{#var:lang}}|llMapDestination]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llMD5String{{#var:lang}}|llMD5String]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llMessageLinked{{#var:lang}}|llMessageLinked]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llMinEventDelay{{#var:lang}}|llMinEventDelay]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llModifyLand{{#var:lang}}|llModifyLand]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llModPow{{#var:lang}}|llModPow]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llMoveToTarget{{#var:lang}}|llMoveToTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llName2Key{{#var:lang}}|llName2Key]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llNavigateTo{{#var:lang}}|llNavigateTo]] &lt;br /&gt;
&amp;lt;li&amp;gt; [[llOffsetTexture{{#var:lang}}|llOffsetTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llOpenFloater{{#var:lang}}|llOpenFloater]]&amp;lt;/s&amp;gt; {{LSL PXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llOpenRemoteDataChannel{{#var:lang}}|llOpenRemoteDataChannel]]&amp;lt;/s&amp;gt; {{LSL D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llOrd{{#var:lang}}|llOrd]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llOverMyLand{{#var:lang}}|llOverMyLand]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llOwnerSay{{#var:lang}}|llOwnerSay]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llParcelMediaCommandList{{#var:lang}}|llParcelMediaCommandList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llParcelMediaQuery{{#var:lang}}|llParcelMediaQuery]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llParseString2List{{#var:lang}}|llParseString2List]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llParseStringKeepNulls{{#var:lang}}|llParseStringKeepNulls]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llParticleSystem{{#var:lang}}|llParticleSystem]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPassCollisions{{#var:lang}}|llPassCollisions]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPassTouches{{#var:lang}}|llPassTouches]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPatrolPoints{{#var:lang}}|llPatrolPoints]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPlaySound{{#var:lang}}|llPlaySound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPlaySoundSlave{{#var:lang}}|llPlaySoundSlave]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llPointAt{{#var:lang}}|llPointAt]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPow{{#var:lang}}|llPow]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPreloadSound{{#var:lang}}|llPreloadSound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPursue{{#var:lang}}|llPursue]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llPushObject{{#var:lang}}|llPushObject]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReadKeyValue{{#var:lang}}|llReadKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llRefreshPrimURL{{#var:lang}}|llRefreshPrimURL]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRegionSay{{#var:lang}}|llRegionSay]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRegionSayTo{{#var:lang}}|llRegionSayTo]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llReleaseCamera{{#var:lang}}|llReleaseCamera]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReleaseControls{{#var:lang}}|llReleaseControls]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReleaseURL{{#var:lang}}|llReleaseURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llRemoteDataReply{{#var:lang}}|llRemoteDataReply]]&amp;lt;/s&amp;gt; {{LSL D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llRemoteDataSetRegion{{#var:lang}}|llRemoteDataSetRegion]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llRemoteLoadScript{{#var:lang}}|llRemoteLoadScript]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRemoteLoadScriptPin{{#var:lang}}|llRemoteLoadScriptPin]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRemoveFromLandBanList{{#var:lang}}|llRemoveFromLandBanList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRemoveFromLandPassList{{#var:lang}}|llRemoveFromLandPassList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRemoveInventory{{#var:lang}}|llRemoveInventory]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRemoveVehicleFlags{{#var:lang}}|llRemoveVehicleFlags]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReplaceAgentEnvironment{{#var:lang}}|llReplaceAgentEnvironment]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReplaceEnvironment{{#var:lang}}|llReplaceEnvironment]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReplaceSubString{{#var:lang}}|llReplaceSubString]] {{LSL New}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestAgentData{{#var:lang}}|llRequestAgentData]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestDisplayName{{#var:lang}}|llRequestDisplayName]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestExperiencePermissions{{#var:lang}}|llRequestExperiencePermissions]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestInventoryData{{#var:lang}}|llRequestInventoryData]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestPermissions{{#var:lang}}|llRequestPermissions]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestSecureURL{{#var:lang}}|llRequestSecureURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestSimulatorData{{#var:lang}}|llRequestSimulatorData]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestURL{{#var:lang}}|llRequestURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestUserKey{{#var:lang}}|llRequestUserKey]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRequestUsername{{#var:lang}}|llRequestUsername]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetAnimationOverride{{#var:lang}}|llResetAnimationOverride]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetLandBanList{{#var:lang}}|llResetLandBanList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetLandPassList{{#var:lang}}|llResetLandPassList]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetOtherScript{{#var:lang}}|llResetOtherScript]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetScript{{#var:lang}}|llResetScript]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llResetTime{{#var:lang}}|llResetTime]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReturnObjectsByID{{#var:lang}}|llReturnObjectsByID]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llReturnObjectsByOwner{{#var:lang}}|llReturnObjectsByOwner]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRezAtRoot{{#var:lang}}|llRezAtRoot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRezObject{{#var:lang}}|llRezObject]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRezObjectWithParams{{#var:lang}}|llRezObjectWithParams]] {{LSL I}} {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Angle{{#var:lang}}|llRot2Angle]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Axis{{#var:lang}}|llRot2Axis]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Euler{{#var:lang}}|llRot2Euler]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Fwd{{#var:lang}}|llRot2Fwd]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Left{{#var:lang}}|llRot2Left]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRot2Up{{#var:lang}}|llRot2Up]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRotateTexture{{#var:lang}}|llRotateTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRotBetween{{#var:lang}}|llRotBetween]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRotLookAt{{#var:lang}}|llRotLookAt]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRotTarget{{#var:lang}}|llRotTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRotTargetRemove{{#var:lang}}|llRotTargetRemove]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llRound{{#var:lang}}|llRound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSameGroup{{#var:lang}}|llSameGroup]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSay{{#var:lang}}|llSay]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llScaleByFactor{{#var:lang}}|llScaleByFactor]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llScaleTexture{{#var:lang}}|llScaleTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llScriptDanger{{#var:lang}}|llScriptDanger]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llScriptProfiler{{#var:lang}}|llScriptProfiler]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSendRemoteData{{#var:lang}}|llSendRemoteData]]&amp;lt;/s&amp;gt; {{LSL D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSensor{{#var:lang}}|llSensor]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSensorRemove{{#var:lang}}|llSensorRemove]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSensorRepeat{{#var:lang}}|llSensorRepeat]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetAgentEnvironment{{#var:lang}}|llSetAgentEnvironment]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetAlpha{{#var:lang}}|llSetAlpha]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetAngularVelocity{{#var:lang}}|llSetAngularVelocity]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetAnimationOverride{{#var:lang}}|llSetAnimationOverride]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetBuoyancy{{#var:lang}}|llSetBuoyancy]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetCameraAtOffset{{#var:lang}}|llSetCameraAtOffset]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetCameraEyeOffset{{#var:lang}}|llSetCameraEyeOffset]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetCameraParams{{#var:lang}}|llSetCameraParams]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetClickAction{{#var:lang}}|llSetClickAction]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetColor{{#var:lang}}|llSetColor]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetContentType{{#var:lang}}|llSetContentType]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetDamage{{#var:lang}}|llSetDamage]] {{LSL UPD}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetEnvironment{{#var:lang}}|llSetEnvironment]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetForce{{#var:lang}}|llSetForce]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetForceAndTorque{{#var:lang}}|llSetForceAndTorque]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetHoverHeight{{#var:lang}}|llSetHoverHeight]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSetInventoryPermMask{{#var:lang}}|llSetInventoryPermMask]]&amp;lt;/s&amp;gt; {{LSL_GM}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetKeyframedMotion{{#var:lang}}|llSetKeyframedMotion]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkAlpha{{#var:lang}}|llSetLinkAlpha]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkCamera{{#var:lang}}|llSetLinkCamera]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkColor{{#var:lang}}|llSetLinkColor]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkMedia{{#var:lang}}|llSetLinkMedia]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkPrimitiveParams{{#var:lang}}|llSetLinkPrimitiveParams]] &lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkPrimitiveParamsFast{{#var:lang}}|llSetLinkPrimitiveParamsFast]] &lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkTexture{{#var:lang}}|llSetLinkTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLinkTextureAnim{{#var:lang}}|llSetLinkTextureAnim]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetLocalRot{{#var:lang}}|llSetLocalRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetMemoryLimit{{#var:lang}}|llSetMemoryLimit]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetObjectDesc{{#var:lang}}|llSetObjectDesc]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetObjectName{{#var:lang}}|llSetObjectName]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSetObjectPermMask{{#var:lang}}|llSetObjectPermMask]]&amp;lt;/s&amp;gt; {{LSL_GM}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetParcelMusicURL{{#var:lang}}|llSetParcelMusicURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetPayPrice{{#var:lang}}|llSetPayPrice]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetPhysicsMaterial{{#var:lang}}|llSetPhysicsMaterial]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetPos{{#var:lang}}|llSetPos]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetPrimitiveParams{{#var:lang}}|llSetPrimitiveParams]] &lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetPrimMediaParams{{#var:lang}}|llSetPrimMediaParams]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSetPrimURL{{#var:lang}}|llSetPrimURL]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetRegionPos{{#var:lang}}|llSetRegionPos]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetRemoteScriptAccessPin{{#var:lang}}|llSetRemoteScriptAccessPin]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetRot{{#var:lang}}|llSetRot]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetScale{{#var:lang}}|llSetScale]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetScriptState{{#var:lang}}|llSetScriptState]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetSitText{{#var:lang}}|llSetSitText]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetSoundQueueing{{#var:lang}}|llSetSoundQueueing]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetSoundRadius{{#var:lang}}|llSetSoundRadius]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetStatus{{#var:lang}}|llSetStatus]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetText{{#var:lang}}|llSetText]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetTexture{{#var:lang}}|llSetTexture]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetTextureAnim{{#var:lang}}|llSetTextureAnim]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetTimerEvent{{#var:lang}}|llSetTimerEvent]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetTorque{{#var:lang}}|llSetTorque]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetTouchText{{#var:lang}}|llSetTouchText]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVehicleFlags{{#var:lang}}|llSetVehicleFlags]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVehicleFloatParam{{#var:lang}}|llSetVehicleFloatParam]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVehicleRotationParam{{#var:lang}}|llSetVehicleRotationParam]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVehicleType{{#var:lang}}|llSetVehicleType]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVehicleVectorParam{{#var:lang}}|llSetVehicleVectorParam]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSetVelocity{{#var:lang}}|llSetVelocity]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSHA1String{{#var:lang}}|llSHA1String]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSHA256String{{#var:lang}}|llSHA256String]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llShout{{#var:lang}}|llShout]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSignRSA{{#var:lang}}|llSignRSA]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSin{{#var:lang}}|llSin]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSitOnLink{{#var:lang}}|llSitOnLink]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSitTarget{{#var:lang}}|llSitTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSleep{{#var:lang}}|llSleep]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSound{{#var:lang}}|llSound]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llSoundPreload{{#var:lang}}|llSoundPreload]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSqrt{{#var:lang}}|llSqrt]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llsRGB2Linear{{#var:lang}}|llsRGB2Linear]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStartAnimation{{#var:lang}}|llStartAnimation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStartObjectAnimation{{#var:lang}}|llStartObjectAnimation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopAnimation{{#var:lang}}|llStopAnimation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopObjectAnimation{{#var:lang}}|llStopObjectAnimation]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopHover{{#var:lang}}|llStopHover]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopLookAt{{#var:lang}}|llStopLookAt]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopMoveToTarget{{#var:lang}}|llStopMoveToTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llStopPointAt{{#var:lang}}|llStopPointAt]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStopSound{{#var:lang}}|llStopSound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStringLength{{#var:lang}}|llStringLength]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStringToBase64{{#var:lang}}|llStringToBase64]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llStringTrim{{#var:lang}}|llStringTrim]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llSubStringIndex{{#var:lang}}|llSubStringIndex]]&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llTakeCamera{{#var:lang}}|llTakeCamera]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTakeControls{{#var:lang}}|llTakeControls]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTan{{#var:lang}}|llTan]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTarget{{#var:lang}}|llTarget]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTargetedEmail{{#var:lang}}|llTargetedEmail]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTargetOmega{{#var:lang}}|llTargetOmega]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTargetRemove{{#var:lang}}|llTargetRemove]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTeleportAgent{{#var:lang}}|llTeleportAgent]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTeleportAgentGlobalCoords{{#var:lang}}|llTeleportAgentGlobalCoords]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTeleportAgentHome{{#var:lang}}|llTeleportAgentHome]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTextBox{{#var:lang}}|llTextBox]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llToLower{{#var:lang}}|llToLower]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llToUpper{{#var:lang}}|llToUpper]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTransferLindenDollars{{#var:lang}}|llTransferLindenDollars]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTriggerSound{{#var:lang}}|llTriggerSound]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llTriggerSoundLimited{{#var:lang}}|llTriggerSoundLimited]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llUnescapeURL{{#var:lang}}|llUnescapeURL]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llUnSit{{#var:lang}}|llUnSit]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llUpdateCharacter{{#var:lang}}|llUpdateCharacter]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llUpdateKeyValue{{#var:lang}}|llUpdateKeyValue]] {{LSL EXP}} {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llVecDist{{#var:lang}}|llVecDist]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llVecMag{{#var:lang}}|llVecMag]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llVecNorm{{#var:lang}}|llVecNorm]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llVerifyRSA{{#var:lang}}|llVerifyRSA]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llVolumeDetect{{#var:lang}}|llVolumeDetect]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llWanderWithin{{#var:lang}}|llWanderWithin]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llWater{{#var:lang}}|llWater]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llWhisper{{#var:lang}}|llWhisper]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llWind{{#var:lang}}|llWind]]&lt;br /&gt;
&amp;lt;li&amp;gt; [[llWorldPosToHUD{{#var:lang}}|llWorldPosToHUD]] {{LSL New}}&lt;br /&gt;
&amp;lt;li&amp;gt; [[llXorBase64{{#var:lang}}|llXorBase64]] {{LSL I}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llXorBase64Strings{{#var:lang}}|llXorBase64Strings]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;lt;s&amp;gt;[[llXorBase64StringsCorrect{{#var:lang}}|llXorBase64StringsCorrect]]&amp;lt;/s&amp;gt; {{LSL_D}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/ul&amp;gt; {{LSL_All_Functions/Generate}}&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Generate&amp;diff=1216676</id>
		<title>Template:LSL All Functions/Generate</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Generate&amp;diff=1216676"/>
		<updated>2024-05-20T15:25:46Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;noinclude&amp;gt;{{#if:&lt;br /&gt;
&lt;br /&gt;
Instructions:&lt;br /&gt;
Most likely you don&#039;t know the LSO index number for the new function so add it to the bottom of the page. After words...&lt;br /&gt;
&lt;br /&gt;
* If you are updating Template:LSL_All_Functions/Number just select all the text and copy it into Template:LSL_All_Functions/Number&lt;br /&gt;
* However if you are updating Template:LSL_All_Functions/Name click the Icon next to the Bold face &amp;quot;Name&amp;quot;, then select all the text and copy it into Template:LSL_All_Functions/Name.&lt;br /&gt;
&lt;br /&gt;
Good luck! -- Strife_Onizuka 22:33, 15 January 2014 (PST)&lt;br /&gt;
&lt;br /&gt;
Be sure to check out https://bitbucket.org/Sei_Lisa/kwdb/src and https://github.com/buildersbrewery/linden-scripting-language&lt;br /&gt;
&lt;br /&gt;
{{#vardefine:counter|-1}}&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;!--&amp;lt;/nowiki&amp;gt; If you are going to edit this, please edit [https://wiki.secondlife.com/w/index.php?title=Template:LSL_All_Functions/Generate&amp;amp;action=edit Template:LSL_All_Functions/Generate] instead. This was last updated on &lt;br /&gt;
{{REVISIONYEAR}}-{{REVISIONMONTH}}-{{REVISIONDAY2}}&amp;lt;nowiki&amp;gt;--&amp;gt;&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;ol style=&amp;quot;{{NewStyle|column-width|20.5em|moz=*|webkit=*}}&amp;quot; start=&amp;quot;0&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
{| class=&amp;quot;sortable&amp;quot;&lt;br /&gt;
|+ &amp;lt;nowiki&amp;gt;&amp;lt;!--&amp;lt;/nowiki&amp;gt; Sort by Name or Release order&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot; style=&amp;quot;display:none;&amp;quot;|&lt;br /&gt;
! Natural&lt;br /&gt;
! Name&lt;br /&gt;
! Release&lt;br /&gt;
! class=&amp;quot;unsortable&amp;quot;| &amp;lt;nowiki&amp;gt;--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
{{/Line|llSin}}&lt;br /&gt;
{{/Line|llCos}}&lt;br /&gt;
{{/Line|llTan}}&lt;br /&gt;
{{/Line|llAtan2}}&lt;br /&gt;
{{/Line|llSqrt}}&lt;br /&gt;
{{/Line|llPow}}&lt;br /&gt;
{{/Line|llAbs}}&lt;br /&gt;
{{/Line|llFabs}}&lt;br /&gt;
{{/Line|llFrand}}&lt;br /&gt;
{{/Line|llFloor}}&lt;br /&gt;
{{/Line|llCeil}}&lt;br /&gt;
{{/Line|llRound}}&lt;br /&gt;
{{/Line|llVecMag}}&lt;br /&gt;
{{/Line|llVecNorm}}&lt;br /&gt;
{{/Line|llVecDist}}&lt;br /&gt;
{{/Line|llRot2Euler}}&lt;br /&gt;
{{/Line|llEuler2Rot}}&lt;br /&gt;
{{/Line|llAxes2Rot}}&lt;br /&gt;
{{/Line|llRot2Fwd}}&lt;br /&gt;
{{/Line|llRot2Left}}&lt;br /&gt;
{{/Line|llRot2Up}}&lt;br /&gt;
{{/Line|llRotBetween}}&lt;br /&gt;
{{/Line|llWhisper}}&lt;br /&gt;
{{/Line|llSay}}&lt;br /&gt;
{{/Line|llShout}}&lt;br /&gt;
{{/Line|llListen}}&lt;br /&gt;
{{/Line|llListenControl}}&lt;br /&gt;
{{/Line|llListenRemove}}&lt;br /&gt;
{{/Line|llSensor}}&lt;br /&gt;
{{/Line|llSensorRepeat}}&lt;br /&gt;
{{/Line|llSensorRemove}}&lt;br /&gt;
{{/Line|llDetectedName}}&lt;br /&gt;
{{/Line|llDetectedKey}}&lt;br /&gt;
{{/Line|llDetectedOwner}}&lt;br /&gt;
{{/Line|llDetectedType}}&lt;br /&gt;
{{/Line|llDetectedPos}}&lt;br /&gt;
{{/Line|llDetectedVel}}&lt;br /&gt;
{{/Line|llDetectedGrab}}&lt;br /&gt;
{{/Line|llDetectedRot}}&lt;br /&gt;
{{/Line|llDetectedGroup}}&lt;br /&gt;
{{/Line|llDetectedLinkNumber}}&lt;br /&gt;
{{/Line|llDie}}&lt;br /&gt;
{{/Line|llGround}}&lt;br /&gt;
{{/Line|llCloud|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llWind}}&lt;br /&gt;
{{/Line|llSetStatus}}&lt;br /&gt;
{{/Line|llGetStatus}}&lt;br /&gt;
{{/Line|llSetScale}}&lt;br /&gt;
{{/Line|llGetScale}}&lt;br /&gt;
{{/Line|llSetColor}}&lt;br /&gt;
{{/Line|llGetAlpha}}&lt;br /&gt;
{{/Line|llSetAlpha}}&lt;br /&gt;
{{/Line|llGetColor}}&lt;br /&gt;
{{/Line|llSetTexture}}&lt;br /&gt;
{{/Line|llScaleTexture}}&lt;br /&gt;
{{/Line|llOffsetTexture}}&lt;br /&gt;
{{/Line|llRotateTexture}}&lt;br /&gt;
{{/Line|llGetTexture}}&lt;br /&gt;
{{/Line|llSetPos}}&lt;br /&gt;
{{/Line|llGetPos}}&lt;br /&gt;
{{/Line|llGetLocalPos}}&lt;br /&gt;
{{/Line|llSetRot}}&lt;br /&gt;
{{/Line|llGetRot}}&lt;br /&gt;
{{/Line|llGetLocalRot}}&lt;br /&gt;
{{/Line|llSetForce}}&lt;br /&gt;
{{/Line|llGetForce}}&lt;br /&gt;
{{/Line|llTarget}}&lt;br /&gt;
{{/Line|llTargetRemove}}&lt;br /&gt;
{{/Line|llRotTarget}}&lt;br /&gt;
{{/Line|llRotTargetRemove}}&lt;br /&gt;
{{/Line|llMoveToTarget}}&lt;br /&gt;
{{/Line|llStopMoveToTarget}}&lt;br /&gt;
{{/Line|llApplyImpulse}}&lt;br /&gt;
{{/Line|llApplyRotationalImpulse}}&lt;br /&gt;
{{/Line|llSetTorque}}&lt;br /&gt;
{{/Line|llGetTorque}}&lt;br /&gt;
{{/Line|llSetForceAndTorque}}&lt;br /&gt;
{{/Line|llGetVel}}&lt;br /&gt;
{{/Line|llGetAccel}}&lt;br /&gt;
{{/Line|llGetOmega}}&lt;br /&gt;
{{/Line|llGetTimeOfDay}}&lt;br /&gt;
{{/Line|llGetWallclock}}&lt;br /&gt;
{{/Line|llGetTime}}&lt;br /&gt;
{{/Line|llResetTime}}&lt;br /&gt;
{{/Line|llGetAndResetTime}}&lt;br /&gt;
{{/Line|llSound|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llPlaySound}}&lt;br /&gt;
{{/Line|llLoopSound}}&lt;br /&gt;
{{/Line|llLoopSoundMaster}}&lt;br /&gt;
{{/Line|llLoopSoundSlave}}&lt;br /&gt;
{{/Line|llPlaySoundSlave}}&lt;br /&gt;
{{/Line|llTriggerSound}}&lt;br /&gt;
{{/Line|llStopSound}}&lt;br /&gt;
{{/Line|llPreloadSound}}&lt;br /&gt;
{{/Line|llGetSubString}}&lt;br /&gt;
{{/Line|llDeleteSubString}}&lt;br /&gt;
{{/Line|llInsertString}}&lt;br /&gt;
{{/Line|llToUpper}}&lt;br /&gt;
{{/Line|llToLower}}&lt;br /&gt;
{{/Line|llGiveMoney}}&lt;br /&gt;
{{/Line|llMakeExplosion|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llMakeFountain|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llMakeSmoke|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llMakeFire|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llRezObject}}&lt;br /&gt;
{{/Line|llLookAt}}&lt;br /&gt;
{{/Line|llStopLookAt}}&lt;br /&gt;
{{/Line|llSetTimerEvent}}&lt;br /&gt;
{{/Line|llSleep}}&lt;br /&gt;
{{/Line|llGetMass}}&lt;br /&gt;
{{/Line|llCollisionFilter}}&lt;br /&gt;
{{/Line|llTakeControls}}&lt;br /&gt;
{{/Line|llReleaseControls}}&lt;br /&gt;
{{/Line|llAttachToAvatar}}&lt;br /&gt;
{{/Line|llDetachFromAvatar}}&lt;br /&gt;
{{/Line|llTakeCamera|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llReleaseCamera|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llGetOwner}}&lt;br /&gt;
{{/Line|llInstantMessage}}&lt;br /&gt;
{{/Line|llEmail}}&lt;br /&gt;
{{/Line|llGetNextEmail}}&lt;br /&gt;
{{/Line|llGetKey}}&lt;br /&gt;
{{/Line|llSetBuoyancy}}&lt;br /&gt;
{{/Line|llSetHoverHeight}}&lt;br /&gt;
{{/Line|llStopHover}}&lt;br /&gt;
{{/Line|llMinEventDelay}}&lt;br /&gt;
{{/Line|llSoundPreload|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llRotLookAt}}&lt;br /&gt;
{{/Line|llStringLength}}&lt;br /&gt;
{{/Line|llStartAnimation}}&lt;br /&gt;
{{/Line|llStopAnimation}}&lt;br /&gt;
{{/Line|llPointAt|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llStopPointAt|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llTargetOmega}}&lt;br /&gt;
{{/Line|llGetStartParameter}}&lt;br /&gt;
{{/Line|llGodLikeRezObject|&amp;lt;nowiki&amp;gt;{{LSL_GM}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llRequestPermissions}}&lt;br /&gt;
{{/Line|llGetPermissionsKey}}&lt;br /&gt;
{{/Line|llGetPermissions}}&lt;br /&gt;
{{/Line|llGetLinkNumber}}&lt;br /&gt;
{{/Line|llSetLinkColor}}&lt;br /&gt;
{{/Line|llCreateLink}}&lt;br /&gt;
{{/Line|llBreakLink}}&lt;br /&gt;
{{/Line|llBreakAllLinks}}&lt;br /&gt;
{{/Line|llGetLinkKey}}&lt;br /&gt;
{{/Line|llGetLinkName}}&lt;br /&gt;
{{/Line|llGetLinkDesc}}&lt;br /&gt;
{{/Line|llGetInventoryNumber}}&lt;br /&gt;
{{/Line|llGetInventoryName}}&lt;br /&gt;
{{/Line|llSetScriptState}}&lt;br /&gt;
{{/Line|llGetEnergy}}&lt;br /&gt;
{{/Line|llGiveInventory}}&lt;br /&gt;
{{/Line|llRemoveInventory}}&lt;br /&gt;
{{/Line|llSetText}}&lt;br /&gt;
{{/Line|llWater}}&lt;br /&gt;
{{/Line|llPassTouches}}&lt;br /&gt;
{{/Line|llRequestAgentData}}&lt;br /&gt;
{{/Line|llRequestInventoryData}}&lt;br /&gt;
{{/Line|llSetDamage}}&lt;br /&gt;
{{/Line|llTeleportAgentHome}}&lt;br /&gt;
{{/Line|llModifyLand}}&lt;br /&gt;
{{/Line|llCollisionSound}}&lt;br /&gt;
{{/Line|llCollisionSprite|&amp;lt;nowiki&amp;gt;{{LSL BR}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetAnimation}}&lt;br /&gt;
{{/Line|llResetScript}}&lt;br /&gt;
{{/Line|llMessageLinked}}&lt;br /&gt;
{{/Line|llPushObject}}&lt;br /&gt;
{{/Line|llPassCollisions}}&lt;br /&gt;
{{/Line|llGetScriptName}}&lt;br /&gt;
{{/Line|llGetNumberOfSides}}&lt;br /&gt;
{{/Line|llAxisAngle2Rot}}&lt;br /&gt;
{{/Line|llRot2Axis}}&lt;br /&gt;
{{/Line|llRot2Angle}}&lt;br /&gt;
{{/Line|llAcos}}&lt;br /&gt;
{{/Line|llAsin}}&lt;br /&gt;
{{/Line|llAngleBetween}}&lt;br /&gt;
{{/Line|llGetInventoryKey}}&lt;br /&gt;
{{/Line|llAllowInventoryDrop}}&lt;br /&gt;
{{/Line|llGetSunDirection}}&lt;br /&gt;
{{/Line|llGetTextureOffset}}&lt;br /&gt;
{{/Line|llGetTextureScale}}&lt;br /&gt;
{{/Line|llGetTextureRot}}&lt;br /&gt;
{{/Line|llSubStringIndex}}&lt;br /&gt;
{{/Line|llGetOwnerKey}}&lt;br /&gt;
{{/Line|llGetCenterOfMass}}&lt;br /&gt;
{{/Line|llListSort}}&lt;br /&gt;
{{/Line|llGetListLength}}&lt;br /&gt;
{{/Line|llList2Integer}}&lt;br /&gt;
{{/Line|llList2Float}}&lt;br /&gt;
{{/Line|llList2String}}&lt;br /&gt;
{{/Line|llList2Key}}&lt;br /&gt;
{{/Line|llList2Vector}}&lt;br /&gt;
{{/Line|llList2Rot}}&lt;br /&gt;
{{/Line|llList2List}}&lt;br /&gt;
{{/Line|llDeleteSubList}}&lt;br /&gt;
{{/Line|llGetListEntryType}}&lt;br /&gt;
{{/Line|llList2CSV}}&lt;br /&gt;
{{/Line|llCSV2List}}&lt;br /&gt;
{{/Line|llListRandomize}}&lt;br /&gt;
{{/Line|llList2ListStrided}}&lt;br /&gt;
{{/Line|llGetRegionCorner}}&lt;br /&gt;
{{/Line|llListInsertList}}&lt;br /&gt;
{{/Line|llListFindList}}&lt;br /&gt;
{{/Line|llGetObjectName}}&lt;br /&gt;
{{/Line|llSetObjectName}}&lt;br /&gt;
{{/Line|llGetDate}}&lt;br /&gt;
{{/Line|llEdgeOfWorld}}&lt;br /&gt;
{{/Line|llGetAgentInfo}}&lt;br /&gt;
{{/Line|llAdjustSoundVolume}}&lt;br /&gt;
{{/Line|llSetSoundQueueing}}&lt;br /&gt;
{{/Line|llSetSoundRadius}}&lt;br /&gt;
{{/Line|llKey2Name}}&lt;br /&gt;
{{/Line|llSetTextureAnim}}&lt;br /&gt;
{{/Line|llTriggerSoundLimited}}&lt;br /&gt;
{{/Line|llEjectFromLand}}&lt;br /&gt;
{{/Line|llParseString2List}}&lt;br /&gt;
{{/Line|llOverMyLand}}&lt;br /&gt;
{{/Line|llGetLandOwnerAt}}&lt;br /&gt;
{{/Line|llGetNotecardLine}}&lt;br /&gt;
{{/Line|llGetAgentSize}}&lt;br /&gt;
{{/Line|llSameGroup}}&lt;br /&gt;
{{/Line|llUnSit}}&lt;br /&gt;
{{/Line|llGroundSlope}}&lt;br /&gt;
{{/Line|llGroundNormal}}&lt;br /&gt;
{{/Line|llGroundContour}}&lt;br /&gt;
{{/Line|llGetAttached}}&lt;br /&gt;
{{/Line|llGetFreeMemory}}&lt;br /&gt;
{{/Line|llGetRegionName}}&lt;br /&gt;
{{/Line|llGetRegionTimeDilation}}&lt;br /&gt;
{{/Line|llGetRegionFPS}}&lt;br /&gt;
{{/Line|llParticleSystem}}&lt;br /&gt;
{{/Line|llGroundRepel}}&lt;br /&gt;
{{/Line|llGiveInventoryList}}&lt;br /&gt;
{{/Line|llSetVehicleType}}&lt;br /&gt;
{{/Line|llSetVehicleFloatParam}}&lt;br /&gt;
{{/Line|llSetVehicleVectorParam}}&lt;br /&gt;
{{/Line|llSetVehicleRotationParam}}&lt;br /&gt;
{{/Line|llSetVehicleFlags}}&lt;br /&gt;
{{/Line|llRemoveVehicleFlags}}&lt;br /&gt;
{{/Line|llSitTarget}}&lt;br /&gt;
{{/Line|llAvatarOnSitTarget}}&lt;br /&gt;
{{/Line|llAddToLandPassList}}&lt;br /&gt;
{{/Line|llSetTouchText}}&lt;br /&gt;
{{/Line|llSetSitText}}&lt;br /&gt;
{{/Line|llSetCameraEyeOffset}}&lt;br /&gt;
{{/Line|llSetCameraAtOffset}}&lt;br /&gt;
{{/Line|llDumpList2String}}&lt;br /&gt;
{{/Line|llScriptDanger}}&lt;br /&gt;
{{/Line|llDialog}}&lt;br /&gt;
{{/Line|llVolumeDetect}}&lt;br /&gt;
{{/Line|llResetOtherScript}}&lt;br /&gt;
{{/Line|llGetScriptState}}&lt;br /&gt;
{{/Line|llRemoteLoadScript|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llSetRemoteScriptAccessPin}}&lt;br /&gt;
{{/Line|llRemoteLoadScriptPin}}&lt;br /&gt;
{{/Line|llOpenRemoteDataChannel}}&lt;br /&gt;
{{/Line|llSendRemoteData}}&lt;br /&gt;
{{/Line|llRemoteDataReply}}&lt;br /&gt;
{{/Line|llCloseRemoteDataChannel}}&lt;br /&gt;
{{/Line|llMD5String}}&lt;br /&gt;
{{/Line|llSetPrimitiveParams}}&lt;br /&gt;
{{/Line|llStringToBase64}}&lt;br /&gt;
{{/Line|llBase64ToString}}&lt;br /&gt;
{{/Line|llXorBase64Strings|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llRemoteDataSetRegion|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llLog10}}&lt;br /&gt;
{{/Line|llLog}}&lt;br /&gt;
{{/Line|llGetAnimationList}}&lt;br /&gt;
{{/Line|llSetParcelMusicURL}}&lt;br /&gt;
{{/Line|llGetRootPosition}}&lt;br /&gt;
{{/Line|llGetRootRotation}}&lt;br /&gt;
{{/Line|llGetObjectDesc}}&lt;br /&gt;
{{/Line|llSetObjectDesc}}&lt;br /&gt;
{{/Line|llGetCreator}}&lt;br /&gt;
{{/Line|llGetTimestamp}}&lt;br /&gt;
{{/Line|llSetLinkAlpha}}&lt;br /&gt;
{{/Line|llGetNumberOfPrims}}&lt;br /&gt;
{{/Line|llGetNumberOfNotecardLines}}&lt;br /&gt;
{{/Line|llGetBoundingBox}}&lt;br /&gt;
{{/Line|llGetGeometricCenter}}&lt;br /&gt;
{{/Line|llGetPrimitiveParams}}&lt;br /&gt;
{{/Line|llIntegerToBase64}}&lt;br /&gt;
{{/Line|llBase64ToInteger}}&lt;br /&gt;
{{/Line|llGetGMTclock}}&lt;br /&gt;
{{/Line|llGetSimulatorHostname}}&lt;br /&gt;
{{/Line|llSetLocalRot}}&lt;br /&gt;
{{/Line|llParseStringKeepNulls}}&lt;br /&gt;
{{/Line|llRezAtRoot}}&lt;br /&gt;
{{/Line|llGetObjectPermMask}}&lt;br /&gt;
{{/Line|llSetObjectPermMask|&amp;lt;nowiki&amp;gt;{{LSL_GM}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llGetInventoryPermMask}}&lt;br /&gt;
{{/Line|llSetInventoryPermMask|&amp;lt;nowiki&amp;gt;{{LSL_GM}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llGetInventoryCreator}}&lt;br /&gt;
{{/Line|llOwnerSay}}&lt;br /&gt;
{{/Line|llRequestSimulatorData}}&lt;br /&gt;
{{/Line|llForceMouselook}}&lt;br /&gt;
{{/Line|llGetObjectMass}}&lt;br /&gt;
{{/Line|llListReplaceList}}&lt;br /&gt;
{{/Line|llLoadURL}}&lt;br /&gt;
{{/Line|llParcelMediaCommandList}}&lt;br /&gt;
{{/Line|llParcelMediaQuery}}&lt;br /&gt;
{{/Line|llModPow}}&lt;br /&gt;
{{/Line|llGetInventoryType}}&lt;br /&gt;
{{/Line|llSetPayPrice}}&lt;br /&gt;
{{/Line|llGetCameraPos}}&lt;br /&gt;
{{/Line|llGetCameraRot}}&lt;br /&gt;
{{/Line|llSetPrimURL|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llRefreshPrimURL|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llEscapeURL}}&lt;br /&gt;
{{/Line|llUnescapeURL}}&lt;br /&gt;
{{/Line|llMapDestination}}&lt;br /&gt;
{{/Line|llAddToLandBanList}}&lt;br /&gt;
{{/Line|llRemoveFromLandPassList}}&lt;br /&gt;
{{/Line|llRemoveFromLandBanList}}&lt;br /&gt;
{{/Line|llSetCameraParams}}&lt;br /&gt;
{{/Line|llClearCameraParams}}&lt;br /&gt;
{{/Line|llListStatistics}}&lt;br /&gt;
{{/Line|llGetUnixTime}}&lt;br /&gt;
{{/Line|llGetParcelFlags}}&lt;br /&gt;
{{/Line|llGetRegionFlags}}&lt;br /&gt;
{{/Line|llXorBase64StringsCorrect|&amp;lt;nowiki&amp;gt;{{LSL_D}}&amp;lt;/nowiki&amp;gt;|s=*}}&lt;br /&gt;
{{/Line|llHTTPRequest}}&lt;br /&gt;
{{/Line|llResetLandBanList}}&lt;br /&gt;
{{/Line|llResetLandPassList}}&lt;br /&gt;
{{/Line|llGetParcelPrimCount}}&lt;br /&gt;
{{/Line|llGetParcelPrimOwners}}&lt;br /&gt;
{{/Line|llGetObjectPrimCount}}&lt;br /&gt;
{{/Line|llGetParcelMaxPrims}}&lt;br /&gt;
{{/Line|llGetParcelDetails}}&lt;br /&gt;
{{/Line|llSetLinkPrimitiveParams}}&lt;br /&gt;
{{/Line|llSetLinkTexture}}&lt;br /&gt;
{{/Line|llStringTrim}}&lt;br /&gt;
{{/Line|llRegionSay}}&lt;br /&gt;
{{/Line|llGetObjectDetails}}&lt;br /&gt;
{{/Line|llSetClickAction}}&lt;br /&gt;
{{/Line|llGetRegionAgentCount}}&lt;br /&gt;
{{/Line|llTextBox}}&lt;br /&gt;
{{/Line|llGetAgentLanguage}}&lt;br /&gt;
{{/Line|llDetectedTouchUV}}&lt;br /&gt;
{{/Line|llDetectedTouchFace}}&lt;br /&gt;
{{/Line|llDetectedTouchPos}}&lt;br /&gt;
{{/Line|llDetectedTouchNormal}}&lt;br /&gt;
{{/Line|llDetectedTouchBinormal}}&lt;br /&gt;
{{/Line|llDetectedTouchST}}&lt;br /&gt;
{{/Line|llSHA1String}}&lt;br /&gt;
{{/Line|llGetFreeURLs}}&lt;br /&gt;
{{/Line|llRequestURL}}&lt;br /&gt;
{{/Line|llRequestSecureURL}}&lt;br /&gt;
{{/Line|llReleaseURL}}&lt;br /&gt;
{{/Line|llHTTPResponse}}&lt;br /&gt;
{{/Line|llGetHTTPHeader}}&lt;br /&gt;
{{/Line|llSetPrimMediaParams}}&lt;br /&gt;
{{/Line|llGetPrimMediaParams}}&lt;br /&gt;
{{/Line|llClearPrimMedia}}&lt;br /&gt;
{{/Line|llSetLinkPrimitiveParamsFast}}&lt;br /&gt;
{{/Line|llGetLinkPrimitiveParams}}&lt;br /&gt;
{{/Line|llLinkParticleSystem}}&lt;br /&gt;
{{/Line|llSetLinkTextureAnim}}&lt;br /&gt;
{{/Line|llGetLinkNumberOfSides}}&lt;br /&gt;
{{/Line|llGetUsername}}&lt;br /&gt;
{{/Line|llRequestUsername}}&lt;br /&gt;
{{/Line|llGetDisplayName}}&lt;br /&gt;
{{/Line|llRequestDisplayName}}&lt;br /&gt;
{{/Line|llGetEnv}}&lt;br /&gt;
{{/Line|llRegionSayTo}}&lt;br /&gt;
{{/Line|llStartObjectAnimation}}&lt;br /&gt;
{{/Line|llStopObjectAnimation}}&lt;br /&gt;
{{/Line|llGetObjectAnimationNames}}&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;nowiki&amp;gt;&amp;lt;/ol&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; |&amp;lt;nowiki&amp;gt;&amp;lt;!--&amp;lt;/nowiki&amp;gt; {{#vardefineecho:counter|{{#expr:{{#var:counter}}+1}}}}&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; | aa&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; | aa&amp;lt;nowiki&amp;gt;--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;2&amp;quot; | &amp;lt;nowiki&amp;gt;&amp;lt;ul style=&amp;quot;{{NewStyle|column-width|20.5em|moz=*|webkit=*}}&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; |&amp;lt;nowiki&amp;gt;&amp;lt;!--&amp;lt;/nowiki&amp;gt; {{#vardefineecho:counter|{{#expr:{{#var:counter}}+1}}}}&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; | ab&lt;br /&gt;
| style=&amp;quot;display:none;&amp;quot; | ab&amp;lt;nowiki&amp;gt;--&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
|- &amp;lt;!-- these ones don&#039;t have known numbers  --&amp;gt;&lt;br /&gt;
|- {{#vardefine:unordered|*}}&lt;br /&gt;
{{/Line|llGetSPMaxMemory|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetUsedMemory|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llScriptProfiler|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llAvatarOnLinkSitTarget|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llClearLinkMedia|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetLinkMedia|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetMemoryLimit|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llLinkSitTarget|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetAngularVelocity|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetLinkCamera|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetLinkMedia|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetMemoryLimit|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetVelocity|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetContentType|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llCastRay|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetMassMKS|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetPhysicsMaterial|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetPhysicsMaterial|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llManageEstateAccess|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetKeyframedMotion|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llTransferLindenDollars|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetParcelMusicURL|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetRegionPos|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGenerateKey|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetAgentList|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llAttachToAvatarTemp|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llTeleportAgentGlobalCoords|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llTeleportAgent|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llCreateCharacter|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llDeleteCharacter|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llEvade|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llExecCharacterCmd|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llFleeFrom|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetClosestNavPoint|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetStaticPath|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llNavigateTo|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llPatrolPoints|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llPursue|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llUpdateCharacter|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llWanderWithin|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetSimStats|&amp;lt;nowiki&amp;gt;{{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetAnimationOverride|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llResetAnimationOverride|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSetAnimationOverride|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llJson2List|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llJsonGetValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llJsonSetValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llJsonValueType|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llList2Json|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llXorBase64|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llReturnObjectsByID|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llReturnObjectsByOwner|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetMaxScaleFactor|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetMinScaleFactor|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llScaleByFactor|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llAgentInExperience|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llCreateKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llDataSizeKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llDeleteKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetExperienceDetails|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetExperienceErrorMessage|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llKeyCountKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llKeysKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llReadKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llRequestExperiencePermissions|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llUpdateKeyValue|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llGetAttachedList|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llSitOnLink|&amp;lt;nowiki&amp;gt;{{LSL New}} {{LSL I}}&amp;lt;/nowiki&amp;gt;}}&lt;br /&gt;
{{/Line|llOpenFloater|&amp;lt;nowiki&amp;gt;{{LSL PXP}} {{LSL I}}&amp;lt;/nowiki}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;nowiki&amp;gt;&amp;lt;/ul&amp;gt; {{LSL_All_Functions/Generate}}&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216382</id>
		<title>User:Daemonika Nightfire/Scripts/linkset data example</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216382"/>
		<updated>2024-03-19T17:32:31Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Vorwort */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Grundsaetzlich war ich immer schon dagegen mit Texture Changern die UUIDs ueber einen Channel beispielsweise an ein Kleidungsstueck zu senden. Die abenteuerlichsten Huds werden verbreitet, wo die UUIDs mal verschluesselt und mal unverschleusselt versendet werden. Das wirkt auf mich halt wie gewollt und nicht gekonnt. Viel besser ist es die UUIDs fuer Texturen im Empfaenger zu speichern. Bisher habe ich dazu immer eine Liste im Empfaenger genutzt und mittels HUD lediglich die Zahl fuer den index uebermittelt. Da muss dann auch nichts mehr entschluesselt werden und spart eine ganze menge Script-Code / Memory. Ein weiterer und wahrscheinlich der essentielle Vorteil des LinksetData ist, dass man das Script resetten kann, ohne das die Daten verloren gehen, weil sie naemlich im Object gespeichert sind.&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Setup ==&lt;br /&gt;
Dieses Beispiel ist nur ein einfaches Hilfsmittel das LinksetData zu fuellen. Bei einigen Experimenten ist uns aufgefallen, das die Eintraege alphabetisch sortiert werden. In dieser Variante wird das LinksetData mit Texturen fuer ein Texture Changer Menue vorbereitet. Mit hilfe der Passwort Variante kann auch niemand ohne dem richtigen Passwort die UUIDs aus dem Linkset auslesen.&lt;br /&gt;
    &lt;br /&gt;
 Nachdem die Schluesselnamen im Chat ausgegeben wurden, entfernt sich das Script selbst aus dem Inhalt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataReset();&lt;br /&gt;
        &lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;red&amp;quot;, &amp;quot;81cc70a7-2d3f-bf21-50b5-ba129cd070c9&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;blue&amp;quot;, &amp;quot;a7faeca8-dcad-2429-75a8-0afd1fd3d983&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;2cb4e61d-9e2e-9c74-c636-62fba90bde57&amp;quot;, password);&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(llDumpList2String(llLinksetDataListKeys(0, -1), &amp;quot; | &amp;quot;));&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Texture Changer ==&lt;br /&gt;
Dieses Script ist das entgueltige Texture Changer Menue Exsample. Die Menue Button tragen die selben Namen wie die Schluesselnamen im LinksetData. Wird nun einer dieser Namen im Menue ausgewaehlt, uebernimmt das Object automatisch den eingetragenen Wert dahinter.&lt;br /&gt;
 Wenn du das Script ohne die ganzen Kommentare speicherst, wirst du sehen wie klein es eigentlich ist. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Bedenke das ein einfacher Dialog nur 12 Button auf einmal anzeigen kann.&lt;br /&gt;
// Alternativ kann man auch einen HUD erstellen, womit dann dien Namen der einzelnen Button (links) gesendet werden.&lt;br /&gt;
list menu_buttons = [&amp;quot;red&amp;quot;,&amp;quot;green&amp;quot;,&amp;quot;blue&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Dynamischer menue Channel&lt;br /&gt;
/*&lt;br /&gt;
    In dieser globalen funktion wird bei jedem oeffnen des Menues der aktuelle Channel geloescht und ein neuer zufaelliger Channel erzeugt.&lt;br /&gt;
    Am Ende wird der Timer gestartet, der nach Ablauf den timer beendet und den Channel loescht.&lt;br /&gt;
*/&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    &lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Script-Anfang&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    // Aufrufen/setzen der Werkseinstellung&lt;br /&gt;
    /*&lt;br /&gt;
        Der folgende Event wird nur dann ausgefuehrt, wenn das Script gespeichert oder resettet wird.&lt;br /&gt;
        Im aktuellen Beispiel ist mir nichts besonderes eingefallen was ich da nutzen kann.&lt;br /&gt;
    */&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;bla bla bla bla&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // klicken erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Als erstes wird geprueft, wer das object klickt.&lt;br /&gt;
        Jetzt wo der Agent bekannt ist oeffnet sich fuer ihn das einfache menue.&lt;br /&gt;
    */&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        menu(agent, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Kommunikation im Chat/Channel&lt;br /&gt;
    /*&lt;br /&gt;
        Grundsaetzlich empfaengt der listen Event alles was im Chat / Channel gesendet wird.&lt;br /&gt;
        Wenn es nicht schon im Befehl llListen(... vorgesehen ist, muss man hier filtern.&lt;br /&gt;
        &lt;br /&gt;
        Das aktuelle Beispiel filtert nur die Button aus dem menue heraus und nutztdiese Message um den Schluesselnamen im LinksetData zu finden.&lt;br /&gt;
        Wird ein Schluesselname gefunden, verwendet der befehl llSetLinkPrimitiveParamsFast(... dessen Wert um die Textur zu veraendern.&lt;br /&gt;
        &lt;br /&gt;
        ImAnschluss wird das Menue ganz einfach wieder geoeffnet.&lt;br /&gt;
    */&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if(~llListFindList(menu_buttons, [message]))&lt;br /&gt;
        {&lt;br /&gt;
            llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_TEXTURE, ALL_SIDES, llLinksetDataReadProtected(message, password), &amp;lt;1,1,0&amp;gt;, &amp;lt;0,0,0&amp;gt;, 0.0]);&lt;br /&gt;
            &lt;br /&gt;
            menu(id, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Zeitgesteuerte Funktionen&lt;br /&gt;
    /*&lt;br /&gt;
        Mit dem timer lassen sich bestimmte Funktionen nach Zeit wiederholen oder einfach beenden.&lt;br /&gt;
        In diesem Fall wird lediglich der timer angehalten und der Listener entfernt.&lt;br /&gt;
    */&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Veraenderungen im LinksetData erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Dieser Event aehnelt zwar dem Changed Event, erkennt jedoch nur 3 Veraendeungen die das LinksetData betreffen.&lt;br /&gt;
        Fuer veraenderungen am LinkSet (Object) selbst ist der changed(integer change) Event erforderlich.&lt;br /&gt;
        In diesem Beispiel wird lediglich geprueft ob ein vorhandener Eintrag veraendert wurde.&lt;br /&gt;
        &lt;br /&gt;
        Pruefen lassen sich zusaetzlich noch: LINKSETDATA_DELETE &amp;amp; LINKSETDATA_RESET&lt;br /&gt;
    */&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if(action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Linkset Data for &amp;quot; + name + &amp;quot; has been successfully updated.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Hallo Welt&lt;br /&gt;
    /*&lt;br /&gt;
        Ja, die Ueberschrift habe ich mit absicht so gewaehlt.&lt;br /&gt;
        Der on_rez Event wird naemlich immer dann ausgeloest, sobald das Object das Licht der Welt erblickt.&lt;br /&gt;
        Dazu gehoeren:&lt;br /&gt;
        ➤ Vom Inventar auf den Boden ziehen.&lt;br /&gt;
        ➤ Inworld kopieren (Kopie ziehen).&lt;br /&gt;
        ➤ Mittels Tools rezzen (Rezzer).&lt;br /&gt;
        ➤ Am Avatar anziehen.&lt;br /&gt;
        ➤ Du traegst es beim Einloggen.&lt;br /&gt;
        &lt;br /&gt;
        Selbstverstaendlich kann man in diesem Event vielseitige Funktionen ausfuehren.&lt;br /&gt;
        Einen Reset sollte man an dieser Stelle jedoch nur dann ausfuehren,&lt;br /&gt;
        wenn keine anderen Funktionen davon abhaengig sind vorherige Aufgaben auszufuehren oder temporaere Variablen bei zu behalt&lt;br /&gt;
    */&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Updater ==&lt;br /&gt;
Bei diesem Beispiel handelt es sich um ein LinksetData Updater. Weil das LinksetData Schluesselnamen basiert ist, kann man diverse Eintraege direkt auswaehlen. Dazu ist es nicht notwendig irgend welche langen listen zu parsen. Wenn dieses Script im Object durchgelaufen ist, wurden die Eintraege fuer &amp;quot;red&amp;quot; &amp;amp; &amp;quot;blue&amp;quot; ignoriert.&lt;br /&gt;
 Auch dieses Script loescht sich selbst nach beendigung.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;68d790ff-5c41-0a98-c9a9-46fcca48e125&amp;quot;, password);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216381</id>
		<title>User:Daemonika Nightfire/Scripts/linkset data example</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216381"/>
		<updated>2024-03-19T17:27:42Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* llLinksetData Texture Changer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Grundsaetzlich war ich immer schon dagegen mit Texture Changern die UUIDs ueber einen Channel beispielsweise an ein Kleidungsstueck zu senden. Die abenteuerlichsten Huds werden verbreitet, wo die UUID mal verschluesselt und mal unverschleusselt versendet werden. Das wirkt auf mich halt wie gewollt und nicht gekonnt. Viel besser ist es die UUIDs fuer Texturen im Empfaenger zu speichern. Bisher habe ich dazu immer eine Liste im Empfaenger genutzt und mittels HUD lediglich die Zahl fuer den index uebermittelt. Da muss dann auch nichts mehr entschluesselt werden und spart eine ganze menge Script-Code / Memory. Ein weiterer und wahrscheinlich der essentielle Vorteil des LinksetData ist, dass man das Script resetten kann, ohne das die Daten verloren gehen, weil sie naemlich im Object gespeichert sind.&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Setup ==&lt;br /&gt;
Dieses Beispiel ist nur ein einfaches Hilfsmittel das LinksetData zu fuellen. Bei einigen Experimenten ist uns aufgefallen, das die Eintraege alphabetisch sortiert werden. In dieser Variante wird das LinksetData mit Texturen fuer ein Texture Changer Menue vorbereitet. Mit hilfe der Passwort Variante kann auch niemand ohne dem richtigen Passwort die UUIDs aus dem Linkset auslesen.&lt;br /&gt;
    &lt;br /&gt;
 Nachdem die Schluesselnamen im Chat ausgegeben wurden, entfernt sich das Script selbst aus dem Inhalt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataReset();&lt;br /&gt;
        &lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;red&amp;quot;, &amp;quot;81cc70a7-2d3f-bf21-50b5-ba129cd070c9&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;blue&amp;quot;, &amp;quot;a7faeca8-dcad-2429-75a8-0afd1fd3d983&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;2cb4e61d-9e2e-9c74-c636-62fba90bde57&amp;quot;, password);&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(llDumpList2String(llLinksetDataListKeys(0, -1), &amp;quot; | &amp;quot;));&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Texture Changer ==&lt;br /&gt;
Dieses Script ist das entgueltige Texture Changer Menue Exsample. Die Menue Button tragen die selben Namen wie die Schluesselnamen im LinksetData. Wird nun einer dieser Namen im Menue ausgewaehlt, uebernimmt das Object automatisch den eingetragenen Wert dahinter.&lt;br /&gt;
 Wenn du das Script ohne die ganzen Kommentare speicherst, wirst du sehen wie klein es eigentlich ist. &lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Bedenke das ein einfacher Dialog nur 12 Button auf einmal anzeigen kann.&lt;br /&gt;
// Alternativ kann man auch einen HUD erstellen, womit dann dien Namen der einzelnen Button (links) gesendet werden.&lt;br /&gt;
list menu_buttons = [&amp;quot;red&amp;quot;,&amp;quot;green&amp;quot;,&amp;quot;blue&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Dynamischer menue Channel&lt;br /&gt;
/*&lt;br /&gt;
    In dieser globalen funktion wird bei jedem oeffnen des Menues der aktuelle Channel geloescht und ein neuer zufaelliger Channel erzeugt.&lt;br /&gt;
    Am Ende wird der Timer gestartet, der nach Ablauf den timer beendet und den Channel loescht.&lt;br /&gt;
*/&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    &lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Script-Anfang&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    // Aufrufen/setzen der Werkseinstellung&lt;br /&gt;
    /*&lt;br /&gt;
        Der folgende Event wird nur dann ausgefuehrt, wenn das Script gespeichert oder resettet wird.&lt;br /&gt;
        Im aktuellen Beispiel ist mir nichts besonderes eingefallen was ich da nutzen kann.&lt;br /&gt;
    */&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;bla bla bla bla&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // klicken erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Als erstes wird geprueft, wer das object klickt.&lt;br /&gt;
        Jetzt wo der Agent bekannt ist oeffnet sich fuer ihn das einfache menue.&lt;br /&gt;
    */&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        menu(agent, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Kommunikation im Chat/Channel&lt;br /&gt;
    /*&lt;br /&gt;
        Grundsaetzlich empfaengt der listen Event alles was im Chat / Channel gesendet wird.&lt;br /&gt;
        Wenn es nicht schon im Befehl llListen(... vorgesehen ist, muss man hier filtern.&lt;br /&gt;
        &lt;br /&gt;
        Das aktuelle Beispiel filtert nur die Button aus dem menue heraus und nutztdiese Message um den Schluesselnamen im LinksetData zu finden.&lt;br /&gt;
        Wird ein Schluesselname gefunden, verwendet der befehl llSetLinkPrimitiveParamsFast(... dessen Wert um die Textur zu veraendern.&lt;br /&gt;
        &lt;br /&gt;
        ImAnschluss wird das Menue ganz einfach wieder geoeffnet.&lt;br /&gt;
    */&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if(~llListFindList(menu_buttons, [message]))&lt;br /&gt;
        {&lt;br /&gt;
            llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_TEXTURE, ALL_SIDES, llLinksetDataReadProtected(message, password), &amp;lt;1,1,0&amp;gt;, &amp;lt;0,0,0&amp;gt;, 0.0]);&lt;br /&gt;
            &lt;br /&gt;
            menu(id, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Zeitgesteuerte Funktionen&lt;br /&gt;
    /*&lt;br /&gt;
        Mit dem timer lassen sich bestimmte Funktionen nach Zeit wiederholen oder einfach beenden.&lt;br /&gt;
        In diesem Fall wird lediglich der timer angehalten und der Listener entfernt.&lt;br /&gt;
    */&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Veraenderungen im LinksetData erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Dieser Event aehnelt zwar dem Changed Event, erkennt jedoch nur 3 Veraendeungen die das LinksetData betreffen.&lt;br /&gt;
        Fuer veraenderungen am LinkSet (Object) selbst ist der changed(integer change) Event erforderlich.&lt;br /&gt;
        In diesem Beispiel wird lediglich geprueft ob ein vorhandener Eintrag veraendert wurde.&lt;br /&gt;
        &lt;br /&gt;
        Pruefen lassen sich zusaetzlich noch: LINKSETDATA_DELETE &amp;amp; LINKSETDATA_RESET&lt;br /&gt;
    */&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if(action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Linkset Data for &amp;quot; + name + &amp;quot; has been successfully updated.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Hallo Welt&lt;br /&gt;
    /*&lt;br /&gt;
        Ja, die Ueberschrift habe ich mit absicht so gewaehlt.&lt;br /&gt;
        Der on_rez Event wird naemlich immer dann ausgeloest, sobald das Object das Licht der Welt erblickt.&lt;br /&gt;
        Dazu gehoeren:&lt;br /&gt;
        ➤ Vom Inventar auf den Boden ziehen.&lt;br /&gt;
        ➤ Inworld kopieren (Kopie ziehen).&lt;br /&gt;
        ➤ Mittels Tools rezzen (Rezzer).&lt;br /&gt;
        ➤ Am Avatar anziehen.&lt;br /&gt;
        ➤ Du traegst es beim Einloggen.&lt;br /&gt;
        &lt;br /&gt;
        Selbstverstaendlich kann man in diesem Event vielseitige Funktionen ausfuehren.&lt;br /&gt;
        Einen Reset sollte man an dieser Stelle jedoch nur dann ausfuehren,&lt;br /&gt;
        wenn keine anderen Funktionen davon abhaengig sind vorherige Aufgaben auszufuehren oder temporaere Variablen bei zu behalt&lt;br /&gt;
    */&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Updater ==&lt;br /&gt;
Bei diesem Beispiel handelt es sich um ein LinksetData Updater. Weil das LinksetData Schluesselnamen basiert ist, kann man diverse Eintraege direkt auswaehlen. Dazu ist es nicht notwendig irgend welche langen listen zu parsen. Wenn dieses Script im Object durchgelaufen ist, wurden die Eintraege fuer &amp;quot;red&amp;quot; &amp;amp; &amp;quot;blue&amp;quot; ignoriert.&lt;br /&gt;
 Auch dieses Script loescht sich selbst nach beendigung.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;68d790ff-5c41-0a98-c9a9-46fcca48e125&amp;quot;, password);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216380</id>
		<title>User:Daemonika Nightfire/Scripts/linkset data example</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216380"/>
		<updated>2024-03-19T17:26:51Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Vorwort */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Grundsaetzlich war ich immer schon dagegen mit Texture Changern die UUIDs ueber einen Channel beispielsweise an ein Kleidungsstueck zu senden. Die abenteuerlichsten Huds werden verbreitet, wo die UUID mal verschluesselt und mal unverschleusselt versendet werden. Das wirkt auf mich halt wie gewollt und nicht gekonnt. Viel besser ist es die UUIDs fuer Texturen im Empfaenger zu speichern. Bisher habe ich dazu immer eine Liste im Empfaenger genutzt und mittels HUD lediglich die Zahl fuer den index uebermittelt. Da muss dann auch nichts mehr entschluesselt werden und spart eine ganze menge Script-Code / Memory. Ein weiterer und wahrscheinlich der essentielle Vorteil des LinksetData ist, dass man das Script resetten kann, ohne das die Daten verloren gehen, weil sie naemlich im Object gespeichert sind.&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Setup ==&lt;br /&gt;
Dieses Beispiel ist nur ein einfaches Hilfsmittel das LinksetData zu fuellen. Bei einigen Experimenten ist uns aufgefallen, das die Eintraege alphabetisch sortiert werden. In dieser Variante wird das LinksetData mit Texturen fuer ein Texture Changer Menue vorbereitet. Mit hilfe der Passwort Variante kann auch niemand ohne dem richtigen Passwort die UUIDs aus dem Linkset auslesen.&lt;br /&gt;
    &lt;br /&gt;
 Nachdem die Schluesselnamen im Chat ausgegeben wurden, entfernt sich das Script selbst aus dem Inhalt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataReset();&lt;br /&gt;
        &lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;red&amp;quot;, &amp;quot;81cc70a7-2d3f-bf21-50b5-ba129cd070c9&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;blue&amp;quot;, &amp;quot;a7faeca8-dcad-2429-75a8-0afd1fd3d983&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;2cb4e61d-9e2e-9c74-c636-62fba90bde57&amp;quot;, password);&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(llDumpList2String(llLinksetDataListKeys(0, -1), &amp;quot; | &amp;quot;));&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Texture Changer ==&lt;br /&gt;
Dieses Script ist das entgueltige Texture Changer Menue Exsample. Die Menue Button tragen die selben Namen wie die Schluesselnamen im LinksetData. Wird nun einer dieser Namen im Menue ausgewaehlt, uebernimmt das Object automatisch den eingetragenen Wert dahinter.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Bedenke das ein einfacher Dialog nur 12 Button auf einmal anzeigen kann.&lt;br /&gt;
// Alternativ kann man auch einen HUD erstellen, womit dann dien Namen der einzelnen Button (links) gesendet werden.&lt;br /&gt;
list menu_buttons = [&amp;quot;red&amp;quot;,&amp;quot;green&amp;quot;,&amp;quot;blue&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Dynamischer menue Channel&lt;br /&gt;
/*&lt;br /&gt;
    In dieser globalen funktion wird bei jedem oeffnen des Menues der aktuelle Channel geloescht und ein neuer zufaelliger Channel erzeugt.&lt;br /&gt;
    Am Ende wird der Timer gestartet, der nach Ablauf den timer beendet und den Channel loescht.&lt;br /&gt;
*/&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    &lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Script-Anfang&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    // Aufrufen/setzen der Werkseinstellung&lt;br /&gt;
    /*&lt;br /&gt;
        Der folgende Event wird nur dann ausgefuehrt, wenn das Script gespeichert oder resettet wird.&lt;br /&gt;
        Im aktuellen Beispiel ist mir nichts besonderes eingefallen was ich da nutzen kann.&lt;br /&gt;
    */&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;bla bla bla bla&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // klicken erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Als erstes wird geprueft, wer das object klickt.&lt;br /&gt;
        Jetzt wo der Agent bekannt ist oeffnet sich fuer ihn das einfache menue.&lt;br /&gt;
    */&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        menu(agent, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Kommunikation im Chat/Channel&lt;br /&gt;
    /*&lt;br /&gt;
        Grundsaetzlich empfaengt der listen Event alles was im Chat / Channel gesendet wird.&lt;br /&gt;
        Wenn es nicht schon im Befehl llListen(... vorgesehen ist, muss man hier filtern.&lt;br /&gt;
        &lt;br /&gt;
        Das aktuelle Beispiel filtert nur die Button aus dem menue heraus und nutztdiese Message um den Schluesselnamen im LinksetData zu finden.&lt;br /&gt;
        Wird ein Schluesselname gefunden, verwendet der befehl llSetLinkPrimitiveParamsFast(... dessen Wert um die Textur zu veraendern.&lt;br /&gt;
        &lt;br /&gt;
        ImAnschluss wird das Menue ganz einfach wieder geoeffnet.&lt;br /&gt;
    */&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if(~llListFindList(menu_buttons, [message]))&lt;br /&gt;
        {&lt;br /&gt;
            llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_TEXTURE, ALL_SIDES, llLinksetDataReadProtected(message, password), &amp;lt;1,1,0&amp;gt;, &amp;lt;0,0,0&amp;gt;, 0.0]);&lt;br /&gt;
            &lt;br /&gt;
            menu(id, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Zeitgesteuerte Funktionen&lt;br /&gt;
    /*&lt;br /&gt;
        Mit dem timer lassen sich bestimmte Funktionen nach Zeit wiederholen oder einfach beenden.&lt;br /&gt;
        In diesem Fall wird lediglich der timer angehalten und der Listener entfernt.&lt;br /&gt;
    */&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Veraenderungen im LinksetData erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Dieser Event aehnelt zwar dem Changed Event, erkennt jedoch nur 3 Veraendeungen die das LinksetData betreffen.&lt;br /&gt;
        Fuer veraenderungen am LinkSet (Object) selbst ist der changed(integer change) Event erforderlich.&lt;br /&gt;
        In diesem Beispiel wird lediglich geprueft ob ein vorhandener Eintrag veraendert wurde.&lt;br /&gt;
        &lt;br /&gt;
        Pruefen lassen sich zusaetzlich noch: LINKSETDATA_DELETE &amp;amp; LINKSETDATA_RESET&lt;br /&gt;
    */&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if(action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Linkset Data for &amp;quot; + name + &amp;quot; has been successfully updated.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Hallo Welt&lt;br /&gt;
    /*&lt;br /&gt;
        Ja, die Ueberschrift habe ich mit absicht so gewaehlt.&lt;br /&gt;
        Der on_rez Event wird naemlich immer dann ausgeloest, sobald das Object das Licht der Welt erblickt.&lt;br /&gt;
        Dazu gehoeren:&lt;br /&gt;
        ➤ Vom Inventar auf den Boden ziehen.&lt;br /&gt;
        ➤ Inworld kopieren (Kopie ziehen).&lt;br /&gt;
        ➤ Mittels Tools rezzen (Rezzer).&lt;br /&gt;
        ➤ Am Avatar anziehen.&lt;br /&gt;
        ➤ Du traegst es beim Einloggen.&lt;br /&gt;
        &lt;br /&gt;
        Selbstverstaendlich kann man in diesem Event vielseitige Funktionen ausfuehren.&lt;br /&gt;
        Einen Reset sollte man an dieser Stelle jedoch nur dann ausfuehren,&lt;br /&gt;
        wenn keine anderen Funktionen davon abhaengig sind vorherige Aufgaben auszufuehren oder temporaere Variablen bei zu behalt&lt;br /&gt;
    */&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Updater ==&lt;br /&gt;
Bei diesem Beispiel handelt es sich um ein LinksetData Updater. Weil das LinksetData Schluesselnamen basiert ist, kann man diverse Eintraege direkt auswaehlen. Dazu ist es nicht notwendig irgend welche langen listen zu parsen. Wenn dieses Script im Object durchgelaufen ist, wurden die Eintraege fuer &amp;quot;red&amp;quot; &amp;amp; &amp;quot;blue&amp;quot; ignoriert.&lt;br /&gt;
 Auch dieses Script loescht sich selbst nach beendigung.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;68d790ff-5c41-0a98-c9a9-46fcca48e125&amp;quot;, password);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216379</id>
		<title>User:Daemonika Nightfire/Scripts/linkset data example</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Daemonika_Nightfire/Scripts/linkset_data_example&amp;diff=1216379"/>
		<updated>2024-03-19T17:24:41Z</updated>

		<summary type="html">&lt;p&gt;Daemonika Nightfire: /* Vorwort */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vorwort ==&lt;br /&gt;
&lt;br /&gt;
Grundsaetzlich war ich immer schon dagegen mit Texture Changern die UUIDs ueber einen Channel beispielsweise an ein Kleidungsstueck zu senden. Die abenteuerlichsten Huds werden verbreitet, wo die UUID mal verschluesselt und mal unverschleusselt versendet werden. Das wirkt auf mich halt wie gewollt und nicht gekonnt. Viel besser ist es die UUIDs fuer Texturen im Empfaenger zu speichern. Bisher habe ich dazu immer eine Liste im Empfaenger genutzt und mittels HUD lediglich die Zahl fuer den index uebermittelt. Da muss dann auch nichts mehr entschluesselt werden und spart eine ganze menge Script-Code / Memory&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Setup ==&lt;br /&gt;
Dieses Beispiel ist nur ein einfaches Hilfsmittel das LinksetData zu fuellen. Bei einigen Experimenten ist uns aufgefallen, das die Eintraege alphabetisch sortiert werden. In dieser Variante wird das LinksetData mit Texturen fuer ein Texture Changer Menue vorbereitet. Mit hilfe der Passwort Variante kann auch niemand ohne dem richtigen Passwort die UUIDs aus dem Linkset auslesen.&lt;br /&gt;
    &lt;br /&gt;
 Nachdem die Schluesselnamen im Chat ausgegeben wurden, entfernt sich das Script selbst aus dem Inhalt.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataReset();&lt;br /&gt;
        &lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;red&amp;quot;, &amp;quot;81cc70a7-2d3f-bf21-50b5-ba129cd070c9&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;blue&amp;quot;, &amp;quot;a7faeca8-dcad-2429-75a8-0afd1fd3d983&amp;quot;, password);&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;2cb4e61d-9e2e-9c74-c636-62fba90bde57&amp;quot;, password);&lt;br /&gt;
        &lt;br /&gt;
        llOwnerSay(llDumpList2String(llLinksetDataListKeys(0, -1), &amp;quot; | &amp;quot;));&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Texture Changer ==&lt;br /&gt;
Dieses Script ist das entgueltige Texture Changer Menue Exsample. Die Menue Button tragen die selben Namen wie die Schluesselnamen im LinksetData. Wird nun einer dieser Namen im Menue ausgewaehlt, uebernimmt das Object automatisch den eingetragenen Wert dahinter.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
// Bedenke das ein einfacher Dialog nur 12 Button auf einmal anzeigen kann.&lt;br /&gt;
// Alternativ kann man auch einen HUD erstellen, womit dann dien Namen der einzelnen Button (links) gesendet werden.&lt;br /&gt;
list menu_buttons = [&amp;quot;red&amp;quot;,&amp;quot;green&amp;quot;,&amp;quot;blue&amp;quot;];&lt;br /&gt;
&lt;br /&gt;
// Dynamischer menue Channel&lt;br /&gt;
/*&lt;br /&gt;
    In dieser globalen funktion wird bei jedem oeffnen des Menues der aktuelle Channel geloescht und ein neuer zufaelliger Channel erzeugt.&lt;br /&gt;
    Am Ende wird der Timer gestartet, der nach Ablauf den timer beendet und den Channel loescht.&lt;br /&gt;
*/&lt;br /&gt;
integer menu_handler;&lt;br /&gt;
integer menu_channel;&lt;br /&gt;
menu(key user,string title,list buttons)&lt;br /&gt;
{&lt;br /&gt;
    llListenRemove(menu_handler);&lt;br /&gt;
    &lt;br /&gt;
    menu_channel = (integer)(llFrand(1) * -DEBUG_CHANNEL);&lt;br /&gt;
    menu_handler = llListen(menu_channel,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
    llDialog(user, title, buttons, menu_channel);&lt;br /&gt;
    &lt;br /&gt;
    llSetTimerEvent(30);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// Script-Anfang&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    // Aufrufen/setzen der Werkseinstellung&lt;br /&gt;
    /*&lt;br /&gt;
        Der folgende Event wird nur dann ausgefuehrt, wenn das Script gespeichert oder resettet wird.&lt;br /&gt;
        Im aktuellen Beispiel ist mir nichts besonderes eingefallen was ich da nutzen kann.&lt;br /&gt;
    */&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llSay(0, &amp;quot;bla bla bla bla&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // klicken erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Als erstes wird geprueft, wer das object klickt.&lt;br /&gt;
        Jetzt wo der Agent bekannt ist oeffnet sich fuer ihn das einfache menue.&lt;br /&gt;
    */&lt;br /&gt;
    touch_start(integer total_number)&lt;br /&gt;
    {&lt;br /&gt;
        key agent = llDetectedKey(0);&lt;br /&gt;
        menu(agent, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Kommunikation im Chat/Channel&lt;br /&gt;
    /*&lt;br /&gt;
        Grundsaetzlich empfaengt der listen Event alles was im Chat / Channel gesendet wird.&lt;br /&gt;
        Wenn es nicht schon im Befehl llListen(... vorgesehen ist, muss man hier filtern.&lt;br /&gt;
        &lt;br /&gt;
        Das aktuelle Beispiel filtert nur die Button aus dem menue heraus und nutztdiese Message um den Schluesselnamen im LinksetData zu finden.&lt;br /&gt;
        Wird ein Schluesselname gefunden, verwendet der befehl llSetLinkPrimitiveParamsFast(... dessen Wert um die Textur zu veraendern.&lt;br /&gt;
        &lt;br /&gt;
        ImAnschluss wird das Menue ganz einfach wieder geoeffnet.&lt;br /&gt;
    */&lt;br /&gt;
    listen(integer channel, string name, key id, string message)&lt;br /&gt;
    {&lt;br /&gt;
        if(~llListFindList(menu_buttons, [message]))&lt;br /&gt;
        {&lt;br /&gt;
            llSetLinkPrimitiveParamsFast(LINK_THIS, [PRIM_TEXTURE, ALL_SIDES, llLinksetDataReadProtected(message, password), &amp;lt;1,1,0&amp;gt;, &amp;lt;0,0,0&amp;gt;, 0.0]);&lt;br /&gt;
            &lt;br /&gt;
            menu(id, &amp;quot;Bla bla bla bla.&amp;quot;, menu_buttons);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Zeitgesteuerte Funktionen&lt;br /&gt;
    /*&lt;br /&gt;
        Mit dem timer lassen sich bestimmte Funktionen nach Zeit wiederholen oder einfach beenden.&lt;br /&gt;
        In diesem Fall wird lediglich der timer angehalten und der Listener entfernt.&lt;br /&gt;
    */&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        llSetTimerEvent(0.0);&lt;br /&gt;
        llListenRemove(menu_handler);&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Veraenderungen im LinksetData erkennen&lt;br /&gt;
    /*&lt;br /&gt;
        Dieser Event aehnelt zwar dem Changed Event, erkennt jedoch nur 3 Veraendeungen die das LinksetData betreffen.&lt;br /&gt;
        Fuer veraenderungen am LinkSet (Object) selbst ist der changed(integer change) Event erforderlich.&lt;br /&gt;
        In diesem Beispiel wird lediglich geprueft ob ein vorhandener Eintrag veraendert wurde.&lt;br /&gt;
        &lt;br /&gt;
        Pruefen lassen sich zusaetzlich noch: LINKSETDATA_DELETE &amp;amp; LINKSETDATA_RESET&lt;br /&gt;
    */&lt;br /&gt;
    linkset_data(integer action, string name, string value)&lt;br /&gt;
    {&lt;br /&gt;
        if(action == LINKSETDATA_UPDATE)&lt;br /&gt;
        {&lt;br /&gt;
            llOwnerSay(&amp;quot;Linkset Data for &amp;quot; + name + &amp;quot; has been successfully updated.&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    // Hallo Welt&lt;br /&gt;
    /*&lt;br /&gt;
        Ja, die Ueberschrift habe ich mit absicht so gewaehlt.&lt;br /&gt;
        Der on_rez Event wird naemlich immer dann ausgeloest, sobald das Object das Licht der Welt erblickt.&lt;br /&gt;
        Dazu gehoeren:&lt;br /&gt;
        ➤ Vom Inventar auf den Boden ziehen.&lt;br /&gt;
        ➤ Inworld kopieren (Kopie ziehen).&lt;br /&gt;
        ➤ Mittels Tools rezzen (Rezzer).&lt;br /&gt;
        ➤ Am Avatar anziehen.&lt;br /&gt;
        ➤ Du traegst es beim Einloggen.&lt;br /&gt;
        &lt;br /&gt;
        Selbstverstaendlich kann man in diesem Event vielseitige Funktionen ausfuehren.&lt;br /&gt;
        Einen Reset sollte man an dieser Stelle jedoch nur dann ausfuehren,&lt;br /&gt;
        wenn keine anderen Funktionen davon abhaengig sind vorherige Aufgaben auszufuehren oder temporaere Variablen bei zu behalt&lt;br /&gt;
    */&lt;br /&gt;
    on_rez(integer Dae)&lt;br /&gt;
    {&lt;br /&gt;
        llResetScript();&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== llLinksetData Updater ==&lt;br /&gt;
Bei diesem Beispiel handelt es sich um ein LinksetData Updater. Weil das LinksetData Schluesselnamen basiert ist, kann man diverse Eintraege direkt auswaehlen. Dazu ist es nicht notwendig irgend welche langen listen zu parsen. Wenn dieses Script im Object durchgelaufen ist, wurden die Eintraege fuer &amp;quot;red&amp;quot; &amp;amp; &amp;quot;blue&amp;quot; ignoriert.&lt;br /&gt;
 Auch dieses Script loescht sich selbst nach beendigung.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;lsl2&amp;quot;&amp;gt;&lt;br /&gt;
string password = &amp;quot;n3H49sd&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llLinksetDataWriteProtected(&amp;quot;green&amp;quot;, &amp;quot;68d790ff-5c41-0a98-c9a9-46fcca48e125&amp;quot;, password);&lt;br /&gt;
        llRemoveInventory(llGetScriptName());&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daemonika Nightfire</name></author>
	</entry>
</feed>