1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen
  2. Bitte schaltet eure Ad Blocker aus. SLinfo kann nur betrieben werden, wenn es durch Werbung Einnahmen erzielt. Vielen Dank!!
    Information ausblenden
  3. Wir freuen uns, wenn du dich in unserem Forum anmeldest. Bitte beachte, dass die Freigabe per Hand durchgeführt wird (Schutz vor Spammer). Damit kann die Freigabe bis zu 24 Stunden dauern.
    Information ausblenden

Bitte, ueberdenkt eure Giver-Scripte

Dieses Thema im Forum "Scripting" wurde erstellt von Daemonika Nightfire, 8. Oktober 2017.

  1. Daemonika Nightfire

    Daemonika Nightfire Forumsgott/göttin

    Beiträge:
    7.233
    Zustimmungen:
    174
    Punkte für Erfolge:
    63
    huhu,

    so schwer kann das doch nicht sein.
    Es gibt mehrere moeglichkeiten, gewisse Items aus dem Inhalt einer Box oder aehnlichem nicht mit zu uebergeben. Staendig muss ich Muell aus meinem Inventar aus den einzelnen ordnern heraus suchen und loeschen.

    14 jahre SL und immer noch werden Stein alte Freebie Funktionen, oder nicht durchdachte giver verwendet.
    Diese Inventar Vermuellung geht mir echt langsam auf die nerven, man kann ja gar nicht mehr ordentlich Shoppen, ohne gleich zur Muelltonne rennen zu muessen.

    Darum hier ein beispiel, wie man Scripte nicht ins Inventar schickt.
    Code:
    key owner;
    
    list inventory = [];
    string name;
    integer num;
    
    default
    {
        state_entry()
        {
            // Speichert den Besitzer-Key (UUID)
            owner = llGetOwner();
           
            num = llGetInventoryNumber(INVENTORY_ALL);
            integer     i;
            // ab hier wird das komplette Inventar des Objects ausgelesen
            for(i = 0; i < num; ++i)
            {
                // liesst die Inventar-Namen aus
                name = llGetInventoryName(INVENTORY_ALL, i);
                // Diese Funktion, sorgt dafuer, das das Script nicht zur Liste hinzu gefuegt wird
                if(name != llGetScriptName())
                {
                    // fuegt die ausgelesenen Inventar-Namen in die Liste ein.
                    inventory += name;
                }
            }
        }
       
        touch_start(integer total_number)
        {
            // reagiert nur, wenn der Besitzer klickt
            if(llDetectedKey(0) == owner)
            {
                if(llGetListLength(inventory) < 1)
                {
                    // bloed wenn die Box leer ist ;)
                    llWhisper(0,"No items to offer.");
                }
                else
                {
                    // gibt den gelisteten Inhalt aus (es dauert 3 secunden, bis das Script hier nach wieder reagiert)
                    llGiveInventoryList(owner, llGetObjectName(), inventory);
                }
            }
        }
       
        changed(integer change)
        {
            // Hinweis:
            // CHANGED_OWNER wird nicht ausgeloest bei Objecten die im Inventar uebergeben werden.
            if(change & CHANGED_OWNER)
            {
                // resettet das Script, sobald der Besitzer wechselt
                llResetScript();
            }
           
            // Ein Reset bei CHANGED_INVENTORY ist in Verbindung mit (no copy) Items nicht zu empfehlen.
            //if(change & CHANGED_INVENTORY)
            //{
                // resettet das Script, sobald sich der Inhalt des Objects aendert
                //llResetScript();
            //}
        }
       
        on_rez(integer Dae)
        {
            // resettet das Script, sobald es auf dem Boden gerezzt wird
            llResetScript();
        }
    }

    Hier ein Schnipsel, wie man zugleich die Animation einer Einkaufstuete in der Tuete laesst.
    Code:
    key owner;
    string anim = "*DS* Shopping Bag anim.";
    
    list inventory = [];
    string name;
    integer num;
     
    default
    {
        state_entry()
        {
            owner = llGetOwner();
            num = llGetInventoryNumber(INVENTORY_ALL);
            integer i;
            for(i = 0; i < num; ++i)
            {
                name = llGetInventoryName(INVENTORY_ALL, i);
                if(name != llGetScriptName())
                {
                    if(name != anim)
                    {
                        inventory += name;
                    }
                }
            }
        }

    Zu diesem Zweck habe ich vor Jahren schon ein Tutorial in der Wiki veroeffentlicht.
    http://wiki.secondlife.com/wiki/User:Daemonika_Nightfire/Scripts/Giver_Tutorial
    LG
    Dae
     
    Zuletzt bearbeitet: 8. Oktober 2017
  2. Niani Resident

    Niani Resident Freund/in des Forums

    Beiträge:
    678
    Zustimmungen:
    1.140
    Punkte für Erfolge:
    104
    Also, was das Scripten betrifft, bin ich ein echter Noob und ich frage mich, warum das erste Script das Inventar "vermüllt" bzw. was das für Auswirkungen hat.
    Für mich als absoluter Script-Laie kann ich nur erkennen, dass das zweite Script kürzer ist.
     
  3. June Trenkins

    June Trenkins SLinfo-Freebiehunter

    Beiträge:
    1.945
    Zustimmungen:
    2.159
    Punkte für Erfolge:
    139
    10 Jahre Sl und ich kann gerade mal Farbe und Texte ändern in Skripten.
    Du erwartest zuviel, Daemonika. :D

    Ich nehm meist die Skripte, die ich im Inventar finde und ja, die sind meist grottenalt. :/
     
    Uli Jansma gefällt das.
  4. Nelly Yumako

    Nelly Yumako Superstar

    Beiträge:
    1.354
    Zustimmungen:
    1.085
    Punkte für Erfolge:
    129
    /me lacht

    Ich könnts auch nicht selbst. Hab mir bisher damit geholfen, indem ich das was ich nicht ausgeben wollte, auf nocopy gesetzt habe.

    Vielen Dank @Daemonika Nightfire
    Ich hoffe, das verbreitet sich, mich nerven die ganzen unerwünschten Anis auch.
     
  5. Daemonika Nightfire

    Daemonika Nightfire Forumsgott/göttin

    Beiträge:
    7.233
    Zustimmungen:
    174
    Punkte für Erfolge:
    63
    OK ihr suessen,

    ich mach euch einen Vorschlag, sagt mir was fuer einen Giver ihr braucht und ich poste ihn euch hier im Thread.
    Wenn ihr moechtet, koennen wir auch gern einzelne Giver Komplett aufdroeseln und entschluesseln welche Funktionen notwendig sind und wofuer sie sind.

    @Niani
    Du hast da etwas uebersehen, das zweite Script ist nicht kuerzer, es ist sogar bis auf eine kleinigkeit mit dem oberen identisch, es fehlt nur der ganze rest.

    Im Grunde koennen Giver total klein sein, es kommt halt darauf an wofuer sie gedacht sind.

    LG
    Dae
     
    Khufu Greymoon und kitten Mills gefällt das.