LlListen/de

From Second Life Wiki
Jump to navigation Jump to search

Beschreibung

Funktion: integer llListen( integer channel, string name, key id, string msg );

Setzt eine Rückfrage für msg auf channel von name und id.
kann genutzt werden um listen zu deaktivieren oder zu entfernen.

• integer channel jeder gültige Integer Wert (-2147483648 bis 2147483647).
• string name Filter für einen bestimmten Prim oder Avatarnamen
• key id Filter für eine bestimmte Prim/Avatar UUID
• string msg Filter für eine bestimmte Chatnachricht

Wenn msg, name oder id leer bleiben, werden sie nicht genutzt um einkommende Nachrichten zu filtern. Falls id ein ungültiger key oder der null key ist, wird sie als leer gewertet.

Spezifikationen

Damit das listen Ereignis ausgelößt wird, muss es den vorher durch die Filter gesetzten Kriterien entsprechen. Ein listen Event wird nur ausgelößt, wenn alle Kriterien erfüllt wurden. Als erstes muss die Nachricht auf dem Channel channel gesendet werden. Wenn name gesetzt wurde, muss der Name des Sprechers mit name exakt übereinstimmen. Wenn id ein gültiger, nicht-null Key ist, muss der Key des Sprechers damit äquivalent sein. Wenn msg gesetzt wurde, muss die gesprochene Nachricht exakt mit msg übereinstimmen.

Channel Konstante Beschreibung
DEBUG_CHANNEL 0x7FFFFFFF Chat Channel der für Debug und Error Nachrichten von Scripten reserviert ist.
PUBLIC_CHANNEL 0x0 Chat Channel der an alle nahestehende User sendet.

Warnungen

  • Bei State Änderungen oder Script Reset werden alle listen automatisch entfernt.
    • Ein state Wechsel kann genutzt werden um listens im Schnellverfahren zu entfernen.
  • Nur 65 listens können gleichzeitig in einem einzigen Script geöffnet sein.
    • Falls diese Zahl überschritten wird, werden Script run-time Error und Too Many Listens Fehler auftreten.
  • Chat auf negativen Channels kann nicht vom Client produziert werden, außer durch Dialogboxen.
    • Dies macht es ideal für Objekt zu Objekt Kommunikation.
    • Dies könnte eine künstliche Einschränkung sein, welche nur vom Client und nicht vom darunterliegenden Protokoll ausgeübt wird.
  • Sobald ein listen registriert wurde können seine Filter nicht geupdated werden. Falls der listen zu llGetOwner registriert wurde, wird er auch bei Besitzerwechsel so registriert bleiben.
    • Besitzerwechsel kann mit dem changed Ereignis festgestellt werden.
    • Um dem Abhilfe zu schaffen muss der alte listen geschlossen und ein neuer eröffnet werden.
  • Ein Prim kann nicht auf den Chat hören den er erzeugt.
Alle Issues ~ Nach JIRA-Issues suchen, die sich hierauf beziehen

Beispiele

Einfaches Beispiel um auf jeglichen Chat des Objektbesitzers zu hören und einmalig zu antworten. Um Lag zu reduzieren und umherstehende User nicht zu spammen, ist es weitgehend bevorzugt andere Channel als Channel 0 und das listen Ereignis mit alternativen Channels wie zum Beispiel '/5 hallo' auszulösen. <lsl>// sag beep zum Besitzer, falls dieser etwas zum ersten mal im offenen Chat sagt; integer listen_handle;

default {

   state_entry()
   {   // Registers the listen to the owner of the object at the moment of the call.
       // This does not automatically update when the owner changes.
       // Change 0 to another positive number to listen for '/5 hello' style of chat.
       listen_handle = llListen(0, "", llGetOwner(), "");
   }
   listen( integer channel, string name, key id, string message )
   {
       llOwnerSay("beep");
       // Stop listening until script is reset
       llListenRemove(listen_handle);
   }
   on_rez(integer param)
   {   // Triggered when the object is rezed, like after the object had been sold from a vendor
       llResetScript();//By resetting the script on rez it forces the listen to re-register.
   }
   changed(integer mask)
   {   // Triggered when the object containing this script changes owner.
       if(mask & CHANGED_OWNER)
       {
           llResetScript();
       }
   }
}</lsl>

Notizen

Vermeide Channel 0 und setze name oder id wo immer es möglich ist um (Lag zu umgehen). llListen(0,"","","") kann extrem laggy sein, da es auf jeglichen Chat von jedem in Chatreichweite hört und sollte daher immer vermieden werden.

Siehe auch

Ereignisse

•  listen

Funktionen

•  llListenRemove Entfernt ein listen
•  llListenControl Schaltet ein listen ein/aus
•  llWhisper Sendet Chat in einem 10 Meter Radius
•  llSay Sendet Chat in einem 20 Meter Radius
•  llShout Sendet Chat in einem 100 Meter Radius
•  llRegionSay Sendet Chat in der gesamten Region

Weiterführende Anmerkungen

Nach JIRA-Issues suchen, die sich hierauf beziehen

Signature

function integer llListen( integer channel, string name, key id, string msg );
Dieser Artikel war nicht hilfreich für Dich? Vielleicht bringt der zugehörige Artikel im SLinfo Wiki Erleuchtung.