Accessing Prim Properties/de

From OpenSimulator

(Difference between revisions)
Jump to: navigation, search
(Example : A replicator)
 
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 +
{{Quicklinks|Accessing_Prim_Properties}}
 +
<br />
 +
 +
= Zugreifen auf Prim Eigenschaften =
 +
 
==Ein wenig Geschichte==
 
==Ein wenig Geschichte==
  
Line 18: Line 23:
 
{| class="wikitable" style="margin:auto;text-align:center"
 
{| class="wikitable" style="margin:auto;text-align:center"
 
|-
 
|-
! Target is script's host<br/>(prim containing the script)
+
! Ziel ist der Host des Skripts<br/>(Prim, der das Skript enthält)
! Target is link number<br/>(inside the linkset)
+
! Ziel ist die Linknummer<br/>(innerhalb des Linksets)
! Target is prim id<br/>(any prim you own in the scene)
+
! Ziel ist die Prim-ID<br/>(jedes Prim, das Sie in der Szene besitzen)
 
|-
 
|-
 
| llGetOwner || ||
 
| llGetOwner || ||
Line 58: Line 63:
 
| || || llGetObjectLinkKey(uuid,num)
 
| || || llGetObjectLinkKey(uuid,num)
 
|-
 
|-
!colspan="3" | "Universal" access (list of rules)
+
!colspan="3" | "Universeller“ Zugriff (Regelliste)
  
 
|-
 
|-
Line 66: Line 71:
  
 
==Beispiel: Ein Replikator==
 
==Beispiel: Ein Replikator==
Fügen Sie dieses Skript zusammen mit einem Single-Prim-Objekt namens „seed“ in eine Box ein. Es iteriert auf jedem Prim eines benannten Objekts, das Sie in der Szene besitzen, und rezerrt dann ein identisches Prim mit einem bestimmten Offset, wodurch das Quellobjekt, sogar die Netze, perfekt repliziert wird. Sleeps sind zur Demo hier. Entfernen Sie sie für eine schnelle Replikation. Mit der CLEANUP-Option werden gelöschte Prims entfernt.
+
Fügen Sie dieses Skript zusammen mit einem Single-Prim-Objekt namens „seed“ in eine Box ein.  
 +
 
 +
Es iteriert auf jedem Prim eines benannten Objekts, das Sie in der Szene besitzen, und rezerrt dann ein identisches Prim mit einem bestimmten Offset,  
 +
 
 +
wodurch das Quellobjekt, sogar die Netze, perfekt repliziert wird. Sleeps sind zur Demo hier.  
 +
 
 +
Entfernen Sie sie für eine schnelle Replikation. Mit der CLEANUP-Option werden gelöschte Prims entfernt.
 
<source lang="lsl">
 
<source lang="lsl">
string targetName = "Example"; // The name of an object you own in the scene
+
string targetName = "Example"; // Name des Zielobjekts, das dupliziert werden soll
string seedName = "seed";      // Name of the seed prim
+
string seedName = "seed";      // Name des Ausgangs-Prims, der dupliziert werden soll
vector offset = <5,0,0>;      // Offset of the dupicata
+
vector offset = <5,0,0>;      // Versatz für die Duplikate
 +
 
  
integer primcnt;
+
integer primcnt;               // Anzahl der Prims im Wurzelobjekt
integer primnum;
+
integer primnum;               // Aktuelle Nummer des zu kopierenden Prims
key rootKey;
+
key rootKey;                   // Schlüssel des Wurzelobjekts
  
 +
// Funktion zur Bestimmung der Länge eines Tupels basierend auf dem Parameter
 
integer TupleLength (integer param)
 
integer TupleLength (integer param)
 
{
 
{
Line 90: Line 103:
 
}
 
}
  
 +
// Funktion zum Iterieren durch die Seiten (Faces) eines Prims und Rückgabe der Parametertupel für jede Seite
 
list IterateFaces (list p, integer param)
 
list IterateFaces (list p, integer param)
 
{
 
{
Line 106: Line 120:
 
}
 
}
  
 +
// Funktion zum Kopieren der Parameter eines Prims von einer Quelle zu einem Ziel
 
CopyParams (key srcprim, key dstprim, integer param) {
 
CopyParams (key srcprim, key dstprim, integer param) {
 
     if (TupleLength(param) == 0)
 
     if (TupleLength(param) == 0)
Line 122: Line 137:
 
}
 
}
  
 +
// Funktion zum Erstellen eines neuen Prims
 
RezAPrim ()
 
RezAPrim ()
 
{
 
{
Line 128: Line 144:
 
}
 
}
  
 +
// Funktion, die aufgerufen wird, wenn ein Prim rezisiert wurde
 +
// Kopiert die Parameter des ursprünglichen Prims auf den rezisierten Prim
 
PrimRezed (key dstkey)
 
PrimRezed (key dstkey)
 
{
 
{
Line 150: Line 168:
 
}
 
}
  
 
+
// Funktion zum Abrufen des Besitzers eines Objekts anhand der Objekt-ID
 
key OwnerOf (key id)
 
key OwnerOf (key id)
 
{
 
{
Line 162: Line 180:
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 +
        // Initialisierung des Skripts
 
         llSetText ("READY", <0,1,0>, 1.0);
 
         llSetText ("READY", <0,1,0>, 1.0);
 
     }
 
     }
Line 167: Line 186:
 
     touch_start (integer n)
 
     touch_start (integer n)
 
     {
 
     {
 +
        // Wenn das Objekt berührt wird, wechselt der Zustand in den Dialog-Modus
 
         state dialog;
 
         state dialog;
 
     }
 
     }
Line 178: Line 198:
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 +
        // Initialisierung des Dialog-Modus
 
         llSetText ("LISTENING", <0,1,0>, 1.0);
 
         llSetText ("LISTENING", <0,1,0>, 1.0);
 
         llDialog (llGetOwner(), "Action?", ["CLEANUP", "REPLICATE"], dlgchan);
 
         llDialog (llGetOwner(), "Action?", ["CLEANUP", "REPLICATE"], dlgchan);
Line 184: Line 205:
 
     }
 
     }
  
 +
    // Abhören von Dialognachrichten und Auslösen entsprechender Aktionen
 
     listen (integer chan, string name, key id, string msg)
 
     listen (integer chan, string name, key id, string msg)
 
     {
 
     {
Line 192: Line 214:
 
     timer ()
 
     timer ()
 
     {
 
     {
 +
        // Timer-Ereignis zum Zurückkehren in den Standardzustand nach einer bestimmten Zeit
 
         state default;
 
         state default;
 
     }
 
     }
Line 197: Line 220:
 
     state_exit ()
 
     state_exit ()
 
     {
 
     {
 +
        // Aufräumen beim Verlassen des Dialog-Modus
 
         llSetTimerEvent (0.0);
 
         llSetTimerEvent (0.0);
 
         llListenRemove (dlglistener);
 
         llListenRemove (dlglistener);
Line 207: Line 231:
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 +
        // Zustand für die Bereinigung von Prims
 
         llSetText ("CLEANUP", <0,1,0>, 1.0);
 
         llSetText ("CLEANUP", <0,1,0>, 1.0);
 
         llSensor (seedName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
 
         llSensor (seedName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
Line 212: Line 237:
  
 
     sensor (integer num) {
 
     sensor (integer num) {
 +
        // Ereignis, das ausgelöst wird, wenn Sensoren aktiv sind
 
         llOwnerSay ("Garbage collecting "+(string)num);
 
         llOwnerSay ("Garbage collecting "+(string)num);
 
         for (integer i=0; i<num; i++) osDie (llDetectedKey(i));
 
         for (integer i=0; i<num; i++) osDie (llDetectedKey(i));
Line 218: Line 244:
  
 
     no_sensor() {
 
     no_sensor() {
 +
        // Ereignis, das ausgelöst wird, wenn keine Sensoren aktiv sind
 
         llOwnerSay ("All clean.");
 
         llOwnerSay ("All clean.");
 
         state default;
 
         state default;
Line 228: Line 255:
 
     state_entry()
 
     state_entry()
 
     {
 
     {
 +
        // Zustand für die Replikation von Prims
 
         llSetText ("REPLICATE", <0,1,0>, 1.0);
 
         llSetText ("REPLICATE", <0,1,0>, 1.0);
 
         llSensor (targetName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
 
         llSensor (targetName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
Line 233: Line 261:
  
 
     sensor (integer num) {
 
     sensor (integer num) {
 +
        // Ereignis, das ausgelöst wird, wenn Sensoren aktiv sind
 
         rootKey = llDetectedKey (0);
 
         rootKey = llDetectedKey (0);
  
Line 246: Line 275:
  
 
     no_sensor() {
 
     no_sensor() {
 +
        // Ereignis, das ausgelöst wird, wenn keine Sensoren aktiv sind
 
         llOwnerSay ("Object "+targetName+" was not found.");
 
         llOwnerSay ("Object "+targetName+" was not found.");
 +
        state default;
 
     }
 
     }
 
      
 
      
 
     object_rez (key uuid) {
 
     object_rez (key uuid) {
 +
        // Ereignis, das ausgelöst wird, wenn ein Objekt rezisiert wird
 
         PrimRezed (uuid);
 
         PrimRezed (uuid);
 
     }
 
     }
Line 255: Line 287:
 
</source>
 
</source>
  
==Writing accessors==
+
==Schreibzugriffsmethoden==
 +
 
 +
Die Funktionsfamilie Get/SetPrimitiveParams ist unglaublich leistungsstark.
  
The Get/SetPrimitiveParams family of functions is awesomely powerful. It is also [https://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast quite arcane to write and decipher]. A way to get rid of these long lists of parameters cluttering your code is to encapsulate Get/SetPrimitiveParams in individual get/set accessors, actually 'filling the blanks' in the above table. Although this is much pleasant to read, note that doing so may hurt performance when you want to change many properties at once, which SetPrimitiveParams can do in one call. The following library is offered as an example.
+
Es ist auch [https://wiki.secondlife.com/wiki/LlSetLinkPrimitiveParamsFast ziemlich geheimnisvoll zu schreiben und zu entschlüsseln].  
 +
 
 +
Eine Möglichkeit, diese langen Parameterlisten loszuwerden, die Ihren Code überladen, besteht darin,
 +
 
 +
Get/SetPrimitiveParams in einzelne get/set-Accessoren zu kapseln und so tatsächlich die Lücken in der obigen Tabelle zu füllen.  
 +
 
 +
Obwohl dies sehr angenehm zu lesen ist, beachten Sie, dass dies die Leistung beeinträchtigen kann,
 +
 
 +
wenn Sie viele Eigenschaften auf einmal ändern möchten, was SetPrimitiveParams in einem Aufruf tun kann.  
 +
 
 +
Als Beispiel wird die folgende Bibliothek angeboten.
  
 
<source lang="lsl">
 
<source lang="lsl">
// Index of properties for PRIM_TYPE_BOX, PRIM_TYPE_CYLINDER, PRIM_TYPE_PRISM
+
// Indizes der Eigenschaften für PRIM_TYPE_BOX, PRIM_TYPE_CYLINDER, PRIM_TYPE_PRISM
  
integer INDEX_TYPE      = 0;
+
integer INDEX_TYPE      = 0; // Typ
integer INDEX_HOLE      = 1;
+
integer INDEX_HOLE      = 1; // Lochgröße
integer INDEX_CUT      = 2;
+
integer INDEX_CUT      = 2; // Schnittgröße
integer INDEX_HOLLOW    = 3;
+
integer INDEX_HOLLOW    = 3; // Leeregröße
integer INDEX_TWIST    = 4;
+
integer INDEX_TWIST    = 4; // Verdrehung
integer INDEX_TAPER    = 5;
+
integer INDEX_TAPER    = 5; // Zulauf
integer INDEX_SHEAR    = 6;
+
integer INDEX_SHEAR    = 6; // Scherung
  
// Index of properties for PRIM_TEXTURE
+
// Indizes der Eigenschaften für PRIM_TEXTURE
 
+
integer INDEX_TEXTURE  = 0;
+
integer INDEX_REPEATS  = 1;
+
integer INDEX_OFFSETS  = 2;
+
integer INDEX_ROTATION  = 3;
+
  
 +
integer INDEX_TEXTURE  = 0; // Textur
 +
integer INDEX_REPEATS  = 1; // Wiederholungen
 +
integer INDEX_OFFSETS  = 2; // Versatz
 +
integer INDEX_ROTATION  = 3; // Rotation
  
 +
// Indizes der Eigenschaften für PRIM_COLOR
 
//                client        script
 
//                client        script
 
//          +---------------+------------+
 
//          +---------------+------------+
Line 286: Line 330:
  
  
//
+
// Set-Methoden
// Set accessors
+
//
+
 
+
 
mySetLinkName (integer link, string text) {
 
mySetLinkName (integer link, string text) {
 +
    // Setzt den Namen eines Links
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_NAME, text]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_NAME, text]);
 
}
 
}
 
+
 
mySetLinkDesc (integer link, string text) {
 
mySetLinkDesc (integer link, string text) {
 +
    // Setzt die Beschreibung eines Links
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_DESC, text]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_DESC, text]);
 
}
 
}
 
+
 
mySetLinkText (integer link, string text, vector color) {
 
mySetLinkText (integer link, string text, vector color) {
 +
    // Setzt den Text eines Links mit Farbe
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXT, text, color, 1.0]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXT, text, color, 1.0]);
 
}
 
}
 
+
 
mySetLinkColor (integer link, vector color, integer face) {
 
mySetLinkColor (integer link, vector color, integer face) {
 +
    // Setzt die Farbe eines Links für eine bestimmte Seite
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_COLOR, face, color, 1.0]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_COLOR, face, color, 1.0]);
 
}
 
}
 
+
 
mySetLinkBright (integer link, integer bright, integer face) {
 
mySetLinkBright (integer link, integer bright, integer face) {
 +
    // Setzt die Helligkeit eines Links für eine bestimmte Seite
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_FULLBRIGHT, face, bright]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_FULLBRIGHT, face, bright]);
 
}
 
}
 
+
 
mySetLinkGlow (integer link, float glow, integer face) {
 
mySetLinkGlow (integer link, float glow, integer face) {
 +
    // Setzt das Leuchten eines Links für eine bestimmte Seite
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_GLOW, face, glow]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_GLOW, face, glow]);
 
}
 
}
 
+
// Les 3 suivants ne marchent pas pour ALL_SIDES
+
// Die folgenden drei funktionieren nicht für ALL_SIDES
 
+
 
mySetLinkTexture (integer link, key texture, integer face) {
 
mySetLinkTexture (integer link, key texture, integer face) {
 +
    // Setzt die Textur eines Links für eine bestimmte Seite
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     l = llListReplaceList(l, [texture], INDEX_TEXTURE, INDEX_TEXTURE);
 
     l = llListReplaceList(l, [texture], INDEX_TEXTURE, INDEX_TEXTURE);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
}
 
}
 
+
 
mySetLinkRepeat (integer link, vector repeat, integer face) {
 
mySetLinkRepeat (integer link, vector repeat, integer face) {
 +
    // Setzt die Texturwiederholungen eines Links für eine bestimmte Seite
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     l = llListReplaceList(l, [repeat], INDEX_REPEATS, INDEX_REPEATS);
 
     l = llListReplaceList(l, [repeat], INDEX_REPEATS, INDEX_REPEATS);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
}
 
}
 
+
 
mySetLinkOffset (integer link, vector offset, integer face) {
 
mySetLinkOffset (integer link, vector offset, integer face) {
 +
    // Setzt den Texturversatz eines Links für eine bestimmte Seite
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     l = llListReplaceList(l, [offset], INDEX_OFFSETS, INDEX_OFFSETS);
 
     l = llListReplaceList(l, [offset], INDEX_OFFSETS, INDEX_OFFSETS);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
 
}
 
}
 
+
 
mySetLinkPos (integer link, vector pos) {
 
mySetLinkPos (integer link, vector pos) {
 +
    // Setzt die Position eines Links relativ zum Elternobjekt
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_POS_LOCAL, pos]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_POS_LOCAL, pos]);
 
}
 
}
 
+
 
mySetLinkRot (integer link, rotation rot) {
 
mySetLinkRot (integer link, rotation rot) {
 +
    // Setzt die Rotation eines Links relativ zum Elternobjekt
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_ROT_LOCAL, rot]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_ROT_LOCAL, rot]);
 
}
 
}
 
+
 
mySetLinkSize (integer link, vector size) {
 
mySetLinkSize (integer link, vector size) {
 +
    // Setzt die Größe eines Links
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_SIZE, size]);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_SIZE, size]);
 
}
 
}
 
+
 
mySetLinkCut (integer link, vector cut) {
 
mySetLinkCut (integer link, vector cut) {
 +
    // Setzt den Schnitt eines Links (nur für Boxen, Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     l = llListReplaceList(l, [cut], INDEX_CUT, INDEX_CUT);
 
     l = llListReplaceList(l, [cut], INDEX_CUT, INDEX_CUT);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
}
 
}
 
+
 
mySetLinkTwist (integer link, vector twist) {
 
mySetLinkTwist (integer link, vector twist) {
 +
    // Setzt die Verdrehung eines Links (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     l = llListReplaceList(l, [twist], INDEX_TWIST, INDEX_TWIST);
 
     l = llListReplaceList(l, [twist], INDEX_TWIST, INDEX_TWIST);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
}
 
}
 
+
 
mySetLinkTaper (integer link, vector taper) {
 
mySetLinkTaper (integer link, vector taper) {
 +
    // Setzt den Zulauf eines Links (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     l = llListReplaceList(l, [taper], INDEX_TAPER, INDEX_TAPER);
 
     l = llListReplaceList(l, [taper], INDEX_TAPER, INDEX_TAPER);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
}
 
}
 
+
 
mySetLinkShear (integer link, vector shear) {
 
mySetLinkShear (integer link, vector shear) {
 +
    // Setzt die Scherung eines Links (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     l = llListReplaceList(l, [shear], INDEX_SHEAR, INDEX_SHEAR);
 
     l = llListReplaceList(l, [shear], INDEX_SHEAR, INDEX_SHEAR);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
}
 
}
 
+
 
mySetLinkHollow (integer link, float hollow) {
 
mySetLinkHollow (integer link, float hollow) {
 +
    // Setzt die Hohlheit eines Links (nur für Boxen, Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     l = llListReplaceList(l, [hollow], INDEX_HOLLOW, INDEX_HOLLOW);
 
     l = llListReplaceList(l, [hollow], INDEX_HOLLOW, INDEX_HOLLOW);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
     llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
 
}
 
}
 
+
//
+
// Get-Methoden
// Get accessors
+
//
+
 
+
 
string myGetLinkName (integer link) {
 
string myGetLinkName (integer link) {
 +
    // Gibt den Namen eines Links zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_NAME]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_NAME]);
 
     return llList2String (l,0);
 
     return llList2String (l,0);
 
}
 
}
 
+
 
string myGetLinkDesc (integer link) {
 
string myGetLinkDesc (integer link) {
 +
    // Gibt die Beschreibung eines Links zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_DESC]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_DESC]);
 
     return llList2String (l,0);
 
     return llList2String (l,0);
 
}
 
}
 
+
 
string myGetLinkText (integer link) {
 
string myGetLinkText (integer link) {
 +
    // Gibt den Text eines Links zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXT]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXT]);
 
     return llList2String (l,0);
 
     return llList2String (l,0);
 
}
 
}
 
+
 
vector myGetLinkColor (integer link, integer face) {
 
vector myGetLinkColor (integer link, integer face) {
 +
    // Gibt die Farbe eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_COLOR, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_COLOR, face]);
 
     return llList2Vector (l,0);
 
     return llList2Vector (l,0);
 
}
 
}
 
+
 
integer myGetLinkBright (integer link, integer face) {
 
integer myGetLinkBright (integer link, integer face) {
 +
    // Gibt die Helligkeit eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_FULLBRIGHT, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_FULLBRIGHT, face]);
 
     return llList2Integer (l,0);
 
     return llList2Integer (l,0);
 
}
 
}
 
+
 
float myGetLinkGlow (integer link, integer face) {
 
float myGetLinkGlow (integer link, integer face) {
 +
    // Gibt das Leuchten eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_GLOW, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_GLOW, face]);
 
     return llList2Float (l,0);
 
     return llList2Float (l,0);
 
}
 
}
 
+
 
key myGetLinkTexture (integer link, integer face) {
 
key myGetLinkTexture (integer link, integer face) {
 +
    // Gibt die Textur eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     return llList2Key(l,0);
 
     return llList2Key(l,0);
 
}
 
}
 
+
 
vector myGetLinkRepeat (integer link, integer face) {
 
vector myGetLinkRepeat (integer link, integer face) {
 +
    // Gibt die Texturwiederholungen eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     return llList2Vector(l,1);
 
     return llList2Vector(l,1);
 
}
 
}
 
+
 
vector myGetLinkOffset (integer link, integer face) {
 
vector myGetLinkOffset (integer link, integer face) {
 +
    // Gibt den Texturversatz eines Links für eine bestimmte Seite zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
 
     return llList2Vector(l,2);
 
     return llList2Vector(l,2);
 
}
 
}
 
+
 
vector myGetLinkPos (integer link) {
 
vector myGetLinkPos (integer link) {
 +
    // Gibt die Position eines Links relativ zum Elternobjekt zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_POS_LOCAL]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_POS_LOCAL]);
 
     return llList2Vector (l,0);
 
     return llList2Vector (l,0);
 
}
 
}
 
+
 
vector myGetLinkSize (integer link) {
 
vector myGetLinkSize (integer link) {
 +
    // Gibt die Größe eines Links zurück
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_SIZE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_SIZE]);
 
     return llList2Vector (l,0);
 
     return llList2Vector (l,0);
 
}
 
}
 
+
 
vector myGetLinkCut (integer link) {
 
vector myGetLinkCut (integer link) {
 +
    // Gibt den Schnitt eines Links zurück (nur für Boxen, Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     return llList2Vector (l, INDEX_CUT);
 
     return llList2Vector (l, INDEX_CUT);
 
}
 
}
 
+
 
vector myGetLinkTwist (integer link) {
 
vector myGetLinkTwist (integer link) {
 +
    // Gibt die Verdrehung eines Links zurück (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     return llList2Vector (l, INDEX_TWIST);
 
     return llList2Vector (l, INDEX_TWIST);
 
}
 
}
 
+
 
vector myGetLinkTaper (integer link) {
 
vector myGetLinkTaper (integer link) {
 +
    // Gibt den Zulauf eines Links zurück (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     return llList2Vector (l, INDEX_TAPER);
 
     return llList2Vector (l, INDEX_TAPER);
 
}
 
}
 
+
 
vector myGetLinkShear (integer link) {
 
vector myGetLinkShear (integer link) {
 +
    // Gibt die Scherung eines Links zurück (nur für Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     return llList2Vector (l, INDEX_SHEAR);
 
     return llList2Vector (l, INDEX_SHEAR);
 
}
 
}
 
+
 
float myGetLinkHollow (integer link) {
 
float myGetLinkHollow (integer link) {
 +
    // Gibt die Hohlheit eines Links zurück (nur für Boxen, Zylinder und Prismen)
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
 
     return llList2Float (l, INDEX_HOLLOW);
 
     return llList2Float (l, INDEX_HOLLOW);
 
}
 
}
 
</source>
 
</source>
 +
 +
[[Category:Scripting]]
 +
[[Category:Scripts]]
 +
[[Category:OSSL]]
 +
[[Category:German Translations]]

Latest revision as of 13:24, 3 March 2024


Contents

[edit] Zugreifen auf Prim Eigenschaften

[edit] Ein wenig Geschichte

Zuerst gab es llSetColor.

Dann gab es llSetLinkColor. Das war ein großer Fortschritt, da es Sie von der Last befreit hat, jedes einzelne Prim in Ihrem Haar zu skripten. Lache nicht. Möglicherweise finden Sie solche offensichtlich veralteten Skripte immer noch auf dem Hypergrid. Tun Sie uns einen Gefallen. Verbreiten Sie sie nicht. Mach sie kaputt. Schreiben Sie sie um.

Später erkannte man, dass die Möglichkeit, über ein Masterskript auf jede Eigenschaft eines Prims in einem Linkset zuzugreifen, eine gute Sache war. Dadurch wird Ihre Anwendung einfacher zu verstehen und zu warten und die Anzahl der Skripte wird reduziert. llSetLinkPrimitiveParams war geboren.

Schließlich hat OpenSimulator seine eigene Note hinzugefügt. Warum nicht Prims outside des Linkset von einem Masterskript aus manipulieren? Und wir hatten osSetPrimitiveParams.

llGet/SetLinkPrimitiveParams, osGet/SetPrimitiveParams sind das Arbeitstier der Prim-Manipulationen. Sie können von einem zentralen Ort aus auf alle vorhandenen Eigenschaften eines Prims zugreifen. Optimierter, schnellerer Code. Kein Chat oder LinkedMessages zwischen Prims mehr erforderlich.

Ein besonderer Hinweis zu llGetObjectLinkKey : Diese Funktion wurde im September 2022 eingeführt und ist der Kleber, den Sie benötigen, um auf Prims außerhalb des Linksets zuzugreifen. Sobald Sie die ID eines externen Objekts erhalten haben (vielleicht mit llSensor), können Sie llGetObjectPrimCount aufrufen (bedenken Sie auch osGetPrimCount, das sitzende Avatare nicht zählt) und dann mit llGetObjectLinkKey iterieren, um die ID jedes Prims im Remote-Objekt zu erhalten. Wenden Sie abschließend osGet/SetPrimitiveParams an.

In den folgenden Tabellen wird versucht, die zur Manipulation von Prims verfügbaren Funktionen für jede Adressierungsmethode zu sortieren.


Ziel ist der Host des Skripts
(Prim, der das Skript enthält)
Ziel ist die Linknummer
(innerhalb des Linksets)
Ziel ist die Prim-ID
(jedes Prim, das Sie in der Szene besitzen)
llGetOwner
llGetKey llGetLinkKey(num)
llSetText
llGetRot / llSetRot
llGetScale / llSetScale
llGetAlpha / llSetAlpha llSetLinkAlpha(num)
llGetColor / llSetColor llSetLinkColor(num)
llGetPos / llSetPos
llGetObjectName / llSetObjectName llGetLinkName(num)
llGetObjectDesc / llSetObjectDesc
llGetNumberOfSides llGetLinkNumberOfSides(num)
llGetTexture / llSetTexture llSetLinkTexture(num)
llSetTextureAnim llSetLinkTextureAnim(num)
llParticleSystem llLinkParticleSystem(num)
llSetPrimMediaParams llSetLinkMedia(num)
llGetObjectPrimCount(uuid)
llGetObjectDetails(uuid)
llGetObjectLinkKey(uuid,num)
"Universeller“ Zugriff (Regelliste)
llGet/SetPrimitiveParams llGet/SetLinkPrimitiveParams(num) osGet/SetPrimitiveParams(uuid)


[edit] Beispiel: Ein Replikator

Fügen Sie dieses Skript zusammen mit einem Single-Prim-Objekt namens „seed“ in eine Box ein.

Es iteriert auf jedem Prim eines benannten Objekts, das Sie in der Szene besitzen, und rezerrt dann ein identisches Prim mit einem bestimmten Offset,

wodurch das Quellobjekt, sogar die Netze, perfekt repliziert wird. Sleeps sind zur Demo hier.

Entfernen Sie sie für eine schnelle Replikation. Mit der CLEANUP-Option werden gelöschte Prims entfernt.

string targetName = "Example"; // Name des Zielobjekts, das dupliziert werden soll
string seedName = "seed";      // Name des Ausgangs-Prims, der dupliziert werden soll
vector offset = <5,0,0>;       // Versatz für die Duplikate
 
 
integer primcnt;                // Anzahl der Prims im Wurzelobjekt
integer primnum;                // Aktuelle Nummer des zu kopierenden Prims
key rootKey;                    // Schlüssel des Wurzelobjekts
 
// Funktion zur Bestimmung der Länge eines Tupels basierend auf dem Parameter
integer TupleLength (integer param)
{
    if (param == PRIM_GLOW)       return 1;
    if (param == PRIM_COLOR)      return 2;
    if (param == PRIM_TEXGEN)     return 1;
    if (param == PRIM_TEXTURE)    return 4;
    if (param == PRIM_NORMAL)     return 4;
    if (param == PRIM_SPECULAR)   return 7;
    if (param == PRIM_BUMP_SHINY) return 2;
    if (param == PRIM_FULLBRIGHT) return 1;
 
    return 0; // Not a by-side parameter
}
 
// Funktion zum Iterieren durch die Seiten (Faces) eines Prims und Rückgabe der Parametertupel für jede Seite
list IterateFaces (list p, integer param)
{
    integer tuplelength = TupleLength (param);
    integer numsides =  llGetListLength(p) / tuplelength;
 
    // Une seule face, retourner [ param, ALL_SIDES, p ]
    if (numsides == 1) return [ param, ALL_SIDES ] + p;
 
    list result = [ ];
    for (integer s=0; s<numsides; s++) {
        list tuple = llList2List (p, s*tuplelength, (s+1)*tuplelength-1);
        result += [ param, s ] + tuple;
    }  
    return result;
}
 
// Funktion zum Kopieren der Parameter eines Prims von einer Quelle zu einem Ziel
CopyParams (key srcprim, key dstprim, integer param) {
    if (TupleLength(param) == 0)
    {
        list p = osGetPrimitiveParams (srcprim, [ param ]);
        if (param == PRIM_POSITION) p = [ llList2Vector (p,0) + offset ];
        osSetPrimitiveParams (dstprim, [ param ] + p);
    }
    else
    {
        list p = osGetPrimitiveParams (srcprim, [ param, ALL_SIDES ]);
        p = IterateFaces (p, param);
        osSetPrimitiveParams (dstprim, p);
    }
    llSleep (0.1);
}
 
// Funktion zum Erstellen eines neuen Prims
RezAPrim ()
{
    if (++primnum > primcnt) llResetScript();
    llRezObject (seedName, llGetPos()+<0,0,1>, ZERO_VECTOR, ZERO_ROTATION, 0);
}
 
// Funktion, die aufgerufen wird, wenn ein Prim rezisiert wurde
// Kopiert die Parameter des ursprünglichen Prims auf den rezisierten Prim
PrimRezed (key dstkey)
{
    llOwnerSay ("Processing link "+(string)primnum+" of "+(string)primcnt);
    key srckey = llGetObjectLinkKey (rootKey, primnum);
    llSleep (0.1);
 
    CopyParams (srckey, dstkey, PRIM_POSITION);
    CopyParams (srckey, dstkey, PRIM_ROTATION);
    CopyParams (srckey, dstkey, PRIM_TYPE);
    CopyParams (srckey, dstkey, PRIM_SIZE);
    CopyParams (srckey, dstkey, PRIM_COLOR);
    CopyParams (srckey, dstkey, PRIM_TEXTURE);
    CopyParams (srckey, dstkey, PRIM_NORMAL);
    CopyParams (srckey, dstkey, PRIM_SPECULAR);
    CopyParams (srckey, dstkey, PRIM_TEXGEN);
    CopyParams (srckey, dstkey, PRIM_BUMP_SHINY);
    CopyParams (srckey, dstkey, PRIM_FULLBRIGHT);
    CopyParams (srckey, dstkey, PRIM_PHYSICS_SHAPE_TYPE);
 
    RezAPrim ();
}
 
// Funktion zum Abrufen des Besitzers eines Objekts anhand der Objekt-ID
key OwnerOf (key id)
{
    list l = llGetObjectDetails (id, [ OBJECT_OWNER ]);
    return llList2Key (l, 0);
}
 
 
default
{
    state_entry()
    {
        // Initialisierung des Skripts
        llSetText ("READY", <0,1,0>, 1.0);
    }
 
    touch_start (integer n)
    {
        // Wenn das Objekt berührt wird, wechselt der Zustand in den Dialog-Modus
        state dialog;
    }
}
 
 
integer dlgchan = 99;
integer dlglistener;
state dialog
{
    state_entry()
    {
        // Initialisierung des Dialog-Modus
        llSetText ("LISTENING", <0,1,0>, 1.0);
        llDialog (llGetOwner(), "Action?", ["CLEANUP", "REPLICATE"], dlgchan);
        dlglistener = llListen (dlgchan, "", llGetOwner(), "");
        llSetTimerEvent (10);
    }
 
    // Abhören von Dialognachrichten und Auslösen entsprechender Aktionen
    listen (integer chan, string name, key id, string msg)
    {
        if (msg == "CLEANUP")   state cleanup;
        if (msg == "REPLICATE") state replicate;
    }
 
    timer ()
    {
        // Timer-Ereignis zum Zurückkehren in den Standardzustand nach einer bestimmten Zeit
        state default;
    }
 
    state_exit ()
    {
        // Aufräumen beim Verlassen des Dialog-Modus
        llSetTimerEvent (0.0);
        llListenRemove (dlglistener);
    }
}
 
 
state cleanup
{
    state_entry()
    {
        // Zustand für die Bereinigung von Prims
        llSetText ("CLEANUP", <0,1,0>, 1.0);
        llSensor (seedName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
    }
 
    sensor (integer num) {
        // Ereignis, das ausgelöst wird, wenn Sensoren aktiv sind
        llOwnerSay ("Garbage collecting "+(string)num);
        for (integer i=0; i<num; i++) osDie (llDetectedKey(i));
        state default;
    }
 
    no_sensor() {
        // Ereignis, das ausgelöst wird, wenn keine Sensoren aktiv sind
        llOwnerSay ("All clean.");
        state default;
    }
}
 
 
state replicate
{
    state_entry()
    {
        // Zustand für die Replikation von Prims
        llSetText ("REPLICATE", <0,1,0>, 1.0);
        llSensor (targetName, NULL_KEY, PASSIVE|SCRIPTED, 100, PI);
    }
 
    sensor (integer num) {
        // Ereignis, das ausgelöst wird, wenn Sensoren aktiv sind
        rootKey = llDetectedKey (0);
 
        if (OwnerOf(rootKey) != llGetOwner())
        {
            llOwnerSay ("I don't own "+targetName+". Aborting.");
            state default;
        }
 
        primcnt = llGetObjectPrimCount (rootKey);
        primnum = 0; RezAPrim ();
    }
 
    no_sensor() {
        // Ereignis, das ausgelöst wird, wenn keine Sensoren aktiv sind
        llOwnerSay ("Object "+targetName+" was not found.");
        state default;
    }
 
    object_rez (key uuid) {
        // Ereignis, das ausgelöst wird, wenn ein Objekt rezisiert wird
        PrimRezed (uuid);
    }
}

[edit] Schreibzugriffsmethoden

Die Funktionsfamilie Get/SetPrimitiveParams ist unglaublich leistungsstark.

Es ist auch ziemlich geheimnisvoll zu schreiben und zu entschlüsseln.

Eine Möglichkeit, diese langen Parameterlisten loszuwerden, die Ihren Code überladen, besteht darin,

Get/SetPrimitiveParams in einzelne get/set-Accessoren zu kapseln und so tatsächlich die Lücken in der obigen Tabelle zu füllen.

Obwohl dies sehr angenehm zu lesen ist, beachten Sie, dass dies die Leistung beeinträchtigen kann,

wenn Sie viele Eigenschaften auf einmal ändern möchten, was SetPrimitiveParams in einem Aufruf tun kann.

Als Beispiel wird die folgende Bibliothek angeboten.

// Indizes der Eigenschaften für PRIM_TYPE_BOX, PRIM_TYPE_CYLINDER, PRIM_TYPE_PRISM
 
integer INDEX_TYPE      = 0; // Typ
integer INDEX_HOLE      = 1; // Lochgröße
integer INDEX_CUT       = 2; // Schnittgröße
integer INDEX_HOLLOW    = 3; // Leeregröße
integer INDEX_TWIST     = 4; // Verdrehung
integer INDEX_TAPER     = 5; // Zulauf
integer INDEX_SHEAR     = 6; // Scherung
 
// Indizes der Eigenschaften für PRIM_TEXTURE
 
integer INDEX_TEXTURE   = 0; // Textur
integer INDEX_REPEATS   = 1; // Wiederholungen
integer INDEX_OFFSETS   = 2; // Versatz
integer INDEX_ROTATION  = 3; // Rotation
 
// Indizes der Eigenschaften für PRIM_COLOR 
//                client        script
//          +---------------+------------+
//  Taper   | -1.0 0  +1.0  |  2.0   0.0 | 
//  Shear   | -0.5 0  +0.5  | -0.5  +0.5 |
//  Twist   | -180 0  +180  | -1.0  +1.0 | 
//          +---------------+------------+
 
 
// Set-Methoden
 
mySetLinkName (integer link, string text) {
    // Setzt den Namen eines Links
    llSetLinkPrimitiveParamsFast (link, [PRIM_NAME, text]);
}
 
mySetLinkDesc (integer link, string text) {
    // Setzt die Beschreibung eines Links
    llSetLinkPrimitiveParamsFast (link, [PRIM_DESC, text]);
}
 
mySetLinkText (integer link, string text, vector color) {
    // Setzt den Text eines Links mit Farbe
    llSetLinkPrimitiveParamsFast (link, [PRIM_TEXT, text, color, 1.0]);
}
 
mySetLinkColor (integer link, vector color, integer face) {
    // Setzt die Farbe eines Links für eine bestimmte Seite
    llSetLinkPrimitiveParamsFast (link, [PRIM_COLOR, face, color, 1.0]);
}
 
mySetLinkBright (integer link, integer bright, integer face) {
    // Setzt die Helligkeit eines Links für eine bestimmte Seite
    llSetLinkPrimitiveParamsFast (link, [PRIM_FULLBRIGHT, face, bright]);
}
 
mySetLinkGlow (integer link, float glow, integer face) {
    // Setzt das Leuchten eines Links für eine bestimmte Seite
    llSetLinkPrimitiveParamsFast (link, [PRIM_GLOW, face, glow]);
}
 
// Die folgenden drei funktionieren nicht für ALL_SIDES
 
mySetLinkTexture (integer link, key texture, integer face) {
    // Setzt die Textur eines Links für eine bestimmte Seite
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    l = llListReplaceList(l, [texture], INDEX_TEXTURE, INDEX_TEXTURE);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
}
 
mySetLinkRepeat (integer link, vector repeat, integer face) {
    // Setzt die Texturwiederholungen eines Links für eine bestimmte Seite
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    l = llListReplaceList(l, [repeat], INDEX_REPEATS, INDEX_REPEATS);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
}
 
mySetLinkOffset (integer link, vector offset, integer face) {
    // Setzt den Texturversatz eines Links für eine bestimmte Seite
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    l = llListReplaceList(l, [offset], INDEX_OFFSETS, INDEX_OFFSETS);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TEXTURE, face] + l);
}
 
mySetLinkPos (integer link, vector pos) {
    // Setzt die Position eines Links relativ zum Elternobjekt
    llSetLinkPrimitiveParamsFast (link, [PRIM_POS_LOCAL, pos]);
}
 
mySetLinkRot (integer link, rotation rot) {
    // Setzt die Rotation eines Links relativ zum Elternobjekt
    llSetLinkPrimitiveParamsFast (link, [PRIM_ROT_LOCAL, rot]);
}
 
mySetLinkSize (integer link, vector size) {
    // Setzt die Größe eines Links
    llSetLinkPrimitiveParamsFast (link, [PRIM_SIZE, size]);
}
 
mySetLinkCut (integer link, vector cut) {
    // Setzt den Schnitt eines Links (nur für Boxen, Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    l = llListReplaceList(l, [cut], INDEX_CUT, INDEX_CUT);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
}
 
mySetLinkTwist (integer link, vector twist) {
    // Setzt die Verdrehung eines Links (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    l = llListReplaceList(l, [twist], INDEX_TWIST, INDEX_TWIST);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
}
 
mySetLinkTaper (integer link, vector taper) {
    // Setzt den Zulauf eines Links (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    l = llListReplaceList(l, [taper], INDEX_TAPER, INDEX_TAPER);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
}
 
mySetLinkShear (integer link, vector shear) {
    // Setzt die Scherung eines Links (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    l = llListReplaceList(l, [shear], INDEX_SHEAR, INDEX_SHEAR);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
}
 
mySetLinkHollow (integer link, float hollow) {
    // Setzt die Hohlheit eines Links (nur für Boxen, Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    l = llListReplaceList(l, [hollow], INDEX_HOLLOW, INDEX_HOLLOW);
    llSetLinkPrimitiveParamsFast (link, [PRIM_TYPE] + l);
}
 
// Get-Methoden
 
string myGetLinkName (integer link) {
    // Gibt den Namen eines Links zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_NAME]);
    return llList2String (l,0);
}
 
string myGetLinkDesc (integer link) {
    // Gibt die Beschreibung eines Links zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_DESC]);
    return llList2String (l,0);
}
 
string myGetLinkText (integer link) {
    // Gibt den Text eines Links zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXT]);
    return llList2String (l,0);
}
 
vector myGetLinkColor (integer link, integer face) {
     // Gibt die Farbe eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_COLOR, face]);
    return llList2Vector (l,0);
}
 
integer myGetLinkBright (integer link, integer face) {
    // Gibt die Helligkeit eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_FULLBRIGHT, face]);
    return llList2Integer (l,0);
}
 
float myGetLinkGlow (integer link, integer face) {
    // Gibt das Leuchten eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_GLOW, face]);
    return llList2Float (l,0);
}
 
key myGetLinkTexture (integer link, integer face) {
    // Gibt die Textur eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    return llList2Key(l,0);
}
 
vector myGetLinkRepeat (integer link, integer face) {
    // Gibt die Texturwiederholungen eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    return llList2Vector(l,1);
}
 
vector myGetLinkOffset (integer link, integer face) {
    // Gibt den Texturversatz eines Links für eine bestimmte Seite zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_TEXTURE, face]);
    return llList2Vector(l,2);
}
 
vector myGetLinkPos (integer link) {
    // Gibt die Position eines Links relativ zum Elternobjekt zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_POS_LOCAL]);
    return llList2Vector (l,0);
}
 
vector myGetLinkSize (integer link) {
    // Gibt die Größe eines Links zurück
    list l = llGetLinkPrimitiveParams (link, [PRIM_SIZE]);
    return llList2Vector (l,0);
}
 
vector myGetLinkCut (integer link) {
    // Gibt den Schnitt eines Links zurück (nur für Boxen, Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    return llList2Vector (l, INDEX_CUT);
}
 
vector myGetLinkTwist (integer link) {
    // Gibt die Verdrehung eines Links zurück (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    return llList2Vector (l, INDEX_TWIST);
}
 
vector myGetLinkTaper (integer link) {
    // Gibt den Zulauf eines Links zurück (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    return llList2Vector (l, INDEX_TAPER);
}
 
vector myGetLinkShear (integer link) {
    // Gibt die Scherung eines Links zurück (nur für Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    return llList2Vector (l, INDEX_SHEAR);
}
 
float myGetLinkHollow (integer link) {
    // Gibt die Hohlheit eines Links zurück (nur für Boxen, Zylinder und Prismen)
    list l = llGetLinkPrimitiveParams (link, [PRIM_TYPE]);
    return llList2Float (l, INDEX_HOLLOW);
}
Personal tools
General
About This Wiki