Difference between revisions of "Inventory Based Menu"

From Second Life Wiki
Jump to navigation Jump to search
(Created page with '{{LSL Header|ml=*}} Introduction: Ok you want to create a dialog based menu system, you want to support more than 12 buttons so im going to give you quick overview of basic menu...')
 
Line 76: Line 76:
</lsl>
</lsl>


For technical support, requests, etc., use the Search under the Groups Tab and search for .::Prototype::.
For technical support, requests, etc., use the Search under the Groups Tab and search for Skidz Partz - Open Source


if you have any problems getting this script to work either contact me inworld [[User:Revolution_Perenti|Revolution Perenti]]
if you have any problems getting this script to work either contact me in-world [https://wiki.secondlife.com/wiki/User:Revolution_Perenti Revolution Perenti]
or visit out Open Source Section at skidz partz we have many different versions of this system.
or visit our free scripts at our LSL scripts [http://www.dazzlemods.com www.dazzlemods.com] Open Source Section on our forum.
[http://slurl.com/secondlife/Snow%20Crash/128/128/23 Snow Crash]
[http://slurl.com/secondlife/Skidz%20Isle/128/128/23 Skidz Isle]


{{LSLC|Library}}{{LSLC|Examples}}
{{LSLC|Library}}{{LSLC|Examples}}

Revision as of 21:00, 11 August 2010

Introduction: Ok you want to create a dialog based menu system, you want to support more than 12 buttons so im going to give you quick overview of basic menu using llRezAtRoot, llGetInventoryName & llGetInventoryNumber

USAGE:just drop objects into the prim and rez them from the dialog by touching the prim.

<lsl> list MENU1 = []; list MENU2 = []; integer listener; integer MENU_CHANNEL = 1000;


Dialog(key id, list menu) {

   llListenRemove(listener);
   listener = llListen(MENU_CHANNEL, "", NULL_KEY, "");
   llDialog(id, "Select one object below: ", menu, MENU_CHANNEL);

}

default {

   on_rez(integer num)
   {
       llResetScript();
   }
   
   touch_start(integer total_number)
   {
       integer i = 0;
       MENU1 = [];
       MENU2 = [];
       integer c = llGetInventoryNumber(INVENTORY_OBJECT);
       if (c <= 12)
       {
           for (; i < c; ++i)
               MENU1 += llGetInventoryName(INVENTORY_OBJECT, i);
       }
       else
       {        
           for (; i < 11; ++i)
               MENU1 += llGetInventoryName(INVENTORY_OBJECT, i);
           if(c > 22)
               c = 22;
           for (; i < c; ++i)
               MENU2 += llGetInventoryName(INVENTORY_OBJECT, i); 
           MENU1 += ">>";
           MENU2 += "<<";                          
       }
       Dialog(llDetectedKey(0), MENU1);
   }
   
   listen(integer channel, string name, key id, string message) 
   {
       if (channel == MENU_CHANNEL)
       {
           llListenRemove(listener);  
           if (message == ">>")
           {
               Dialog(id, MENU2);
           }
           else if (message == "<<")
           {
               Dialog(id, MENU1);
           }        
           else                    
           {
               // todo add offsets so box sites perfect on rezzer 
               llRezAtRoot(message, llGetPos(), ZERO_VECTOR, llGetRot(), 0);
           }      
       }
   }  

} </lsl>

For technical support, requests, etc., use the Search under the Groups Tab and search for Skidz Partz - Open Source

if you have any problems getting this script to work either contact me in-world Revolution Perenti or visit our free scripts at our LSL scripts www.dazzlemods.com Open Source Section on our forum. Skidz Isle