“LlDialog”的版本间的差异
(创建页面,内容为“{{LSL Header|ml=*}}{{LSLC|Keywords}}{{LSLC|Flow Control}}{{LSLC|}} {{函数详情 |函数名 = Function: llDialog( key avatar, string message, list buttons, intege…”) |
|||
第14行: | 第14行: | ||
|注意事项= | |注意事项= | ||
+ | 注意事项 | ||
*This function causes the script to sleep for 1.0 seconds. | *This function causes the script to sleep for 1.0 seconds. | ||
*This function only opens a dialog box. The script must then also register a listener on the same channel using llListen and have a listen event handler to receive the response. | *This function only opens a dialog box. The script must then also register a listener on the same channel using llListen and have a listen event handler to receive the response. | ||
第24行: | 第25行: | ||
**If the listener resides in the same script that created the dialog, then the dialog button is heard sim-wide. | **If the listener resides in the same script that created the dialog, then the dialog button is heard sim-wide. | ||
*By default, only one dialog can be displayed per object in the Second Life Viewer. This can be overridden by the ScriptDialogLimitations debug setting in the Viewer. | *By default, only one dialog can be displayed per object in the Second Life Viewer. This can be overridden by the ScriptDialogLimitations debug setting in the Viewer. | ||
− | *The dialog response (the generated chat) has its in world location at the root prim's global position. | + | *The dialog response (the generated chat) has its in world location at the root prim's global position.It can generate a listen event within 20 meters from that position. |
− | |||
*The listening location for a child prim in the object is either at the child prim's location or at the root prim's location | *The listening location for a child prim in the object is either at the child prim's location or at the root prim's location | ||
see bugtrace JIRA SCR-43 | see bugtrace JIRA SCR-43 |
2020年4月13日 (一) 10:53的版本
首页 | 函数 | 事件 | 类型 | 操作符 | 常数 | Flow Control | Script Library | Categorized Library | Tutorials |
函数名 |
---|
Function: llDialog( key avatar, string message, list buttons, integer channel ); |
参数:
|
返回值:Shows a dialog box in the lower right corner of the avatar's screen (upper right in Viewer 1.x) with a message and choice buttons, as well as an ignore button. This has many uses ranging from simple message delivery to complex menu systems. |
注意事项 |
---|
注意事项
see bugtrace JIRA SCR-43 |
示例 |
---|
示例1
// When the prim is touched, give the toucher the option of killing the prim. integer gListener; // Identity of the listener associated with the dialog, so we can clean up when not needed default { touch_start(integer total_number) { // Kill off any outstanding listener, to avoid any chance of multiple listeners being active llListenRemove(gListener); // get the UUID of the person touching this prim key user = llDetectedKey(0); // Listen to any reply from that user only, and only on the same channel to be used by llDialog // It's best to set up the listener before issuing the dialog gListener = llListen(-99, "", user, ""); // Send a dialog to that person. We'll use a fixed negative channel number for simplicity llDialog(user, "\nDo you wish this prim to die?", ["Yes", "No" ] , -99); // Start a one-minute timer, after which we will stop listening for responses llSetTimerEvent(60.0); } listen(integer chan, string name, key id, string msg) { // If the user clicked the "Yes" button, kill this prim. if (msg == "Yes") llDie(); // The user did not click "Yes" ... // Make the timer fire immediately, to do clean-up actions llSetTimerEvent(0.1); } timer() { // Stop listening. It's wise to do this to reduce lag llListenRemove(gListener); // Stop the timer now that its job is done llSetTimerEvent(0.0);// you can use 0 as well to save memory } } 示例2 string mainMenuDialog = "\nWhich settings would you like to access?\nClick \"Close\" to close the menu.\n\nYou are here:\nMainmenu"; list mainMenuButtons = ["sub 01", "sub 02", "Close"]; string subMenu_01_Dialog = "\nClick \"Close\" to close the menu.\nClick \"-Main-\" to return to the main menu.\n\nYou are here:\nMainmenu > sub 01"; list subMenu_01_Buttons = ["action 01a", "action 01b", "Close", "-Main-"]; string subMenu_02_Dialog = "\nClick \"Close\" to close the menu.\nClick \"-Main-\" to return to the main menu.\n\nYou are here:\nMainmenu > sub 02"; list subMenu_02_Buttons = ["action 02a", "action 02b", "Close", "-Main-"]; integer dialogChannel; integer dialogHandle; open_menu(key inputKey, string inputString, list inputList) { dialogChannel = (integer)llFrand(DEBUG_CHANNEL)*-1; dialogHandle = llListen(dialogChannel, "", inputKey, ""); llDialog(inputKey, inputString, inputList, dialogChannel); llSetTimerEvent(30.0); } close_menu() { llSetTimerEvent(0.0);// you can use 0 as well to save memory llListenRemove(dialogHandle); } default { on_rez(integer start_param) { llResetScript(); } touch_start(integer total_number) { key id = llDetectedKey(0); // Ensure any outstanding listener is removed before creating a new one close_menu(); open_menu(id, mainMenuDialog, mainMenuButtons); } listen(integer channel, string name, key id, string message) { if(channel != dialogChannel) return; close_menu(); if(message == "-Main-") open_menu(id, mainMenuDialog, mainMenuButtons); else if(message == "sub 01") open_menu(id, subMenu_01_Dialog, subMenu_01_Buttons); else if(message == "sub 02") open_menu(id, subMenu_02_Dialog, subMenu_02_Buttons); else if (message == "action 01a") { //do something open_menu(id, subMenu_01_Dialog, subMenu_01_Buttons); } else if (message == "action 01b") { //do something else //maybe not re-open the menu for this option? //open_menu(id, subMenu_01_Dialog, subMenu_01_Buttons); } else if (message == "action 02a") { //do something open_menu(id, subMenu_02_Dialog, subMenu_02_Buttons); } else if (message == "action 02b") { //do something else open_menu(id, subMenu_02_Dialog, subMenu_02_Buttons); } } timer() { close_menu(); } } |
相关函数 |
---|
llListen
llTextBox llRegionSay llWhisper–Sends chat limited to 10 meters llSay–Sends chat limited to 20 meters llShout–Sends chat limited to 100 meters llInstantMessage–Sends chat to the specified user llOwnerSay–Sends chat to the owner only |
相关事件 |
---|
listen |