et petite variante, si tu veux absolument choisir avant....le choix se lit sur la boite de dial et se fait par une simple touche ....
key owner;
key agentkey;
key agentcadeau;
list keys;
list newkeys;
list ListeBoutons;
integer menuindex;
integer listen_handle;
integer agentdistance;
integer i;
integer listlength;
integer nbboutons;
integer nbpages;
integer choix;
string agentname;
string agentbutname;
string textecadeau;
string cadeau;
list order_buttons(list buttons)
{
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4) +
llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}
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 * 9), ((CurMenu * 9) + 9)) + ["Back","Choix cadeau", "Next"])) == ["Back","Choix cadeau", "Next"])
{
DialogPlus(avatar, message, lbut, channel, menuindex = 0);
}
else
llDialog(avatar, message, order_buttons(Nbuttons), channel);
}
else
llDialog(avatar, message, order_buttons(buttons), channel);
}
default
{
on_rez(integer start_param)
{
llResetScript();
}
state_entry()
{
owner = llGetOwner();
textecadeau = "Envoyer cadeau1";
}
touch_start(integer total_number)
{
llListenRemove(listen_handle);
vector currentPos = llGetPos();
keys = [];
newkeys = [];
ListeBoutons = [];
keys = llGetAgentList(AGENT_LIST_PARCEL, []);
integer ind = llListFindList(keys,[owner]);
keys = llDeleteSubList(keys,ind,ind);
listlength = llGetListLength(keys);
for (i = 0; i < listlength; ++i)
{
agentkey = llList2Key(keys,i);
agentdistance = llRound(llVecDist(currentPos,llList2Vector(llGetObjectDetails(agentkey, [OBJECT_POS]), 0)));
agentname = llKey2Name(agentkey);
agentbutname = llGetSubString(agentname,0,12);
newkeys += [agentdistance,agentbutname,agentname,agentkey];
}
newkeys = llListSort(newkeys, 4, TRUE);
ListeBoutons = llList2ListStrided(llDeleteSubList(newkeys, 0, 0), 0, -1, 4);
nbboutons = llGetListLength(ListeBoutons);
if(nbboutons == 0)
{
llOwnerSay("Personne dans le coin");
}
else if(nbboutons <= 11)
{
listen_handle = llListen(-18, "", owner,"");
llSetTimerEvent(30.0);
DialogPlus(owner, "Choisir un résident"+ "\n\n\n"+ textecadeau, ListeBoutons+["Choix cadeau"], -18, menuindex = 0);
}
else if(nbboutons >12)
{
listen_handle = llListen(-18, "", owner,"");
llSetTimerEvent(30.0);
nbpages = llCeil(nbboutons/9.0);
DialogPlus(owner, "Choisir un résident"+ ": page"+ (string)(menuindex+1) +"/"+ (string)(nbpages)+ "\n\n\n"+ textecadeau, ListeBoutons, -18, menuindex = 0);
}
}
listen(integer chan, string name, key id, string msg)
{
if(msg == "Next")
{
++menuindex;
if(menuindex == nbpages)
{ menuindex = 0;}
DialogPlus(owner, "Choisir un résident"+ ": page"+ (string)(menuindex+1) +"/"+ (string)(nbpages)+ "\n\n\n"+ textecadeau, ListeBoutons, -18, menuindex);
}
else if(msg == "Back")
{
--menuindex;
if(menuindex == -1)
{ menuindex = 0;}
DialogPlus(owner, "Choisir un résident"+ ": page"+ (string)(menuindex+1) +"/"+ (string)(nbpages)+ "\n\n\n"+ textecadeau, ListeBoutons, -18, menuindex);
}
else if(msg == "Choix cadeau")
{
if(choix)
{
textecadeau = "Envoyer cadeau1";
cadeau = "cadeau1";
DialogPlus(owner, "Choisir un résident"+ "\n\n\n"+ textecadeau, ListeBoutons+["Choix cadeau"], -18, menuindex = 0);
}
else
{
textecadeau = "Envoyer cadeau2";
cadeau = "cadeau2";
DialogPlus(owner, "Choisir un résident"+ "\n\n\n"+ textecadeau, ListeBoutons+["Choix cadeau"], -18, menuindex = 0);
}
choix = !choix;
}
else
{
llListenRemove(listen_handle);
llSetTimerEvent(0.0);
integer index = llListFindList(newkeys, [msg]);
llOwnerSay(llList2String(newkeys,index+1)+ " : " + llList2String(newkeys,index-1) + "m" + " clé"+":"+" "+llList2String(newkeys,index+2));
agentcadeau = llList2Key(newkeys,index+2);
llGiveInventory(agentcadeau,cadeau);
llOwnerSay(cadeau + " envoyé à:" + " " + (string)llKey2Name(agentcadeau));
}
}
timer()
{
llOwnerSay("Temps ecoulé.");
llListenRemove(listen_handle);
llSetTimerEvent(0.0);
}
changed(integer change)
{
if (change & CHANGED_OWNER)
{
llResetScript();
}
}
}