User:Daemonika Nightfire/Scripts/Liste

From Second Life Wiki
Jump to navigation Jump to search
Under Construction...

Einfache Beispiele fuer die Verarbeitung von Listen

Du wirst bemerken, das alle Beispiele eine Owner Abfrage besitzen und das Object umbenennen. Das dient dem zweck die Beispiele Inworld moeglichst unkompliziert zu unterscheiden und zu erkennen wem das entsprechende Object gehoert.

Im ersten Beispiel sehen wir welche Art Variablen wir in einer Liste eintragen und verarbeiten koennen.
Dabei wird dir auffallen, das eine Variable Fehlt.
Wir koennen zwar Listen zu einer Liste hinzufuegen, jedoch nur die Inhalte und nicht die Liste selbst als ganzes.
List Contents
key owner;

list everything = [
                    "text",                                 // string   (Text)
                    1,                                      // integer  (Ganzzahl)
                    1.0,                                    // float    (Kommazahl)
                    <1.00000,1.00000,1.00000>,              // vector   (Koordinate, Farbe, Offset)
                    <0.00000, 0.00000, 0.00000, 1.00000>,   // rotation (Quaternion)
                    "61ee201a-81cf-4322-b9a8-a5eb8da777c2"  // key      (UUID)
                  ];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 01 " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        // Die Nummerierung am Ende der einzelnen Zeilen entspricht dem Index (Stellenwert) in der Liste.
        string Text = llList2String(everything, 0);
        integer Ganzzahl = llList2Integer(everything, 1);
        float Kommazahl = llList2Float(everything, 2);
        vector KFO = llList2Vector(everything, 3);
        rotation Q = llList2Rot(everything, 4);
        key UUID = llList2Key(everything, 5);
        
        llSay(0, "\nText = " + Text +
                 "\nGanzzahl = " + (string)Ganzzahl +
                 "\nKommazahl = " + (string)Kommazahl +
                 "\nKoordinate = " + (string)KFO +
                 "\nQuaternion = " + (string)Q +
                 "\nUUID = " + (string)UUID);
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}

Index (Stellenwert)

Bei folgenden Beispielen gehen wir darauf ein, ganze listen oder bestimmte Bereiche einer Liste abzufragen. Fuer die Ausgabe verwenden wir wie gehabt den lokalen Chat. Dabei muessen wir uns merken, das der Index in Listen grundsaetzlich bei 0 (null) beginnt.

llDumpList2String( list Source, string Separator );
/*
    Dieses Beispiel verdeutlicht wie leicht eine ganze Liste mit individuellen Trennzeichen ausgegeben wird.
    Es wird kein spezieller Index festgelegt, sondern die gesamte Liste ausgegeben.
*/

key owner;

list numbers = ["null", "eins", "zwei", "drei", "vier"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 02 " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, llDumpList2String(numbers, " | ")); // als Seperator (Trennzeichen) kann zwischen den Gaensefuessen alles verwendet werden.
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
Index ermitteln Index ermitteln & Bereich festlegen
/*
    In diesem Beispiel verwenden wir llListFindList,
    um den Index eines bestimmten Eintrags in der Liste zu finden.
    Anschliessend lassen wir mittels llList2String den Eintrag des Stellenwertes ausgeben.
*/

key owner;

list numbers = ["null", "eins", "zwei", "drei", "vier"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 02b " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        integer index = llListFindList(numbers, ["zwei"]);
        if(index != -1)
        {
            string output = llList2String(numbers, index);
            
            llSay(0,"mein index = " + (string)index +  " | meine Variable = " + output);
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
/*
    In diesem Beispiel verwenden wir llListFindList,
    um den Index eines bestimmten Eintrags in der Liste zu finden.
    Anschliessend nutzen wir llList2List,
    um einen bestimmten Bereich fuer die Ausgabe mit Hilfe des Index zu selektieren.
*/

key owner;

list numbers = ["null", "eins", "zwei", "drei", "vier"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 02c " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        integer index = llListFindList(numbers, ["zwei"]);
        if(index != -1)
        {
            list output = llList2List(numbers, index, index + 1);
            // index entspricht dem Stellenwert des Eintrages
            
            llSay(0,"index start " + (string)index + " index end " + (string)(index+1) +
            "\n" +  llDumpList2String(output, ","));
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}

Listen Manipulation

Listen-Inhalt zur bestehenden Liste hinzufuegen Bestimmten Inhalt einer Liste loeschen
key owner;

list numbers = [1, "eins", 2, "zwei", 3, "drei"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 03 " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, "vorher: " + llDumpList2String(numbers, ", "));
        
        integer index = llListFindList(numbers, ["zwei"]);
        if(index != -1)
        {
            numbers = llListInsertList(numbers, [1.5, "eineinhalb"], index-1);
            llSay(0, "nachher: " + llDumpList2String(numbers, ", "));
        }
        numbers = [1, "eins", 2, "zwei", 3, "drei"];
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
key owner;

list numbers = [1, "eins", 2, "zwei", 3, "drei"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 03b " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, "vorher: " + llDumpList2String(numbers, ", "));
        
        integer index = llListFindList(numbers, [2]);
        if(index != -1)
        {
            //numbers = llDeleteSubList(numbers, 2, 3);
            numbers = llDeleteSubList(numbers, index, index+1);
            llSay(0, "nachher: " + llDumpList2String(numbers, ", "));
        }
        numbers = [1, "eins", 2, "zwei", 3, "drei"];
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
Bestimmten Bereich einer Liste ersetzen Liste sortieren
key owner;

list numbers = [1, "eins", 2, "zwei", 3, "drei", 4, "vier", 5, "fuenf"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 03c " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, "vorher: " + llDumpList2String(numbers, ", "));
        
        numbers = llListReplaceList(numbers, ["z", "zett"], 2, 3); 
        
        llSay(0, "nachher: " + llDumpList2String(numbers, ", "));
        
        numbers = [1, "eins", 2, "zwei", 3, "drei", 4, "vier", 5, "fuenf"];
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
key owner;

list numbers = [2, "eins", 3, "zwei", 1, "drei"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 03d " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, "vorher: " + llDumpList2String(numbers, ", "));
        
        numbers = llListSort(numbers, 2, TRUE);
        
        llSay(0, "nachher: " + llDumpList2String(numbers, ", "));
        
        numbers = [2, "eins", 3, "zwei", 1, "drei"];
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
Liste mischen coming soon
key owner;

list numbers = [1, "eins", 2, "zwei", 3, "drei"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 03e " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        llSay(0, "vorher: " + llDumpList2String(numbers, ", "));
        
        numbers = llListRandomize(numbers, 2);
        
        llSay(0, "nachher: " + llDumpList2String(numbers, ", "));
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}

Verschiedenes

string zur list konvertieren Listen-Eintraege zaehlen
/*
    In diesem Beispiel konvertieren wir einen string zu einer Liste.
    Jeder seperator im string erzeugt in der liste einen neuen Eintrag.
*/

key owner;

string numbers = "1,2,3,4,5,6";

default
{
    state_entry()
    {
        llSay(0, numbers);
        owner = llGetOwner();
        llSetObjectName("Liste 04 " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        list my_list = llParseString2List(numbers,[","],[]); // seperator = "," (Komma)
        
        llSay(0, llDumpList2String(my_list," "));
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
/*
    Einfaches Beispiel die anzahl Eintraege einer Liste zu ermitteln.
*/

key owner;

list numbers = [1, "eins", 2, "zwei", 3, "drei"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 04b " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        integer length = llGetListLength(numbers);
        llSay(0, "Anzahl Eintraege: " + (string)length);
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
Schrittweise ueberspringen Eintraege pruefen
/*
    Die aktuelle Einstellung gibt jeden zweiten Eintrag aus der Liste zurueck.
*/

key owner;

list letters = ["a","b","c","d","e","f","g","h","i","x"];

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 04c " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        list strided = llList2ListStrided(letters, 0, -1, 2);
        llSay(0, llDumpList2String(strided,"-"));
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
/*
    Pruefen ob ein bestimmter Eintrag ueberhaupt gelistet ist.
*/

key owner;

list UUIDs = ["61ee201a-81cf-4322-b9a8-a5eb8da777c2"]; // Daemonika Nightfire

default
{
    state_entry()
    {
        owner = llGetOwner();
        llSetObjectName("Liste 04d " + llKey2Name(owner));
    }

    touch_start(integer total_number)
    {
        key user = llDetectedKey(0);
        if(~llListFindList(UUIDs, llCSV2List(user)))
        {
            llSay(0, "key vorhanden");
        }
        else
        {
            llSay(0, "key fehlt");
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
Under Construction...