Difference between revisions of "User:Daemonika Nightfire/Scripts/Greeter&Co"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with "==*DS* Greeter (volume_detect) v1.0.05== Dieses einfache script ist dafuer gedacht in einem unsichtbaren Object im Eingang oder Teleport Punkt eines Shops zu liegen. Das Object s…")
 
Line 98: Line 98:
         llResetScript(); // resettet das Script beim rezzen
         llResetScript(); // resettet das Script beim rezzen
     }   
     }   
}
</lsl>
==*DS* Group Joiner==
Dieses Script ist eigentlich nichts besonderes, aber ich ziehe es jedem Bot vor.
<lsl>
/*
    Dieses Script erzeugt einen Link zum oeffnen des Gruppenfensters wo sich der [Join] Button befindet.
    Voraussetzung zum joinen einer Gruppe ist die Gruppen-Einstellung 'Eintreten offen'.
*/
string Text = "Feel free and join our support group:";
string Group = "6fcac03d-2c09-d5a7-e73f-ff73e15965d4";
default
{
    state_entry()
    {
        // Auf Hovertext habe ich hier verzichtet, Bilder sind viel schoener.
    }
   
    touch_start(integer num_detected)
    {
        key Avatar = llDetectedKey(0);
        llRegionSayTo(Avatar, 0, Text + " secondlife:///app/group/" + Group + "/about");
    }
   
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
</lsl>
==*DS* Group Key==
Bei folgendem Script handelt es sich um ein ueber 5 jahre altes Relikt. Ich habe es lediglich ausgegraben und auf den neusten Stand gebracht.
<lsl>
/*
    Mit diesem kleinen Script kannst du den Key (UUID) jeder Gruppe heraus finden.
    Dazu musst du lediglich das Object mit diesem Script in der gewuenschten Gruppe rezzen.
*/
default
{
    state_entry()
    {
        llSetText("Touch to learn\nGroup Key", <1,1,1>, 1.0);
    }
    touch_start(integer num_detected)
    {
        key Avatar = llDetectedKey(0);
       
        list Details = llGetObjectDetails(llGetKey(), [OBJECT_GROUP]);
        key Group_Key = llList2Key(Details, 0);
       
        if(Group_Key != NULL_KEY)
        {
            llRegionSayTo(Avatar, 0, "The Group Key is: " + (string)Group_Key);
        }
        else if(Group_Key == NULL_KEY)
        {
            llRegionSayTo(Avatar, 0, "Please set the Group for this object in EDIT under the GENERAL tab first.");
        }
    }
   
    on_rez(integer Dae)
    {
        llResetScript();
    }
}
}
</lsl>
</lsl>

Revision as of 08:35, 30 April 2014

*DS* Greeter (volume_detect) v1.0.05

Dieses einfache script ist dafuer gedacht in einem unsichtbaren Object im Eingang oder Teleport Punkt eines Shops zu liegen. Das Object sollte natuerlich gross genug sein, um sicher zu gehen das Besucher auch wirklich durch gehen. Es begruesst jeden Besucher nur 1x am Tag und gibt dir am Ende eines Tages eine Zusammenfassung per InstantMessage. <lsl> /*

   *DS* Greeter (volume-detect) ist ein ganz einfacher Besucherzaehler mit Begruessungs-Funktion.
   Damit der Greeter nicht nervt, speichert der jeden neuen AvatarKey in eine Liste um sie am selben Tag nicht erneut zu begruessen.
   Der Greeter zaehlt dabei jeden Avatar und gibt die Anzahl am naechsten Morgen per Instant Message zurueck.
   (Wenn du Email-Weiterleitung aktiviert hast, bekommst du die Instant Message an deine Email-Adresse geschickt.)
   
   Zudem verfuegt der Greeter ueber eine Speicherkontrolle, um eine Speicher-Ueberladung (Stack Heap Collision) zu vermeiden.
   
   Das Script ist ausschliesslich darauf ausgelegt die Anzahl Besucher zu zaehlen und speichert die Keys ledglich temporaer.
   Die Keys werden nicht weiter verarbeitet, entschluesselt oder wiedergegeben.
  • /

key owner; // Speicher fuer den OwnerKey string date; // Speicher fuer das Datum vector pos; // Speicher fuer die Object-Position string region; // Speicher fuer den Region-Namen list parcel; // Speicher fuer den Parzellen-Namen

list visitor_list = []; // Speicher fuer die Besucher-Liste (AvatarKeys) integer length = 0; // Speicher fuer die aktuelle Listen-Laenge integer backup = 0; // Speicher fuer das backup

default {

   state_entry()
   {
       owner = llGetOwner();                                       // speichert den aktuellen OwnerKey
       date = llGetDate();                                         // speichert das aktuelle Datum
       pos = llGetPos();                                           // speichert die Position
       region = llGetRegionName();                                 // speichert den Region-Namen
       parcel = llGetParcelDetails(pos, [PARCEL_DETAILS_NAME]);    // speichert den Parzellen-Namen
       
       llVolumeDetect(TRUE);   // damit erkennt das Object collision wenn es phantom ist
       llSetTimerEvent(300);   // 5 minuten reicht voellig, schneller waere hirnrissig
   }
   
   collision_start(integer num_detected)
   {
       key Avatar = llDetectedKey(0); // lokale variable fuer den aktuellen AvatarKey
       
       if(Avatar != owner) // wird ausgefuehrt, wenn fremde Avatare collidieren
       {
           if(llGetDisplayName(Avatar)) // damit geht der greeter nicht bei physischen prims los
           {
               if(!~llListFindList(visitor_list, [Avatar])) // prueft ob der aktuelle AvatarKey schon bekannt ist
               {
                   visitor_list += Avatar; // fuegt den unbekannten Avatarkey in der Liste hinzu
                   length = llGetListLength(visitor_list); // zaehlt die anzahl der Eintraege in der Liste
                   
                   // ↓↓↓↓↓↓↓↓↓ Bereich fuer individuelle Meldungen, Sounds, Particle usw. ↓↓↓↓↓↓↓↓↓ \\
                   
                   llPlaySound("bc8c684d-d3a8-448b-91ae-0286255e6cea", 1.0); // Boing
                   llRegionSayTo(Avatar, 0, "Hello " + llGetDisplayName(Avatar) + ", welcome to " + llList2String(parcel,0));
                   
                   // ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ \\
                   
                   if(llGetFreeMemory() < 10000) // prueft nach jedem AvatarKey ob noch genuegend Memory frei ist
                   {
                       llInstantMessage(owner, "/me Low Memory: cleaning List\nVisitors today: " + (string)length);
                       
                       backup += length;   // speichert die aktuelle Anzahl ins backup
                       length = 0;         // setzt den counter auf null
                       visitor_list = [];  // leert die aktuelle Besucher-Liste
                   }
               }
           }
       }
       else if(Avatar == owner) // wird nur ausgefuehrt, wenn der Owner collidiert
       {
           llRegionSayTo(owner, 0, "Welcome back " + llGetDisplayName(owner) + ", you had " + (string)length + " Visitors today.");
       }
   }
   
   timer()
   {
       if(llGetDate() != date) // vergleicht das gespeicherte Datum mit dem aktuellen
       {
           length += backup;   // zaehlt die aktuelle liste mit dem aktuellen backup zusammen
           llInstantMessage(owner, "Visitors yesterday: " + (string)length +
                                   "\nsecondlife:///app/teleport/" + llEscapeURL(region) +
                                                               "/" + (string)(llRound(pos.x)) +
                                                               "/" + (string)(llRound(pos.y)) +
                                                               "/" + (string)(llCeil(pos.z)));
           
           length = 0;         // setzt den counter auf null
           backup = 0;         // setzt das backup auf null
           visitor_list = [];  // leert die aktuelle Besucher-Liste
           
           date = llGetDate(); // aktuallisiert das Datum
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript(); // resettet das Script beim rezzen
   }  

} </lsl>

*DS* Group Joiner

Dieses Script ist eigentlich nichts besonderes, aber ich ziehe es jedem Bot vor. <lsl> /*

   Dieses Script erzeugt einen Link zum oeffnen des Gruppenfensters wo sich der [Join] Button befindet.
   Voraussetzung zum joinen einer Gruppe ist die Gruppen-Einstellung 'Eintreten offen'.
  • /

string Text = "Feel free and join our support group:"; string Group = "6fcac03d-2c09-d5a7-e73f-ff73e15965d4";

default {

   state_entry()
   {
       // Auf Hovertext habe ich hier verzichtet, Bilder sind viel schoener.
   }
   
   touch_start(integer num_detected)
   {
       key Avatar = llDetectedKey(0);
       llRegionSayTo(Avatar, 0, Text + " secondlife:///app/group/" + Group + "/about");
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>

*DS* Group Key

Bei folgendem Script handelt es sich um ein ueber 5 jahre altes Relikt. Ich habe es lediglich ausgegraben und auf den neusten Stand gebracht. <lsl> /*

   Mit diesem kleinen Script kannst du den Key (UUID) jeder Gruppe heraus finden.
   Dazu musst du lediglich das Object mit diesem Script in der gewuenschten Gruppe rezzen.
  • /

default {

   state_entry()
   {
       llSetText("Touch to learn\nGroup Key", <1,1,1>, 1.0);
   }

   touch_start(integer num_detected)
   {
       key Avatar = llDetectedKey(0);
       
       list Details = llGetObjectDetails(llGetKey(), [OBJECT_GROUP]);
       key Group_Key = llList2Key(Details, 0);
       
       if(Group_Key != NULL_KEY)
       {
           llRegionSayTo(Avatar, 0, "The Group Key is: " + (string)Group_Key);
       }
       else if(Group_Key == NULL_KEY)
       {
           llRegionSayTo(Avatar, 0, "Please set the Group for this object in EDIT under the GENERAL tab first.");
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>