LSL Protocol/RestrainedLoveAPI/de
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Restrained Love Viewer v2.8.1 Spezifikation
Original von Marine Kelley. Deutsche Übersetzung zur Zeit in Arbeit.
Um Mithilfe bei der Übersetzung wird gebeten. Bitte in-world Laura Eun kontaktieren!
Zielgruppe
Dieses Dokument ist für Leute, die vorhaben ihre eigenen LSL Scripte zu modifizieren oder zu erstellen, um die Vorteile des RestrainedLove viewer zu nutzen. Es erklärt weder die LSL Konzepte wie "messages" oder "events", noch universelle Konzepte wie UUIDs.
Dieses Konzept enthält die Spezifiaktionen für den RestrainedLove Viewer selbst. Wenn Du Informationen zum RestrainedLove viewer relay(RLV relay) benötigst, dann siehe bitte die RLV relay specification an.
Einleitung
Der RestrainedLove Viewer ändert sein Verhalten, wenn er spezielle Nachrichten von Scripten in-world erhält. Diese Nachrichten werden meist durch die llOwnerSay() LSL Funktion übermittelt.
Architektur
Der RestrainedLove Viewer hört alle llOwnerSay Nachrichten an den Viewer ab. Zeilen die mit dem at-Zeichen ('@') beginnen werden als RLV Kommando behandelt. Andere Zeilen werden wie gewohnt im lokalen Chat Fenster an den Benutzer weitergeleitet. Zum Beispiel wird llOwnerSay ("@detach=n") das detach Kommando mit dem Parameter n im Auftrag des Objekt in dem das Script läuft an den Viewer senden.
Die Syntax eine Nachricht ist:
@<command1>[:option1]=<param1>,<command2>[:option2]=<param2>,...,<commandN>[:optionN]=<paramN>
Beachte, dass dort nur ein '@' Zeichen an den Anfang der Nachricht gestellt wurde. Der Viewer interpretiert dieses als "die gesamte llOwnerSay() Nachricht enthält eine oder mehr Kommandos zum ausführen". Aus dokumentarischen Gründen werden hier Kommandos immer mit dem führenden '@' dargestellt. Wie auch immer ist es ein Fehler das '@' vor jedes Kommando innerhalb einer Multi-Kommanod Nachricht zu setzen, denn die nachfolgende Nachricht wird scheitern.
- Historischer Hinweis: Vor Version 1.10 erlaubte RLV nur ein Kommando pro Nachricht. Version 1.10 wurde die Möglichkeit hinzugefügt mehrere Kommandos in einer Nachricht zu senden, um zu vermeiden dass Benutzer, die den Viewer nicht benutzen, gespammt werden.
Wenn mindestens ein Kommando scheitert (z.B. ein Schreibfehler) sagt der Viewer "... fails command : ... " und zeigt die gesamte Nachricht. Jedoch werden korrekte Kommandos weiterhin umgewandelt und ausgeführt, nur das Unkorrekte wird ignoriert.
Viele dieser Kommandos legen das nachfolgende Verhalten des Objekt oder Avatars fest. Zum Beispiel wird das @detach=n Kommando das vorhanden Objekt locken und macht es unabnehmbar. Einige Kommandos setzen globale Verhalten, die nicht auf das Objekt beschränkt sind, dass das Kommando sendet. Zum Beispiel wird @sendchat=n den Benutzer daran hindern im lokalen Chat zu sprechen.
Hinweis für Kommandos mit Aunahmen, wie @sendim oder @sendchannel... @(rule):(exception)=n wird aktuell eine Ausnahme hinzufügen für die genannte Regel. @sendchannel:1=n, zum Beispiel, erlaubt Chat auf Kanal 1. Dies ist der Grund für mindestens zwei Scripter Unregelmässigkeiten. =add (was das Gleiche bedeutet wie =n) und =rem (was gleich ist mit =y) existieren für den Zweck um Ausnahmen hinzuzufügen und wieder zu entfernen, Benutze .
Warning! | |
Diese Verhaltensweisen sind nicht beständig zwischen zwei Sessions. Da ein Objekt bei jedem rezzen die UUID wechselt, muss das Objekt den Status erneut im on_rez() Event senden (unabnehmbar, verhindern von IMs...)und auch wann immer es seinen Status ändert. |
Liste der Kommandos
Himweis: Diese Kommandos sind nicht case-sensitive, aber leerraum-sensitive. Mit anderen Worten wird "@detach = n" nicht funktionieren.
Darstellungskonvention: Parameter in [eckigen Klammern] sind optionale Parameter und können ausgelassen werden. Der Schlot | und Schrägstrich / trennen Optionen von denen eine genutzt werden muss. <Spitze Klammern> schließen zwingende Parameter ein.
Versions Prüfung
- Automatische Versions Prüfung : "@version=<channel_number>"
Eingeführt in v1.0b
Lässt den Viewer automatisch die verwendete Version der RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Warnung : beim einloggen geschieht das on_rez Event lang bevor der Avatar Nachrichten versenden kann (ungefähr bei der Hälfte der Login Bar). Das bedeutet, dass der Timeout lang genug sein sollte, zwischen 30 Sekunden und 1 Minute lang um die automtische Antwort vom Viewer zu erhalten.
Warnung 2 : Am 02/22/2010, hat Linden Lab ihre Third Party Viewer Policy veröffentlicht, die es verbietet den Begriff "Life" im Namen eines Third Party Viewers zu verwenden. Deswegen musste "Restrained Life" in "Restrained Love" umbenannt werden. Aus Kompabilitätsgründen wird @version trotzdem auch weiterhin funktionieren, jedoch solltest Du es nicht in neuen Scripten verwenden und nirgendwo den Begriff "Restrained Life" dem User anzeigen. Für neue Scripte solltest Du stattdessen @versionnew verwenden.
- Automatische Versions Prüfung : "@versionnew=<channel_number>"
Eingeführt in v1.23
Lässt den Viewer automatisch die verwendete Version der RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Dieses Kommando ist der Nachfolger von @version und ersetzt es, obwohl @version für die Aufwärtskompabilität bestehen bleibt. Es gibt "RestrainedLove viewer v... (SL ...)" ("RestrainedLove" ist ein Wort) zurück.
Warnung : beim einloggen geschieht das on_rez Event lang bevor der Avatar Nachrichten versenden kann (ungefähr bei der Hälfte der Login Bar). Das bedeutet, dass der Timeout lang genug sein sollte, zwischen 30 Sekunden und 1 Minute lang um die automtische Antwort vom Viewer zu erhalten.
- Automatische Versions Nummer Prüfung : "@versionnum=<channel_number>"
Eingeführt in v1.21
Lässt den Viewer automatisch die verwendete Version Nummer der RLV API (bitte beachte, das dies unterschiedlich ist zur Version vom Viewer, aber das Script sollte sich nicht drum kümmern) auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Dieses Kommando ist weniger schwerfällig als @version, weil das Script nicht erst die Antwort verarbeiten muss, es erhält die Nummer sofort.
Die Versions Nummer ist bloss eine Zahl, die die Version der API darstellt. Wenn die Version X.Y.Z.P ist, dann ist die Nummer X.10^6 + Y.10^4 + Z.10^2 + P. Als Beispiel, 1.21.1 würde 1210100 sein.
- Automatische Versions Prüfung, zweiter Weg : llGetAgentLanguage (key id) ÜBERHOLT: NICHT BENUTZEN !
Eingeführt in v1.16
Wenn man diese LSL Funktion aufruft, bekommt man das Ergebnis sofort (es wird kein listener oder timer benötigt), es ist exakt gleich zu dem Ergebnis von "@version" und kann vom Benutzer nicht ausgeblendet werden. Dieser String übernimmt den Platz der Sprache die vom normalen Viewer zurück kommt, der Werte wie "en-us", "fr", "ko" etc zurückgeben könnte. Oder auch nichts, falls der Benutzer sich entschieden hat seine Spracheinstellung zu verstecken. Es ist optional im normalen Viewer und kann nicht von Scripten sicher verwendet werden, also macht das "entführen" dieses Features für die viel nützlichere und synchrone Versions Prüfung im RLV Sinn. WICHTIGER HINWEIS: dieses Feature kann nicht in Viewern vor v1.21 verwendet werden, selbst wenn diese RestrainedLove 1.16 verwenden. Also stelle sicher, dass Du auf die @version Methode zurück fällst wann immer llGetAgentLanguage() einen leeren String zurückgibt. BEACHTE AUCH: In RestrainedLove 1.16, llGetAgentLanguage() wird während des Logins bei on_rez einen leeren String zurückgeben, solange der Aufruf nicht um mehrere Sekunden verzögert wird (wie viele Sekunden kann unterschiedlich sein). ABSCHLIESSENDER HINWEIS: Dieses Feature wurde in v1.16.1 entfernt (und v1.16b, für den Cool SL Viewer).
- Manuelle Versions Prüfung : "@version"
Eingeführt in v1.0a
Dieses Kommando muss in IM vom Avatar zu einem Benutzer gesendet werden (wird nicht von einem Objekt funktionieren). Der Viewer antwortet sofort mit seiner Version an den Sender der IM, aber weder die Nachricht noch die Antwort erscheint im IM Fenster des Benutzers, also ist es absolut unsichtbar.
Blacklist Handhabung
Die Blacklist (eingeführt in v2.8) ist eine Liste von RLV Kommandos die der Viewer ignorieren soll. Es ist jederzeit modifizierbar, aber ein Neustart ist notwendig um die Änderungen zu übernehmen. Wenn ein Kommando ausgegeben wird und Teil der Blacklist it, wird es einfach ignoriert. Bearbeiten der Blacklist wird nicht bestehende Restriktionen aufheben wenn sie einmal ausgeführt wurden. Ein Neustart ist notwendig. Wenn ein Kommando erhalten wird, wird eine positive Bestätigung an das Script gesendet ob das Kommando aktuell angenommen wurde oder nicht. Auf diese Weise würden Scripte, die auf Benachrichtigungen warten, nicht anhalten wenn sie eine Ablehnung nicht händeln können.
- Automatische Versionsnummer Prüfung, gefolgt von der Blacklist : "@versionnumbl=<channel_number>"
Eingeführt in v2.8
Lässt den Viewer automatisch die Versionsnummer der integrierten RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört (bitte beachte, das dies unterschiedlich ist zur Version vom Viewer, aber das Script sollte sich nicht drum kümmern), gefolgt von einem Komma (",") und dem Inhalt der Blacklist. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Dieses Kommando ist weniger schwerfällig als @version gefolgt von @getblacklist, weil das Script nicht erst die Antwort verarbeiten muss, es erhält die Versionsnummer sofort und es muss keine zweite asynchrone Anfrage gesendet werden, wenn die erste beantwortet wurde.
Als Beispiel "@versionnumbl=2222" wird "2080000,sendim,recvim" antworten, wenn die Blacklist aktuell "sendim,recvim" ist. LSL erlaubt so einen String ohne Probleme als Zahl auszugeben. Es wird 2080000 zurückgeben und das erste Komma und alles danach entfernen.
- Den Inhalt der Blacklist mit einem Filter erhalten : "@getblacklist[:filter]=<channel_number>"
Eingeführt in v2.8
Lässt den Viewer automatisch mit dem Inhalt der Blacklist (wenn ein Filter gesetzt ist, dann sind nur die Kommandos die diesen Text enthalten Teil der Antwort) auf der Chat Kanal Nummer <channel_number> antworten auf die das Script hört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
- Manuelle Blacklist Prüfung : "@getblacklist"
Eingeführt in v2.8
Dieses Kommando muss in IM von einem Avatar an den Benutzer gesendet werden (funktioniert nicht von einem Objekt). Der Viewer antwortet automatisch mit dem Inhalt der Blacklist an den Sender der IM, aber weder die Nachricht noch die Antwort erscheint im IM Fenster des Benutzer, es ist also vollkommen unsichtbar.
Verschiedenes
- Start/stop Benachrichtigungen auf einem privaten Kanal : "@notify:<channel_number>[;word]=<rem/add>"
Eingeführt in v1.20, verbessert in v2.2 (und v1.24)
Lässt den Viewer automatisch jede Restriktion auf dem genannten Kanal wiederholen, die er hinzufügt oder entfernt, oder nur die Restriktionen dessen Name das Wort enthält, das nach dem Semikolon (";") genannt ist. Der Antwort auf dem privaten Kanal <channel_number> ist ein Slash ("/") vorangestellt, um zu vermeiden, dass der Avatar Kommandos an andere Scripte sendet ohne dass er es weiss und wird gefolgt von einem Gleichheitszeichen ("=") und "n" oder "y" abhängig davon ob die Restriktion gesetzt oder aufgehoben wurde. Das "@clear" Kommando wird kein Gleichheitszeichen hinzufügen. Es gibt keine Möglichkeit zu wissen welches Objekt die Restriktion gesetzt oder aufgehoben hat, um die Weitergabe von zu vielen Informationen von anderen Scripten zu vermeiden. Es wiederholt auch nicht Einmal-Kommandos. Zum Beispiel bei "@notify:2222;detach=add" wird "/detach=n" wenn das Objekt gelockt ist und "/detach=y" wenn das Objekt entlockt ist auf dem Kanal 2222 gesendet auf das das Script hört.
Hinweis : Seit v2.2 (und v1.24) kannst Du auch Benachrichtigungen für Inventarangebote setzen. Wenn Dein Objekt ein Teil oder Ordner übergibt und der Avatar benutzt RLV v2.2 (and v1.24) oder höher wird automatisch eine der folgenden Antworten auf dem gesetzten Kanal gesendet :
- /accepted_in_rlv inv_offer <folder> : Der Ordner wurde akzeptiert und ist nun unter #RLV verfügbar (vergiss nicht, dass der Viewer es umbenennt und den Prefix "#RLV/" entfernt).
- /accepted_in_inv inv_offer <folder> : Der Ordner wurde akzeptiert ist aber nicht geteilt.
- /declined inv_offer <folder> : Der Ordner wurde abgelehnt und/oder der Benutzer hat "Block" gedrückt (früher "Mute").
Wobei <folder> der volle Pfad des Ordners oder des gegebenen Teils ist. Als Beispiel #RLV/~MyCuffs. Es ist eine Leerstelle vor "inv_offer" welches als Zeichen gewählt wurde um dort eine Benachrichtigung zu setzen. Wenn Du wissen willst ob der Ordner mit dem Namen #RLV/~MyCuffs im #RLV Ordner akzeptiert wurde, sende ein "@notify:2222;accepted_in_rlv inv_offer #RLV/~MyCuffs=add" Kommando. Wenn Du nur wissen willst ob der Avatar irgendwas empfangen hat sende ein einfaches "@notify:2222;inv_offer=add" Kommando.
Hinweis 2 : Seit v2.5 sendet der Viewer ebenso Benachrichtigungen wenn Outfits angezogen werden :
- /worn legally <layer> : Der Avatar hat gerade ein Stück Kleidung an dem indizierten Layer angezogen.
- /unworn legally <layer> : Der Avatar hat gerade ein Stück Kleidung von dem indizierten Layer ausgezogen.
- /attached legally <attach_point_name> : Der Avatar hat gerade ein Objekt am indizierten Attachmentpunkt angehängt.
- /attached illegally <attach_point_name> : Der Avatar hat gerade ein Objekt an dem indizierten Attachmentpunkt angehängt, aber es war nicht erlaubt (möglicherweise hat ein Script es automatisch angehängt) und es wird in wenigen Sekunden wieder abgenommen.
- /detached legally <attach_point_name> : Der Avatar hat gerade ein Objekt vom indizierten Attachmentpunkt abgenommen.
- /detached illegally <attach_point_name> : Der Avatar hat gerade ein Objekt vom indizierten Attachmentpunkt abgenommen, aber es war nicht erlaubt (möglicherweise hat ein Script es gekickt) und es wird in wenigen Sekunden wieder angehängt.
- Erlauben/verbieten Ausnahmen zuzulassen : "@permissive=<y/n>"
Eingeführt in v1.21
Wenn verboten werden alle Restriktionen in ihr "sicheres" Gegenstück (soweit vorhanden) gewandelt. Das bedeutet, dass eine Ausnahme von einer Restriktion ignoriert wird, wenn es nicht vom gleichen Objekt gesetzt wird wie die Restriktion. Die Benutzung von nicht-sicheren Restriktionen (die Originalen, wie @sendim, @recvim etc) ohne die Benutzung von @permissive erlaubt dem Avatar von Ausnahmen aus anderen Objekten zu profitieren.
Warnung : Die Benutzung dieses Kommandos (oder andere sichere Versionen des Original Kommandos) könnte stillschweigend Ausnhamen von anderen Objekten verwerfen (es ist sogar der Hauptzweck), daher können einige Produkte erscheinen, dass sie nicht arbeiten wenn diese Restriktion dies beeinflusst. Als Beispiel ein produkt, dass dem Avatar erlaubt einem bestimmtem Freund immer IMs zu senden, wird nicht in der Lage sein ein @semdim_secoder ein @permissive Kommando von einem anderem Objekt zu überwinden und sieht aus wie kaputt. Deshalb benutze es mit Vorsicht und weise den Benutzer darauf hin wie sicher Dein Produkt ist !
- Löschen aller Regeln die an ein Objekt gebunden sind : "@clear"
Eingeführt in v1.0a, aber funktioniert erst seit v1.04a
Dieses Kommando löscht alle Restriktionen und Ausnahmen die an eine bestimmte UUID gebunden sind.
Warnung : wenn es standardmässig beim Abnehmen ausgeführt wird, kann es das automatische wieder anlegen verhindern wenn @defaultwear aktiv ist, weil @clear ebenso @detach=n aufhebt, deshalb denkt der Viewer dass das Teil, welches unabsichtlich durch eine default-wear-aktion abgelegt wurde, entlockt ist und wird es nicht wieder anhängen.
Mögliche Workarounds:
- hebe exakt nur die Restriktionen von Dir mit @clear=<pattern> auf
- verwende @clear nur beim Abnehmen wenn Du sicher bist, dass das Attachment nicht gelockt ist
- verwende nie @clear und warte auf den Viewer, dass die Restriktionen aufgehoben werden
- Löschen von ausgewählten Regeln von einem Objekt : "@clear=<string>"
Eingeführt in v1.0a, aber funktioniert erst seit v1.04a
Dieses Kommando löscht alle Restriktionen und Ausnahmen von einer bestimmten UUID, das den Namen <string> enthält. Ein gutes Beispiel wäre "@clear=tp" was alle teleport Restriktionen und Ausnahmen von diesem Objekt aufhebt, während "@clear=tplure:" nur die Ausnahmen für die "teleport-by-friend" Restriktionen aufhebt
- Liste der Restriktionen erhalten, die beim Avatar aktuell gesetzt sind : @getstatus[:<part_of_rule>[;<custom_separator>]]=<channel>
Eingeführt in v1.10, leicht angepasst in v1.16 und v2.8
Lässt den Viewer automatisch die Liste der Regeln, die der Avatar gerade untersteht, auf der Chat Kanal Nummer die das Script abhört antworten. Dies wird nur die Restriktionen enthalten, die durch das Objekt gesetzt wurden, das das Kommando sendet. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist eine Liste mit Regeln getrennt mit Slashes ("/") oder anderen Unterteilern wenn definiert. Achtung: seit v1.16 ist dem String ein Slash vorgestellt. Dies stört nicht llParseString2List() Aufrufe jedoch llParseStringKeepNulls() Aufrufe!
Seit v2.8 wird, wenn <custom_separator> spezifiziert ist, es den Slash("/") mit dem bestimmten Trenner ersetzt. Achtung, der options Teil muss vorhanden sein, dafür muss ein Doppelpunkt (":") vor dem Semikolon (";") sein selbst wenn <part_of_rule> nicht vorhanden ist.
Dieses Kommando ist nützlich für Leute die Scripte schreiben, die mit anderen Scripten im gleichen Objekt kollidieren könnten (zum Beispiel : Drittanbieter Plugins). Konflikte passieren nicht verschiedenen Objekten, darum antwortet dieses Kommando nur mit den Restriktionen von dem Objekt wo es aufgerufen wird.
<part_of_rule> ist der Name der Regel oder ein Teil davon, nützlich wenn das Script nur von bestimmten Restriktionen wissen muss.
Beispiel : Wenn der Avatar unter tploc, tplure, tplm und sittp ist, ist hier was das Script kriegen würde : @getstatus=2222 => /tploc/tplure/tplm/sittp @getstatus:sittp=2222 => /sittp @getstatus:tpl=2222 => /tploc/tplure/tplm (weil "tpl" ist Teil von "tploc", "tplure" und "tplm" aber nicht "sittp") @getstatus:tpl;#=2222 => #tploc#tplure#tplm (weil "tpl" ist Teil von "tploc", "tplure" und "tplm" aber nicht "sittp" und der gesetzte Trenner ist "#") @getstatus:;#=2222 => #tploc#tplure#tplm#sittp (weil der gesetzte Trenner "#" ist) @getstatus:;=2222 => /tploc/tplure/tplm/sittp (weil der gesetzte Trenner leer ist so ist es standardmässig "/")
- Liste von allen Restriktionen erhalten, die beim Avatar aktuell gesetzt sind : @getstatusall[:<part_of_rule>[;<custom_separator>]]=<channel>
Eingeführt in v1.15, leicht angepasst in v1.16 und v2.8
Lässt den Viewer automatisch die Liste der Regeln, die der Avatar gerade untersteht, auf der Chat Kanal Nummer die das Script abhört antworte. Im Gegensatz zu @getstatus für alle Objekte unabhängig von deren UUID. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist eine Liste mit Regeln getrennt mit Slashes ("/") oder anderen Unterteilern wenn definiert. Achtung: seit v1.16 ist dem String ein Slash vorgestellt. Dies stört nicht llParseString2List() Aufrufe jedoch llParseStringKeepNulls() Aufrufe!
Seit v2.8 wird, wenn <custom_separator> spezifiziert ist, es den Slash("/") mit dem bestimmten Trenner ersetzt. Achtung, der options Teil muss vorhanden sein, dafür muss ein Doppelpunkt (":") vor dem Semikolon (";") sein selbst wenn <part_of_rule> nicht vorhanden ist.
Bewegung
- Erlauben/verbieten zu fliegen : @fly=<y/n>
Eingeführt in v1.12.2
Wenn unterbunden, dann ist der Benutzer nicht in der Lage zu fliegen.
- Erlauben/verbieten rennen durch doppel-drücken einer Pfeiltaste : @temprun=<y/n>
Eingeführt in v2.7
Wenn unterbunden, dann ist der Benutzer nicht in der Lage durch doppel-drücken der Pfeiltaste zu rennen. Wenn Du den User insgesamt am Rennen hindern willst musst Du auch @alwaysrun benutzen
- Erlauben/verbieten von immer rennen : @alwaysrun=<y/n>
Eingeführt in v2.7
Wenn unterbunden, dann ist der Benutzer nicht in der Lage durch drücken von STRG+R in den Rennen Modus zu wechselnWhen prevented, the user is unable to switch running mode on by pressing Ctrl-R. Wenn Du den User insgesamt am Rennen hindern willst musst Du auch @temprun benutzen. Dieses Kommando ist nützlich wenn Du den Benutzer zwingen willst erst zu beschleunigen anstatt ständig zu rennen. Zum Beispiel während Kampf oder Sportspielen.
- Erzwingen den Avatar in eine bestimmte Richtung zu drehen : @setrot:<angle_in_radians>=force
Eingeführt in v1.17
Zwingt den Avatar in eine Richtung um einen Winkel im Bogenmaß aus dem Norden gesetzt zu drehen. Beachte, dass dieses Kommando nicht sehr präzise ist, noch dass es irgendwas tun wird, wenn die Aktion versucht den Avatar um weniger als 10° zu drehen (Versuchswert, es wurde irgendwo erwähnt, dass 6° das Minimale ist). Mit anderen Worten macht es Sinn erst mit llGetRot() zu prüfen der den Avatar zweimal zu drehen. Erst 180° plus dem gewünschten Winkel und dann den Winkel den wir brauchen. Es ist nicht sehr elegant aber es funktiniert.
- Ändern der Höhe vom Avatar : @adjustheight:<distance_pelvis_to_foot_in_meters>;<factor>[;delta_in_meters]=force
Eingeführt in v2.5
Zwingt den Avatar seine "Z-Offset" zu ändern, mit anderen Worten dessen Flughöhe. Dieser Wert kann mittlerweile durch eine Debug Einstellung in den meisten Third-Party Viewern geändert werden. Dieses Kommando erlaubt den automatischen Wechsel passend zur Animation.
Anstatt es hier komplett zu erklären, gehe zu diesem Link für weitere Info : [1]
Chat, Emotes und Instant Messages
Chat
- Erlauben/verbieten Chat Nachrichten zu senden : "@sendchat=<y/n>"
Eingeführt in v1.0b
Wenn unterbunden, wird alles verworfen was auf Kanal 0 geschrieben wird. Jedoch werden Emotes und Nachrichten mit einem Slash ("/") am Anfang durchgelassen aber gekürzt auf Strings von 30 und 15 Buchstaben (ändert sich wahrscheinlich später). Nachrichten mit speziellen Zeichen wie ()"-*=_^ sind verboten und werden verworfen. Wenn ein Punkt (".") vorhanden ist wird der Rest der Nachricht verworfen.
- Erlauben/verbieten zu rufen : "@chatshout=<y/n>"
Eingeführt in v1.15
Wenn unterbunden wird der Avatar normal chatten slebst wenn der Benutzer versucht zu rufen. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Erlauben/verbieten zu chatten in normaler Lautstärke : "@chatnormal=<y/n>"
Eingeführt in v1.15
Wenn unterbunden wird der Avatar flüstern selbst wenn der Benutzer versucht zu rufen oder normal zu chatten. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Erlauben/verbieten zu flüstern : "@chatwhisper=<y/n>"
Eingeführt in v1.15
Wenn unterbunden wird der Avatar normal chatten selbst wenn der Benutzer versucht zu flüstern. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Umleiten von öffentlichen Chat auf einen privaten Kanal : "@redirchat:<channel_number>=<rem/add>"
Eingeführt in v1.16
Wenn aktiv leitet diese Restriktion alles was der Benutzer auf dem öffentlichen Kanal ("/0") sagt auf den privaten Kanal um, der im Optionsfeld angegeben ist. Wenn mehrere Umleitungen gesetzt sind wird die Chat Nachricht an jeden Kanal geleitet. Es gilt nicht für Emotes und es wird keine Animationen starten (tippen starten, tippen stoppen, nicken) beim reden. Diese Restriktion ersetzt nicht @sendchannel. HINWEIS: Seit RLV v1.22.1 / RLVa 1.1.0, gab es einen Bug, wo qredirchat ebenso Emotes auf Kanal 0 gekürzt hat. Ein zusätzlicher @emote=add behebt diesen Effekt. Dieser Bug wirde im Cool SL Viewer ab v1.22g (allerdings hatte Marine's v1.23 immer noch den Bug) und RLV 2.0 gefixt (man kann sicher annehmen dass es in allen Viewern ab v1.24 und v2.0 behoben wurde).
- Erlauben/verbieten Chat Nachrichten zu erhalten : "@recvchat=<y/n>"
Eingeführt in v1.0b
Wenn unterbunden wird alles ausser Emotes was in öffentlichen Chat gehört wird verworfen.
- Erlauben/verbieten Chat Nachrichten zu erhalten, sicherer Weg : "@recvchat_sec=<y/n>"
Eingeführt in v1.21
Wenn unterbunden wird alles ausser Emotes was in öffentlichen Chat gehört wird verworfen. Dieses spezielle Kommando akzeptiert nur Ausnahmen vom selben Objekt, nicht wie der nicht sichere Weg die Ausnahmen von irgendeinem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen von der Chat Empfangs Restriktion : "@recvchat:<UUID>=<rem/add>"
Eingeführt in v1.01
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer Chat Nachrichten von dem Sender dessen UUID im Kommando spezifiziert wurde hören. Dies überwindet die Behinderung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten Chat Nachrichten von jemand speziellem zu erhalten : "@recvchatfrom:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25
Wenn unterbunden wird alles ausser Emotes was von dem spezifiziertem Avatar im öffentlichen Chat gehört wird verworfen.
Emotes
- Entfernen/hinzufügen einer Ausnahme zur Emote Abkürzung : "@emote=<rem/add>"
Eingeführt in v1.01
Wenn diese Ausnahme hinzugefügt wird, werden die Emotes nicht mehr abgeschnitten (Jedoch wird die Nachricht bei speziellen Zeichen weiterhin verworfen).
- Umleiten von öffentlichen Emotes auf einen privaten Kanal : "@rediremote:<channel_number>=<rem/add>"
Eingeführt in v1.19
Wenn aktiv wird diese Restriktion alle Emotes die der Benutzer auf dem öffentlichen Kanal ("/0") sagt auf dem im Optionsfeld angegebenen privaten Kanal umgeleitet. Wenn mehrere Umleitungen gesetzt wurden, wird es auf jeden Kanal umgeleitet.
- Erlauben/verbieten Emotes zu sehen : "@recvemote=<y/n>"
Eingeführt in v1.19
Wenn unterbunden wird jede Emote im öffentlichen Chat verworfen.
- Erlauben/verbieten des Erhaltens von Emotes aus dem Public Chat von jemand Speziellem : "@recvemotefrom:<UUID>=<y/n>"
Eingeführt in v2.4
Wenn unterbunden werden alle Emotes im öffentlichen Chat von dem spezifizierten Avatar verworfen.
- Erlauben/verbieten des Erhaltens von Emotes aus dem Public Chat von jemand Speziellem : "@recvemotefrom:<UUID>=<y/n>"
Eingeführt in v2.4
Wenn unterbunden werden alle Emotes im öffentlichen Chat von dem spezifizierten Avatar verworfen.
- Erlauben/verbieten Emotes zu sehen, sicherer Weg : "@recvemote_sec=<y/n>"
Eingeführt in v1.21
Wenn unterbunden wird jede Emote im öffentlichen Chat verworfen. Dieses spezielle Kommando akzeptiert nur Ausnahmen vom selben Objekt, nicht wie der nicht sichere Weg der Ausnahmen von irgendeinem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen von der Einschränkung Emote zu sehen : "@recvemote:<UUID>=<rem/add>"
Eingeführt in v1.19
Wenn eine Ausnahme hinzugefügt wird kann der Benutzer die Emotes von dem Sender sehen, dessen UUID im Kommando genannt ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
Private Kanäle
- Erlauben/verbieten der Benutzung von allen Chat Kanälen ausser bestimmten Kanälen : @sendchannel[:<channel>]=<y/n>
Eingeführt in v1.10
Ergänzung von @sendchat, dieses Kommando hindert den Benutzer daran Nachrichten auf nicht öffentlichen Kanälen zu senden. Wenn <channel> benannt wurde, wird es zu einer Ausnahme der vorgenannten Restriktion (dann ist es besser "rem" oder "add" anstatt von "y" oder "n" zu nutzen). Es behindert nicht die automatischen Viewer Antworten wie @version=nnnn, @getstatus=nnnn etc.
- Erlauben/verbieten der Benutzung von allen Chat Kanälen ausser bestimmten Kanälen, sicherer Weg : @sendchannel_sec[:<channel>]=<y/n>
Eingeführt in v1.10
Ergänzung von @sendchat, dieses Kommando hindert den Benutzer daran Nachrichten auf nicht öffentlichen Kanälen zu senden. Wenn <channel> benannt wurde, wird es zu einer Ausnahme der vorgenannten Restriktion (dann ist es besser "rem" oder "add" anstatt von "y" oder "n" zu nutzen). Es behindert nicht die automatischen Viewer Antworten wie @version=nnnn, @getstatus=nnnn etc. Dieses bestimmte Kommando erlaubt nur Ausnahmen vom gleichen Objekt, nicht wie die unsichere Version die Ausnahmen von jedem Objekt zulässt.
Instant Messages
- Erlauben/verbieten Instant Messages zu senden : "@sendim=<y/n>"
Eingeführt in v1.0b
Wenn unterbunden wird alles was in IM geschrieben verworfen und stattdessen wird eine Scheinnachricht an den Empfänger geschickt.
- Erlauben/verbieten Instant Messages zu senden, sicherer Weg : "@sendim_sec=<y/n>"
Eingeführt in v1.21
Wenn unterbunden wird alles was in IM geschrieben verworfen und stattdessen wird eine Scheinnachricht an den Empfänger geschickt. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen der Unterbindung vom Senden der Instant Messages : "@sendim:<UUID>=<rem/add>"
Eingeführt in v1.01
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer IMs an den Empfänger dessen UUID im Kommando spezifiziert ist senden. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten Instant Messages an jemand Speziellen zu senden : "@sendimto:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25
Wenn unterbunden wird alles was in IM an den spezifizierten Avatar gesendet wird verworfen und stattdessen eine Scheinnachricht gesendet.
- Erlauben/verbieten eine IM Session zu irgendwem zu starten : "@startim=<y/n>"
Eingeführt in v2.6
Wenn unterbunden ist es dem Benutzer nicht möglich eine IM Session zu irgendwem zu starten. Bereits geöffnete Sessions sind dabei nicht betroffen.
- Entfernen/hinzufügen von Ausnahmen zur IM Session Start Unterbindung : "@startim:<UUID>=<rem/add>"
Eingeführt in v2.6
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer eine IM Session an den Empfänger starten, dessen UUID im Kommando spezifiziert wurde. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten das Starten einer IM Session zu jemand Speziellen : "@startimto:<UUID>=<y/n>"
Eingeführt in v2.6
Wenn unterbunden ist der Benutzer nicht in der Lage eine IM Session zu dieser Person zu starten. Bereits geöffnete Sessions sind nicht betroffen.
- Erlauben/verbieten Instant Messages zu empfangen : "@recvim=<y/n>"
Eingeführt in v1.0b
Wenn unterbunden wird jede ankommende IM verworfen und der Sender wird benachrichtigt, dass der Benutzer sie nicht lesen kann.
- Erlauben/verbieten Instant Messages zu empfangen, sicherer Weg : "@recvim_sec=<y/n>"
Eingeführt in v1.21
Wenn unterbunden wird jede ankommende IM verworfen und der Sender wird benachrichtigt, dass der Benutzer sie nicht lesen kann. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen zum IM Empfang Unterbindung : "@recvim:<UUID>=<rem/add>"
Eingeführt in v1.01
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer die Instant Messages von dem Sender lesen, dessen UUID im Kommando spezifiziert ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten empfangen von Instant Messages von jemand Speziellem : "@recvimfrom:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25
Wenn unterbunden wird jede IM die von dem spezifizeirtem Avatar empfangen wird verworfen und der Sender wird benachrichtigt dass der Benutzer sie nicht lesen kann.
Teleportation
- Erlauben/verbieten zu einer Landmark zu teleportieren : "@tplm=<y/n>"
Eingeführt in v1.0
Wenn unterbunden kann der Benutzer keine Landmark, Auswahl oder andere voreingestellten Orte benutzen um dorthin zu teleportieren.
- Erlauben/verbieten zu einem Ort zu teleportieren : "@tploc=<y/n>"
Eingeführt in v1.0
Wenn unterbunden kann der Benutzer den teleport zu einer Koordinate durch die Karte und sowas nicht mehr benutzen.
- Erlauben/verbieten teleports durch einen Freund : "@tplure=<y/n>"
Eingeführt in v1.0
Wenn unterbunden wird der Benutzer automatisch alle Teleportangebote verwerfen und der Avatar, der das Angebot initiert hat wird benachrichtigt.
- Erlauben/verbieten teleports durch einen Freund, sicherer Weg : "@tplure_sec=<y/n>"
Eingeführt in v1.21
Wenn unterbunden wird der Benutzer automatisch alle Teleportangebote verwerfen und der Avatar, der das Angebot initiert hat wird benachrichtigt. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen zur Freunde Teleport Unterbindung : "@tplure:<UUID>=<rem/add>"
Eingeführt in v1.0
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer durch den Avatar teleportiert werden, dessen UUID im Kommando spezifiziert ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Nicht beschränken/beschränken von Sitz-tp : "@sittp=<y/n>"
Eingeführt in v1.0
Wenn beschränkt kann der Avatar nicht auf einem Prim sitzen solange er nicht näher als 1.5m ist. Dies macht Käfige sicher weil dem Avatar verwehrt wird sich durch Mauern zu verziehen (es sei denn der Prim ist zu nahe).
- Erlauben/verbieten an einem anderen Ort aufzustehen als man hingesetzt wurde : @standtp=<y/n>
Eingeführt in v2.1.2 und v1.24
Wenn diese Restriktion aktiv ist und der Avatar steht auf, wird er automatisch zurück teleportiert an den Ort wo er ursprünglich hingesetzt wurde. Bitte beachte, dass die "letzte stehende Position" ebenso gespeichert wird wenn diese Restriktion gesetzt wird, so ist es kein Problem für Grabber und sowas, die das Opfer hinsetzen, in eine Zelle verschieben die die Einschränkung setzt und dann aufstehen lässt. In diesem Fall bleibt er in der Zelle.
- Zwangs-Teleport für den Benutzer : @tpto:<X>/<Y>/<Z>=force (*)
Eingeführt in v1.12
Dieses Kommando zwingt den Avatar zu den indizierten Koordinaten zu teleportieren. Beachte dass diese Koordinaten global sind, deshalb ist das Script das das Kommando aufruft nicht trivial. Wenn das Ziel einen Telehub oder einen Landepunkt hat, wird der Benutzer dort landen statt am gewünschten Ort. Das ist eine SL Einschränkung. Beachte auch, dass @tpto gesperrt durch @tploc=n ist und seit v1.15 und höher auch von @unsit.
Hier ist ein Beispiel Code um das Kommando ordentlich aufzurufen :
<lsl>
// FORCE TELEPORT EXAMPLE // Listens on channel 4 for local coordinates and a sim name // and tells your viewer to teleport you there. // // By Marine Kelley 2008-08-26 // RLV version required : 1.12 and above // // HOW TO USE : // * Create a script inside a box // * Overwrite the contents of the script with this one // * Wear the box // * Say the destination coords Region/X/Y/Z on channel 4 : // Example : /4 Help Island Public/128/128/50
key kRequestHandle; // UUID of the dataserver request vector vLocalPos; // local position extracted from the
Init () {
kRequestHandle = NULL_KEY; llListen (4, "", llGetOwner (), "");
}
default
{
state_entry () { Init (); } on_rez(integer start_param) { Init (); } listen(integer channel, string name, key id, string message) { list tokens = llParseString2List (message, ["/"], []); integer L = llGetListLength (tokens);
if (L==4) { // Extract local X, Y and Z vLocalPos.x = llList2Float (tokens, 1); vLocalPos.y = llList2Float (tokens, 2); vLocalPos.z = llList2Float (tokens, 3);
// Request info about the sim kRequestHandle=llRequestSimulatorData (llList2String (tokens, 0), DATA_SIM_POS); } } dataserver(key queryid, string data) { if (queryid == kRequestHandle) { // Parse the dataserver response (it is a vector cast to a string) list tokens = llParseString2List (data, ["<", ",", ">"], []); string pos_str = ""; vector global_pos;
// The coordinates given by the dataserver are the ones of the // South-West corner of this sim // => offset with the specified local coordinates global_pos.x = llList2Float (tokens, 0); global_pos.y = llList2Float (tokens, 1); global_pos.z = llList2Float (tokens, 2); global_pos += vLocalPos;
// Build the command pos_str = (string)((integer)global_pos.x) +"/"+(string)((integer)global_pos.y) +"/"+(string)((integer)global_pos.z); llOwnerSay ("Global position : "+(string)pos_str); // Debug purposes
// Fire ! llOwnerSay ("@tpto:"+pos_str+"=force"); } }
}
</lsl>
- Entfernen/hinzufügen auto-accept von Teleportangeboten von einem bestimmten Avatar : "@accepttp[:<UUID>]=<rem/add>"
Eingeführt in v1.15, leicht verbessert in v1.16
Das Hinzufügen dieser Regel lässt den Benutzer automatisch alle Teleportangebote vom Avatar mit der UUID akzeptieren, als ob dieser ein Linden wäre (keine Bestätigung, keine Nachricht, kein Abbruch Button). Diese Regel hat keinen Vorrang, noch wird sie @tpto aufheben, weil sie zu einer Person teleportiert und die andere zu einem beliebigen Ort. Achtung : in v1.16 wurde die UUID optional, was bedeutet dass @accepttp=add den Benutzer zwingen wird Teleportangebote von jedem anzunehmen ! Benutze mit Vorsicht !
Inventory, Editing und Rezzing
- Erlauben/verbieten das Inventar zu benutzen : @showinv=<y/n>
Eingeführt in v1.10
Erzwingt das Inventarfenster zu schließen und geschlossen zu bleiben.
- Erlauben/verbieten Notecards zu lesen : @viewnote=<y/n>
Eingeführt in v1.10
Hindert daran Notecards zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Scripte zu öffnen : @viewscript=<y/n>
Eingeführt in v1.22
Hindert daran Scripte zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Texturen zu öffnen : @viewtexture=<y/n>
Eingeführt in v1.22
Hindert daran Texturen (und Schnappschnüsse) zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Objekte zu bearbeiten : "@edit=<y/n>"
Eingeführt in v1.03
Wenn das bearbeiten und öffnen von Objekten unterbunden ist wird sich das Bau & Bearbeiten Fenster nicht mehr öffnen.
- Entfernen/hinzufügen von Ausnahmen zur Bearbeiten Einschränkung : "@edit:<UUID>=<rem/add>"
Eingeführt in v2.3 und v1.25
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer dieses spezielle Objekt bearbeiten oder öffnen.
- Erlauben/verbieten rezzen vom Inventar : "@rez=<y/n>"
Eingeführt in v1.03
Wenn das rezzen von Sachen, erstellen und löschen von Objekten unterbunden ist, dann wird das herausziehen aus dem Inventar und das Fallenlassen von Anhängen fehlschlagen.
- Erlauben/verbieten bestimmte Objekte zu bearbeiten : "@editobj:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25
Wenn unterbunden wird das Bau & Bearbeiten Fenster nicht aufgehen wenn man versucht das spezifizierte Objekt zu bearbeiten oder zu öffnen.
Sitzen
- Erlauben/verbieten aufzustehen : @unsit=<y/n>
Eingeführt in v1.10, modifiziert in v1.15 um auch teleports zu verhindern
Blendet den Aufstehen Button aus. Seit v1.15 verhindert es auch teleporting was auch ein Weg zum Aufstehen war.
- Zwingen auf einem Objekt zu sitzen : @sit:<UUID>=force (*)
Eingeführt in v1.10
Funktioniert nicht wenn an sit-tp gehindert und mehr als 1.5 meters entfernt ist oder wenn am Aufstehen gehindert.
- Die UUID vom Objekt erhalten auf der der Avatar sitzt : @getsitid=<channel_number>
Eingeführt in v1.12.4 aber kaputt in allen Versionen älter als v1.24 und v2.2 (hat die UUID vom letzten Objekt in Reichweite gemeldet auf der irgendein Avatar gesessen hat)
Lässt den Viewer automatisch die UUID vom Objekt antworten auf dem der Avatar gerade sitzt oder NULL_KEY wenn man nicht sitzt.
- Zwingen aufzustehen : @unsit=force (*)
Eingeführt in v1.10
Selbst-erklärend aber aus irgendwelchen Gründen schlägt es manchmal fehl, also nicht darauf verlassen. Weitere Tests sind nötig.
- Erlauben/verbieten sich hinzusetzen : @sit=<y/n>
Eingeführt in v1.16.2
Hindert den Benutzer daran sich auf irgendwas zu setzen, einschließlich @sit:UUID=force.
Kleidung und Anhänge
- Macht ein Objekt abnehmbar/unabnehmbar : "@detach=<y/n>"
Eingeführt in v1.0a
Wenn aufgerufen mit der Option "n", dann wird das Objekt, dass das Kommando sendet (welches ein Anhang sein muss) unabnehmbar. Es kann wieder abgenommen werden wenn die "y" Option aufgerufen wird.
- Entsperren/sperren eines Attachmentpunkts : "@detach:<attach_point_name>=<y/n>"
Eingeführt in v1.20
Wen aufgerufen mit der Option "n" wird der Attachmentpunkt mit dem Namen <attach_point_name> entweder voll (wenn er gerade mit einem Objekt belegt ist) oder leer (wenn nicht) gesperrt. Jedes Objekt das den Punkt belegt wenn die Einschränkung gesetzt wird, wird unabnehmbar genauso wie mit dem "@detach=n" Kommando. Wenn der Pinkt leer it bleibt er es auch, kein Teil kann sich dort anhängen und llAttachToAvatar() Aufrufe schlagen fehl (das Objekt wird angehängt und direkt wieder abgenommen).
- Entsperren/Sperren einen Attachmentpunkt leer : "@addattach[:<attach_point_name>]=<y/n>"
Eingeführt in v1.22
Wenn mit der "n" Option aufgerufen, wird der Attachmentpunkt mit dem Namen <attach_point_name> leer gelockt. Die Objekte, die den Attachmentpunkt belegen wenn die Einschränkung gesetzt wird können abgenommen werden aber es kann nichts mehr daran angehängt werden. Wenn der Punkt leer ist wird er es auch bleiben. Kein Teil kann angehängt werden und llAttachToAvatar() Aufrufe schlagen fehl (das Objekt wird angehängt und direkt wieder abgenommen). Wenn kein Attachmentpunkt angegeben ist dann betrifft es alle Attachmentpunkte. Dieses Kommando ist ein Gegenstück zu @addoutfit für Anhänge.
- Entsperren/Sperren einen Attachmentpunkt voll : "@remattach[:<attach_point_name>]=<y/n>"
Eingeführt in v1.22
Wenn mit der "n" Option aufgerufen, wird der Attachmentpunkt mit dem Namen <attach_point_name> voll gelockt. Jedes Objekt, dass den Attachmentpunkt belegt wenn das Kommando ausgeführt wird, wird als unabnehmbar gewandelt. Wenn der Punkt leer ist, ist es dem Benutzer erlaubt etwas zu tragen, aber es wird auch unabnehmbar. Kein Objekt kann es ersetzen und llAttachToAvatar() Aufrufe schlagen fehl (es wird angehängt und direkt wieder abgenommen). Wenn kein Attachmentpunkt angegeben ist dann betrifft es alle Attachmentpunkte. Dieses Kommando ist ein Gegenstück zu @remoutfit für Anhänge.
- Erlauben/verbieten des "Anziehen" Kontextmenu : "@defaultwear=<y/n>
Eingeführt in v1.21
Wenn erlaubt, dann kann der Avatar immer das "Anziehen" Kommando vom Kontextmenu im Inventar nutzen, selbst wenn ein Objekt am Avatar gesperrt ist. Das beinhaltet das Risiko das gesperrte Objekt zu entfernen, aber es wird automatisch innerhalb von 5 Sekunden wieder angehängt (und jede Sekunde weitere gesperrte Objekte bis alles wieder angehängt ist). Jedoch können einige Objekte auch so gescriptet sein, dass sie ihre Beschränkungen lösen wenn sie abgenommen werden oder einfach nicht der Tatsache Rechnung tragen, dass sogar gesperrte Objekte abgenommen werden können wenn man RLV benutzt.
Deshalb wird die Benutzung des Kommando mit der "n" Option dieses Kommando unterdrücken, aber es bleibt weiterhin verfügbar für Objekte, die den Ziel Attachmentpunkt in ihrem Namen oder im Namen des übergeordneten Ordners enthalten, genauso wie vor 1.21 RLV. Das ist weniger Benutzerfreundlich aber sicherer wenn man sicherstellen will, das kein gesperrtes Objekt aus Versehen abgenommen wird.
- Erzwingen Attachments zu entfernen : @detach[:attachpt]=force (*)
Eingeführt in v1.10
Die Teile sind :
chest|skull|left shoulder|right shoulder|left hand|right hand|left foot|right foot|spine| pelvis|mouth|chin|left ear|right ear|left eyeball|right eyeball|nose|r upper arm|r forearm| l upper arm|l forearm|right hip|r upper leg|r lower leg|left hip|l upper leg|l lower leg|stomach|left pec| right pec|center 2|top right|top|top left|center|bottom left|bottom|bottom right|neck|root
Wenn kein Teil angegeben ist, wird alles entfernt.
- Erzwingen Attachments zu entfernen (alias) : @remattach[:attachpt]=force (*)
Eingeführt in v1.22
Dieses Kommando ist ein Alias zu @detach[:attachpt]=force (um alles Konsitent zu halten).
- Erlauben/verbieten Kleidung zu tragen : @addoutfit[:<part>]=<y/n>
Eingeführt in v1.10, skin hair und eyes in v1.10.1 hinzugefügt, physics in 2.6.1 hinzugefügt
Die Teile sind :
gloves|jacket|pants|shirt|shoes|skirt|socks|underpants|undershirt|skin|eyes|hair|shape|alpha|tattoo|physics
Wenn das Teil nicht angegeben ist verhindert es das Tragen von allem ausser den Sachen die der Avatar bereits trägt.
Hinweis: Seit dem Erscheinen von Viewer 2.0 gibt es zwei neue Avatar Haut Layer Tattoo und durchsichtige Avatar Maske. Die Alpha und Tattoo Layer werden nur durch RLV konforme Viewer unterstützt, die das neue Viewer 2.0 Feature integriert haben.
- Erlauben/verbieten Kleidung abzulegen : @remoutfit[:<part>]=<y/n> (underpants und undershirt werden für Teens behalten)
Eingeführt in v1.10, skin hair und eyes in v1.10.1 hinzugefügt, physics in 2.6.1 hinzugefügt
Die Teile sind :
gloves|jacket|pants|shirt|shoes|skirt|socks|underpants|undershirt|skin|eyes|hair|shape|alpha|tattoo|physics
Wenn kein Teil angegeben ist verhindert es das Ausziehen von allem was der Avatar trägt.
Hinweis: Seit dem Erscheinen von Viewer 2.0 gibt es zwei neue Avatar Haut Layer Tattoo und durchsichtige Avatar Maske. Die Alpha und Tattoo Layer werden nur durch RLV konforme Viewer unterstützt, die das neue Viewer 2.0 Feature integriert haben.
- Erzwingen Kleidung auszuziehen : @remoutfit[:<part>]=force (*) (Teens können nicht gezwungen werden die Underpants und Undershirt auszuziehen)
Eingeführt in v1.10
Die Teile sind :
gloves|jacket|pants|shirt|shoes|skirt|socks|underpants|undershirt|alpha|tattoo|physics
Wenn kein Teil angegeben ist entfernt es alles.
Hinweis: Seit dem Erscheinen von Viewer 2.0 gibt es zwei neue Avatar Haut Layer Tattoo und durchsichtige Avatar Maske. Die Alpha und Tattoo Layer werden nur durch RLV konforme Viewer unterstützt, die das neue Viewer 2.0 Feature integriert haben.
Hinweis: skin, shape, eyes und hair können nicht entfernt werden, weil sie Körperteile sind (und das Entfernen in einen ungerezzten Avatar endet).
- Liste der getragenen Kleidung erhalten : @getoutfit[:part]=<channel_number>
Eingeführt in v1.10, skin hair und eyes in v1.10.1 hinzugefügt, physics in 2.6.1 hinzugefügt
Lässt den Viewer automatisch die aktuelle Belegung der Kleidungslayer in einer Liste von 0 (leer) und 1 (belegt) auf dem Chat Kanal Nummer <channel_number> antworten auf die das Script hören kann. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Die Liste der 0 und 1 bezieht sich auf :
gloves,jacket,pants,shirt,shoes,skirt,socks,underpants,undershirt,skin,eyes,hair,shape
in dieser Reihenfolge
Wenn ein Teil spezifiziert ist, ist die Antwort eine einzelne 0 (leer) oder 1 (belegt) beziehend auf das Teil.
Bsp 1 : @getoutfit=2222 => "0011000111" => Avatar trägt pants, shirt, underpants und undershirt, und natürlich einen skin. Bsp 2 : @getoutfit:socks=2222 => "0" => der Avatar trägt keine socks.
Hinweis: Für Viewer die die neuen Viewer 2.0 Features implementiert haben ist die Liste:
gloves,jacket,pants,shirt,shoes,skirt,socks,underpants,undershirt,skin,eyes,hair,shape,alpha,tattoo
- Liste der getragenen Attachments erhalten : @getattach[:attachpt]=<channel_number>
Eingeführt in v1.10
Lässt den Viewer automatisch die Belegung der Attachmentpunkte als Liste aus 0 (leer) und 1 (belegt) auf der Chat Kanal Nummer <channel_number> antworten auf die das Script hören kann. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Die Liste aus 0 und 1 bezieht sich auf :
none,chest,skull,left shoulder,right shoulder,left hand,right hand,left foot,right foot,spine, pelvis,mouth,chin,left ear,right ear,left eyeball,right eyeball,nose,r upper arm,r forearm, l upper arm,l forearm,right hip,r upper leg,r lower leg,left hip,l upper leg,l lower leg,stomach,left pec, right pec,center 2,top right,top,top left,center,bottom left,bottom,bottom right,neck,root
in dieser Reihenfolge.
Wenn ein Attachmentpunkt angegeben ist, ist die Antwort eine einzelne 0 (leer) oder 1(belegt) beziehend auf das Teil.
Bsp 1 : @getattach=2222 => "011000011010000000000000100100000000101" => Avatar trägt Anhänge an chest, skull, left and right foot, pelvis, l und r lower leg, HUD bottom left und HUD bottom right. Bsp 2 : @getattach:chest=2222 => "1" => Avatar trägt etwas am chest.
Hinweis : Das erste Zeichen ("none") ist immer '0', so dass der Index von jedem Attachmentpunkt im String exakt gleich ist zu dem dazugehörigen ATTACH_* macro in LSL. Als Beispiel ist der Index 9 im String ATTACH_BACK (was 2spine" bedeutet). Merke das die Indizies bei Null starten.
- Zwingt den Viewer automatisch die Attach und Take Control Permission Anfragen zu akzeptieren : @acceptpermission=<rem/add>
Eingeführt in v1.16
Zwingt den Avatar automatisch die Attach und Take Control Permission Anfragen zu akzeptieren. Die Dialog Box wird nicht gezeigt. Dieses Kommando ersetzt natürlich nicht @denypermission.
- Erlauben/verbieten die Attach und Take Control Permissions zu akzeptieren : @denypermission=<rem/add>
Eingeführt in v1.16, ÜBERHOLT seit v1.16.2
Wenn unterbunden werden alle Attach und Take Control Permission Anfragen automatisch abgelehnt ohne die Dialog box zu zeigen. Wegen der extremen Belästigung die es macht und weil gesperrte Objekte seit v1.16.1 sich automatisch wieder anhängen ist es JETZT ÜBERHOLT, NICHT MEHR BENUTZEN!
- Erzwingen ein Teil abzunehmen : @detachme=force (*)
Eingeführt in v1.16.2
Dieses Kommando erzwingt dass sich das ausführende Objekt selbst vom Avatar ablegt. Es ist da als Erleichterung um Wettlaufbedingungen zu vermeiden beim Aufruf von @clear und dann llDetachFromAvatar(). Manchmal könnte sich ein Objekt selbst ablegen bevor die Restriktionen aufgehoben werden, was veranlasst dass es sich nach einer Weile automatisch wieder anhängt. Mit diesem Kommando kann man ein @clear, detachme=force ausführen um sicher zu gehen das @clear zuerst ausgeführt wird.
- Erlauben/verbieten tragen von Kleidung und Anhängen, die nicht Teil das #RLV Ordners sind : @unsharedwear=<y/n>
Eingeführt in v2.5
Wenn unterbunden kann kein Objekt, Kleidungsstück oder Körperteil getragen werden wenn es nicht Teil vom #RLV Ordner ist (sprich "Shared").
- Erlauben/verbieten entfernen von Kleidung und Anhängen, die nicht Teil das #RLV Ordners sind : @unsharedunwear=<y/n>
Eingeführt in v2.5
Wenn unterbunden kann kein Objekt, Kleidungsstück oder Körperteil abgenommen werden wenn es nicht Teil vom #RLV Ordner ist (sprich "Shared").
- Die Liste der geteilten Ordner im Inventar des Avatars erhalten : @getinv[:folder1/.../folderN]=<channel_number>
Eingeführt in v1.11, Unterordner hinzugefügt in v1.13
Lässt den Viewer automatisch die Liste der Ordner innerhalb des #RLV Ordners (wenn er existiert) auf der Chat Kanal Nummer <channel_number> auf die das Script hören kann, antworten. Wenn Ordner spezifiziert sind gibt es die Liste der Unterordner aus, die zu diesem Pfad gehören anstatt des Stammverzeichnisses (Beispiel : "@getinv:Restraints/Leather cuffs/Arms=2222"). Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Die Antwort ist eine Liste mit Namen unterteilt durch Kommas (","). Ordner, die mit einem Punkt (".") beginnen werden ignoriert.
- Die Liste der geteilten Ordner im Inventar des Avatars erhalten, mit Informationen über getragene Sachen : @getinvworn[:folder1/.../folderN]=<channel_number>
Eingeführt in v1.15
Lässt den Viewer automatisch die Liste der Ordner innerhalb des #RLV Ordners (wenn er existiert) auf der Chat Kanal Nummer <channel_number> auf die das Script hören kann, antworten. Wenn Ordner spezifiziert sind gibt es die Liste der Unterordner aus, die zu diesem Pfad gehören anstatt des Stammverzeichnisses (Beispiel : "@getinvworn:Restraints/Leather cuffs/Arms=2222"). Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Die Antwort ist eine Komma-unterteilte Liste von Namen, jedes gefolgt von einem Schlot ("|") und zwei Ziffern. Der aktuelle Ordner wird an erste Stelle gesetzt (im Gegensatz zu @getinv welches nicht den aktuellen Ordner zeigt) allerdings ohne den Namen sondern nur dem Schlot und den zwei Ziffern.
Objekt : "@getinvworn:Restraints/Leather cuffs=2222" Viewer : "|02,Arms|30,Legs|10"
Ordner deren Name mit einem Punkt (".") beginnt werden ignoriert. Die beiden Ziffern werden wie folgt berechnet :
Erste Ziffer : Anteil von getragenen Teilen im entsprechenden Ordner (einschließlich no-mod Teile). In diesem Beispiel bedeutet die "3" von "30" dass "alle Teile im Ordner Arms" gerade getragen werden, während die "1" von "10" bedeutet, dass "kein Teil aus dem Legs Ordner zur Zeit getragen werden, aber es sind Sachen zum tragen drin".
Zweite Ziffer : Anteil der Sachen, die global in allen Ordnern des entsprechenden Ordners getragen werden. In diesem Beispiel bedeutet die "2" von "02" dass "einige Teile in einigen Ordner getragen werden, die im "Leather Cuffs" enthalten sind.
Die Ziffern, die zwischen 0 und 3 sind, haben folgende Bedeutung :
- 0 : Kein Teil ist in diesem Ordner vorhanden
- 1 : Einige Teile sind im Ordner vorhanden aber keiner davon wird getragen
- 2 : Einige Teile sind im Ordner vorhanden und einige davon werden getragen
- 3 : Einige Teile sind im Ordner vorhanden und alle davon werden getragen
- Erhalte den Pfad zu einem geteilten Ordner durch ein Suchkriterium : @findfolder:part1[&&...&&partN]=<channel_number>
Eingeführt in v1.13.1
Lässt den Viewer automatisch den Pfad des ersten Ordners, dessen Name <part1> und <part2> und ...<partN> enthält, auf der Chat Kanal Nummer auf der das Script hören kann antworten. Die Suche geht zuerst in die Tiefe, beachte den Trenner, der "&&" wie "und" ist. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Es berücksichtigt nicht deaktivierte Ordner (Ordner, die mit einem Punkt (".") beginnen, noch Ordner die mit einer Tilde ("~") beginnen. Die Antwort ist eine Liste von Ordnern unterteilt mit Slashes ("/").
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners : @attach:<folder1/.../folderN>=force (*)
Eingeführt in v1.11, no-mod items hinzugefügt in v1.12, sub-folders hinzugefügt in v1.13
Zwingt den Viewer alle Objekte anzulegen und alle Kleidungstücke zu tragen, die im Ordner unter dem spezifiziertem Pfad (welcher unter "#RLV" sein muss) anzulegen. Objekte müssen den Namen ihres Ziel Attachmentpunktes enthalten oder sie werden nicht angelegt. Jedes no-mod Objekt muss in einem Ordner sein (ein Objekt pro Ordner) welcher den Namen des Ziel Attachmentpunktes enthält, weil es nicht umbenannt werden kann. Namen dürfen nicht mit einem Punkt (".") beginnen weil solche Ordner für Scripte unsichtbar sind.
Attachmentpunktnamen sind die Gleichen wie diejenigen die im "Anhängen an" Untermenu sind : "skull", "chest", "l forearm"...
Hinweis 1 : Ordner namen können Slashes enthalten und werden zuerst ausgewählt wenn möglich (als Beispiel, wenn "@attach:Restraints/cuffs=force" ausgeführt wird, dann wird der "Restraints/cuffs" Ordner vor dem "cuffs" Ordner ausgewählt der im "Restraints" Ordner ist.
Hinweis 2 : Wenn der Name des Ordners mit einem Pluszeichen ("+") beginnt, dann wird dieses Kommando sich genau gleich verhalten wie @attachover. Diese Regel kann geändert werden durch die Anwendung der "RestrainedLoveStackWhenFolderBeginsWith" Debug Einstellung.
Achtung : Dieses Kommando wird sich wahrscheinlich zukünftig ändern, um zum Verhalten zurück zu gehen wie es in Version 1.x war, z.B. niemals ein Objekt hinzuzufügen wenn der Attachmentpunkt bereits benutzt wird, stattdessen das alte Objekt ersetzen. Das aktuelle Verhalten soll durch @attachoverorreplace und dessen Derivaten übernommen werden. Zur Zeit ist @attachoverorreplace ein Synonym für @attach, aber dies wird nicht immer der Fall sein. Mit anderen Worten wenn Du vorhast ein Script zu erstellen, dass immer einen Anhang ersetzen soll wenn ein neues angelegt wird, dann benutze @attach. Wenn Du möchtest, dass Dein Script die Anhänge immer aufschichtet, dann benutze @attachover. Wenn Du dem Benutzer die Wahl durch die Ordnernamen geben möchtest (wie oben gezeigt durch das Vorstellen eines "+" Zeichen als Standard), dann benutze @attachoverorreplace.
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners, ohne zu ersetzen was gerade getragen wird : @attachover:<folder1/.../folderN>=force (*)
Eingeführt in v2.1.2 und v1.24
Dieses Kommando abreitet genau wie @attach hier drüber, ausser dass es die bereits getragenen Objekte und Kleidungsstücke nicht abnimmt.
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners : @attachoverorreplace:<folder1/.../folderN>=force (*)
Eingeführt in v2.5
Dieses Kommando arbeitet genau wie @attach hier drüber beschrieben, es ist ein Synonym.
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners und aller Unterordner (rekursiv) : @attachall:<folder1/.../folderN>=force (*)
Eingeführt in v1.15
Dieses Kommando funktioniert genau wie @attach hier drüber beschrieben, aber es legt auch alles an was in den Unterordnern ist.
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners und aller Unterordner (rekursiv), ohne zu erstezen was gerade getragen wird : @attachallover:<folder1/.../folderN>=force (*)
Eingeführt in v2.1.2 und v1.24
Dieses Kommando arbeitet genau wie @attachall hier drüber beschrieben, ausser dass es nicht die gerade getragenen Objekte und Kleidungsstücke ablegen wird.
- Erzwingen des Anlegens von Teilen innerhalb eines geteilten Ordners und aller Unterordner (rekursiv) : @attachalloverorreplace:<folder1/.../folderN>=force (*)
Eingeführt in v2.5
Dieses Kommando arbeitet genau wie @attachall hier drüber beschrieben, es ist ein Synonym.
- Erzwingen Sachen aus dem geteilten Ordner abzulegen : @detach:<folder_name>=force (*)
Eingeführt in v1.11
Zwingt den Viewer jedes getragene Objekt und getragene Kleidungsstücke die in <folder_name> (welcher direkt unter "#RLV" sein muss) sind abzulegen. Wenn "@detach" mit einem Attachmentpunkt verwendet wird (skull, pelvis... siehe oben), hat es Vorrang vor diesem Weg des Abnehmens weil es das gleiche Kommando ist
- Erzwingen Sachen aus dem geteilten Ordner abzulegen und dessen Unterordner (rekursiv) : @detachall:<folder1/.../folderN>=force (*)
Eingeführt in v1.15
Dieses Kommando arbeitet genau wie @detach hier drüber beschrieben, aber es legt auch alles ab was in den Unterordner enthalten ist.
- Erhalte den Pfad zum geteilten Ordner das ein bestimmtes Objekt/Kleidung enthält das am einem Punkt getragen wird : @getpath[:<attachpt> oder <clothing_layer>]=<channel_number>
Eingeführt in v1.16
Lässt den Viewer automatisch den Pfad zu dem geteilten Ordner mitteilen die das Teil enthält :
- dass das Kommando ausführt wenn keine Option gesetzt ist
- das an dem Attachmentpunkt angelegt ist der im Optionsfeld genannt ist, Bsp : @getpath:spine=2222 => "Restraints/Collar"
- das an dem Kleidungslayer getragen wird das im Optionsfeld angegeben ist, Bsp : @getpath:pants=2222 => "Casual/Jeans/Tight"
Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Es beachtet keine deaktivierten Ordner (Ordner deren Name mit einem Punkt (".") beginnen) Die Antwort ist eine Liste mit Ordner unterteilt mit Slashes ("/").
Bitte beachte : Seit Version 1.40.4 auf dem Main Grid live ist, it es möglich mehrere verschiedene Objekte am gleichen Attachmentpunkt zu tragen. Dafür macht dieses Kommando nicht mehr viel Sinn, weil es nur einen Ordner antworten kann, wobei verschiedene Objekte zu verschiedenen Ordner gehören könnten. Deshalb ist es besser @getpathnew zu benutzen, denn @getpath wird langsam überholt da mehr und mehr Benutzer zu 2.1 und später wechseln.
- Erhalte alle Pfade zum geteilten Ordner das ein bestimmtes Objekt/Kleidung enthält das am einem Punkt getragen wird : @getpathnew[:<attachpt> oder <clothing_layer>]=<channel_number>
Eingeführt in v2.1 und v1.24
Lässt den Viewer automatisch die Pfade zu den geteilten Ordnern antworten die Teile enthälten die :
- das Kommando ausführt wenn keine Option gesetzt ist
- die an dem Attachmentpunkt angelegt ist der im Optionsfeld genannt ist, Bsp : @getpathnew:spine=2222 => "Restraints/Collar,Jewelry/Cute necklace"
- die an dem Kleidungslayer getragen wird das im Optionsfeld angegeben ist, Bsp : @getpathnew:pants=2222 => "Casual/Jeans/Tight"
Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Es beachtet keine deaktivierten Ordner (Ordner deren Name mit einem Punkt (".") beginnen) Die Antwort ist eine Liste mit Ordner unterteilt mit Slashes ("/"), wenn verschiedene Pfade zurückgegeben werden, weil verschiedene Outfits betroffen sind, sind sie aufgeteilt in einer Liste von Strings unterteilt durch Kommas (",").
Dieses Kommando wurde hinzugefügt um @getpath zu ersetzen, weil 2.1 mehrere Objekte am gleichen Attachmentpunkt tragen kann.
- Erzwingt das Anlegen eines Teil innerhalb eines geteilten Ordners das ein bestimmtes Objekt Kleidung enthält : @attachthis[:<attachpt> oder <clothing_layer>]=force (*)
Eingeführt in v1.16
Dieses Kommando ist eine Abkürzung für ein @getpath gefolgt von einem @attach Kommando (spart einen Listener und ein Timeout).
- Erzwingen von Anlegen von Teilen innerhalb eines geteilten Ordners, ohne zu ersetzen was bereits getragen wird : @attachthisover[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v2.1.2 und v1.24
Dieses Kommando arbeitet exakt wie @attachthis hierdrüber beschrieben, ausser dass es nicht die bereits getragenenen Objekte und Kleidungsstücke ablegen wird.
- Erzwingen des Anlegens von Teilen in einem geteilten Ordner : @attachthisoverorreplace[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v2.5
Dieses Kommando arbeitet exakt wie @attachthis hierdrüber beschrieben, es ist ein Synonym.
- Erzwinge das Tragen eines Teils das in einem geteilten Ordner ist welcher ein bestimmtes Objekt/Kleidungsstück enthält, samt der Unterordner : @attachallthis[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v1.16
Dieses Kommando ist eine Abkürzung für ein @getpath gefolgt von einem @attachall Kommando (das spart einen Listener und ein Timeout).
- Erzwinge das Anlegen von Teilen innerhalb eines geteilten Ordners ohne zu ersetzen was gerade getragen wird : @attachallthisover[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v2.1.2 und v1.24
Dieses Kommando funktioniert genauso wie @attachallthis hierdrüber beschrieben, ausser das es nicht die gerade getragenen Objekte abnimmt.
- Erzwinge das Anlegen von Teilen innerhalb eines geteilten Ordners : @attachallthisoverorreplace[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v2.5
Dieses Kommando funktioniert genau wie @attachallthis hierdrüber beschrieben, es ist ein Synonym.
- Erzwinge das Abnehmen von Teilen aus einem geteilten Ordner der ein bestimmtes Objekt/Kleidungsstück enthält : @detachthis[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v1.16
Dieses Kommando ist eine Abkürzung für @getpath gefolgt von einem @detach Kommando (das spart einen Listener und ein Timeout).
- Erzwinge das Abnehmen von Teilen aus einem geteilten Ordner der ein bestimmtes Objekt/Kleidungsstück enthält und dessen Unterordner : @detachallthis[:<attachpt> or <clothing_layer>]=force (*)
Eingeführt in v1.16
Dieses Kommando ist eine Abkürzung für @getpath gefolgt von einem @detachall Kommando (das spart einen Listener und ein Timeout).
- Erlauben/verbieten einige Ordner zu entfernen : @detachthis[:<layer>|<attachpt>|<path_to_folder>]=<y/n>
Eingeführt in v2.3 und v1.25
Wenn unterbunden kann der Benutzer einen Ordner nicht mehr entfernen wenn eine diese Bedingungen erfüllt ist :
- keine Option ist spezifiziert und der Ordner enthält das Objekt dass die Einschränkung ausführt
- die "layer" Option ist gesetzt (shirt, pants...) und der Ordner enthält ein Stück Kleidung, welches auf dem Layer getragen wird
- die "attachpt" Option ist gesetzt (l forearm, spine...) und der Ordner enthält einen Anhang der an diesem Punkt getragen wird
- die "path_to_folder" Option ist gesetzt und der Ordner bezieht sich auf diesen Ort
Und weiterhin können diese Ordner nicht umbenannt, verschoben, gelöscht oder geändert werden.
- Erlauben/verbieten des Löschens von einige Ordnern und deren Unterordnern : @detachallthis[:<layer>|<attachpt>|<path_to_folder>]=<y/n>
Eingeführt in v2.3 und v1.25
Dieses Kommando funktioniert exakt wie @detachthis, aber gilt auch für die Unterordner (rekursiv).
- Erlauben/verbieten tragen einiger Ordner : @attachthis:<layer>|<attachpt>|<path_to_folder>=<y/n>
Eingeführt in v2.3 und v1.25
Wenn unterbunden kann der Benutzer nicht mehr einen Ordner anlegen, wen eine dieser Bedingungen erfüllt ist :
- die "layer" Option ist gesetzt (shirt, pants...) und der Ordner enthält ein Stück Kleidung, welches auf dem Layer getragen wird
- die "attachpt" Option ist gesetzt (l forearm, spine...) und der Ordner enthält einen Anhang der an diesem Punkt getragen wird
- die "path_to_folder" Option ist gesetzt und der Ordner bezieht sich auf diesen Ort
Und weiterhin können diese Ordner nicht umbenannt, verschoben, gelöscht oder geändert werden.
- Erlauben/verbieten tragen einiger Ordner und der Unterordner : @attachallthis[:<layer>|<attachpt>|<path_to_folder>]=<y/n>
Eingeführt in v2.3 und v1.25
Dieses Kommando funktioniert exakt wie @attachthis, aber gilt auch für die Unterordner (rekursiv).
- Entfernen/hinzufügen von Ausnahmen zur @detachallthis Einschränkung, nur für einen Ordner : "@detachthis_except:<folder>=<rem/add>"
Eingeführt in v2.5
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer die Teile in diesem Ordner entfernen.
- Entfernen/hinzufügen von Ausnahmen zur @detachallthis Einschränkung, für einen Ordner und dessen Unterordner : "@detachallthis_except:<folder>=<rem/add>"
Eingeführt in v2.5
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer die Teile in diesem Ordner und in allen Unterordnern entfernen.
- Entfernen/hinzufügen einer Ausnahme zur @attachallthis Einschränkung, nur für einen Ordner : "@attachthis_except:<folder>=<rem/add>"
Eingeführt in v2.5
Wenn eine Ausnahme hinzugefügt wird, dann kann der Benutzer die Sachen in dem indiziertem Ordner tragen.
- Entfernen/hinzufügen von Ausnahmen zur @attachallthis Einschränkung für einen Ordner und dessen Unterordnern : "@attachallthis_except:<folder>=<rem/add>"
Eingeführt in v2.5
Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer die Teile tragen, die in dem indizierten Ordner oder in all dessen Unterordnern enthalten sind.
Hinweis : Diese Ausnahme tritt nur in Kraft für Einschränkungen die durch das gleiche Objekt ausgeführt wurden. Du kannst keine Ausnahme zu einer Einschränkung von einem anderen Objekt hinzufügen.
Hinweis : Der Viewer prüft welche Ausnahme oder Einschränkung die "nächste Übergeordnete" in der Ordner Hierarchie ist, die der Benutzer versucht zu tragen oder zu entfernen. Wenn das nächste eine @attach[all]this_except oder eine @detach[all]this_except Ausnahme ist, dann kann der Ordner entsprechend getragen oder abgenommen werden. Wenn der nächste eine @attach[all]this oder eine @detach[all]this Einschränkung ist, dann ist der Ordner gesperrt ganz egal wieviele Ausnahmen auf diesen Ordner verweisen die dessen übergeordnet sind.
Beispiel :
Ein Script führt eine @attachallthis:=n Einschränkung aus, die verhindert dass der gesamte #RLV Ordner und dessen Unterordner angehängt werden kann. Ebenso führt es eine @detachallthis:=n Einschränkung aus, die verhindert dass der gesamte #RLV Ordner und dessen Unterordner abgenommen werden kann. Dadurch ist der #RLV Ordner nun komplett eingefroren.
Jedoch das gleiche Objekt führt eine @attachallthis:Jewelry/Gold=add Ausnahme aus und dann eine @detachallthis:Jewelry/Gold=add und macht den Jewelry/Gold Ordner zum Tragen und Entfernen verfügbar. Letzlich führt es eine @attachallthis:Jewelry/Gold/Watch=n Einschränkung aus gefolgt von einer @detachallthis:Jewelry/Gold/Watch=n Einschränkung. Als Ergebnis kann der Benutzer nur tragen und entfernen was innerhalb des Jewelry/Gold Ordners ist, ausgenommen was im Jewelry/Gold/Watch ist und der Rest ist ausser Reichweite.
Berührung
- Erlauben/verbieten berühren von Objekten die mehr als 1.5 Meter vom Avatar entfernt sind : @fartouch=<y/n>
Eingeführt in v1.11
Wenn unterbunden kann der Avatar keine Objekt mehr berühren/greifen die mehr als 1.5 Meter weg sind. Dieses Kommando macht die Fesseln noch realistischer weil der Avatar sich buchstäblich gegen das Objekt drücken muss um es zu klicken.
- Erlauben/verbieten berühren von Objekten die mehr als 1.5 Meter vom Avatar entfernt sind : @touchfar=<y/n>
Eingeführt in v2.4
Dieses Kommando ist ein Synonym zu @fartouch
- Erlauben/verbieten irgendwelche Objekte zu berühren : @touchall=<y/n>
Eingeführt in v2.4
Wenn unterbunden kann der Avatar keine Objekte und Anhänge mehr berühren/greifen. Dies gilt nicht für HUDs.
- Erlauben/verbieten in-world Objekte zu berühren : @touchworld=<y/n>
Eingeführt in v2.4
Wenn unterbunden kann der Avatar keine Objekte berühren/greifen, die in-world gerezzt sind. Nur Anhänge und HUDs.
- Entfernen/hinzufügen einer Ausnahme zur touchworld Einschränkung : "@touchworld:<UUID>=<rem/add>"
Eingeführt in v2.5
Wenn eine Ausnahme hinzugefügt wird, kann der Avatar dieses spezielle Objekt berühren.
- Erlauben/verbieten ein spezielles Objekt zu berühren : @touchthis:<UUID>=<rem/add>
Eingeführt in v2.5
Wenn unterbunden kann der Avatar nicht mehr das Objekt berühren, dessen UUID im Kommando spezifiziert ist.
- Entfernen/hinzufügen einer Ausnahme zur touch* Einschränkung für nur ein Objekt : "@touchme=<rem/add>"
Eingeführt in v2.6
Wenn eine Ausnahme hinzugefügt wird kann der Benutzer dieses spezielle Objekt berühren.
- Erlauben/verbieten Anhänge zu berühren : @touchattach=<y/n>
Eingeführt in v2.4
Wenn unterbunden kann der Avatar keine Anhänge mehr berühren (eigene und fremede Avatare). Dies gilt nicht für HUDs.
- Erlauben/verbieten eigene Anhänge zu berühren : @touchattachself=<y/n>
Eingeführt in v2.4
Wenn unterbunden kann der Avatar nicht mehr seine eigenen Anhänge berühren (aber noch die von anderen Leuten). Dies gilt nicht für HUDs.
- Erlauben/verbieten Anhänge von anderen Leuten zu berühren : @touchattachother=<y/n>
Eingeführt in v2.4
Wenn unterbunden, kann der Avatar nicht mehr die Anhänge von anderen Leuten berühren (aber sie können ihre eigenen berühren). Dies gilt nicht für HUDs.
Orte
- Erlauben/verbieten die Weltkarte zu sehen : @showworldmap=<y/n>
Eingeführt in v1.11
Wenn unterbunden kann der Benutzer die Weltkarte nicht sehen und sie schließt sich auch wenn die Einschränkung aktiv wird.
- Erlauben/verbieten die Minikarte zu sehen : @showminimap=<y/n>
Eingeführt in v1.11
Wenn unterbunden kann der Avatar die Minikarte nicht sehen und sie schließt sich auch wenn die Einschränkung aktiv wird.
- Erlauben/verbieten den aktuellen Ort zu kennen : @showloc=<y/n>
Eingeführt in v1.12
Wenn unterbunden weiss der Benutzer nicht wo sie sind : die Weltkarte ist versteckt, der Parzellen und Regionsname in der oberen Menuleiste sind versteckt, sie können keine Landmarken erstellen, noch das Land kaufen, noch welches Land sie nach einem Teleport gerade verlassen haben, noch den Ort in der "Über" Box sehen und sogar System und Objektnachrichten sind verschleiert wenn diese den Namen der Region und/oder der Parzelle enthalten. Jedoch llOwnerSay Aufrufe sind nicht verschleiert sodass Radare weiter arbeiten werden (und RL Kommandos ebenso).
Name Tags und Hovertext
- Erlauben/verbieten sehen der Namen von Leuten in der Umgebung : @shownames=<y/n>
Eingeführt in v1.12.2, mehr Dummy Namen in v1.16 hinzugefügt
Wenn unterbunden kann der Benutzer nicht sehen wer in der Nähe ist. Die Namen erscheinen nicht auf dem Bildschirm, Namen im Chat werden ersetzt mit "Dummy" Namen wie "Someone", "A resident", die Tooltips sind versteckt, das Pie Menu ist beinah nutzlos, so dass der Benutzer nicht das Profil direkt bekommen kann etc.
- Erlauben/verbieten alle Hovertexte zu sehen : @showhovertextall=<y/n>
Eingeführt in v1.19
Wenn unterbunden kann der Benutzer keinen Hovertext sehen (2D Text über einigen Prims).
- Erlauben/verbieten einen bestimmten Hovertext zu sehen : @showhovertext:<UUID>=<y/n>
Eingeführt in v1.19
Wenn unterbunden kann der Benutzer den Hovertext über dem Prim mit der UUID nicht lesen. Dies ist so gemacht, dass die Beschränkung auf dieses Objekt von einem anderem Objekt gesetzt werden kann (nicht wie @detach was nur die Einschränkung bei sich selbst setzen kann).
- Erlauben/verbieten Hovertext auf dem HUD des Benutzers zu sehen : @showhovertexthud=<y/n>
Eingeführt in v1.19
Wenn unterbunden kann der Benutzer keinen Hovertext lesen, der über seinen HUD Objekten angezeigt wird, aber kann immer noch die in-world sehen.
- Erlauben/verbieten Hovertext in-world zu sehen : @showhovertextworld=<y/n>
Eingeführt in v1.19
Wenn unterbunden kann der Benutzer keinen Hovertext lesen der über in-world Objekten angezeigt wird, aber immer noch die über deren HUD.
Gruppen
- Den Agent zwingen die aktive Gruppe zu wechseln : @setgroup:<group_name>=force
Eingeführt in v2.5
Zwingt den Agent die aktive Gruppe zur genannten Gruppe zu wechseln. Natürlich müssen sie bereits Mitglied in der Gruppe sein. Wenn <group_name> ist "none", dann wird der Agent die ajtuelle Gruppe deaktivieren und keinen Gruppentitel anzeigen.
- Erlauben/verbieten eine Gruppe zu aktivieren : @setgroup=<y/n>
Eingeführt in v2.5
Wenn unterbunden ist der Benutzer nicht in der Lage die aktive Gruppe zu ändern.
- Den Namen der aktiven Gruppe erhalten : @getgroup=<channel_number>
Eingeführt in v2.5
Lässt den Viewer automatisch den Namen der zur Zeit aktiven Gruppe auf der Chat Kanal Nummer <channel_number> auf die das Script hört antworten. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort wird einfach "none" sein, wenn zu der Zeit keine Gruppe aktiv ist. Bitte beachte, dass es keinen Weg gibt, die UUID der Gruppe zu erhalten, nur den Namen der Gruppe.
Viewer Kontrolle
- Erlauben/verbieten einige Debug Einstellungen zu ändern : @setdebug=<y/n>
Eingeführt in v1.16
Wenn unterbunden kann der Benutzer nicht mehr einige Viewer Debug Einstellungen ändern (Advanced > Debug Settings). When prevented, the user is unable to change some viewer debug settings (Advanced > Debug Settings). Da die meisten Debug-Einstellungen sind entweder nutzlos oder kritisch für Benutzer Erlebnis, wird der Ansatz einer Whiteliste genommen : nur ein paar Einstellungen sind gesperrt, die anderen sind immer verfügbar und unberührt. Zum Zeitpunkt des Schreibens sind die erlaubten Debug Einstellungen :
- AvatarSex (0 : Frau, 1 : Mann) : Geschlecht des Avatar bei der Erstellung.
- RenderResolutionDivisor (1 -> ...) : "Unschärfe" vom Bildschirm. Kombiniert mit einem kleveren @setenv Kommando, kann nette Effekte simulieren. Hinweis: renderresolutiondivisor ist ausschließlich eine Windlight Option (Basic Shaders must in den Grafik Einstellungen aktiviert sein) und ist dadurch nicht verfügbar in v1.19.0.5 oder älteren Viewern.
- Den Wechsel eine Debug Einstellung erzwingen : @setdebug_<setting>:<value>=force (*)
Eingeführt in v1.16
Zwingt den Viewer eine bestimmte Debug Einstellung zu wechseln und setzt es auf <value>. Dieses Kommando ist aktuell ein Paket von vielen Unter-Kommandos, die umgruppiert wurden unter "@setdebug_...", zum Beispiel "@setdebug_avatarsex:0=force", "@setdebug_renderresolutiondivisor:64=force" etc.
Siehe die Liste der erlaubten Debug Einstellungen im @setdebug Kommando hier drüber.
- Den Wert einer Debug Einstellung erhalten : @getdebug_<setting>=<channel_number>
Eingeführt in v1.16
Lässt den Viewer automatisch den Wert einer Debug Einstellung auf der Chat Kanal Nummer <channel_number> auf die das Script hört antworten. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist der Wert der im <setting> Teil des entsprechenden @setdebug Kommando gesetzt wurde oder von Hand.
Siehe die Liste der erlaubten Debug Einstellungen im @setdebug Kommando hier drüber.
- Erlauben/verbieten die Umgebungseinstellung zu ändern : @setenv=<y/n>
Eingeführt in v1.14
Wenn unterbunden kann der Benutzer nicht mehr die Umgebungseinstellungen ändern (World > Environment Settings > Sunrise/Midday/Sunset/Midnight/Revert to region default/Environment editor sind alle gesperrt).
- Eine Änderung der Umgebungseinstellung erzwingen : @setenv_<setting>:<value>=force (*)
Eingeführt in v1.14
Zwingt den Viewer eine bestimmte Umgebungseinstellung zu ändern (Tageszeit oder Windlight) und setzt es auf <value>. Dieses Kommando ist aktuell ein Paket aus vielen Unter-Kommandos, die in "@setenv_..." umgruppiert wurden, zum Beipsiel "@setenv_daytime:0.5=force", "@setenv_bluehorizonr:0.21=force" etc.
Dieses Kommando (genau wie alle anderen "force" Kommandos) wird stillschweigend verworfen wenn die entsprechende Einschränkung gesetzt wurde, hier "@setenv", aber im Falle das die Änderung vom Objekt gemacht wird, welches die Einschränkung gesetzt hat, wird die Einschränkung ignoriert. Mit anderen Worten, ein Collar kann die Umgebung einschränken, aber selbst eine Änderung erzwingen, während andere Objekte dies nicht können bis das Collar die Einschränkung aufhebt.
Obwohl eine Range für jeden Wert angegeben wird, wird keine Prüfung im Viewer gemacht, so dass ein Skript etwas tun kann, was die UI nicht tun kann, für interessante Effekte. Jedoch benutze es auf eigene Gefahr. Die Ranges zeigen hier als Empfehlung lediglich die auf den Schiebern vom Umgebungseditor verfügbaren.
Jedes einzelne Unter-Kommando arbeitet wie folgt (die Namen wurden gewählt um so nah wie möglich an den Windlight Feldern zu sein) :
@setenv_XXX:<value>=force wobei XXX ist... | <value> range | Setzt... |
daytime | 0.0-1.0 and <0 | Tageszeit (Sonnenaufgang:0.25, Mittag:0.567, Sonnenuntergang:0.75, Mitternacht:0.0, zurück zu Regionsstandard:<0). Actung, resettet auch alle anderen Windlight Parameter |
preset | String | Eine voreingestellte Umgebung, z.B. Gelatto, Foggy. Achtung, das Laden von Voreinstellungen ist hart für den Viewer und kann es für einen kurzen Moment lähmen. Mache es nicht jede Sekunde |
ambientr | 0.0-1.0 | Umgebungslicht, Roter Kanal |
ambientg | 0.0-1.0 | Umgebungslicht, Grüner Kanal |
ambientb | 0.0-1.0 | Umgebungslicht, Blauer Kanal |
ambienti | 0.0-1.0 | Umgebungslicht, Intensivität |
bluedensityr | 0.0-1.0 | Blau Dichte, Roter Kanal |
bluedensityg | 0.0-1.0 | Blau Dichte, Grüner Kanal |
bluedensityb | 0.0-1.0 | Blau Dichte, Blauer Kanal |
bluedensityi | 0.0-1.0 | Blau Dichte, Intensivität |
bluehorizonr | 0.0-1.0 | Blauer Horizont, Roter Kanal |
bluehorizong | 0.0-1.0 | Blauer Horizont, Grüner Kanal |
bluehorizonb | 0.0-1.0 | Blauer Horizont, Blauer Kanal |
bluehorizoni | 0.0-1.0 | Blauer Horizont, Intensivität |
cloudcolorr | 0.0-1.0 | Wolken Farbe, Roter Kanal |
cloudcolorg | 0.0-1.0 | Wolken Farbe, Grüner Kanal |
cloudcolorb | 0.0-1.0 | Wolken Farbe, Blauer Kanal |
cloudcolori | 0.0-1.0 | Wolken Farbe, Intensivität |
cloudcoverage | 0.0-1.0 | Wolken Bedeckung |
cloudx | 0.0-1.0 | Wolken offset X |
cloudy | 0.0-1.0 | Wolken offset Y |
cloudd | 0.0-1.0 | Wolken Dichte |
clouddetailx | 0.0-1.0 | Wolken Detail X |
clouddetaily | 0.0-1.0 | Wolken Detail Y |
clouddetaild | 0.0-1.0 | Wolken Detail Dichte |
cloudscale | 0.0-1.0 | Wolken Ausmaß |
cloudscrollx | 0.0-1.0 | Wolken Bewegung X |
cloudscrolly | 0.0-1.0 | Wolken Bewegung Y |
densitymultiplier | 0.0-0.9 | Dichte multiplizierer vom Nebel |
distancemultiplier | 0.0-100.0 | Abstand multiplizierer vom Nebel |
eastangle | 0.0-1.0 | Position von Osten, 0.0 ist normal |
hazedensity | 0.0-1.0 | Dichte der Trübung |
hazehorizon | 0.0-1.0 | Trübung am Horizont |
maxaltitude | 0.0-4000.0 | Maximale Höhe des Nebels |
scenegamma | 0.0-10.0 | Allgemeines gamma, 1.0 ist normal |
starbrightness | 0.0-2.0 | Helligkeit der Sterne |
sunglowfocus | 0.0-0.5 | Fokus der Glut der Sonne |
sunglowsize | 1.0-2.0 | Größe der Glut der Sonne |
sunmooncolorr | 0.0-1.0 | Sonne und Mond, Roter Kanal |
sunmooncolorg | 0.0-1.0 | Sonne und Mond, Grüner Kanal |
sunmooncolorb | 0.0-1.0 | Sonne und Mond, Blauer Kanal |
sunmooncolori | 0.0-1.0 | Sonne und Mond, Intensivität |
sunmoonposition | 0.0-1.0 | Position von Sonne/Mond, unterschiedlich zu "daytime", benutze dies um das scheinbare Sonnenlicht nach dem laden eines Presets einzustellen |
Hinweis: von den Einstellungen oben wird nur "daytime" von v1.19.0 (oder älteren) mit implementiertem RestainedLove 1.14 oder höher unterstützt. Die anderen Einstellungen werden ignoriert. Dies ist weil diese Viewer keinen Windlightumwandler integriert haben.
(*) Stillschweigend verworfen wenn der Benutzer durch die entsprechende Einschränkung daran gehindert ist. Das ist mit Absicht.
Bsp : Abnehmen erzwingen geht nicht wenn das Objekt unabnehmbar ist. Ausziehen erzwingen funktioniert nicht wenn der Benutzer sich nicht ausziehen darf.
- Den Wert einer Umgebungseinstellung erhalten : @getenv_<setting>=<channel_number>
Eingeführt in v1.15
Lässt den Viewer automatisch den Wert einer Umgebungseinstellung auf der Chat Kanal Nummer <channel_number> auf die das Script hören kann antworten. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist der Wert, der mit <setting> im entsprechenden @setenv Kommando gesetzt wurde oder per Hand. Siehe die Liste hier drüber für eine Liste von Einstellungen.
Hinweis: nur @getenv_daytime ist von v1.19.0 (oder älter, das heisst kein Windlight) Viewern mit RestrainedLove v1.15 oder später unterstützt.
Wichtiger Hinweis über globale Verhalten wie sendchat
Solche Verhaltensweisen sind global, was bedeuete, dass sie nicht von einem bestimmten Objekt abhängig sind. Jedoch werden sie durch Objekte mit einer UUID, die sich ändern kann, ausgelöst und verschiedene Objekte können das gleiche Verhalten hinzufügen, was mehrere Male gespeichert wird, weil die UUIDs unterschiedlich sind.
Das hat einen netten Nebeneffekt : wenn man 2 verschlossene Teile trägt, die Chat verhindern, dann ist es notwendig beide zu entsperren um wieder chatten zu können. Aber das hat auch einen fiesen Nebeneffekt : wenn das Teil die UUID ändert (zum Beispiel es wurde derezzed und wieder gerezzt) und hat vorher keinen Chat erlaubt, dann muss der Benutzer einen kleinen Moment warten, weil die Regel bleibt "verwaist" bestehen (dessen UUID wurde gelöscht) bis der garbage collector (Speicherbereiniger) einsetzt.
Bitte beachte : Seit v1.16.1 wird jedes verschlossene Objekt dass aus irgendwelchen Gründen abgerissen wird (llAttachToAvatar zum Beispiel), wird durch den Viewer nach ein paar Sekunden wieder angehängt. Das bedeuetet dass das Aufrufen von @clear beim Abnehmen zur Zeit das Objekt entsperren wird, welches wieder verschlossen werden muss nach dem Wiederanhängen. Deshalb ist es nicht mehr empfohlen @clear beim Abnehmen aufzurufen, im Gegenteil zu pre-1.16.1 Versionen.
Übersetzung zur Zeit in Arbeit, bitte solange den englischen Artikel aufrufen: https://wiki.secondlife.com/wiki/LSL_Protocol/RestrainedLoveAPI#Shared_Folders
Seit v1.11 kann der Viewer einige Deiner Teile "teilen" mit in-world Scripten, damit andere Dich zwingen können sie anzuhängen, abzunehmen und aufzulisten was Du geteilt hast.
"Teilen" heisst NICHT, dass andere sie nehmen könnten wenn sie es wollten (einige der Teile sind sowieso no transfer), aber sie können DICH nach Belieben zwingen sie anzuziehen/auszuziehen durch ein Script, dass DEIN Restraints enthält. Sie verbleiben in Deinem Inventar. Tatsächlich wäre es besser dieses Feature als "exposed Ordner" zu bezeichnen.
Um dies zu tun :
- Erstelle einen Ordner mit dem Namen "#RLV" (ohne die Anführungsstriche) direkt unter "Mein Inventar" (rechtsklicke auf "Mein Inventar" und wähle "Neuer Ordner"). Wir werden diesen Ordner "shared root".
- Verschiebe einen Ordner, der Restraints oder andere Anhänge enthält direkt in diesen neuen Ordner.
- Trage den Inhalt des Ordner, das war es !
Nun würde es so aussehen :
Mein Inventar |- #RLV | |- cuffs | | |- left cuff (l forearm) (no copy) | | \- right cuff (r forearm) (no copy) | \- gag | \- gag (mouth) (no copy) |- Animations |- Body Parts . . .
Als Beispiel : Wenn Du einen Satz RR Straps besitzt und diesen Teilen möchtest, dann verschiebe den Ordner "Straps BOXED" einfach unter den shared root.
Entweder trage alle Teile des Ordners den Du gerade verschoben hast (einen Ordner zu Zeit !) oder benenne sie selbst um, so dass jedes Teil im Namen den Namen des Ziel Attachmentpunktes enthält. Als Beispiel : "left cuff (l forearm)", "right ankle cuff (r lower leg)". Bitte beachte, dass no-modify Teile ein wenig schwieriger zum teilen sind, weil sie nicht von Dir oder dem Viewer umbenannt werden können. Mehr dazu weiter unten.
Der Attachmentpunktname ist der Gleiche wie Du ihn im "Anhängen an" Menu in Deinem Inventar findest und sind case insensitive (als Beispiel : "chest", "skull", "stomach", "left ear", "r upper arm"...). Wenn Du das Teil trägst ohne es erst umzubenennen wird es automatisch umbenannt, aber nur wenn es im shared Ordner ist und nicht bereits einen Attachmentpunktnamen enthält und modify ist. Wenn Du es an einem anderem Attachmentpunkt tragen möchtest musst Du es erst von Hand umbenennen.
Kleidungsstücke werden genau gleich behandelt (tatsächlich können sie auch in einen Ordner mit Restraints gepackt werden und mit dem gleichen Kommando getragen werden). Schuhe etwa sind ein gutes Beispiel für gemischte Outfits : einige Anhänge und der Schuh layer. Kleidung wird NICHT automatisch umbenannt wenn sie getragen wurden, weil ihr Typos darüber entscheidet wo sie getragen werden (skirt, jacket, undershirt...).
WIE MAN NO-MODIFY TEILE TEILT : Wie Du bereits weisst können no-modify Teile nicht umbenannt werden, also ist die Technik etwas schwieriger. Erstelle einen Unterordner innerhalb des Outfit Ordners (sowas wie "cuffs" im oberen Beispiel), packe EIN no-modify Teil da hinein. Wenn Du ihn trägst siehst Du dass sich der Ordner selbst umbenennt (darum darfst Du nicht mehr als ein Teil reinpacken). Wenn Dein Outfit mehrere no-modify Teile enthält musst Du also entsprechend viele Ordner erstellen und die no-modify Objekte hineinpacken, einen pro Ordner.
Beispiel mit no-modify Schuhen :
My Inventory |- #RLV | \- shoes | |- left shoe (left foot) | | \- left shoe (no modify) (no transfer) <-- no-mod Objekt | |- right shoe (right foot) | | \- right shoe (no modify) (no transfer) <-- no-mod Objekt | \- shoe base (no modify) (no transfer) <-- dies ist kein Objekt |- Animations |- Body Parts . . .
FALLSTRICKE :
- Tue KEIN Komma (',') in den Ordnernamen unterhalb des shared root oder es wird die Liste versagen lassen.
- Vergesse nicht die Teile in den geteilten Ordner umzubenennen (oder sie zumindest einmal zu tragen damit sie sich automatisch umbenennen) oder das Zwangs Attach Kommando scheint gar nichts zu machen.
- Vermeide es den shared root mit zu vielen Ordner aufzugleidern, weil einige Scripte basieren auf der Liste die sie durch das @getinv Kommando erhalten und die Chat Nachrichten auf 1023 Zeichen begrenzt sind. Wähle sorgsam und benutze kurze Namen. Allerdings mit durchschnittlich 9 Zeichen pro Ordner könntest Du rund 100 Ordner zur Verfügung haben.
- Vergiss nicht die no-modify Teile in einen Unterordner zu packen, jeweils einen, so dass deren Namen vom Viewer genutzt werden können um herauszufinden wo es angehängt werden soll. Sie können nicht geteilt werden wie modify Teile weil sie nicht umbenannt werden können und der Outfit Ordner selbst wird nicht umbenannt (weil er mehrere Teile enthält).
Zu Deiner Information
Hier noch wie es intern arbeitet, um besser zu verstehen in welche Fallen zu geraten könntest :
- Jedes Kommando wird gewandelt in ein Verhalten (ex: "remoutfit"), eine Option (ex: "shirt") und ein Parameter (ex: "force") und kommt von einer UUID (die eindeutige ID des sendenen Objekts).
- Es gibt zwei Typen von Kommandos : Einmal Kommandos (solche mit dem Parameter "force" und solche dessen Parameter eine Nummer wie eine Kanal Nummer ist von einem "Versions" Aufruf) und Regeln (solche deren Parameter "y", "n", "add", oder "rem" ist). "clear" ist speziell aber kann als Einmal Kommando angesehen werden.
- Wenn ein Kommando eine Kanal Nummer nimmt, dann muss diese Nummer entweder grundsätzlich positiv oder (für RestrainedLove v1.23a (@versionnum = 1230001) und höher) grundsätzlich negativ sein. Die Benutzung von Kanal 0 ist nicht erlaubt. Beachte, dass der RestrainedLove maximal 255 Zeichen auf einem negativen Kanal senden kann, während es bis zu 1023 Zeichen auf einem positiven Kanal senden kann. Negative Kanäle sind nützlich um den Benutzer vom Cheaten abzuhalten, zum Beispiel bei der Nachfrage der @versionnum (weil der Benutzer einen Viewer ohne RLV benutzen könnte und dem RestrainedLove Teil glauben machen kann, dass RestrainedLove Viewer läuft durch das Vorschwindeln der Antwort auf des Versions Kommando auf einem positiven Kanal, was sie nicht auf einem negativen Kanal machen könnten). Positive Kanäle werden am Besten genutzt für Kommandos, die größere Antwort Strings geben könnten (@getpath zum Beispiel).
- Parameter "n" und "add" sind exakt gleich und werden exakt auf die gleiche Weise behandelt, sie sind nur Synonyme. Das Gleiche gilt für "y" und "rem". Der einzige Zweck ist Regeln ("sendchannel=n") von Ausnahmen ("sendchannel:8=add") für die Übersichtlichkeit in einem Script zu unterscheiden.
- Regeln werden in einer Tabelle gespeichert, die die UUID des Senders mit der Regel selbst verbinden. Sie werden hinzugefügt wenn ein "n"/"add" Parameter ankommt und entfernt wenn ein "y"/"rem" Parameter ankommt.
Wenn UUID1 ein Collar ist und UUID2 ein Gag ist :
UUID1 => detach, tploc, tplm, tplure, sittp
UUID2 => detach, sendim, sendim:(keyholder)
Diese beiden Regeln bedeuten, dass der Benutzer ausser zum Keyholder keine IMs senden kann und überhaupt nicht TP. Diese beiden Teile sind nicht abnehmbar. Jetzt sendet das Collar "@sendim=n" und die Tabelle wird zu :
UUID1 => detach, tploc, tplm, tplure, sittp, sendim
UUID2 => detach, sendim, sendim:(keyholder)
Wenn es ein zweites Mal "@sendim=n" sendet ändert sich nichts, weil erst die Existenz geprüft wird bevor es hinzugefügt wird. Wenn der Gag entsperrt und abgenommen wird, sendet er entweder "@clear" oder der Speicherbereiniger (Garbage Collector) greift ein, so dass die Regeln die zu UUID2 gehören verschwinden. Jedoch ist der Avatar immer noch nicht in der Lage IMs zu senden, noch nicht mal zum Keyholder, weil die Ausnahme ebenso verschwindet. Daskommt daher, dass Regeln die zu einem Objekt gehören nicht mit Regeln von einem anderen Objekt kollidieren.
- Einmal Kommandos werden andererseits sofort ausgeführt und nicht gespeichert.
- Beim Einloggen ist der Avatar für einige Zeit nicht funktionsfähig (kann nicht chatten, kann sich nicht bewegen)und der Benutzer sieht den Fortschrittsbalken. Jedoch rezzen getragene gescriptete Objekte in der Zwischenzeit und beginnen die Regeln und Kommandos zu senden noch bevor der Viewer sie ausführen kann. Dafür speichert er sie zwischen und führt sie aus wenn der Benutzer Kontrolle erhält (Fortschritssbalken verschwindet).
- Der Viewer prüft periodisch (alle N Sekunden) alle seine Regeln und entfernt diejenigen die mit einer UUID verbunden sind, die nicht mehr existieren ("garbage collector"). Das bedeutet, das Regeln die von nicht getragenen werden gelöscht so wie der Avatar woanders hin teleportiert.