SCRIPTKURS TEIL 7

huhu ihr suessen,

tut mir leid das ich schon wieder so spaet dran bin.

Zu aller erst moecht ich mich bei Wolwaner bedanken, dafuer das er die tollen Kommentare ins Script eingefuegt hat, welches ich euch natuerlich nicht vorenthalten moechte.

Im folgenden Script ist es notwendig, die Button der einzelnen Funktionen entsprechend der kategorie alle gleich zu benennen, mit ausnahme der Zahl direkt hinter dem Namen.
Zum beispiel heissen hier die Button wiefolgt.

  • Stoffe 0 , Stoffe 1 , Stoffe 2 , Stoffe 3 und Stoffe 4
  • Metalle 0 , Metalle 1 und Metalle 2
  • Werbung
  • anbehmen
Sender / Hud

key Owner; // definieren der variablen für den UUID des Owners
integer ObjectChannel = -3456451; // über diesne Kanal kommunizieren die Scripte untereinander
string URL = "https://marketplace.secondlife.com/de-DE/stores/30293"; // diese URL wird im Browser geöffnet

default // default state - da startet alles
{
    state_entry() // wenn das script in diesen state kommt, wird das mal ausgeführt
    {
        Owner = llGetOwner(); // wir füllen die Varable Owner mit der UUID des Owners
        if(llGetAttached() != 0) // wir fragen ab, ob der HUD an einem Attachpunkt hängt. 0=gerezzt
        {
            llRequestPermissions(Owner, PERMISSION_ATTACH ); // Abfrage, ob wir Attach/Detach ausführen dürfen.
        }
    }
    
    run_time_permissions(integer perm) // hier kommen wir auf Grund des permission requests
    {
        if(perm & PERMISSION_ATTACH) // wenn die permission (Erlaubnis) erteilt wurde - im Fall von Attach wird das automatisch gegeben.
        {
            llOwnerSay("Betriebsbereit..."); // verständigen wir mal den Owner
        }
    }

    touch_start(integer total_number) // jemand drückte auf die Maustaste (Touch) und dann läufts hier weiter
    {
        integer LinkNumber = llDetectedLinkNumber(0); // die Link Nummer des berühten Objektes im Linkset
        string LinkName = llGetLinkName(LinkNumber); // der Name des berührten Objektes - auch wenn sich bei einem re-link die Nummern ändern, bleibt der Objektname erhalten.
        
        list ParsedName = llParseString2List(LinkName, [" "], []); // Wir nehmen mal an, dass "Stoffe 2" gewählt wurde und zerlegen das in eine Liste, also ["Stoffe", "2"]
        string Name = llList2String(ParsedName, 0); // und jetzt nehmen wir nur den Namen - "Stoffe"
        // string Number = llList2String(ParsedName, 1);
        
        if(Name == "Stoffe") // oder if(Name == "Stoffe" || Name == "Metalle")
        {
            llSay(ObjectChannel, LinkName); // wenn's Stoffe sind, senden wir "Stoffe 2" weiter in den Channel - den ören alle, die ein Listen für diesen channel aufgesetzt haben
        }
        else if(Name == "Metalle") // ebenso mit den Metallen
        {
            llSay(ObjectChannel, LinkName); // auch weiterschicken
        }
        else if(Name == "Werbung") // wenn's der Werbeknopf war, öffnen wir die gewünschte URL im Browser
        {
            llLoadURL(Owner, "Marketplace", URL); // die URL wird am Anfang definiert - das ist besser für die Wartung
        }
        else if(Name == "abnehmen") // wenn wer auf den schließen Knopf gedrückt hat
        {
            if(llGetAttached() != 0) // zuerst mal sicher stellen, dass wir am avatar hängen
            {
                llDetachFromAvatar(); // und dann abnehmen.
            }
        }
    }
    
    attach(key AvatarID) // hierher kommen wir, wenn der HUD angezogen wird
    {
        if(AvatarID != Owner) // wenn der Avatar nicht auch Owner ist
        {
            llResetScript(); // resetten wir mal das script
        }
    }
    
    on_rez(integer Dae) // wenn jemand den HUD rezzt
    {
        llResetScript(); // machen wir auch ein reset für die Grundstellung
    }
}
 
 
 
 Empfaenger / Kleidungsstueck
 
 
key Owner; // definieren der variablen für den UUID des Owners
integer ObjectChannel = -3456451; // über diesne Kanal kommunizieren die Scripte untereinander (muss mit dem HUD übereinstimmen)

// Globale variable - auf die kann von überall zugegriffen werden
list StoffTexturen = ["ccf5029d-5133-c17c-90a2-d88a1200d36b",  // Stoff Rot
                      "f6bd619d-aa54-bbaa-dcf5-456e03204071",  // Stoff kleine Maedchen_Farbe
                      "2b9a2897-1ae4-ea2e-5503-ef44fd624477",  // Stoff Blau
                      "e521c76c-5aaa-d726-b640-87e5af0e0bc6",  // Stoff Gruen
                      "131adb45-737a-6257-0142-bf0965588901"]; // Stoff Gelb

list MetallTexturen = ["3d9a54e2-2080-0f8d-b388-b3abcb04f7e3",  // Metall Gold
                       "9e63d7a9-4fce-8c45-03f3-a5eab99c827f",  // Metall Silber
                       "adf02c18-f5ab-2177-dcc5-f7559f4efe9b"]; // Metall Cupfer

default
{
    state_entry()
    {
        Owner = llGetOwner();
        llListen(ObjectChannel, "", "", ""); // wir horchen auf den oben definierten Kanal
    }

    listen(integer channel, string name, key id, string message) // wenn irgendjemand (id) am channel (channel) die Nachricht (message) sendet, hören wir das hier (in unserem Beispiel "Stoffe 2" - wie im HUD definiert
    {
        if(llGetOwnerKey(id) == Owner) // wir wollen nur die Nachrichten vom Owner haben - hören tun wir alle! Den UUID vom Sender bekommen wir in der variablen id
        {
            list ParsedMessage = llParseString2List(message, [" "], []); // Wir zerlegen die Nachricht wieder in die Teile
            string cmd = llList2String(ParsedMessage, 0); // "Stoffe"
            integer num = llList2Integer(ParsedMessage, 1); // 2
            
            if(cmd == "Stoffe") // wenns die Stoffe sind
            {
                llSetLinkTexture(LINK_THIS, llList2String(StoffTexturen, (integer)num), 3); // zeigen wir die ausgewählte Textur Nr. 2 auf der Fläche (Face) 3 an. AUFPASSEN: Listen fangen bei 0 an zu zählen
            }
            else if(cmd == "Metalle") // genauso für Metalle, aber auf der Fläche (Face) 1
            {
                llSetLinkTexture(LINK_THIS, llList2String(MetallTexturen, (integer)num), 1);
            }
        }
    }
    
    attach(key id) // kennen wir schon vom HUD
    {
        if(id != Owner)
        {
            llResetScript();
        }
    }
    
    on_rez(integer Dae)
    {
        llResetScript();
    }
} 




Das aktuelle Beispiel findet ihr auch noch Inworld in der Script Schule fullperm & free to copy.

Ich muss sagen, das Script war schon sehr aufwendig und eigentlich nicht mehr Anfaenger Kurs, doch es freut mich sehr, das es doch verstanden wurde.

Fuer den naechsten Kurs schalten wir wieder einen gang zurueck und witmen uns etwas einfacherem.
Auf allgemeinen Wunsch befassen wir uns mit Message Linked. Das bedeutet Kommunikation zwischen Scripten innerhalb eines Linksets oder eines Links.

Der naechste Kurs findet morgen den 24.6.2018 um 20 uhr wieder auf Bay of Surreality statt.

LG
Dae




Kommentare