Difference between revisions of "LSL Protocol/RestrainedLoveAPI/de"
Line 883: | Line 883: | ||
right pec|center 2|top right|top|top left|center|bottom left|bottom|bottom right|neck|root | 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. | Wenn kein Teil angegeben ist, wird alles entfernt. | ||
'''Hinweis:''' In Bearbeitung sind derzeit die neuen Bento Attachmentpunkte für die Wiki. RLV benutzt sie bereits. | |||
left ringfinger, right ringfinger, tail base, tail tip, left winf, right wing, jaw, lect ear, right ear, left eye, right eye, tongue, groin, left hind foot, right hind foot | |||
Line 959: | Line 962: | ||
''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. | ''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. | ||
'''Hinweis:''' In Bearbeitung sind derzeit die neuen Bento Attachmentpunkte für die Wiki. RLV benutzt sie bereits. | |||
left ringfinger, right ringfinger, tail base, tail tip, left winf, right wing, jaw, lect ear, right ear, left eye, right eye, tongue, groin, left hind foot, right hind foot | |||
Revision as of 08:16, 19 September 2017
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials | |
Restrained Love Viewer v2.9 Spezifikation
Englisches Original von Marine Kelley.
Deutsche Übersetzung von Laura Eun.
Alle Angaben ohne Gewähr.
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 Spezifikationen 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-Kommando Nachricht zu setzen, dann wird die nachfolgende Nachricht scheitern.
- Historischer Hinweis: Vor Version 1.10 erlaubte RLV nur ein Kommando pro Nachricht. In 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 vorhandene 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 Ausnahmen, 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 sie.
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
Hinweis: 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.
Fussnoten: "(*)" bezeichnen Fussnoten und werden am Ende der Liste erklärt
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 automatische 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 automatische 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, dass dies unterschiedlich ist zur Version vom Viewer, aber das Script sollte sich nicht darum 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. Jedoch haben einige Viewer wie der Firestorm die Möglichkeit eine automatische Benachrichtigung an den Benutzer zu senden, sowie jemand anfängt eine IM zu schreiben. Wenn der Benutzer diese Funktion aktiviert hat, wird ein IM Fenster geöffnet und die automatische Benachrichtigung angezeigt sowie vom Sender das @ Zeichen getippt wird, allerdings nicht die Nachricht selbst.
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 ist, wird es einfach ignoriert. Bearbeiten der Blacklist wird bestehende Restriktionen nicht aufheben wenn sie einmal ausgeführt wurden. Es ist ein Neustart 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, dass 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, mit dem gleichen Vorbehalt wie bereits weiter oben unter @version erwähnt.
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 Ausnahmen von anderen Objekten verwerfen (es ist sogar der Hauptzweck), daher können einige Produkte den Anschein haben, 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 @sendim_sec oder 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 von 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.
- Manuelle Abfrage aller Restriktionen die beim Avatar aktuell gesetzt sind :
@list Kein offizieller Bestandteil der RLV API. Es ist den Herstellern von Viewern freigestellt es zu implementieren
Dieses Kommando muss im IM Fenster ausgeführt werden. Der Benutzer muss zustimmen, ob der Viewer eine Liste aller zur Zeit gesetzten Restriktionen zurück senden darf.
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 funktioniert.
Wenn es in einem Anhang verwendet wird, wandelt dieses Snippet die aktuelle Rotation des Avatars in einen Winkel in Bogenmaß um, der für @setrot geeignet ist:
vector fwd = <1,0,0>*llGetRootRotation();
float angle = llAtan2(fwd.x, fwd.y);
- Ä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]
Achtung bestimmte Viewer werden dieses Kommando nicht implementieren.
Kamera und Sicht
- Erlauben/verbieten zu weit mit CTRL-0 nach vorne zu zoomen : "@camzoommax:<max_multiplier>=<y/n>"
Eingeführt in v2.9
Wenn diese Einschränkung aktiviert ist, hindert sie den Benutzer (mit der CTRL-0-Taste) weiter als <max_multiplier> zu zoomen, wobei bekannt ist, dass 1.0 die Voreinstellung ist. Wenn mehrere Objekte diese Einschränkung ausgeben, behält der Viewer den kleinsten Wert von allen.
- Erlauben/verbieten zu weit mit CTRL-8 zurück zu zoomen : "@camzoommin:<min_multiplier>=<y/n>"
Eingeführt in v2.9
Wenn diese Einschränkung aktiviert ist, verhindert sie, dass der Benutzer (mit der CTRL-8-Taste) weiter als <min_multiplier> herauszoomen kann. Wenn mehrere Objekte diese Einschränkung ausgeben, behält der Viewer den höchsten Wert von allen.
- Erlauben/verbieten zu weit mit CTRL-0 nach vorne zu zoomen : "@setcam_fovmin:<min_fov_in_radians>=<y/n>"
Eingeführt in v2.9.20
Wenn diese Einschränkung aktiviert ist, hindert sie den Benutzer (mit der CTRL-0-Taste) kleiner als <min_fov_in_radians> zoomt. Wenn mehrere Objekte diese Einschränkung ausstellen, behält der Viewer den größten Wert von allen. Dieser Befehl ähnelt @camzoommax, allerdings wird hier das Gesichtsfeld angegeben anstelle eines Zoom-Multiplikators.
- Erlauben/verbieten zu weit mit CTRL-8 zurück zu zoomen : "@setcam_fovmax:<max_fov_in_radians>=<y/n>"
Eingeführt in v2.9.20
Wenn diese Einschränkung aktiviert ist, verhindert sie, dass der Benutzer (mit der CTRL-8-Taste) höher als <max_fov_in_radians> zoomen kann. Wenn mehrere Objekte diese Einschränkung ausgeben, behält der Viewer den niedrigsten Wert von allen. Dieser Befehl ähnelt dem @camzoommin, allerdings wird hier das Gesichtsfeld angegeben anstelle eines Zoom-Multiplikators.
- Das Gesichtsfeld ändern : "@setcam_fov:<fov_in_radians>=force"
Eingeführt in v2.9.20
Dieses Kommando zwingt den Benutzer zu einem bestimmten Wert zu zoomen, aber schränkt nicht das zurück zoomen ein (das @camzoomXXX und @setcam_fovXXX muss dafür benutzt werden).
- Erlauben/verbieten die Kamera zu weit vom Avatar zu bewegen : "@camdistmax:<max_distance>=<y/n>"
Eingeführt in v2.9
Wenn diese Einschränkung aktiviert ist, verhindert sie, dass der Benutzer die Kamera zu weit vom Avatar bewegt, entweder mit dem Mausrad oder beim Fokussieren mit der Alt-Taste. Wenn <max_distance> auf 0 gesetzt ist, zwingt dieser Befehl den Avatar in Mouselook zu bleiben. Wenn mehrere Objekte diese Einschränkung ausgeben, behält der Viewer den kleinsten Wert von allen. Dies wirkt sich nicht auf Skripte aus, die die Kamera selbst bewegen.
- Erlauben/verbieten die Kamera zu weit vom Avatar zu bewegen : "@setcam_avdistmax:<max_distance>=<y/n>"
Eingeführt in v2.9.20
Dieser Befehl wirkt exakt wie @camdistmax hier drüber beschrieben, Es ist ein Synonym.
- Erlauben/verbieten die Kamera zu nah zum Avatar zu bewegen : "@camdistmin:<min_distance>=<y/n>"
Eingeführt in v2.9
Wenn diese Einschränkung aktiviert ist, verhindert sie, dass der Benutzer die Kamera zu nahe am Avatar bewegt, entweder mit dem Mausrad oder beim Fokussieren mit der Alt-Taste. Wenn <min_distance> auf etwas höher als 0 gesetzt ist, zwingt dieser Befehl den Avatar aus Mouselook herauszugehen und verhindert, dass er zurück geht. Wenn mehrere Objekte diese Einschränkung ausgeben, behält der Betrachter den höchsten Wert von allen. Dies wirkt sich nicht auf Skripte aus, die die Kamera selbst bewegen.
- Erlauben/verbieten die Kamera zu nah zum Avatar zu bewegen : "@setcam_avdistmin:<min_distance>=<y/n>"
Eingeführt in v2.9.20
Dieser Befehl wirkt exakt wie @camdistmin hier drüber beschrieben, Es ist ein Synonym.
- Teilweise oder vollständig den Avatar erblinden : "@camdrawmin:<min_distance>=<y/n>", "@camdrawmax:<max_distance>=<y/n>", "@camdrawalphamin:<min_alpha>=<y/n>", "@camdrawalphamax:<max_alpha>=<y/n>"
Eingeführt in v2.9
Wenn diese aktiv sind, machen diese beiden Einschränkungen dem Benutzer mehrere konzentrische Sphären um den Avatar herum, mit zunehmenden Trübungen von <min_alpha> bei <min_distance> bis <max_alpha> bei <max_distance>. Das Ergebnis sieht aus wie der Nebel, der allmählich abnimmt, wenn der Abstand zunimmt, und er kann die Ansicht vollständig blockieren, wenn @camdrawalphamax auf 1 gesetzt ist (die Voreinstellung). Bei der Erteilung dieser Beschränkungen sind einige Fragen zu berücksichtigen: - Es gibt Nebel (allmähliche Verdunkelung der Ansicht) nur, wenn sowohl @camdrawalphamin als auch @camdrawalphamax angegeben sind und anders sind. Wenn einer von ihnen weggelassen wird, wird nur eine Kugel gerendert (was sein kann, was der Scripter will). - Die Anzahl der zu zeichnenden Sphären ist nicht fixiert und hängt vom Viewer ab (z. B. kann eine Debug-Einstellung den Benutzer entscheiden lassen, weil je mehr transparente Kugeln zu Stapeln sind, desto schwerer für das Rendering). - Der Vuewer macht es so, dass die entfernten Gegenstände nur durch @camdrawalphamax verdeckt sind (zB wenn @camdrawalphamax auf 0.75 gesetzt ist, wird eine weiße Vollmondwand in der Ferne dunkelgrau, RGB 64/64/64), unabhängig von der Anzahl der Sphären die zu zeichnen sind. - Die Kamera kann nicht über @camdrawmin hinausgehen, und @camdrawmin kann nicht unter 0.4 gesetzt werden (weil es nicht seine Aufgabe ist Mouselook zu erzwingen und die Sphäre würde vom Viewer unter diesem Limit nicht gerendert werden). - Die vom Viewer zurückgegebenen Grenzen sind die niedrigsten Maxima und die höchsten Minima, wenn mehrere von ihnen von verschiedenen Objekten ausgegeben werden. - Die Namensschilder der Avatare und die Hovertexts in der Welt verblassen zur Unsichtbarkeit über @camdrawmin hinaus.
- Die Farbe des Nebels angeben : "@camdrawcolor:<red>;<green>;<blue>=<y/n>"
Eingeführt in v2.9
Wenn dieser Befehl ausgegeben wird, wird die von @camdrawmin und @camdrawmax entworfene Farbe des Nebels auf <rot>, <grün>, <blau> Werte gesetzt. Diese drei Werte liegen zwischen 0,0 und 1,0, die Voreinstellung ist schwarz ("0; 0; 0"). Wenn mehrere Objekte diesen Befehl ausgeben, ist die resultierende Farbe eine Mischung aus allen.
- Erlauben/verbieten, die Kamera vom Avatar zu entsperren : "@camunlock=<y/n>"
Eingeführt in v2.9
Wenn diese Einschränkung aktiviert ist, verhindert sie, dass der Benutzer die Kamera vom Avatar freigibt, was bedeutet, dass der Benutzer Alt nicht verwenden kann, um die Kamera um den Avatar zu fokussieren oder zu umkreisen. Während die Kamera verschlossen ist, zwingt die Sim sie, in einer Sichtlinie vom Avatar zu bleiben, was bedeutet, dass diese Einschränkung gut ist, um durch Wände zu sehen.
- Erlauben/verbieten, die Kamera vom Avatar zu entsperren : "@setcam_unlock=<y/n>"
Eingeführt in v2.9.20
Dieser Befehl wirkt exakt genauso wie @camunlock hier drüber beschrieben. Es ist ein Synonym.
- Verwandelt all Avatare zu Silhouetten ab einer bestimmten Distanz' : "@camavdist:<distance>=<y/n>"
Eingeführt in v2.9
Wenn aktiv, lässt diese Einschränkung alle Avatare jenseits von <distance> aussehen, als ob sie visuell gemuted wurden, allerdings in schwarz gefärbt.
- Verwandelt alle Texturen in leere Texturen, ausgenommen für Avatare : "@camtextures[:texture_uuid]=<y/n>"
Eingeführt in v2.9, uuid parameter hinzugefügt in v2.9.20
Wemm aktiv lässt diese Einschränkung den Viewer jede Textur in der Welt ignorieren, ausgenommen die von Anhängen die von Avataren getragen werden sowie deren Haut und Kleidung. Die Materials sind davon ebenfalls nicht betroffen, so dass diese Einschränkung dafür gut ist, die Tatsache zu simulieren, dass der Avatar nicht „sehen“ geschweige denn lesen kann aber immer noch die Welt fühlen kann. Seit v2.9.20 wird die als Parameter angegebene uuid verwendet, um die entsprechende Textur überall in der Welt anzuzeigen, anstatt eine graue Textur.
- Verwandelt alle Texturen in leere Texturen, ausgenommen für Avatare' : "@setcam_textures[:texture_uuid]=<y/n>"
Eingeführt in v2.9.20
Dieser Befehl wirkt exakt genauso wie @camtextures hier drüber beschrieben. Es ist ein Synonym
- Die aktuelle minimale Kamera Entfernung erhalten, auf die der Benutzer beschränkt ist : "@getcam_avdistmin=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch die aktuelle minimale Entfernung zwischen der Kamera und dem Avatar ausgeben. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
- Die aktuelle maximale Kamera Entfernung erhalten, auf die der Benutzer beschränkt ist : "@getcam_avdistmax=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch die aktuelle maximale Entfernung zwischen der Kamera und dem Avatar ausgeben. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
- Erhalte den aktuellen minimalen Sichtfeld Winkel auf die der Benutzer beschränkt ist. : "@getcam_fovmin=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch das minimale Sichtfeld (in Radiant) antworten. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
- Erhalte den aktuellen maximalen Sichtfeld Winkel auf die der Benutzer beschränkt ist : "@getcam_fovmax=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch das maximale Sichtfeld (in Radiant) antworten. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
- Erhalte den aktuellen minimalen Zoom-Multiplikator, auf den der Benutzer beschränkt ist : "@getcam_zoommin=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch den minimalen Multiplikator antworten den der Benutzer heraus zoomen kann. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
- Erhalte das aktuelle Sichtfeld in das der Benutzer gezoomt hat : "@getcam_fov=<channel_number>"
Eingeführt in v2.9.20
Lässt den Viewer automatisch den aktuellen Wert des Sichtfeldes (in Radiant) antworten in die der Benutzer gezoomt hat. Benutze immer eine positive Zahl Bedenke, dass normale Viewer niemals etwas antworten, also entferne den Listener nach einem Timeout.
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 selbst 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.
- Erlauben/verbieten Gesten auszuführen : "@sendgesture=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann der Benutzer keinerlei Gesten mehr ausführen (Chat, Animationen, Sounds)
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.
- Erlauben/verbieten einen bestimmten Chat Kanal zu benutzen : "@sendchannel_except:<channel>=<y/n>"
Eingeführt in v2.9.20
Wenn diese Regelaktiv ist kann der Benutzer keine privaten Chat Nachrichten auf dem genannten Kanal senden (Es ist der komplementäre Befehl zu @sendchannel);
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.
- Schließen des IM Fensters wenn der Benutzer unter @startim Einschränkung ist : "@stopim"
Kein offizieller Bestandteil der RLV API. Es ist den Herstellern von Viewern freigestellt es zu implementieren
Dieses Kommando wird im IM Fenster ausgeführt. Wenn der Benutzer unter einer startim Einschränkung ist, wird durch diesen Befehl das aktuelle IM Fenster beim Benutzer geschlossen.
- 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 lokal zu teleportieren : "@tplocal[:max_distance]=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann der Benutzer nicht mehr innerhalb der gleichen Region durch Doppleklick teleportieren, es sei denn es ist in der angegebenen maximalen Distanz.
- 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 :
// 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");
}
}
}
- Force-Teleport des Benutzers, Anwender-feundlicher Weg : "@tpto:<region_name>/<X_local>/<Y_local>/<Z_local>[;lookat]=force" (*)
Eingeführt in v2.9.20
Dieser Befehl zwingt den Avatar, auf die angegebenen lokalen Koordinaten innerhalb der angegebenen Region zu teleportieren. Beachten Sie, dass diese Koordinaten im Gegensatz zur vorherigen Version 'lokal in der Region' sind. Achtung, wenn das Ziel einen Telehub oder einen Landeplatz enthält, landet der Benutzer dort anstelle des gewünschten Punktes. Dies ist eine SL-Einschränkung. Denken Sie auch daran, dass @tpto gesperrt durch @tploc=n ist und seit v1.15 und höher auch von @unsit.
- 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 !
- Entfernen/hinzufügen automatisches Akzeptieren von Teleport Anfragen von einem bestimmten Avatar : "@accepttprequest[:<UUID>]=<rem/add>"
Eingeführt in v2.9.20
Das Hinzufügen dieser Regel lässt den Benutzer automatisch alle Teleport Anfragen (genau genommen schickt er ein Teleport Angebot) von dem Avatar mit der <UUID>, oder von allen wenn die UUID ausgelassen wird, akzeptieren.
- Erlauben/verbieten Teleport Anfragen an Leute zu schicken : "@tprequest=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann der Benutzer keine Teleport Anfragen mehr an andere Benutzer stellen
- Erlauben/verbieten Teleport Anfragen an Leute zu schicken, sicherer Weg : "@tprequest_sec=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann der Benutzer keine Teleport Anfragen mehr an andere Benutzer stellen. Dieses bestimmte Kommando lässt nur Ausnahmen aus dem gleichen Objekt zu, im Gegensatz zum nicht sicheren Weg das Ausnahmen von allen Objekten zulässt.
- Entfernen/hinzufügen von Ausnahmen zur Teleport Anfragen Einschränkung : "@tprequest:<UUID>=<rem/add>"
Eingeführt in v2.9.20
Wenn diese Ausnahme hinzugefügt wird, kann der Benutzer Teleport Anfragen an den Avatar senden dessen UUID im Befehl angegeben ist. Dies überschreibt nur die Beschränkung für diesen Avatar (es gibt keine Einschränkung in der Anzahl der Ausnahmen). Vergiss nicht sie wieder zu entfernen, wenn sie nicht mehr gebraucht wird.
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.
BEACHTE: echte RLV-Viewer (Cool VL Viewer v1.26.20.28 und neuere ausgenommen) erfordern, dass der Sitz ein sit-target definiert hat (llSitTarget () LSL-Funktion), sonst scheitert das force-sit mit einer "Keine passende Oberfläche zum sitzen" Fehlermeldung vom SL-Server. RLVa Viewer schafft es, den Avatar auf einem Sit-Ziel-ohne Sitz zu setzen, unter der Bedingung, dass der Abstand zwischen dem Avatar und dem Sitzplatz weniger als 8m ist.
- 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.
Hinweis: In Bearbeitung sind derzeit die neuen Bento Attachmentpunkte für die Wiki. RLV benutzt sie bereits.
left ringfinger, right ringfinger, tail base, tail tip, left winf, right wing, jaw, lect ear, right ear, left eye, right eye, tongue, groin, left hind foot, right hind foot
- 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.
Hinweis: In Bearbeitung sind derzeit die neuen Bento Attachmentpunkte für die Wiki. RLV benutzt sie bereits.
left ringfinger, right ringfinger, tail base, tail tip, left winf, right wing, jaw, lect ear, right ear, left eye, right eye, tongue, groin, left hind foot, right hind foot
- 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 tragen von Kleidung und Anhängen, die Teil das #RLV Ordners sind : "@sharedwear=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann kein Objekt, Kleidungsstück oder Körperteil getragen werden wenn es Teil vom #RLV Ordner ist (sprich "Shared").
- Erlauben/verbieten Kleidung und Anhänge abzunehmen die Teil des #RLV Ordners sind : "@sharedunwear=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden kann kein Objekt, Kleidungsstück oder Körperteil vom Avatar abgenommen werden, wenn es Teil vom #RLV Ordner ist )srpich "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 ("/").
- Ergalte den Pfad zu verschiedenen geteilten Ordnern durch ein Suchkriterium : "@findfolders:part1[&&...&&partN][;output_separator]=<channel_number>"
Eingeführt in v2.9.20
Läasst den Viewer automatisch die Pfade zu den geteilten Ordnern sofort auf der Chat Channel Nummer <channel_number> auf die das Script hört sagen, dessen Namen <part1> und <part2> und ... und <partN> enthalten. Wenn ein Ausgabe Seperator angegeben ist, wird dieser benutzt um verschiedene Pfade zu unterteilen für den Fall dass es mehrere gibt. Ansonsten wird ein Komma (',') benutzt. Die Suche ist in der Tiefe zuerst, beachte den Eingabe separator, der "&&" wie "und" ist. Benutze immer eine positive Zahl. Denk dran, dass normale Viewer nie etwas antworten und entferne den Listener nach einem Timeout. Es schließt keine ausgeblendeten Ordner ein (Ordner dessen Name mit einem Punkt ('.') beginnen), auch nicht Ordner dessen Name 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> or <clothing_layer> or <uuid>]=<channel_number>"
Eingeführt in v1.16, uuid parameter hinzugefügt in v2.9.20
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> or <clothing_layer> or <uuid>]=<channel_number>"
Eingeführt in v2.1 and v1.24, uuid parameter hinzugefügt in v2.9.20
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 hier drü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> or <uuid>]=force" (*)
Eingeführt in v1.16, uuid parameter hinzugefügt in v2.9.20
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[:max_distance]=<y/n>"
Eingeführt in v1.11, Entfernungsparameter hinzugefügt in v2.9.20
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. Seit v2.9.20 kannst Du einen benutzerdefinierten Abstand angeben, wenn mehrere solcher Befehle ausgegeben werden, wird der Benutzer auf den minimalen Abstand von allen beschränkt.
- Erlauben/verbieten berühren von Objekten die mehr als 1.5 Meter vom Avatar entfernt sind : "@touchfar[:max_distance]=<y/n>"
Eingeführt in v2.4, Entfernungsparameter hinzugefügt in v2.9.20
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.
- Erlauben/verbieten HUDs zu berühren : "@touchhud[:<UUID>]=<y/n>"
Eingeführt in 2.9.20
Wenn unterbunden ist der Avatar nicht in der Lage irgendwelche HUDs zu berühren. Wenn es mit eine UUID gesendet wird, wird der Avatar nur daran gehindert den HUD mit der UUID zu berühren.
- Erlauben/verbietenObjekte oder Attachments zu berühren, bearbeiten oder rezzen : "@interact=<y/n>"
Eingeführt in 2.9.20
Wenn unterbunden ist der Avatar nicht in der Lage irgendwelche Objekte, Attachments oder HUDs zu berühren. Er kann nicht bearbeiten oder rezzen und kann nicht auf Objekten sitzen.
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 die Namen der Leute in der Umgebung zu sehen : "@shownames[:except_uuid]=<y/n>"
Eingeführt in v1.12.2, mehr Dummy Namen in v1.16 hinzugefügt', added uuid exception in v2.9.20
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 die Namen der Leute in der Umgebung zu sehen, sicherer Weg : "@shownames_sec[:except_uuid]=<y/n>"
Eingeführt in v2.9.20
Wenn unterbunden ist der Benitzer nicht in der Lage die Namen in der Umgebung zu sehen. (der eigene Name eingeschlossen), ausgenommen die als Parameter angegeben wurden . Die Namen tauchen nicht auf dem Schirm auf. Die Namen im Chat werden ersetzt durch „Dummy“ Namen wie „Someone“, „A Resident“, die Tooltips sind unterdrückt, das Pie Menu ist beinahe wertlos, so kann der Benutzer das Profil nicht direkt aufrufen etc. Dieses spezielle Kommando erlaubt Ausnahmen nur vom gleichen Objekt, im Gegensatz zum nicht sicheren Weg, welches Ausnahmen von jedem Objekt erlaubt.
- Erlauben/verbieten die Namen der Leute in der Umgebung zu sehen, ohne Zensur : "@shownametags=<y/n>"
Eingeführt in v2.9
Diese Einschränkung ist die gleiche wie @shownames, außer dass es nicht den Chat mit Dummy Namen zensiert. Jedoch zeigen die Leute in der Umgebung keine Namen an, das Radar ist versteckt. Rechtsklick auf einen Avatar in der Umgebung wird den Namen nicht verraten und so weiter.
- 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.
Hinweis: RLVa 1.4+ unterstützt <group_key> und auch <group_name>
- 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 (Welt > Umgebngseinstellungen > Sonnenaufgang/Mittag/Sonnenuntergang/Mitternacht/Regionseinstellungen verwenden/Umgebungs-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.
- 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.
Inoffizielle Kommandos
Bestimmte Viewer benutzen ein unterschiedliches Restriction System basierend auf der RestrainedLove API , welche ein paar extra Kommandos enthalten. Diese Kommandos sind nicht Teil der RestrainedLove API Spezifikation, wetden hier aber der Vollständigkeithalber aufgeführt. Auf diese Kommandos sollte man sich nicht verlassen, da nur bestimmte Viewer diese ausführen können.
- Erlauben&verbieten den automatischen Away/AFK Indicator zu deaktivieren : "@allowidle=<y/n>"
Wenn unterbunden dann kann die automatische Aktivierung vom Abwesend Indikator nicht deaktiviert werden. Wenn das Idle Timeout auf 0 gesetzt wurde, wird der Standardwert von 30 Minuten genommen
Fussnoten
(*) 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.
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), 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.
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 ihre Art 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).
Unterordner akzeptieren die durch llGiveInventoryList() in den geteilten Ordner übergeben wurden :
Beginnend mit RestrainedLove v1.16.2, kannst Du eine Liste mit Teilen an ein Opfer geben und sie als Unterordner im #RLV Ordner abspeichern (das erlaubt Dir die übergebenenen Teilen durch @attach tragen zu lassen).
Das Ausführen eines llGiveInventoryList(victim_id, "#RLV/~subfolder_name", list_of_stuff) Kommandos in einem Script lässt einen Standard Behalten/Verwerfen/Mute Dialog im Viewer des Opfers erscheinen (der Avatar dessen key die victim_id ist).
Sollte das Opfer das Angebot akzeptieren werden die list_of_stuff Teile in einen neuen Unterordner im #RLV ordner gepackt. Der Name des Ordners ist "~subfolder_name" (es ist die Verantwortung der Scripter eindeutige Unterordnernamen zu verwenden: wenn der Name gleich wie ein existierender Unterordner ist, werden zwei Unterordner mit dem gleichen Namen im #RLV Ordner auftauchen).
Beachte dass das Tilde Zeichen als erstes Zeichen des Unterordnernamens verwendet werden *muss* (das ist damit das Opfer leicht irgendwelche Unterordner die übergeben wurden erkennen kann und damit diese Unterordnernamen als letztes im #RLV Ordner erscheinen).
Beachte auch, dass dieses Feature vom Benutzer deaktiviert werden kann (durch Einstellen der RestrainedLoveForbidGiveToRLV Debug Einstellung auf TRUE): in diesem Fall werden die übergebenen Teile in einem Ordner mit dem Namen "#RLV/~subfolder_name" im Stammverzeichnis des Inventars anstatt im #RLV Ordner landen.
Weil der Benutzer entweder das Angebot ablehnen oder das Feature deaktiviert haben könnte in deren Viewer und weil SL manchmal an laggy Tagen recht lange braucht um aktuelle Transfers ausführen, musst Du prüfen ob dieser Ordner vorhanden ist (mit @getinv) bevor Du versuchst mit @attach die übergebenenen Objekte anzulegen.
Zu Deiner Information
Hier noch wie es intern arbeitet, um besser zu verstehen in welche Fallen Du 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 sendenden 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. Das kommt 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 (Fortschrittsbalken 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 Objekten kommen gelöscht werden, sowie der Avatar woanders hin teleportiert.