Difference between revisions of "LlTextBox"

From Second Life Wiki
Jump to navigation Jump to search
(Simplify and clarify examples, focusing on the target function)
m
Line 33: Line 33:
     touch_start(integer total_number)
     touch_start(integer total_number)
     {
     {
        //It's ok if the listen has already been released (or never opened). This prevents leaks if there was no response.
        llListenRemove(gListener);
         // See 'discussion' page for more comments on choosing a channel and possible left-open listener
         // See 'discussion' page for more comments on choosing a channel and possible left-open listener
         integer channel = -13572468;
         integer channel = -13572468;
         // "" saves byte-code over NULL_KEY
         // "" saves byte-code over NULL_KEY
         gListener = llListen( channel, "", "", "");    
         gListener = llListen( channel, "", "", "");
         llTextBox(llDetectedKey(0), "Some info text for the top of the window...", channel);
         llTextBox(llDetectedKey(0), "Some info text for the top of the window...", channel);
     }
     }

Revision as of 11:52, 30 December 2013

Summary

Function: llTextBox( key avatar, string message, integer channel );
1.0 Forced Delay
10.0 Energy

Shows a dialog box on avatar's screen with the text message. It contains a text box for input, any text that is entered is said by avatar on channel when the "Submit" button is clicked.

• key avatar avatar UUID that is in the same region
• string message message to be displayed in the text box
• integer channel output chat channel, any integer value
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

  • This function causes the script to sleep for 1.0 seconds.
  • Not supported in official Linden Lab viewers prior to version 2.4, and some TPVs may not support it. Unsupported viewers will display a dialog box with a single option of "!!llTextBox!!".
  • There is no way by script to kill a text box.
  • There is no way for the script to detect if the user clicked the small "ignore" button (no chat is generated as a result of pressing this button).
  • If the listening prim is out of the 20 meter range of the sending prim when the "Submit" button is pressed, it will not be able to hear the response.
    • This limitation affects attachments too if the wearer moves more than 20 meters from where the listener is located.
  • The textbox input is limited to 250 bytes (characters). This can be a problem for larger text input; if the input can be over 250 characters, you will have to accept it through chat.

message limits

  • If it exceeds 7 (Viewer 3) or 8 (Viewer 1) lines a scroll bar will appear.
  • message must be less than 512 bytes and not empty. Otherwise, it will shout an error on DEBUG_CHANNEL. One easy way to create an empty message is to use a line feed, as in <lsl>llTextBox(avatar_key," \n",dialog_channel);</lsl>

Examples

<lsl> integer gListener; default {

   touch_start(integer total_number)
   {
       //It's ok if the listen has already been released (or never opened). This prevents leaks if there was no response.
       llListenRemove(gListener);
       // See 'discussion' page for more comments on choosing a channel and possible left-open listener
       integer channel = -13572468;
       // "" saves byte-code over NULL_KEY
       gListener = llListen( channel, "", "", "");
       llTextBox(llDetectedKey(0), "Some info text for the top of the window...", channel);
   }
   listen(integer channel, string name, key id, string message)
   {
       llListenRemove(gListener);
       llSay(0, "You wrote: " + message);
   }

} </lsl> If the user hits "Enter" before clicking the "Submit" button, there will be a final carriage return in the message. In the rare event that this could be a problem, it is easily removed:- <lsl>

       if (llGetSubString(message, -1, -1) == llUnescapeURL("%0A") )
           message = llGetSubString(message, 0, -2);
</lsl>

Notes

Instead of mouse clicking: "Submit", you can use keyboard keys: press Tab ⇆ and then Enter ↵

See Also

Events

•  listen

Functions

•  llDialog
•  llListen
•  llSay
•  llWhisper
•  llShout
•  llRegionSay

Deep Notes

History

Source

viewer - indra/llcommon/lllslconstants.h <cpp>// llTextBox() magic token string - yes this is a hack. sue me. const std::string TEXTBOX_MAGIC_TOKEN = "!!llTextBox!!";</cpp>

Footnotes

  1. ^ Channel zero is also known as: PUBLIC_CHANNEL, open chat, local chat and public chat

Signature

function void llTextBox( key avatar, string message, integer channel );
<lsl></lsl>