Difference between revisions of "DialogPlus"
Kireji Haiku (talk | contribs) m (some readability improvements for non-widescreens and improvements with memory usage) |
Omei Qunhua (talk | contribs) (blatant promotion) |
||
Line 10: | Line 10: | ||
|func_footnote=''''CurMenu'''' will take place of an integer menuindex.<br />This requires a Listen Event when using DialogPlus to allow the Back and Next button to work. | |func_footnote=''''CurMenu'''' will take place of an integer menuindex.<br />This requires a Listen Event when using DialogPlus to allow the Back and Next button to work. | ||
|spec= | |spec= | ||
==For a more flexible multi-page solution, without the owner-only restriction, see [[SimpleDialogMenuSystem]]== | |||
<lsl> | <lsl> | ||
//Created by Ugleh Ulrik | //Created by Ugleh Ulrik | ||
Line 71: | Line 72: | ||
// We set a listen for only the owner | // We set a listen for only the owner | ||
// So this script assumes the object will only be touched by the owner | |||
listen_handle = llListen(channel, "", owner, ""); | listen_handle = llListen(channel, "", owner, ""); | ||
Line 100: | Line 102: | ||
llListenRemove(listen_handle); | llListenRemove(listen_handle); | ||
//Example used, change to whatever you wish. | //Example used, change to whatever you wish. | ||
llSay( | llSay(0, "Your choice was " + msg); | ||
} | } | ||
} | } | ||
Line 134: | Line 136: | ||
// We set a listen for only the owner | // We set a listen for only the owner | ||
// So this script assumes the object will only be touched by the owner | |||
listen_handle = llListen(channel, "", owner,""); | listen_handle = llListen(channel, "", owner,""); | ||
// touch_start we issue menuindex as 0 inside of the function itself | // touch_start we issue menuindex as 0 inside of the function itself | ||
Line 164: | Line 167: | ||
llListenRemove(listen_handle); | llListenRemove(listen_handle); | ||
//Example used, change to whatever you wish. | //Example used, change to whatever you wish. | ||
llSay( | llSay(0, "Your choice was "+ msg); | ||
} | } | ||
} | } |
Revision as of 11:54, 7 April 2014
LSL Portal | Functions | Events | Types | Operators | Constants | Flow Control | Script Library | Categorized Library | Tutorials |
Summary
Function: DialogPlus( key avatar, string message, list buttons, integer channel, integer CurMenu );Creates a dialog menu for storing more then 12 buttons, very useful for Inventory items, Scanners, and just huge lists.
• key | avatar | |||
• string | message | – | message to be displayed | |
• list | buttons | – | button labels | |
• integer | channel | |||
• integer | CurMenu | – | Parsed menu index. |
'CurMenu' will take place of an integer menuindex.
This requires a Listen Event when using DialogPlus to allow the Back and Next button to work.
Specification
For a more flexible multi-page solution, without the owner-only restriction, see SimpleDialogMenuSystem
<lsl> //Created by Ugleh Ulrik //This sort of script should cost, but for you free :) //Edited by Taff Nouvelle to put the buttons in correct order.
list order_buttons(list buttons) {
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) + llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}
integer menuindex;
DialogPlus(key avatar, string message, list buttons, integer channel, integer CurMenu) {
if (12 < llGetListLength(buttons)) { list lbut = buttons; list Nbuttons = []; if(CurMenu == -1) { CurMenu = 0; menuindex = 0; }
if((Nbuttons = (llList2List(buttons, (CurMenu * 10), ((CurMenu * 10) + 9)) + ["Back", "Next"])) == ["Back", "Next"]) DialogPlus(avatar, message, lbut, channel, menuindex = 0); else llDialog(avatar, message, order_buttons(Nbuttons), channel); } else llDialog(avatar, message, order_buttons(buttons), channel);
} </lsl>
Examples
<lsl> // Created by Ugleh Ulrik // List2DialogPlus Example
// Here we set the Dialog Channel integer channel = -900;
integer listen_handle;
// Here we make a huge list for an example list The_List = [
"Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6", "Option 7", "Option 8", "Option 9", "Option 10", "Option 11", "Option 12", "Option 13", "Option 14", "Option 15", "Option 16", "Option 17", "Option 18", "Option 19", "Option 20"];
default {
touch_start(integer total_number) { key owner = llGetOwner(); // We set a listen for only the owner // So this script assumes the object will only be touched by the owner listen_handle = llListen(channel, "", owner, ""); // Touch_Start we issue menuindex as 0 inside of the function itself DialogPlus(owner, "Select an Option", The_List, channel, menuindex = 0); }
// We need a listen for the dialog itself, but as well as the Back/Next button. listen(integer chan, string name, key id, string msg) { key owner = llGetOwner();
// If they clicked Next it will go to the next dialog window if(msg == "Next") { // ++menuindex will turn menuindex plus 1, making it give the next page. DialogPlus(owner, "Select an Option", The_List, channel, ++menuindex); }
// if they clicked back it will go to the last dialog window. else if(msg == "Back") DialogPlus(owner, "Select an Option", The_List, channel, --menuindex); // --menuindex will turn menuindex minus 1, making it give the previous page.
// If they choose anything besides Back/Next it will be in this section else { // Be Safe llListenRemove(listen_handle); //Example used, change to whatever you wish. llSay(0, "Your choice was " + msg); } }
} </lsl>
<lsl> //Created by Ugleh Ulrik //Inventory2DialogPlus Example
//Here we set the Dialog Channel integer channel = -900;
integer listen_handle;
list InventoryList;
default {
touch_start(integer total_number) { InventoryList = []; integer i; integer a = llGetInventoryNumber(INVENTORY_ALL);
do { InventoryList += [TrimStringToLength(llGetInventoryName(INVENTORY_ALL, i),23)]; } while (++i < a);
key owner = llGetOwner(); // We set a listen for only the owner // So this script assumes the object will only be touched by the owner listen_handle = llListen(channel, "", owner,""); // touch_start we issue menuindex as 0 inside of the function itself DialogPlus(owner, "Select an Option", InventoryList, channel, menuindex = 0); }
// We need a listen for the dialog itself, but as well as the Back/Next button. listen(integer chan, string name, key id, string msg) { key owner = llGetOwner();
// If they clicked Next it will go to the next dialog window if(msg == "Next") { // ++menuindex will turn menuindex plus 1, making it give the next page. DialogPlus(owner, "Select an Option", InventoryList, channel, ++menuindex); }
//if they clicked back it will go to the last dialog window. else if(msg == "Back") { // --menuindex will turn menuindex minus 1, making it give the previous page. DialogPlus(owner, "Select an Option", InventoryList, channel, --menuindex); }
// If they choose anything besides Back/Next it will be in this section else { //Be Safe llListenRemove(listen_handle); //Example used, change to whatever you wish. llSay(0, "Your choice was "+ msg); } }
}
</lsl>