LlCreateLink/de

From Second Life Wiki
< LlCreateLink
Revision as of 14:36, 16 November 2008 by Zai Lynch (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Beschreibung

Funktion: llCreateLink( key target, integer parent );

Versucht das Objekt in dem sich das Script befindet mit target zu linken.

• key target Ein Prim in der selben Region
• integer parent Wenn FALSE, dann wird target zu root. Wenn TRUE, wird das Objekt in dem das Script steckt zu root.

Benötigt die PERMISSION_CHANGE_LINKS Erlaubnis, von dem Eigentümer, um zu funktionieren. target muss modifizierbar sein und dem selben Eigentümer gehören.
Dieses Objekt muss ebenfalls modifizierbar sein.

Spezifikationen

Die prims des child Objekts (target wenn parent TRUE ist, das Objekt in dem sich das Script befindet, wenn parent FALSE ist) werden dem Link Set des parent Objekts hinzugefügt und starten bei der Link Nummer 2. Beispiel: Falls die Link Reihenfolge des parent Objekts A1, A2, A3 ist und die Linkordnung des child Objekts B1, B2, B3 ist, dann wird die Linkreihenfolge des resultierenden Objekts A1, B1, B2, B3, A2, A3 sein.

Warnungen

  • Diese Funktion lässt das Script 1.0 Sekunden schlafen.
  • Vertraue nicht auf die automatische Erlaubnis. Nutze immer das run time permissions event.
  • Falls dem Script die PERMISSION_CHANGE_LINKS Erlaubnis fehlt, ruft es einen Fehler auf dem DEBUG_CHANNEL und die Anwendung schlägt fehl (das Script selbst läuft weiterhin).
  • Falls PERMISSION_CHANGE_LINKS von jemand anderem als dem Eigentümer Erkaubt wurde und die Funktion aufgerufen wird, wird ein Fehler auf dem DEBUG_CHANNEL gerufen.
  • Sobald die PERMISSION_CHANGE_LINKS Erlaubnis erteilt wurde, gibt es keinen Weg diese wieder zu widerrufen. Das Script wird die Erlaubnis lediglich verlieren wenn es resetted oder derezzed wird (gelöscht, abgelegt oder aufgenommen).
  • Falls target nicht in der Region ist, kein Prim ist oder von einem Avatar getragen wird, wird ein Fehler auf dem DEBUG_CHANNEL gerufen.
  • Wenn entweder das Objekt oder target nicht modifizierbar sind oder verschiedene Eigentümer besitzen, wird ein Fehler auf dem DEBUG_CHANNEL gerufen.
  • Wenn das parent Objekt und target zu weit entfernt sind (basierend auf ihrer physikalischen Größe), werden sie nicht gelinkt.
  • Diese Funktion schlägt lautlos fehl, wenn sie von einem Script in einem Attachment aufgerufen wird.
Alle Issues ~ Nach JIRA-Issues suchen, die sich hierauf beziehen

Beispiele

<lsl>// Create a new object and link it as a child prim. string ObjectName = "Object Name Here"; // NOTE: must be a name of an object in this object's inventory.

default {

   touch_start(integer count)
   {
       // When the object is touched, make sure we can do this before trying.
       llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
   }
   run_time_permissions(integer perm)
   {
       // Only bother rezzing the object if will be able to link it.
       if (perm & PERMISSION_CHANGE_LINKS)
           llRezObject(ObjectName, llGetPos() + <0,0,0.5>, ZERO_VECTOR, llGetRot(), 0);
       else
           llOwnerSay("Sorry, we can't link.");
   }
   object_rez(key id)
   {
       // NOTE: under some conditions, this could fail to work.
       // This is the parent object.  Create a link to the newly-created child.
       llCreateLink(id, TRUE);
   }
}</lsl>

Hilfreiche Code-Schnippsel

<lsl> // child prim key key kChild = NULL_KEY; integer bLink = TRUE; // we suppose this script is on a linked object default {

   state_entry()
   {
       // get the permission to change the link
       llRequestPermissions(llGetOwner(), PERMISSION_CHANGE_LINKS);
               
       // get the child key
       kChild = llGetLinkKey(2);
   }
   
   
   touch_start(integer nTotalCliquor)
   {
       if (bLink)
       {
           // break all my links, wait 1.5 sec
           llBreakAllLinks();
           llSleep(1.5);
           
           // i'm unlinked
           llSay(0, "Unlinked, click to link");
           bLink = FALSE;
       }
       else
       {
           // redo my link
           llCreateLink(kChild, TRUE);   
           llSleep(1.5);
           
           // i'm linked
           llSay(0, "Linked, click to unlink");
           bLink = TRUE;
       }
   }

} </lsl>

Siehe auch

Ereignisse

•  run_time_permissions Event dass die Erlaubnis erhält
•  changed CHANGED_LINK

Funktionen

•  llGetPermissions Bekomme die Erlaubnis gewährt
•  llGetPermissionsKey Gibt den agent der die Erlaubnis gewährt hat
•  llRequestPermissions Fragt Erlaubnis an
•  llBreakLink Bricht einen Link
•  llBreakAllLinks Bricht alle Links

Artikel

•  Script Erlaubnis
•  Linkability Rules

Weiterführende Anmerkungen

Nach JIRA-Issues suchen, die sich hierauf beziehen

Signature

function void llCreateLink( key target, integer parent );
Dieser Artikel war nicht hilfreich für Dich? Vielleicht bringt der zugehörige Artikel im SLinfo Wiki Erleuchtung.