//--------------------------------------------------------------- // PARAMETERS... YOU CAN CHANGE THIS //--------------------------------------------------------------- list OBJECTS = ["Hot Coco","coke can"]; // Objects list (max 22) string MENU_TEXT = "\nChoose an object"; // Menu text ("\n" to insert a line) float TIMEOUT = 30; // Time out in seconds integer API_CHANNEL = 1231; // API Channel number //--------------------------------------------------------------- // DONT CHANGE THIS ! //--------------------------------------------------------------- InitMenu(key id) { if(~llListFindList(lAvaMenu, [id])) CancelMenu(id); integer i = llGetListLength(lAvaMenu); lAvaMenu += id; lCanalMenu += GetRandomChannel(); lIndexMenu += 0; lEcouteMenu += llListen(llList2Integer(lCanalMenu, i), "", id, ""); GestMenu(id, i); } GestIndexBoutons(key id, string browse) { integer i = llListFindList(lAvaMenu, [id]); integer IndexBoutons = llList2Integer(lIndexMenu, i); if(IndexBoutons) IndexBoutons = 0; else IndexBoutons = 11; lIndexMenu = llListReplaceList(lIndexMenu, [IndexBoutons], i, i); GestMenu(id, i); } GestMenu(key id, integer i) { integer IndexBoutons = llList2Integer(lIndexMenu, i); list lBoutons = OBJECTS; if(llGetListLength(lBoutons) > 12) { if(IndexBoutons) lBoutons = [PREVIOUS] + llList2List(lBoutons, IndexBoutons, -1); else lBoutons = llList2List(lBoutons, 0, 1) + [NEXT] + llList2List(lBoutons, 2, 10); } llSetTimerEvent(TIMEOUT); llDialog(id, MENU_TEXT, lBoutons, llList2Integer(lCanalMenu, i)); } CancelMenu(key id) { integer i = llListFindList(lAvaMenu, [id]); if(~i) { llListenRemove(llList2Integer(lEcouteMenu, i)); lAvaMenu = llDeleteSubList(lAvaMenu, i, i); lCanalMenu = llDeleteSubList(lCanalMenu, i, i); lEcouteMenu = llDeleteSubList(lEcouteMenu, i, i); lIndexMenu = llDeleteSubList(lIndexMenu, i, i); if(llGetListLength(lAvaMenu)) llSetTimerEvent(.0);} } FinMenu() { while(llGetListLength(lAvaMenu)) { key k = llList2Key(lAvaMenu, 0); llInstantMessage(llList2Key(lAvaMenu, 0), "Time out for dialog."); CancelMenu(k);} } integer GetRandomChannel() { return ~(integer)llFrand((float)DEBUG_CHANNEL); } string PREVIOUS = "<<<"; string NEXT = ">>>"; list lCanalMenu; list lEcouteMenu; list lIndexMenu; list lAvaMenu; default { link_message(integer sender_number, integer number, string message, key id) { if(number == API_CHANNEL) { if(llGetListLength(OBJECTS) == 1) llGiveInventory(id, llList2String(OBJECTS, 0)); else InitMenu(id); } } listen(integer channel, string name, key id, string message) { if(~llListFindList([PREVIOUS,NEXT], [message])) GestIndexBoutons(id, message); else { CancelMenu(id); llGiveInventory(id, message); } } timer() {FinMenu();} }