Difference between revisions of "User:Daemonika Nightfire/Scripts/DynamischesLinkset"

From Second Life Wiki
Jump to navigation Jump to search
m (bla bla)
m (bla bla again)
Line 1: Line 1:
Jeder der ein LINK_SET scripten moechte kennt die Problematik mit den Linknummern. Je nach Verwendungszweck muessen die Linknummern in die Befehle direkt eintragen, oder die Reihenfolge beim verlinken von Prims beachten, um eine einwandfreie Funktionalitaet zu gewaerleisten. Mit den nachfolgenden Beispielen ist das alles nicht noetig. Wir verwenden einfach die individuellen Namen der einzelnen Links im LINK_SET und das Script sucht sich die Nummern selbst heraus.
Jeder der ein LINK_SET scripten moechte kennt die Problematik mit den Linknummern. Je nach Verwendungszweck muessen die Linknummern in die Befehle direkt eintragen, oder die Reihenfolge beim verlinken von Prims beachtet werden, um eine einwandfreie Funktionalitaet zu gewaerleisten. Mit den nachfolgenden Beispielen ist das alles nicht noetig. Wir verwenden einfach die individuellen Namen der einzelnen Links im LINK_SET und das Script sucht sich die Nummern selbst heraus.


Dieses Beispiel aendert alle Links im Linkset die den selben Namen tragen. Hierbei geht die Schleife jede Linknummer einzeln durch und fragt nach dem Namen. Stimmt dieser ueberein, wird die entsprechende Funktion ausgefuehrt.
Dieses Beispiel aendert alle Links im Linkset die den selben Namen tragen. Hierbei geht die Schleife jede Linknummer einzeln durch und fragt nach dem Namen. Stimmt dieser ueberein, wird die entsprechende Funktion ausgefuehrt.
Line 34: Line 34:
</source>
</source>


Text
 
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.


<source lang="lsl2">
<source lang="lsl2">

Revision as of 07:52, 7 October 2021

Jeder der ein LINK_SET scripten moechte kennt die Problematik mit den Linknummern. Je nach Verwendungszweck muessen die Linknummern in die Befehle direkt eintragen, oder die Reihenfolge beim verlinken von Prims beachtet werden, um eine einwandfreie Funktionalitaet zu gewaerleisten. Mit den nachfolgenden Beispielen ist das alles nicht noetig. Wir verwenden einfach die individuellen Namen der einzelnen Links im LINK_SET und das Script sucht sich die Nummern selbst heraus.

Dieses Beispiel aendert alle Links im Linkset die den selben Namen tragen. Hierbei geht die Schleife jede Linknummer einzeln durch und fragt nach dem Namen. Stimmt dieser ueberein, wird die entsprechende Funktion ausgefuehrt.

default
{
    state_entry()
    {
        llSetLinkColor(LINK_SET, <1,1,1>, ALL_SIDES);
    }
    
    touch_start(integer num)
    {
        integer link_set = llGetNumberOfPrims();
        integer i = 0;
        do
        {
            string link_name = llGetLinkName(i);
            
            if(link_name == "Prim_Name")
            {
                llSetLinkColor(i, <1,0,0>, ALL_SIDES);
            }
        }
        while(++i <= link_set);
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}


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.

integer link_01;
integer link_02;
integer link_03;

GetLinks()
{
    integer link_set = llGetNumberOfPrims();
    integer i = 0;
    do
    {
        string link_name = llGetLinkName(i);
        
        if(link_name == "Prim_Name")
        {
            link_01 = i;
        }
        if(link_name == "Sculptie_Name")
        {
            link_02 = i;
        }
        if(link_name == "Mesh_Name")
        {
            link_03 = i;
        }
    }
    while(++i <= link_set);
}

default
{
    state_entry()
    {
        llSetLinkColor(LINK_SET, <1,1,1>, ALL_SIDES);
        GetLinks();
    }
    
    touch_start(integer num)
    {
        llSetLinkColor(link_01, <1,0,0>, ALL_SIDES);
        llSetLinkColor(link_02, <0,1,0>, ALL_SIDES);
        llSetLinkColor(link_03, <0,0,1>, ALL_SIDES);
    }
    
    changed(integer ch)
    {
        if(ch & CHANGED_LINK)
        {
            GetLinks();
        }
    }
    
    on_rez(integer Dae)
    {
        // llResetScript();
        // oder
        GetLinks();
    }
}