Difference between revisions of "User:Daemonika Nightfire/Scripts/Access Tutorial"

From Second Life Wiki
Jump to navigation Jump to search
Line 1: Line 1:
==Berechtigungen Allgemein==
Die ersten 4 Beispiele funktionieren in saemtlichen Events, wo man den AvatarKey (UUID) durch llDetectedKey(0) abfragen kann. Zum einfachen Verstaendniss habe ich mich entschlossen hier nur den touch Event und weiter unten zum Vergleich den listener Event aufzufuehren, weil dort kein llDetectedKey(0) moeglich ist.
==Public / Oeffentlich==
==Public / Oeffentlich==



Revision as of 07:55, 10 November 2012

Berechtigungen Allgemein

Die ersten 4 Beispiele funktionieren in saemtlichen Events, wo man den AvatarKey (UUID) durch llDetectedKey(0) abfragen kann. Zum einfachen Verstaendniss habe ich mich entschlossen hier nur den touch Event und weiter unten zum Vergleich den listener Event aufzufuehren, weil dort kein llDetectedKey(0) moeglich ist.

Public / Oeffentlich

Wie du siehst, siehst du nichts, zumindest nichts besonderes. Dieses Script ist im grunde nichts anderes, als ein "New Script" was jeder in einem Prim erstellen kann. Es besitzt keinerlei Abfragen oder Beschraenkungen, damit ist die Funktion fuer jeden der das Object klickt ausfuehrbar. <lsl> default {

   state_entry()
   {
       
   }
   touch_start(integer total_number)
   {
       llSay(0, "Touched.");
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


Owner / Besitzer

Bei diesem Script sieht es schon etwas anders aus. Wenn das Object geklickt wird, ueberprueft es erst, ob der jenige der es klickt auch wirklich der Besitzer ist. <lsl> key owner; // globale Variable zum speichern des OwnerKey's

default {

   state_entry()
   {
       owner = llGetOwner(); // speichert den OwnerKey (UUID)
   }
   touch_start(integer total_number)
   {
       if(llDetectedKey(0) == owner) // erkannter Key == (gleich) Owner
       {
           llSay(0, "Touched.");
       }
       else if(llDetectedKey(0) != owner) // erkannter Key != (nicht gleich) Owner
       {
           llSay(0,"Du bist nicht der Besitzer.");
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


Group / Gruppe

Bei diesem Script sieht es wieder etwas anders aus. Wenn das Object geklickt wird, ueberprueft es erst, ob der jenige der es klickt auch die selbe Gruppe traegt. Dabei ist wichtig zu wissen, das es sich um die Gruppe handelt, mit der das Object gerezzt wurde. <lsl> default {

   state_entry()
   {
       
   }
   touch_start(integer total_number)
   {
       if(llSameGroup(llDetectedKey(0)) == TRUE) // ist die erkannte Gruppe des Avatars die selbe, wie die des geklickten Objekts RICHTIG?
       {
           llSay(0, "Touched.");
       }
       else if(llSameGroup(llDetectedKey(0)) == FALSE) // ist die erkannte Gruppe des Avatars die selbe, wie die des geklickten Objekts FALSCH?
       {
           llSay(0,"Du traegst nicht die richtige Gruppe.");
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


VIP / Zugangsliste

Bei diesem Script sieht das Ganze voellig anders aus. Anders als bei den ersten 3 Versionen, bei denen nur alle, der Besitzer oder die ganze Gruppe festgelegt werden, kann man hier mehrere User, unabhaengig von Eigentumsrechten und Gruppenzugehoerigkeit bestimmen. Wenn das Object geklickt wird, ueberprueft es erst ob der Name der Person die es klickt auf der Liste steht.

<lsl> // User mit Resident als Nachname werden "ohne punkt und ohne Nachname" eingetragen list VIP = ["daemonika.nightfire", "jane.doe", "john.doe"];

default {

   state_entry()
   {
       
   }
   touch_start(integer total_number)
   {
       if(~llListFindList(VIP, (list)llGetUsername(llDetectedKey(0)))) // sucht hier in der Liste nach dem Namen des klickenden
       {
           llSay(0, "Touched.");
       }
       else //if(!~llListFindList(VIP, (list)llGetUsername(llDetectedKey(0))))
       {
           llSay(0,"Du stehst nicht auf der Liste.");
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


Von einer Verwendung von Displaynamen kann ich nur abraten, weil diese nicht einzigartig sind.
Besser ist es sich auf Usernamen oder AvatarKey's (UUID) zu konzentrieren.
Dieses Script funktioniert ebenfalls mit Keys, dazu ersetze die entsprechenden Eintraege mit folgenden Beispielen.

<lsl> // In diese Liste trage die AvatarKey's ein, welche das Scrirpt ausfuehren duerfen. list VIP = ["61ee201a-81cf-4322-b9a8-a5eb8da777c2", "00000000-0000-0000-0000-000000000000"];

// Diese if vergleicht den Key des klickenden mit der Liste. if(~llListFindList(VIP, llCSV2List(llDetectedKey(0)))) // sucht hier in der Liste nach dem Key (UUID) des klickenden </lsl>


Berechtigungen im Listener

Die Listener Variante fuehre ich nur auf, weil dort kein llDetectedKey(0) funktioniert, jedoch kann man auch dabei unterscheiden, weil der listener selber die 'id' (UUID) erkennt.

Listener - Public / Oeffentlich

Dieses Script verfuegt ueber keinerlei beschraenkungen und reagiert auf jeden Avatar. <lsl> default {

   state_entry()
   {
       llListen(0, "", "", ""); // startet den listener
   }
   listen(integer chan, string name, key id, string message)
   {
       if(message == "hallo") // Reagiert auf das wort 'hallo' wenn es im chat geschrieben wird.
       {
           llSay(0, "Hallo " + llGetDisplayName(id));
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


Listener - Owner / Besitzer

In diesem Script wird der Owner gleich im llListen Befehl eingetragen. Dadurch reagiert das Script ausschliesslich auf den Owner und im Listener Event sind keine weiteren Abfragen notwendig.

<lsl> default {

   state_entry()
   {
       // Wenn das Script ausschliesslich auf den Owner reagieren soll, ist die llGetOwner() Abfrage im llListen Befehl voellig ausreichend.
       llListen(0, "", llGetOwner(), ""); // startet den listener
       
       // Alternativ kann man auch den Owner Namen direkt eintragen.
       // Das wuerde ich aber nicht empfehlen, weil es nicht dynamisch ist und im Falle des Weitergebens nicht auf den neuen Besitzer hoert.
       //llListen(0, "Daemonika Nightfire", "", ""); // startet den listener
   }
   listen(integer chan, string name, key id, string message)
   {
       // An dieser Stelle habe ich noch die alternative Methode zum abfragen des Owners inaktiv als Beispiel eingetragen.
       // Diese Methode ist nicht noetig, weil der Listener schon ab dem Befehl oben ausschliesslich auf den Owner reagiert.
     // Vorraussetzung dafuer ist ein komplett leerer llListen Befehl oben: llListen(0, "", "", "");
     //if(id == llGetOwner())
     //{
           if(message == "hallo") // Reagiert auf das wort 'hallo' wenn es im chat geschrieben wird.
           {
               llSay(0, "Hallo " + llGetDisplayName(id));
           }
     //}
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>

Listener - Group / Gruppe

Um die Gruppe abzufragen muss man wie im folgenden Beispiel schon anders vorgehen. Hierbei wird erst im Listener Event die Gruppe des Objects mit der aktiven Gruppe des Avatars verglichen und dann erst auf die Message reagiert.

<lsl> default {

   state_entry()
   {
       // hier ist es diesmal nicht moeglich die Gruppe zu vergleichen.
       llListen(0, "", "", ""); // startet den listener
   }
   listen(integer chan, string name, key id, string message)
   {
       if(llSameGroup(id) == TRUE) // ist die erkannte Gruppe des Avatars die selbe, wie die des  Objekts RICHTIG?
       {
           if(message == "hallo") // Reagiert auf das wort 'hallo' wenn es im chat geschrieben wird.
           {
               llSay(0, "Hallo " + llGetDisplayName(id));
           }
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>


Listener - VIP / Zugangsliste

Wie im vorherigen Script, wird auch hier erst im Listener Event eine Zugangsliste verglichen und dann erst auf die Message reagiert.

<lsl> // In diese Liste trage die AvatarKey's ein, welche das Scrirpt ausfuehren duerfen. list VIP = ["61ee201a-81cf-4322-b9a8-a5eb8da777c2", "00000000-0000-0000-0000-000000000000"];

default {

   state_entry()
   {
       // hier ist es ebenfalls nicht moeglich die Liste zu vergleichen.
       llListen(0, "", "", ""); // startet den listener
   }
   listen(integer chan, string name, key id, string message)
   {
       if(~llListFindList(VIP, llCSV2List(id))) // sucht hier in der Liste nach dem Key (UUID) des Avatars
       {
           if(message == "hallo") // Reagiert auf das wort 'hallo' wenn es im chat geschrieben wird.
           {
               llSay(0, "Hallo " + llGetDisplayName(id));
           }
       }
   }
   
   on_rez(integer Dae)
   {
       llResetScript();
   }

} </lsl>

Wie auch oben beim Touch Beispiel kann man auch hier die Namen der Avatare abfragen.
Dazu ersetze die entsprechenden Eintraege im Script mit folgenden Beispielen.

<lsl> // User mit Resident als Nachname werden "ohne punkt und ohne Nachname" eingetragen list VIP = ["daemonika.nightfire", "jane.doe", "john.doe"];

// Diese if vergleicht den Namen des Avatars mit der Liste. if(~llListFindList(VIP, llCSV2List(llGetUsername(id)))) // sucht hier in der Liste nach dem Namen des Avatars </lsl>