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 und 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
// 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 02b " + 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();
    }
}
Under Construction...