Difference between revisions of "LSL Protocol/RestrainedLoveAPI/de"
Line 648: | Line 648: | ||
== | ==Zu Deiner Information== | ||
Hier noch wie es intern arbeitet, um besser zu verstehen in welche Fallen zu geraten könntest : | |||
* Jedes Kommando wird gewandelt in ein '''Verhalten''' (ex: "remoutfit"), eine '''Option''' (ex: "shirt") und ein '''Parameter''' (ex: "force") und kommt von einer [[UUID]] (die eindeutige ID des sendenen Objekts). | |||
* Es gibt zwei Typen von Kommandos : '''Einmal''' Kommandos (solche mit dem Parameter "force" und solche dessen Parameter eine Nummer wie eine Kanal Nummer ist von einem "Versions" Aufruf) und '''Regeln''' (solche deren Parameter "y", "n", "add", oder "rem" ist). "clear" ist speziell aber kann als Einmal Kommando angesehen werden. | |||
* Wenn ein Kommando eine Kanal Nummer nimmt, dann muss diese Nummer entweder grundsätzlich positiv oder (für RestrainedLove v1.23a (@versionnum = 1230001) und höher) grundsätzlich negativ sein. Die Benutzung von Kanal 0 ist nicht erlaubt. Beachte, dass der RestrainedLove maximal 255 Zeichen auf einem negativen Kanal senden kann, während es bis zu 1023 Zeichen auf einem positiven Kanal senden kann. Negative Kanäle sind nützlich um den Benutzer vom Cheaten abzuhalten, zum Beispiel bei der Nachfrage der @versionnum (weil der Benutzer einen Viewer ohne RLV benutzen könnte und dem RestrainedLove Teil glauben machen kann, dass RestrainedLove Viewer läuft durch das Vorschwindeln der Antwort auf des Versions Kommando auf einem positiven Kanal, was sie nicht auf einem negativen Kanal machen könnten). Positive Kanäle werden am Besten genutzt für Kommandos, die größere Antwort Strings geben könnten (@getpath zum Beispiel). | |||
* Parameter "n" und "add" sind '''exakt gleich''' und werden '''exakt auf die gleiche Weise''' behandelt, sie sind nur '''Synonyme'''. Das Gleiche gilt für "y" und "rem". Der einzige Zweck ist Regeln ("sendchannel=n") von Ausnahmen ("sendchannel:8=add") für die Übersichtlichkeit in einem Script zu unterscheiden. | |||
* Rules are stored inside a table linking the [[UUID]] of the emitter to the rule itself. Sie werden '''hinzugefügt''' wenn ein "n"/"add" Parameter ankommt und '''entfernt''' wenn ein "y"/"rem" Parameter ankommt. | |||
Wenn '''''UUID1''''' ein Collar ist und '''''UUID2''''' ein Gag ist : | |||
'''''UUID1''''' => detach, tploc, tplm, tplure, sittp | |||
'''''UUID2''''' => detach, sendim, sendim:(keyholder) | |||
Diese beiden Regeln bedeuten, dass der Benutzer ausser zum Keyholder keine IMs senden kann und überhaupt nicht TP. Diese beiden Teile sind nicht abnehmbar. Jetzt sendet das Collar "@sendim=n" und die Tabelle wird zu : | |||
'''''UUID1''''' => detach, tploc, tplm, tplure, sittp, sendim | |||
'''''UUID2''''' => detach, sendim, sendim:(keyholder) | |||
Wenn es ein zweites Mal "@sendim=n" sendet ändert sich nichts, weil erst die Existenz geprüft wird bevor es hinzugefügt wird. Wenn der Gag entsperrt und abgenommen wird, sendet er entweder "@clear" oder der Speicherbereiniger (Garbage Collector) greift ein, so dass die Regeln die zu '''''UUID2''''' gehören verschwinden. Jedoch ist der Avatar immer noch nicht in der Lage IMs zu senden, noch nicht mal zum Keyholder, weil die Ausnahme ebenso verschwindet. Daskommt daher, dass Regeln die zu einem Objekt gehören nicht mit Regeln von einem anderen Objekt kollidieren. | |||
* Einmal Kommandos werden andererseits sofort ausgeführt und nicht gespeichert. | |||
* Beim Einloggen ist der Avatar für einige Zeit nicht funktionsfähig (kann nicht chatten, kann sich nicht bewegen)und der Benutzer sieht den Fortschrittsbalken. Jedoch [[rez]]zen getragene gescriptete Objekte in der Zwischenzeit und beginnen die Regeln und Kommandos zu senden noch bevor der Viewer sie ausführen kann. Dafür speichert er sie zwischen und führt sie aus wenn der Benutzer Kontrolle erhält (Fortschritssbalken verschwindet). | |||
* Der Viewer prüft periodisch (alle N Sekunden) alle seine Regeln und entfernt diejenigen die mit einer [[UUID]] verbunden sind, die nicht mehr existieren ("garbage collector"). Das bedeutet, das Regeln die von '''nicht getragenen''' werden gelöscht so wie der Avatar woanders hin [[teleport]]iert. | |||
Revision as of 21:57, 24 February 2013
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Restrained Love Viewer v2.8.1 Spezifikation
Original von Marine Kelley. Deutsche Übersetzung zur Zeit in Arbeit.
Um Mithilfe bei der Übersetzung wird gebeten. Bitte in-world Laura Eun kontaktieren!
Zielgruppe
Dieses Dokument ist für Leute, die vorhaben ihre eigenen LSL Scripte zu modifizieren oder zu erstellen, um die Vorteile des RestrainedLove viewer zu nutzen. Es erklärt weder die LSL Konzepte wie "messages" oder "events", noch universelle Konzepte wie UUIDs.
Dieses Konzept enthält die Spezifiaktionen für den RestrainedLove Viewer selbst. Wenn Du Informationen zum RestrainedLove viewer relay(RLV relay) benötigst, dann siehe bitte die RLV relay specification an.
Einleitung
Der RestrainedLove Viewer ändert sein Verhalten, wenn er spezielle Nachrichten von Scripten in-world erhält. Diese Nachrichten werden meist durch die llOwnerSay() LSL Funktion übermittelt.
Architektur
Der RestrainedLove Viewer hört alle llOwnerSay Nachrichten an den Viewer ab. Zeilen die mit dem at-Zeichen ('@') beginnen werden als RLV Kommando behandelt. Andere Zeilen werden wie gewohnt im lokalen Chat Fenster an den Benutzer weitergeleitet. Zum Beispiel wird llOwnerSay ("@detach=n") das detach Kommando mit dem Parameter n im Auftrag des Objekt in dem das Script läuft an den Viewer senden.
Die Syntax eine Nachricht ist:
@<command1>[:option1]=<param1>,<command2>[:option2]=<param2>,...,<commandN>[:optionN]=<paramN>
Beachte, dass dort nur ein '@' Zeichen an den Anfang der Nachricht gestellt wurde. Der Viewer interpretiert dieses als "die gesamte llOwnerSay() Nachricht enthält eine oder mehr Kommandos zum ausführen". Aus dokumentarischen Gründen werden hier Kommandos immer mit dem führenden '@' dargestellt. Wie auch immer ist es ein Fehler das '@' vor jedes Kommando innerhalb einer Multi-Kommanod Nachricht zu setzen, denn die nachfolgende Nachricht wird scheitern.
- Historischer Hinweis: Vor Version 1.10 erlaubte RLV nur ein Kommando pro Nachricht. Version 1.10 wurde die Möglichkeit hinzugefügt mehrere Kommandos in einer Nachricht zu senden, um zu vermeiden dass Benutzer, die den Viewer nicht benutzen, gespammt werden.
Wenn mindestens ein Kommando scheitert (z.B. ein Schreibfehler) sagt der Viewer "... fails command : ... " und zeigt die gesamte Nachricht. Jedoch werden korrekte Kommandos weiterhin umgewandelt und ausgeführt, nur das Unkorrekte wird ignoriert.
Viele dieser Kommandos legen das nachfolgende Verhalten des Objekt oder Avatars fest. Zum Beispiel wird das @detach=n Kommando das vorhanden Objekt locken und macht es unabnehmbar. Einige Kommandos setzen globale Verhalten, die nicht auf das Objekt beschränkt sind, dass das Kommando sendet. Zum Beispiel wird @sendchat=n den Benutzer daran hindern im lokalen Chat zu sprechen.
Hinweis für Kommandos mit Aunahmen, wie @sendim oder @sendchannel... @(rule):(exception)=n wird aktuell eine Ausnahme hinzufügen für die genannte Regel. @sendchannel:1=n, zum Beispiel, erlaubt Chat auf Kanal 1. Dies ist der Grund für mindestens zwei Scripter Unregelmässigkeiten. =add (was das Gleiche bedeutet wie =n) und =rem (was gleich ist mit =y) existieren für den Zweck um Ausnahmen hinzuzufügen und wieder zu entfernen, Benutze .
Warning! | |
Diese Verhaltensweisen sind nicht beständig zwischen zwei Sessions. Da ein Objekt bei jedem rezzen die UUID wechselt, muss das Objekt den Status erneut im on_rez() Event senden (unabnehmbar, verhindern von IMs...)und auch wann immer es seinen Status ändert. |
Liste der Kommandos
Himweis: Diese Kommandos sind nicht case-sensitive, aber leerraum-sensitive. Mit anderen Worten wird "@detach = n" nicht funktionieren.
Darstellungskonvention: Parameter in [eckigen Klammern] sind optionale Parameter und können ausgelassen werden. Der Schlot | und Schrägstrich / trennen Optionen von denen eine genutzt werden muss. <Spitze Klammern> schließen zwingende Parameter ein.
Versions Prüfung
- Automatische Versions Prüfung : "@version=<channel_number>"
Eingeführt in v1.0b Lässt den Viewer automatisch die verwendete Version der RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Warnung : beim einloggen geschieht das on_rez Event lang bevor der Avatar Nachrichten versenden kann (ungefähr bei der Hälfte der Login Bar). Das bedeutet, dass der Timeout lang genug sein sollte, zwischen 30 Sekunden und 1 Minute lang um die automtische Antwort vom Viewer zu erhalten.
Warnung 2 : Am 02/22/2010, hat Linden Lab ihre Third Party Viewer Policy veröffentlicht, die es verbietet den Begriff "Life" im Namen eines Third Party Viewers zu verwenden. Deswegen musste "Restrained Life" in "Restrained Love" umbenannt werden. Aus Kompabilitätsgründen wird @version trotzdem auch weiterhin funktionieren, jedoch solltest Du es nicht in neuen Scripten verwenden und nirgendwo den Begriff "Restrained Life" dem User anzeigen. Für neue Scripte solltest Du stattdessen @versionnew verwenden.
- Automatische Versions Prüfung : "@versionnew=<channel_number>"
Eingeführt in v1.23 Lässt den Viewer automatisch die verwendete Version der RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
Dieses Kommando ist der Nachfolger von @version und ersetzt es, obwohl @version für die Aufwärtskompabilität bestehen bleibt. Es gibt "RestrainedLove viewer v... (SL ...)" ("RestrainedLove" ist ein Wort) zurück.
Warnung : beim einloggen geschieht das on_rez Event lang bevor der Avatar Nachrichten versenden kann (ungefähr bei der Hälfte der Login Bar). Das bedeutet, dass der Timeout lang genug sein sollte, zwischen 30 Sekunden und 1 Minute lang um die automtische Antwort vom Viewer zu erhalten.
- Automatische Versions Nummer Prüfung : "@versionnum=<channel_number>"
Eingeführt in v1.21 Lässt den Viewer automatisch die verwendete Version Nummer der RLV API (bitte beachte, das dies unterschiedlich ist zur Version vom Viewer, aber das Script sollte sich nicht drum kümmern) auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Dieses Kommando ist weniger schwerfällig als @version, weil das Script nicht erst die Antwort verarbeiten muss, es erhält die Nummer sofort.
Die Versions Nummer ist bloss eine Zahl, die die Version der API darstellt. Wenn die Version X.Y.Z.P ist, dann ist die Nummer X.10^6 + Y.10^4 + Z.10^2 + P. Als Beispiel, 1.21.1 würde 1210100 sein.
- Automatische Versions Prüfung, zweiter Weg : llGetAgentLanguage (key id) ÜBERHOLT: NICHT BENUTZEN !
Eingeführt in v1.16 Wenn man diese LSL Funktion aufruft, bekommt man das Ergebnis sofort (es wird kein listener oder timer benötigt), es ist exakt gleich zu dem Ergebnis von "@version" und kann vom Benutzer nicht ausgeblendet werden. Dieser String übernimmt den Platz der Sprache die vom normalen Viewer zurück kommt, der Werte wie "en-us", "fr", "ko" etc zurückgeben könnte. Oder auch nichts, falls der Benutzer sich entschieden hat seine Spracheinstellung zu verstecken. Es ist optional im normalen Viewer und kann nicht von Scripten sicher verwendet werden, also macht das "entführen" dieses Features für die viel nützlichere und synchrone Versions Prüfung im RLV Sinn. WICHTIGER HINWEIS: dieses Feature kann nicht in Viewern vor v1.21 verwendet werden, selbst wenn diese RestrainedLove 1.16 verwenden. Also stelle sicher, dass Du auf die @version Methode zurück fällst wann immer llGetAgentLanguage() einen leeren String zurückgibt. BEACHTE AUCH: In RestrainedLove 1.16, llGetAgentLanguage() wird während des Logins bei on_rez einen leeren String zurückgeben, solange der Aufruf nicht um mehrere Sekunden verzögert wird (wie viele Sekunden kann unterschiedlich sein). ABSCHLIESSENDER HINWEIS: Dieses Feature wurde in v1.16.1 entfernt (und v1.16b, für den Cool SL Viewer).
- Manuelle Versions Prüfung : "@version"
Eingeführt in v1.0a Dieses Kommando muss in IM vom Avatar zu einem Benutzer gesendet werden (wird nicht von einem Objekt funktionieren). Der Viewer antwortet sofort mit seiner Version an den Sender der IM, aber weder die Nachricht noch die Antwort erscheint im IM Fenster des Benutzers, also ist es absolut unsichtbar.
Blacklist Handhabung
Die Blacklist (eingeführt in v2.8) ist eine Liste von RLV Kommandos die der Viewer ignorieren soll. Es ist jederzeit modifizierbar, aber ein Neustart ist notwendig um die Änderungen zu übernehmen. Wenn ein Kommando ausgegeben wird und Teil der Blacklist it, wird es einfach ignoriert. Bearbeiten der Blacklist wird nicht bestehende Restriktionen aufheben wenn sie einmal ausgeführt wurden. Ein Neustart ist notwendig. Wenn ein Kommando erhalten wird, wird eine positive Bestätigung an das Script gesendet ob das Kommando aktuell angenommen wurde oder nicht. Auf diese Weise würden Scripte, die auf Benachrichtigungen warten, nicht anhalten wenn sie eine Ablehnung nicht händeln können.
- Automatische Versionsnummer Prüfung, gefolgt von der Blacklist : "@versionnumbl=<channel_number>"
Eingeführt in v2.8 Lässt den Viewer automatisch die Versionsnummer der integrierten RLV API auf der Chat Kanal Nummer <channel_number> sagen, die das Script abhört (bitte beachte, das dies unterschiedlich ist zur Version vom Viewer, aber das Script sollte sich nicht drum kümmern), gefolgt von einem Komma (",") und dem Inhalt der Blacklist. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Dieses Kommando ist weniger schwerfällig als @version gefolgt von @getblacklist, weil das Script nicht erst die Antwort verarbeiten muss, es erhält die Versionsnummer sofort und es muss keine zweite asynchrone Anfrage gesendet werden, wenn die erste beantwortet wurde.
Als Beispiel "@versionnumbl=2222" wird "2080000,sendim,recvim" antworten, wenn die Blacklist aktuell "sendim,recvim" ist. LSL erlaubt so einen String ohne Probleme als Zahl auszugeben. Es wird 2080000 zurückgeben und das erste Komma und alles danach entfernen.
- Den Inhalt der Blacklist mit einem Filter erhalten : "@getblacklist[:filter]=<channel_number>"
Eingeführt in v2.8 Lässt den Viewer automatisch mit dem Inhalt der Blacklist (wenn ein Filter gesetzt ist, dann sind nur die Kommandos die diesen Text enthalten Teil der Antwort) auf der Chat Kanal Nummer <channel_number> antworten auf die das Script hört. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout.
- Manuelle Blacklist Prüfung : "@getblacklist"
Eingeführt in v2.8 Dieses Kommando muss in IM von einem Avatar an den Benutzer gesendet werden (funktioniert nicht von einem Objekt). Der Viewer antwortet automatisch mit dem Inhalt der Blacklist an den Sender der IM, aber weder die Nachricht noch die Antwort erscheint im IM Fenster des Benutzer, es ist also vollkommen unsichtbar.
Verschiedenes
- Start/stop Benachrichtigungen auf einem privaten Kanal : "@notify:<channel_number>[;word]=<rem/add>"
Eingeführt in v1.20, verbessert in v2.2 (und v1.24) Lässt den Viewer automatisch jede Restriktion auf dem genannten Kanal wiederholen, die er hinzufügt oder entfernt, oder nur die Restriktionen dessen Name das Wort enthält, das nach dem Semikolon (";") genannt ist. Der Antwort auf dem privaten Kanal <channel_number> ist ein Slash ("/") vorangestellt, um zu vermeiden, dass der Avatar Kommandos an andere Scripte sendet ohne dass er es weiss und wird gefolgt von einem Gleichheitszeichen ("=") und "n" oder "y" abhängig davon ob die Restriktion gesetzt oder aufgehoben wurde. Das "@clear" Kommando wird kein Gleichheitszeichen hinzufügen. Es gibt keine Möglichkeit zu wissen welches Objekt die Restriktion gesetzt oder aufgehoben hat, um die Weitergabe von zu vielen Informationen von anderen Scripten zu vermeiden. Es wiederholt auch nicht Einmal-Kommandos. Zum Beispiel bei "@notify:2222;detach=add" wird "/detach=n" wenn das Objekt gelockt ist und "/detach=y" wenn das Objekt entlockt ist auf dem Kanal 2222 gesendet auf das das Script hört.
Hinweis : Seit v2.2 (und v1.24) kannst Du auch Benachrichtigungen für Inventarangebote setzen. Wenn Dein Objekt ein Teil oder Ordner übergibt und der Avatar benutzt RLV v2.2 (and v1.24) oder höher wird automatisch eine der folgenden Antworten auf dem gesetzten Kanal gesendet :
- /accepted_in_rlv inv_offer <folder> : Der Ordner wurde akzeptiert und ist nun unter #RLV verfügbar (vergiss nicht, dass der Viewer es umbenennt und den Prefix "#RLV/" entfernt).
- /accepted_in_inv inv_offer <folder> : Der Ordner wurde akzeptiert ist aber nicht geteilt.
- /declined inv_offer <folder> : Der Ordner wurde abgelehnt und/oder der Benutzer hat "Block" gedrückt (früher "Mute").
Wobei <folder> der volle Pfad des Ordners oder des gegebenen Teils ist. Als Beispiel #RLV/~MyCuffs. Es ist eine Leerstelle vor "inv_offer" welches als Zeichen gewählt wurde um dort eine Benachrichtigung zu setzen. Wenn Du wissen willst ob der Ordner mit dem Namen #RLV/~MyCuffs im #RLV Ordner akzeptiert wurde, sende ein "@notify:2222;accepted_in_rlv inv_offer #RLV/~MyCuffs=add" Kommando. Wenn Du nur wissen willst ob der Avatar irgendwas empfangen hat sende ein einfaches "@notify:2222;inv_offer=add" Kommando.
Hinweis 2 : Seit v2.5 sendet der Viewer ebenso Benachrichtigungen wenn Outfits angezogen werden :
- /worn legally <layer> : Der Avatar hat gerade ein Stück Kleidung an dem indizierten Layer angezogen.
- /unworn legally <layer> : Der Avatar hat gerade ein Stück Kleidung von dem indizierten Layer ausgezogen.
- /attached legally <attach_point_name> : Der Avatar hat gerade ein Objekt am indizierten Attachmentpunkt angehängt.
- /attached illegally <attach_point_name> : Der Avatar hat gerade ein Objekt an dem indizierten Attachmentpunkt angehängt, aber es war nicht erlaubt (möglicherweise hat ein Script es automatisch angehängt) und es wird in wenigen Sekunden wieder abgenommen.
- /detached legally <attach_point_name> : Der Avatar hat gerade ein Objekt vom indizierten Attachmentpunkt abgenommen.
- /detached illegally <attach_point_name> : Der Avatar hat gerade ein Objekt vom indizierten Attachmentpunkt abgenommen, aber es war nicht erlaubt (möglicherweise hat ein Script es gekickt) und es wird in wenigen Sekunden wieder angehängt.
- Erlauben/verbieten Ausnahmen zuzulassen : "@permissive=<y/n>"
Eingeführt in v1.21 Wenn verboten werden alle Restriktionen in ihr "sicheres" Gegenstück (soweit vorhanden) gewandelt. Das bedeutet, dass eine Ausnahme von einer Restriktion ignoriert wird, wenn es nicht vom gleichen Objekt gesetzt wird wie die Restriktion. Die Benutzung von nicht-sicheren Restriktionen (die Originalen, wie @sendim, @recvim etc) ohne die Benutzung von @permissive erlaubt dem Avatar von Ausnahmen aus anderen Objekten zu profitieren.
Warnung : Die Benutzung dieses Kommandos (oder andere sichere Versionen des Original Kommandos) könnte stillschweigend Ausnhamen von anderen Objekten verwerfen (es ist sogar der Hauptzweck), daher können einige Produkte erscheinen, dass sie nicht arbeiten wenn diese Restriktion dies beeinflusst. Als Beispiel ein produkt, dass dem Avatar erlaubt einem bestimmtem Freund immer IMs zu senden, wird nicht in der Lage sein ein @semdim_secoder ein @permissive Kommando von einem anderem Objekt zu überwinden und sieht aus wie kaputt. Deshalb benutze es mit Vorsicht und weise den Benutzer darauf hin wie sicher Dein Produkt ist !
- Löschen aller Regeln die an ein Objekt gebunden sind : "@clear"
Eingeführt in v1.0a, aber funktioniert erst seit v1.04a Dieses Kommando löscht alle Restriktionen und Ausnahmen die an eine bestimmte UUID gebunden sind.
Warnung : wenn es standardmässig beim Abnehmen ausgeführt wird, kann es das automatische wieder anlegen verhindern wenn @defaultwear aktiv ist, weil @clear ebenso @detach=n aufhebt, deshalb denkt der Viewer dass das Teil, welches unabsichtlich durch eine default-wear-aktion abgelegt wurde, entlockt ist und wird es nicht wieder anhängen.
Mögliche Workarounds:
- hebe exakt nur die Restriktionen von Dir mit @clear=<pattern> auf
- verwende @clear nur beim Abnehmen wenn Du sicher bist, dass das Attachment nicht gelockt ist
- verwende nie @clear und warte auf den Viewer, dass die Restriktionen aufgehoben werden
- Löschen von ausgewählten Regeln von einem Objekt : "@clear=<string>"
Eingeführt in v1.0a, aber funktioniert erst seit v1.04a Dieses Kommando löscht alle Restriktionen und Ausnahmen von einer bestimmten UUID, das den Namen <string> enthält. Ein gutes Beispiel wäre "@clear=tp" was alle teleport Restriktionen und Ausnahmen von diesem Objekt aufhebt, während "@clear=tplure:" nur die Ausnahmen für die "teleport-by-friend" Restriktionen aufhebt
- Liste der Restriktionen erhalten, die beim Avatar aktuell gesetzt sind : @getstatus[:<part_of_rule>[;<custom_separator>]]=<channel>
Eingeführt in v1.10, leicht angepasst in v1.16 und v2.8 Lässt den Viewer automatisch die Liste der Regeln, die der Avatar gerade untersteht, auf der Chat Kanal Nummer die das Script abhört antworten. Dies wird nur die Restriktionen enthalten, die durch das Objekt gesetzt wurden, das das Kommando sendet. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist eine Liste mit Regeln getrennt mit Slashes ("/") oder anderen Unterteilern wenn definiert. Achtung: seit v1.16 ist dem String ein Slash vorgestellt. Dies stört nicht llParseString2List() Aufrufe jedoch llParseStringKeepNulls() Aufrufe!
Seit v2.8 wird, wenn <custom_separator> spezifiziert ist, es den Slash("/") mit dem bestimmten Trenner ersetzt. Achtung, der options Teil muss vorhanden sein, dafür muss ein Doppelpunkt (":") vor dem Semikolon (";") sein selbst wenn <part_of_rule> nicht vorhanden ist.
Dieses Kommando ist nützlich für Leute die Scripte schreiben, die mit anderen Scripten im gleichen Objekt kollidieren könnten (zum Beispiel : Drittanbieter Plugins). Konflikte passieren nicht verschiedenen Objekten, darum antwortet dieses Kommando nur mit den Restriktionen von dem Objekt wo es aufgerufen wird.
<part_of_rule> ist der Name der Regel oder ein Teil davon, nützlich wenn das Script nur von bestimmten Restriktionen wissen muss.
Beispiel : Wenn der Avatar unter tploc, tplure, tplm und sittp ist, ist hier was das Script kriegen würde : @getstatus=2222 => /tploc/tplure/tplm/sittp @getstatus:sittp=2222 => /sittp @getstatus:tpl=2222 => /tploc/tplure/tplm (weil "tpl" ist Teil von "tploc", "tplure" und "tplm" aber nicht "sittp") @getstatus:tpl;#=2222 => #tploc#tplure#tplm (weil "tpl" ist Teil von "tploc", "tplure" und "tplm" aber nicht "sittp" und der gesetzte Trenner ist "#") @getstatus:;#=2222 => #tploc#tplure#tplm#sittp (weil der gesetzte Trenner "#" ist) @getstatus:;=2222 => /tploc/tplure/tplm/sittp (weil der gesetzte Trenner leer ist so ist es standardmässig "/")
- Liste von allen Restriktionen erhalten, die beim Avatar aktuell gesetzt sind : @getstatusall[:<part_of_rule>[;<custom_separator>]]=<channel>
Eingeführt in v1.15, leicht angepasst in v1.16 und v2.8 Lässt den Viewer automatisch die Liste der Regeln, die der Avatar gerade untersteht, auf der Chat Kanal Nummer die das Script abhört antworte. Im Gegensatz zu @getstatus für alle Objekte unabhängig von deren UUID. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort ist eine Liste mit Regeln getrennt mit Slashes ("/") oder anderen Unterteilern wenn definiert. Achtung: seit v1.16 ist dem String ein Slash vorgestellt. Dies stört nicht llParseString2List() Aufrufe jedoch llParseStringKeepNulls() Aufrufe!
Seit v2.8 wird, wenn <custom_separator> spezifiziert ist, es den Slash("/") mit dem bestimmten Trenner ersetzt. Achtung, der options Teil muss vorhanden sein, dafür muss ein Doppelpunkt (":") vor dem Semikolon (";") sein selbst wenn <part_of_rule> nicht vorhanden ist.
Bewegung
- Erlauben/verbieten zu fliegen : @fly=<y/n>
Eingeführt in v1.12.2 Wenn unterbunden, dann ist der Benutzer nicht in der Lage zu fliegen.
- Erlauben/verbieten rennen durch doppel-drücken einer Pfeiltaste : @temprun=<y/n>
Eingeführt in v2.7 Wenn unterbunden, dann ist der Benutzer nicht in der Lage durch doppel-drücken der Pfeiltaste zu rennen. Wenn Du den User insgesamt am Rennen hindern willst musst Du auch @alwaysrun benutzen
- Erlauben/verbieten von immer rennen : @alwaysrun=<y/n>
Eingeführt in v2.7 Wenn unterbunden, dann ist der Benutzer nicht in der Lage durch drücken von STRG+R in den Rennen Modus zu wechselnWhen prevented, the user is unable to switch running mode on by pressing Ctrl-R. Wenn Du den User insgesamt am Rennen hindern willst musst Du auch @temprun benutzen. Dieses Kommando ist nützlich wenn Du den Benutzer zwingen willst erst zu beschleunigen anstatt ständig zu rennen. Zum Beispiel während Kampf oder Sportspielen.
- Erzwingen den Avatar in eine bestimmte Richtung zu drehen : @setrot:<angle_in_radians>=force
Eingeführt in v1.17 Zwingt den Avatar in eine Richtung um einen Winkel im Bogenmaß aus dem Norden gesetzt zu drehen. Beachte, dass dieses Kommando nicht sehr präzise ist, noch dass es irgendwas tun wird, wenn die Aktion versucht den Avatar um weniger als 10° zu drehen (Versuchswert, es wurde irgendwo erwähnt, dass 6° das Minimale ist). Mit anderen Worten macht es Sinn erst mit llGetRot() zu prüfen der den Avatar zweimal zu drehen. Erst 180° plus dem gewünschten Winkel und dann den Winkel den wir brauchen. Es ist nicht sehr elegant aber es funktiniert.
- Ändern der Höhe vom Avatar : @adjustheight:<distance_pelvis_to_foot_in_meters>;<factor>[;delta_in_meters]=force
Eingeführt in v2.5 Zwingt den Avatar seine "Z-Offset" zu ändern, mit anderen Worten dessen Flughöhe. Dieser Wert kann mittlerweile durch eine Debug Einstellung in den meisten Third-Party Viewern geändert werden. Dieses Kommando erlaubt den automatischen Wechsel passend zur Animation.
Anstatt es hier komplett zu erklären, gehe zu diesem Link für weitere Info : [1]
Chat, Emotes und Instant Messages
Chat
- Erlauben/verbieten Chat Nachrichten zu senden : "@sendchat=<y/n>"
Eingeführt in v1.0b Wenn unterbunden, wird alles verworfen was auf Kanal 0 geschrieben wird. Jedoch werden Emotes und Nachrichten mit einem Slash ("/") am Anfang durchgelassen aber gekürzt auf Strings von 30 und 15 Buchstaben (ändert sich wahrscheinlich später). Nachrichten mit speziellen Zeichen wie ()"-*=_^ sind verboten und werden verworfen. Wenn ein Punkt (".") vorhanden ist wird der Rest der Nachricht verworfen.
- Erlauben/verbieten zu rufen : "@chatshout=<y/n>"
Eingeführt in v1.15 Wenn unterbunden wird der Avatar normal chatten slebst wenn der Benutzer versucht zu rufen. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Erlauben/verbieten zu chatten in normaler Lautstärke : "@chatnormal=<y/n>"
Eingeführt in v1.15 Wenn unterbunden wird der Avatar flüstern selbst wenn der Benutzer versucht zu rufen oder normal zu chatten. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Erlauben/verbieten zu flüstern : "@chatwhisper=<y/n>"
Eingeführt in v1.15 Wenn unterbunden wird der Avatar normal chatten selbst wenn der Benutzer versucht zu flüstern. Dies verändert die Nachricht in keiner Weise nur die Reichweite.
- Umleiten von öffentlichen Chat auf einen privaten Kanal : "@redirchat:<channel_number>=<rem/add>"
Eingeführt in v1.16 Wenn aktiv leitet diese Restriktion alles was der Benutzer auf dem öffentlichen Kanal ("/0") sagt auf den privaten Kanal um, der im Optionsfeld angegeben ist. Wenn mehrere Umleitungen gesetzt sind wird die Chat Nachricht an jeden Kanal geleitet. Es gilt nicht für Emotes und es wird keine Animationen starten (tippen starten, tippen stoppen, nicken) beim reden. Diese Restriktion ersetzt nicht @sendchannel. HINWEIS: Seit RLV v1.22.1 / RLVa 1.1.0, gab es einen Bug, wo qredirchat ebenso Emotes auf Kanal 0 gekürzt hat. Ein zusätzlicher @emote=add behebt diesen Effekt. Dieser Bug wirde im Cool SL Viewer ab v1.22g (allerdings hatte Marine's v1.23 immer noch den Bug) und RLV 2.0 gefixt (man kann sicher annehmen dass es in allen Viewern ab v1.24 und v2.0 behoben wurde).
- Erlauben/verbieten Chat Nachrichten zu erhalten : "@recvchat=<y/n>"
Eingeführt in v1.0b Wenn unterbunden wird alles ausser Emotes was in öffentlichen Chat gehört wird verworfen.
- Erlauben/verbieten Chat Nachrichten zu erhalten, sicherer Weg : "@recvchat_sec=<y/n>"
Eingeführt in v1.21 Wenn unterbunden wird alles ausser Emotes was in öffentlichen Chat gehört wird verworfen. Dieses spezielle Kommando akzeptiert nur Ausnahmen vom selben Objekt, nicht wie der nicht sichere Weg die Ausnahmen von irgendeinem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen von der Chat Empfangs Restriktion : "@recvchat:<UUID>=<rem/add>"
Eingeführt in v1.01 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer Chat Nachrichten von dem Sender dessen UUID im Kommando spezifiziert wurde hören. Dies überwindet die Behinderung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten Chat Nachrichten von jemand speziellem zu erhalten : "@recvchatfrom:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25 Wenn unterbunden wird alles ausser Emotes was von dem spezifiziertem Avatar im öffentlichen Chat gehört wird verworfen.
Emotes
- Entfernen/hinzufügen einer Ausnahme zur Emote Abkürzung : "@emote=<rem/add>"
Eingeführt in v1.01 Wenn diese Ausnahme hinzugefügt wird, werden die Emotes nicht mehr abgeschnitten (Jedoch wird die Nachricht bei speziellen Zeichen weiterhin verworfen).
- Umleiten von öffentlichen Emotes auf einen privaten Kanal : "@rediremote:<channel_number>=<rem/add>"
Eingeführt in v1.19 Wenn aktiv wird diese Restriktion alle Emotes die der Benutzer auf dem öffentlichen Kanal ("/0") sagt auf dem im Optionsfeld angegebenen privaten Kanal umgeleitet. Wenn mehrere Umleitungen gesetzt wurden, wird es auf jeden Kanal umgeleitet.
- Erlauben/verbieten Emotes zu sehen : "@recvemote=<y/n>"
Eingeführt in v1.19 Wenn unterbunden wird jede Emote im öffentlichen Chat verworfen.
- Erlauben/verbieten des Erhaltens von Emotes aus dem Public Chat von jemand Speziellem : "@recvemotefrom:<UUID>=<y/n>"
Eingeführt in v2.4 Wenn unterbunden werden alle Emotes im öffentlichen Chat von dem spezifizierten Avatar verworfen.
- Erlauben/verbieten des Erhaltens von Emotes aus dem Public Chat von jemand Speziellem : "@recvemotefrom:<UUID>=<y/n>"
Eingeführt in v2.4 Wenn unterbunden werden alle Emotes im öffentlichen Chat von dem spezifizierten Avatar verworfen.
- Erlauben/verbieten Emotes zu sehen, sicherer Weg : "@recvemote_sec=<y/n>"
Eingeführt in v1.21 Wenn unterbunden wird jede Emote im öffentlichen Chat verworfen. Dieses spezielle Kommando akzeptiert nur Ausnahmen vom selben Objekt, nicht wie der nicht sichere Weg der Ausnahmen von irgendeinem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen von der Einschränkung Emote zu sehen : "@recvemote:<UUID>=<rem/add>"
Eingeführt in v1.19 Wenn eine Ausnahme hinzugefügt wird kann der Benutzer die Emotes von dem Sender sehen, dessen UUID im Kommando genannt ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
Private Kanäle
- Erlauben/verbieten der Benutzung von allen Chat Kanälen ausser bestimmten Kanälen : @sendchannel[:<channel>]=<y/n>
Eingeführt in v1.10 Ergänzung von @sendchat, dieses Kommando hindert den Benutzer daran Nachrichten auf nicht öffentlichen Kanälen zu senden. Wenn <channel> benannt wurde, wird es zu einer Ausnahme der vorgenannten Restriktion (dann ist es besser "rem" oder "add" anstatt von "y" oder "n" zu nutzen). Es behindert nicht die automatischen Viewer Antworten wie @version=nnnn, @getstatus=nnnn etc.
- Erlauben/verbieten der Benutzung von allen Chat Kanälen ausser bestimmten Kanälen, sicherer Weg : @sendchannel_sec[:<channel>]=<y/n>
Eingeführt in v1.10 Ergänzung von @sendchat, dieses Kommando hindert den Benutzer daran Nachrichten auf nicht öffentlichen Kanälen zu senden. Wenn <channel> benannt wurde, wird es zu einer Ausnahme der vorgenannten Restriktion (dann ist es besser "rem" oder "add" anstatt von "y" oder "n" zu nutzen). Es behindert nicht die automatischen Viewer Antworten wie @version=nnnn, @getstatus=nnnn etc. Dieses bestimmte Kommando erlaubt nur Ausnahmen vom gleichen Objekt, nicht wie die unsichere Version die Ausnahmen von jedem Objekt zulässt.
Instant Messages
- Erlauben/verbieten Instant Messages zu senden : "@sendim=<y/n>"
Eingeführt in v1.0b Wenn unterbunden wird alles was in IM geschrieben verworfen und stattdessen wird eine Scheinnachricht an den Empfänger geschickt.
- Erlauben/verbieten Instant Messages zu senden, sicherer Weg : "@sendim_sec=<y/n>"
Eingeführt in v1.21 Wenn unterbunden wird alles was in IM geschrieben verworfen und stattdessen wird eine Scheinnachricht an den Empfänger geschickt. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen der Unterbindung vom Senden der Instant Messages : "@sendim:<UUID>=<rem/add>"
Eingeführt in v1.01 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer IMs an den Empfänger dessen UUID im Kommando spezifiziert ist senden. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten Instant Messages an jemand Speziellen zu senden : "@sendimto:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25 Wenn unterbunden wird alles was in IM an den spezifizierten Avatar gesendet wird verworfen und stattdessen eine Scheinnachricht gesendet.
- Erlauben/verbieten eine IM Session zu irgendwem zu starten : "@startim=<y/n>"
Eingeführt in v2.6 Wenn unterbunden ist es dem Benutzer nicht möglich eine IM Session zu irgendwem zu starten. Bereits geöffnete Sessions sind dabei nicht betroffen.
- Entfernen/hinzufügen von Ausnahmen zur IM Session Start Unterbindung : "@startim:<UUID>=<rem/add>"
Eingeführt in v2.6 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer eine IM Session an den Empfänger starten, dessen UUID im Kommando spezifiziert wurde. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten das Starten einer IM Session zu jemand Speziellen : "@startimto:<UUID>=<y/n>"
Eingeführt in v2.6 Wenn unterbunden ist der Benutzer nicht in der Lage eine IM Session zu dieser Person zu starten. Bereits geöffnete Sessions sind nicht betroffen.
- Erlauben/verbieten Instant Messages zu empfangen : "@recvim=<y/n>"
Eingeführt in v1.0b Wenn unterbunden wird jede ankommende IM verworfen und der Sender wird benachrichtigt, dass der Benutzer sie nicht lesen kann.
- Erlauben/verbieten Instant Messages zu empfangen, sicherer Weg : "@recvim_sec=<y/n>"
Eingeführt in v1.21 Wenn unterbunden wird jede ankommende IM verworfen und der Sender wird benachrichtigt, dass der Benutzer sie nicht lesen kann. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen zum IM Empfang Unterbindung : "@recvim:<UUID>=<rem/add>"
Eingeführt in v1.01 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer die Instant Messages von dem Sender lesen, dessen UUID im Kommando spezifiziert ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Erlauben/verbieten empfangen von Instant Messages von jemand Speziellem : "@recvimfrom:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25 Wenn unterbunden wird jede IM die von dem spezifizeirtem Avatar empfangen wird verworfen und der Sender wird benachrichtigt dass der Benutzer sie nicht lesen kann.
Teleportation
- Erlauben/verbieten zu einer Landmark zu teleportieren : "@tplm=<y/n>"
Eingeführt in v1.0 Wenn unterbunden kann der Benutzer keine Landmark, Auswahl oder andere voreingestellten Orte benutzen um dorthin zu teleportieren.
- Erlauben/verbieten zu einem Ort zu teleportieren : "@tploc=<y/n>"
Eingeführt in v1.0 Wenn unterbunden kann der Benutzer den teleport zu einer Koordinate durch die Karte und sowas nicht mehr benutzen.
- Erlauben/verbieten teleports durch einen Freund : "@tplure=<y/n>"
Eingeführt in v1.0 Wenn unterbunden wird der Benutzer automatisch alle Teleportangebote verwerfen und der Avatar, der das Angebot initiert hat wird benachrichtigt.
- Erlauben/verbieten teleports durch einen Freund, sicherer Weg : "@tplure_sec=<y/n>"
Eingeführt in v1.21 Wenn unterbunden wird der Benutzer automatisch alle Teleportangebote verwerfen und der Avatar, der das Angebot initiert hat wird benachrichtigt. Dieses besondere Kommando akzeptiert nur Ausnahmen vom selben Objekt, im Gegensatz zum nicht sicheren Weg, die Ausnahmen von jedem Objekt akzeptiert.
- Entfernen/hinzufügen von Ausnahmen zur Freunde Teleport Unterbindung : "@tplure:<UUID>=<rem/add>"
Eingeführt in v1.0 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer durch den Avatar teleportiert werden, dessen UUID im Kommando spezifiziert ist. Dies überwindet die Einschränkung nur für diesen Avatar (es gibt kein Limit für die Anzahl der Ausnahmen). Vergiss nicht es zu entfernen wenn es nicht mehr gebraucht wird.
- Nicht beschränken/beschränken von Sitz-tp : "@sittp=<y/n>"
Eingeführt in v1.0 Wenn beschränkt kann der Avatar nicht auf einem Prim sitzen solange er nicht näher als 1.5m ist. Dies macht Käfige sicher weil dem Avatar verwehrt wird sich durch Mauern zu verziehen (es sei denn der Prim ist zu nahe).
- Erlauben/verbieten an einem anderen Ort aufzustehen als man hingesetzt wurde : @standtp=<y/n>
Eingeführt in v2.1.2 und v1.24 Wenn diese Restriktion aktiv ist und der Avatar steht auf, wird er automatisch zurück teleportiert an den Ort wo er ursprünglich hingesetzt wurde. Bitte beachte, dass die "letzte stehende Position" ebenso gespeichert wird wenn diese Restriktion gesetzt wird, so ist es kein Problem für Grabber und sowas, die das Opfer hinsetzen, in eine Zelle verschieben die die Einschränkung setzt und dann aufstehen lässt. In diesem Fall bleibt er in der Zelle.
- Zwangs-Teleport für den Benutzer : @tpto:<X>/<Y>/<Z>=force (*)
Eingeführt in v1.12 Dieses Kommando zwingt den Avatar zu den indizierten Koordinaten zu teleportieren. Beachte dass diese Koordinaten global sind, deshalb ist das Script das das Kommando aufruft nicht trivial. Wenn das Ziel einen Telehub oder einen Landepunkt hat, wird der Benutzer dort landen statt am gewünschten Ort. Das ist eine SL Einschränkung. Beachte auch, dass @tpto gesperrt durch @tploc=n ist und seit v1.15 und höher auch von @unsit.
Hier ist ein Beispiel Code um das Kommando ordentlich aufzurufen :
<lsl>
// FORCE TELEPORT EXAMPLE // Listens on channel 4 for local coordinates and a sim name // and tells your viewer to teleport you there. // // By Marine Kelley 2008-08-26 // RLV version required : 1.12 and above // // HOW TO USE : // * Create a script inside a box // * Overwrite the contents of the script with this one // * Wear the box // * Say the destination coords Region/X/Y/Z on channel 4 : // Example : /4 Help Island Public/128/128/50
key kRequestHandle; // UUID of the dataserver request vector vLocalPos; // local position extracted from the
Init () {
kRequestHandle = NULL_KEY; llListen (4, "", llGetOwner (), "");
}
default
{
state_entry () { Init (); } on_rez(integer start_param) { Init (); } listen(integer channel, string name, key id, string message) { list tokens = llParseString2List (message, ["/"], []); integer L = llGetListLength (tokens);
if (L==4) { // Extract local X, Y and Z vLocalPos.x = llList2Float (tokens, 1); vLocalPos.y = llList2Float (tokens, 2); vLocalPos.z = llList2Float (tokens, 3);
// Request info about the sim kRequestHandle=llRequestSimulatorData (llList2String (tokens, 0), DATA_SIM_POS); } } dataserver(key queryid, string data) { if (queryid == kRequestHandle) { // Parse the dataserver response (it is a vector cast to a string) list tokens = llParseString2List (data, ["<", ",", ">"], []); string pos_str = ""; vector global_pos;
// The coordinates given by the dataserver are the ones of the // South-West corner of this sim // => offset with the specified local coordinates global_pos.x = llList2Float (tokens, 0); global_pos.y = llList2Float (tokens, 1); global_pos.z = llList2Float (tokens, 2); global_pos += vLocalPos;
// Build the command pos_str = (string)((integer)global_pos.x) +"/"+(string)((integer)global_pos.y) +"/"+(string)((integer)global_pos.z); llOwnerSay ("Global position : "+(string)pos_str); // Debug purposes
// Fire ! llOwnerSay ("@tpto:"+pos_str+"=force"); } }
}
</lsl>
- Entfernen/hinzufügen auto-accept von Teleportangeboten von einem bestimmten Avatar : "@accepttp[:<UUID>]=<rem/add>"
Eingeführt in v1.15, leicht verbessert in v1.16 Das Hinzufügen dieser Regel lässt den Benutzer automatisch alle Teleportangebote vom Avatar mit der UUID akzeptieren, als ob dieser ein Linden wäre (keine Bestätigung, keine Nachricht, kein Abbruch Button). Diese Regel hat keinen Vorrang, noch wird sie @tpto aufheben, weil sie zu einer Person teleportiert und die andere zu einem beliebigen Ort. Achtung : in v1.16 wurde die UUID optional, was bedeutet dass @accepttp=add den Benutzer zwingen wird Teleportangebote von jedem anzunehmen ! Benutze mit Vorsicht !
Inventory, Editing und Rezzing
- Erlauben/verbieten das Inventar zu benutzen : @showinv=<y/n>
Eingeführt in v1.10 Erzwingt das Inventarfenster zu schließen und geschlossen zu bleiben.
- Erlauben/verbieten Notecards zu lesen : @viewnote=<y/n>
Eingeführt in v1.10 Hindert daran Notecards zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Scripte zu öffnen : @viewscript=<y/n>
Eingeführt in v1.22 Hindert daran Scripte zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Texturen zu öffnen : @viewtexture=<y/n>
Eingeführt in v1.22 Hindert daran Texturen (und Schnappschnüsse) zu öffnen aber schließt keine die bereits offen sind.
- Erlauben/verbieten Objekte zu bearbeiten : "@edit=<y/n>"
Eingeführt in v1.03 Wenn das bearbeiten und öffnen von Objekten unterbunden ist wird sich das Bau & Bearbeiten Fenster nicht mehr öffnen.
- Entfernen/hinzufügen von Ausnahmen zur Bearbeiten Einschränkung : "@edit:<UUID>=<rem/add>"
Eingeführt in v2.3 und v1.25 Wenn eine Ausnahme hinzugefügt wird, kann der Benutzer dieses spezielle Objekt bearbeiten oder öffnen.
- Erlauben/verbieten rezzen vom Inventar : "@rez=<y/n>"
Eingeführt in v1.03 Wenn das rezzen von Sachen, erstellen und löschen von Objekten unterbunden ist, dann wird das herausziehen aus dem Inventar und das Fallenlassen von Anhängen fehlschlagen.
- Erlauben/verbieten bestimmte Objekte zu bearbeiten : "@editobj:<UUID>=<y/n>"
Eingeführt in v2.3 und v1.25 Wenn unterbunden wird das Bau & Bearbeiten Fenster nicht aufgehen wenn man versucht das spezifizierte Objekt zu bearbeiten oder zu öffnen.
Sitzen
- Erlauben/verbieten aufzustehen : @unsit=<y/n>
Eingeführt in v1.10, modifiziert in v1.15 um auch teleports zu verhindern Blendet den Aufstehen Button aus. Seit v1.15 verhindert es auch teleporting was auch ein Weg zum Aufstehen war.
- Zwingen auf einem Objekt zu sitzen : @sit:<UUID>=force (*)
Eingeführt in v1.10 Funktioniert nicht wenn an sit-tp gehindert und mehr als 1.5 meters entfernt ist oder wenn am Aufstehen gehindert.
- Die UUID vom Objekt erhalten auf der der Avatar sitzt : @getsitid=<channel_number>
Eingeführt in v1.12.4 aber kaputt in allen Versionen älter als v1.24 und v2.2 (hat die UUID vom letzten Objekt in Reichweite gemeldet auf der irgendein Avatar gesessen hat) Lässt den Viewer automatisch die UUID vom Objekt antworten auf dem der Avatar gerade sitzt oder NULL_KEY wenn man nicht sitzt.
- Zwingen aufzustehen : @unsit=force (*)
Eingeführt in v1.10 Selbst-erklärend aber aus irgendwelchen Gründen schlägt es manchmal fehl, also nicht darauf verlassen. Weitere Tests sind nötig.
- Erlauben/verbieten sich hinzusetzen : @sit=<y/n>
Eingeführt in v1.16.2 Hindert den Benutzer daran sich auf irgendwas zu setzen, einschließlich @sit:UUID=force.
Kleidung und Anhänge
- Macht ein Objekt abnehmbar/unabnehmbar : "@detach=<y/n>"
Eingeführt in v1.0a Wenn aufgerufen mit der Option "n", dann wird das Objekt, dass das Kommando sendet (welches ein Anhang sein muss) unabnehmbar. Es kann wieder abgenommen werden wenn die "y" Option aufgerufen wird.
- Entsperren/sperren eines Attachmentpunkts : "@detach:<attach_point_name>=<y/n>"
Eingeführt in v1.20 Wen aufgerufen mit der Option "n" wird der Attachmentpunkt mit dem Namen <attach_point_name> entweder voll (wenn er gerade mit einem Objekt belegt ist) oder leer (wenn nicht) gesperrt. Jedes Objekt das den Punkt belegt wenn die Einschränkung gesetzt wird, wird unabnehmbar genauso wie mit dem "@detach=n" Kommando. Wenn der Pinkt leer it bleibt er es auch, kein Teil kann sich dort anhängen und llAttachToAvatar() Aufrufe schlagen fehl (das Objekt wird angehängt und direkt wieder abgenommen).
Touch
Orte
- Erlauben/verbieten die Weltkarte zu sehen : @showworldmap=<y/n>
Eingeführt in v1.11 Wenn unterbunden kann der Benutzer die Weltkarte nicht sehen und sie schließt sich auch wenn die Einschränkung aktiv wird.
- Erlauben/verbieten die Minikarte zu sehen : @showminimap=<y/n>
Eingeführt in v1.11 Wenn unterbunden kann der Avatar die Minikarte nicht sehen und sie schließt sich auch wenn die Einschränkung aktiv wird.
- Erlauben/verbieten den aktuellen Ort zu kennen : @showloc=<y/n>
Eingeführt in v1.12 Wenn unterbunden weiss der Benutzer nicht wo sie sind : die Weltkarte ist versteckt, der Parzellen und Regionsname in der oberen Menuleiste sind versteckt, sie können keine Landmarken erstellen, noch das Land kaufen, noch welches Land sie nach einem Teleport gerade verlassen haben, noch den Ort in der "Über" Box sehen und sogar System und Objektnachrichten sind verschleiert wenn diese den Namen der Region und/oder der Parzelle enthalten. Jedoch llOwnerSay Aufrufe sind nicht verschleiert sodass Radare weiter arbeiten werden (und RL Kommandos ebenso).
Name Tags und Hovertext
- Erlauben/verbieten sehen der Namen von Leuten in der Umgebung : @shownames=<y/n>
Eingeführt in v1.12.2, mehr Dummy Namen in v1.16 hinzugefügt Wenn unterbunden kann der Benutzer nicht sehen wer in der Nähe ist. Die Namen erscheinen nicht auf dem Bildschirm, Namen im Chat werden ersetzt mit "Dummy" Namen wie "Someone", "A resident", die Tooltips sind versteckt, das Pie Menu ist beinah nutzlos, so dass der Benutzer nicht das Profil direkt bekommen kann etc.
- Erlauben/verbieten alle Hovertexte zu sehen : @showhovertextall=<y/n>
Eingeführt in v1.19 Wenn unterbunden kann der Benutzer keinen Hovertext sehen (2D Text über einigen Prims).
- Erlauben/verbieten einen bestimmten Hovertext zu sehen : @showhovertext:<UUID>=<y/n>
Eingeführt in v1.19 Wenn unterbunden kann der Benutzer den Hovertext über dem Prim mit der UUID nicht lesen. Dies ist so gemacht, dass die Beschränkung auf dieses Objekt von einem anderem Objekt gesetzt werden kann (nicht wie @detach was nur die Einschränkung bei sich selbst setzen kann).
- Erlauben/verbieten Hovertext auf dem HUD des Benutzers zu sehen : @showhovertexthud=<y/n>
Eingeführt in v1.19 Wenn unterbunden kann der Benutzer keinen Hovertext lesen, der über seinen HUD Objekten angezeigt wird, aber kann immer noch die in-world sehen.
- Erlauben/verbieten Hovertext in-world zu sehen : @showhovertextworld=<y/n>
Eingeführt in v1.19 Wenn unterbunden kann der Benutzer keinen Hovertext lesen der über in-world Objekten angezeigt wird, aber immer noch die über deren HUD.
Gruppen
- Den Agent zwingen die aktive Gruppe zu wechseln : @setgroup:<group_name>=force
Eingeführt in v2.5 Zwingt den Agent die aktive Gruppe zur genannten Gruppe zu wechseln. Natürlich müssen sie bereits Mitglied in der Gruppe sein. Wenn <group_name> ist "none", dann wird der Agent die ajtuelle Gruppe deaktivieren und keinen Gruppentitel anzeigen.
- Erlauben/verbieten eine Gruppe zu aktivieren : @setgroup=<y/n>
Eingeführt in v2.5 Wenn unterbunden ist der Benutzer nicht in der Lage die aktive Gruppe zu ändern.
- Den Namen der aktiven Gruppe erhalten : @getgroup=<channel_number>
Eingeführt in v2.5 Lässt den Viewer automatisch den Namen der zur Zeit aktiven Gruppe auf der Chat Kanal Nummer <channel_number> auf die das Script hört antworten. Benutze immer eine positive Zahl. Bedenke, dass reguläre Viewer nie etwas antworten also entferne den Listener nach einem Timeout. Die Antwort wird einfach "none" sein, wenn zu der Zeit keine Gruppe aktiv ist. Bitte beachte, dass es keinen Weg gibt, die UUID der Gruppe zu erhalten, nur den Namen der Gruppe.
Viewer Control
Wichtiger Hinweis über globale Verhalten wie sendchat
Solche Verhaltensweisen sind global, was bedeuete, dass sie nicht von einem bestimmten Objekt abhängig sind. Jedoch werden sie durch Objekte mit einer UUID, die sich ändern kann, ausgelöst und verschiedene Objekte können das gleiche Verhalten hinzufügen, was mehrere Male gespeichert wird, weil die UUIDs unterschiedlich sind.
Das hat einen netten Nebeneffekt : wenn man 2 verschlossene Teile trägt, die Chat verhindern, dann ist es notwendig beide zu entsperren um wieder chatten zu können. Aber das hat auch einen fiesen Nebeneffekt : wenn das Teil die UUID ändert (zum Beispiel es wurde derezzed und wieder gerezzt) und hat vorher keinen Chat erlaubt, dann muss der Benutzer einen kleinen Moment warten, weil die Regel bleibt "verwaist" bestehen (dessen UUID wurde gelöscht) bis der garbage collector (Speicherbereiniger) einsetzt.
Bitte beachte : Seit v1.16.1 wird jedes verschlossene Objekt dass aus irgendwelchen Gründen abgerissen wird (llAttachToAvatar zum Beispiel), wird durch den Viewer nach ein paar Sekunden wieder angehängt. Das bedeuetet dass das Aufrufen von @clear beim Abnehmen zur Zeit das Objekt entsperren wird, welches wieder verschlossen werden muss nach dem Wiederanhängen. Deshalb ist es nicht mehr empfohlen @clear beim Abnehmen aufzurufen, im Gegenteil zu pre-1.16.1 Versionen.
Zu Deiner Information
Hier noch wie es intern arbeitet, um besser zu verstehen in welche Fallen zu geraten könntest :
- Jedes Kommando wird gewandelt in ein Verhalten (ex: "remoutfit"), eine Option (ex: "shirt") und ein Parameter (ex: "force") und kommt von einer UUID (die eindeutige ID des sendenen Objekts).
- Es gibt zwei Typen von Kommandos : Einmal Kommandos (solche mit dem Parameter "force" und solche dessen Parameter eine Nummer wie eine Kanal Nummer ist von einem "Versions" Aufruf) und Regeln (solche deren Parameter "y", "n", "add", oder "rem" ist). "clear" ist speziell aber kann als Einmal Kommando angesehen werden.
- Wenn ein Kommando eine Kanal Nummer nimmt, dann muss diese Nummer entweder grundsätzlich positiv oder (für RestrainedLove v1.23a (@versionnum = 1230001) und höher) grundsätzlich negativ sein. Die Benutzung von Kanal 0 ist nicht erlaubt. Beachte, dass der RestrainedLove maximal 255 Zeichen auf einem negativen Kanal senden kann, während es bis zu 1023 Zeichen auf einem positiven Kanal senden kann. Negative Kanäle sind nützlich um den Benutzer vom Cheaten abzuhalten, zum Beispiel bei der Nachfrage der @versionnum (weil der Benutzer einen Viewer ohne RLV benutzen könnte und dem RestrainedLove Teil glauben machen kann, dass RestrainedLove Viewer läuft durch das Vorschwindeln der Antwort auf des Versions Kommando auf einem positiven Kanal, was sie nicht auf einem negativen Kanal machen könnten). Positive Kanäle werden am Besten genutzt für Kommandos, die größere Antwort Strings geben könnten (@getpath zum Beispiel).
- Parameter "n" und "add" sind exakt gleich und werden exakt auf die gleiche Weise behandelt, sie sind nur Synonyme. Das Gleiche gilt für "y" und "rem". Der einzige Zweck ist Regeln ("sendchannel=n") von Ausnahmen ("sendchannel:8=add") für die Übersichtlichkeit in einem Script zu unterscheiden.
- Rules are stored inside a table linking the UUID of the emitter to the rule itself. Sie werden hinzugefügt wenn ein "n"/"add" Parameter ankommt und entfernt wenn ein "y"/"rem" Parameter ankommt.
Wenn UUID1 ein Collar ist und UUID2 ein Gag ist :
UUID1 => detach, tploc, tplm, tplure, sittp
UUID2 => detach, sendim, sendim:(keyholder)
Diese beiden Regeln bedeuten, dass der Benutzer ausser zum Keyholder keine IMs senden kann und überhaupt nicht TP. Diese beiden Teile sind nicht abnehmbar. Jetzt sendet das Collar "@sendim=n" und die Tabelle wird zu :
UUID1 => detach, tploc, tplm, tplure, sittp, sendim
UUID2 => detach, sendim, sendim:(keyholder)
Wenn es ein zweites Mal "@sendim=n" sendet ändert sich nichts, weil erst die Existenz geprüft wird bevor es hinzugefügt wird. Wenn der Gag entsperrt und abgenommen wird, sendet er entweder "@clear" oder der Speicherbereiniger (Garbage Collector) greift ein, so dass die Regeln die zu UUID2 gehören verschwinden. Jedoch ist der Avatar immer noch nicht in der Lage IMs zu senden, noch nicht mal zum Keyholder, weil die Ausnahme ebenso verschwindet. Daskommt daher, dass Regeln die zu einem Objekt gehören nicht mit Regeln von einem anderen Objekt kollidieren.
- Einmal Kommandos werden andererseits sofort ausgeführt und nicht gespeichert.
- Beim Einloggen ist der Avatar für einige Zeit nicht funktionsfähig (kann nicht chatten, kann sich nicht bewegen)und der Benutzer sieht den Fortschrittsbalken. Jedoch rezzen getragene gescriptete Objekte in der Zwischenzeit und beginnen die Regeln und Kommandos zu senden noch bevor der Viewer sie ausführen kann. Dafür speichert er sie zwischen und führt sie aus wenn der Benutzer Kontrolle erhält (Fortschritssbalken verschwindet).
- Der Viewer prüft periodisch (alle N Sekunden) alle seine Regeln und entfernt diejenigen die mit einer UUID verbunden sind, die nicht mehr existieren ("garbage collector"). Das bedeutet, das Regeln die von nicht getragenen werden gelöscht so wie der Avatar woanders hin teleportiert.