Skip to content
lsl.devlsl.devLSL Dev

llSay

function
Function syntax
llSay(
  1. integer channel,// Chat channel (any 32-bit signed integer value) to chat the message on. Values: Channel
  2. string msg// Text message string to broadcast.
);
Energy
10

Broadcasts the message msg to all scripts or agents listening on channel within llGetEnv("chat_range"), which is 20m on most regions. Agents listen on PUBLIC_CHANNEL (0) and DEBUG_CHANNEL (2147483647). All other channels are for script-to-script communication.

Says the text supplied in string msg on channel supplied in integer channel. The message can be heard 20m away, usually (see caveats)

How to use
llSay(0, "");
  • msg can only be heard within 20 meters of the speaking prim (rather than the root). This is contrary to how the event listen works, where a msg can only be heard by any prim in the object if and only if the root prim is capable of hearing it.
  • Some simulators (mostly event sims or linden-owned ones) have llGetEnv("chat_range") set to a value other than 20. On these sims:
  • llSay(0, msg) can be heard in a radius of llGetEnv("chat_range")
  • llSay(any_other_channel, msg) can be heard in a radius of 20m
  • as of 2023-03-26, Hippotropolis (a linden meeting sim) has a chat range of 40m
  • msg can be a maximum of 1024 bytes. This can convey 1024 ASCII characters, or 256-512 multibyte UTF-8 characters such as á (2 bytes), ℋ (3 bytes) or 🧡 (4 bytes).
  • If a multibyte character ends up on the 1024 byte boundary, it is discarded and not split into invalid bytes.
  • A prim can not hear itself, this to prevent problems with recursion. It can however hear other prims within the same object. Use llMessageLinked instead for intra-prim messaging.
Example 1
default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}
}

To avoid making your object spam its neighborhood, use llInstantMessage, llOwnerSay or llRegionSayTo.

  • Channel 0 is the PUBLIC_CHANNEL. Everyone can hear chat transmitted on this channel. All other channels are private channels (not sent to users, with the exception of DEBUG_CHANNEL).
  • Consider using llInstantMessage, llOwnerSay, or the DEBUG_CHANNEL for debugging purposes. If DEBUG_CHANNEL is used as channel, the script will say msg to the Script Warning/Error window.
  • Note, however, that when using DEBUG_CHANNEL, what you consider to be ‘debugging messages’ will still be seen by others as scripting errors indicated by the floating ‘script error’ icon.
  • If one object ‘says’ something to another object (e.g., a button that, when touched, turns on a lamp), it is a good idea to use a very negative channel, e.g., -5243212 but don’t just use any number take a look at the User-Defined Protocols & APIs and choose one that won’t interfere with other protocols. If you are going to sell your script widely, please add it to the appropriate known chat channels list so others won’t interfere with your product (do keep in mind you should build your product so that it handles interference appropriately).
llSay(-5243212,"turn on");

:From at least September 2016 (see Release Notes/Second Life Release/4.0.9.320038), viewers have been able to chat on negative channels, although chat from viewers is limited to 254 characters. (Chat from objects caps at 1024 bytes, whether the channel is negative or not). Negative channels were popular for script communications because the standard SL client was unable to chat directly on those channels (/-xxxx message would not chat message on channel -xxxx). The only way for a viewer to generate chat on negative channels prior to llTextBox was to use llDialog which was limited to 24 bytes.

  • Be aware that if you mistakenly use an integer bigger than the maximum or smaller than the minimum, SL will treat the literal number as a float and convert it implicitly to an out-of-range integer, resulting in 1, without giving a script/syntax error (since this implicit conversion is legitimate). This means that all scripts listening to an out-of-range integer will be listening to channel 1 instead! (see also llListen).
  • Objects with all-whitespace names (e.g., a space or a series of spaces) will appear as “(Unnamed)” if they emit chat via llSay, although this behaviour may vary in third-party viewers.
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.

From the Second Life Wiki

Community documentation adapted from LlSay, by Linden Research, Inc. and contributing residents.View contributors and history.

Built from these wiki pages, as imported:

Licensed under CC BY-SA 3.0. Last wiki edit: .Formatting and links have been adapted for this site; API metadata follows the LSL definitions.