Difference between revisions of "Listen"

From Second Life Wiki
Jump to navigation Jump to search
(replace llSay(0,... with llOwnerSay()
(improve example to be more resource friendly and less spammy)
Line 10: Line 10:
|caveats=*On [[state]] change all listens are released (on script reset as well).
|caveats=*On [[state]] change all listens are released (on script reset as well).
*When an object changes owner any listen registered with [[llGetOwner]] will not automatically update itself. The scripter needs to capture this event ([[on_rez]] and [[CHANGED_OWNER]]).
*When an object changes owner any listen registered with [[llGetOwner]] will not automatically update itself. The scripter needs to capture this event ([[on_rez]] and [[CHANGED_OWNER]]).
|examples=<pre>
|examples=
// says beep whenever owner says something in main chat;
Trivial example to listen to any chat from the object owner and respond. To reduce lag and avoid spamming surrounding users, it is vastly preferable to listen on channels other than 0 and to trigger the listen event by talking on the alternative channel such as '/5 hello'.
<pre>
// says beep to owner the first time owner says something in main chat;
integer listen_handle;
 
default
default
{
{
     state_entry()
     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.
     {   //Registers the listen to the owner of the object at the moment of the call. This does not automatically update when the owner changes.
         llListen(0, "", llGetOwner(), "");
         // 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 ){
     listen( integer channel, string name, key id, string message ){
         llOwnerSay("beep");
         llOwnerSay("beep");
        // Stop listening until script is reset
        llListenRemove(listen_handle);
     }
     }
     on_rez(integer param)
     on_rez(integer param)
     {//Triggered when the object is rezed, like after the object had been sold from a vendor
     {   //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.
         llResetScript();//By resetting the script on rez it forces the listen to re-register.
     }
     }
     changed(integer mask)
     changed(integer mask)
     {//Triggered when the object has been sold as "original" from in world.
     {   //Triggered when the object has been sold as "original" from in world.
         if(mask & CHANGED_OWNER)
         if(mask & CHANGED_OWNER)
         {
         {
Line 35: Line 42:
</pre>
</pre>


<pre>
// says beep whenever owner says something in main chat;
//Does not use a hard reset to re-register it's listen.
integer handle;
reset()
{
    llListenRemove(handle);
    handle = llListen(0, "", llGetOwner(), "");
}
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.
        reset();
    }
    listen( integer channel, string name, key id, string message ){
        llOwnerSay("beep");
    }
    on_rez(integer param)
    {//Triggered when the object is rezed, like after the object had been sold from a vendor
        reset();
    }
    changed(integer mask)
    {//Triggered when the object has been sold as "original" from in world.
        if(mask & CHANGED_OWNER)
        {
            reset();
        }
    }
}
</pre>
|helpers
|helpers
|also_header
|also_header

Revision as of 17:27, 5 July 2007

Description

Event: listen( integer channel, string name, key id, string message ){ ; }

Trigged by chat, use llListen to enable and filter

• integer channel
• string name
• key id
• string message
Channel Constant Description
DEBUG_CHANNEL 0x7FFFFFFF Chat channel reserved for script debugging and error messages, broadcasts to all nearby users.
PUBLIC_CHANNEL 0x0 Chat channel that broadcasts to all nearby users. This channel is sometimes referred to as: open chat, local chat and public chat.

Caveats

  • On state change all listens are released (on script reset as well).
  • When an object changes owner any listen registered with llGetOwner will not automatically update itself. The scripter needs to capture this event (on_rez and CHANGED_OWNER).


Examples

Trivial example to listen to any chat from the object owner and respond. To reduce lag and avoid spamming surrounding users, it is vastly preferable to listen on channels other than 0 and to trigger the listen event by talking on the alternative channel such as '/5 hello'.

// says beep to owner the first time owner says something in main chat;
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 has been sold as "original" from in world.
        if(mask & CHANGED_OWNER)
        {
            llResetScript();
        }
    }
}

See Also

Functions

•  llListen
•  llListenControl
•  llListenRemove
•  llDialog
•  llWhisper Sends chat limited to 10 meters
•  llSay Sends chat limited to 20 meters
•  llShout Sends chat limited to 100 meters
•  llRegionSay Sends chat limited to region

Deep Notes

Signature

event void listen( integer channel, string name, key id, string message );