Tout ceux qui ont programmé des dialogues ont constaté que les boutons sont rarement dans l'ordre voulu ; de plus quand il y a plus de 12 options, il faut assumer.
Ce script montre comment résoudre ces problèmes ; c'est une base, à vous de l'améliorer

 

//This part is to be deleted ; only needed to generate buttons in big quantity
//ceci est a effacer ; seulement utilisé pour générer une grande quantité de boutons
integer iNbBut = 41; // vary it to test // Varier pour tester
prepar()
{
lNameBut = [];
integer i = 0;
for(i = 1; i<=iNbBut; i++)
{
lNameBut = (lNameBut=[]) + lNameBut + ["Bout " + (string) i];
}
}
//Function that puts buttons in "correct" human-readable order without relying on intelligent higher order list functions ~ Redux {Copied from a wiki}
list order_buttons(list buttons)
{
return llList2List(buttons, -3, -1) + llList2List(buttons, -6, -4)
+ llList2List(buttons, -9, -7) + llList2List(buttons, -12, -10);
}

integer iPtrList = 0; // Attention // Zeroed it before 1st call (see Touch event)// Remettre à 0 avant le 1er appel (voir l'event Touch)
key kAgentTouch; //Attention // Copy in it the key used for the first call (see Touch event)// Y copier le key du 1er appel (voir l'event Touch)

//Function used to cut the list in segment of 11 elements and add the "next" button // Fonction pour découper la list en segment de 11 éléments et ajouter le bouton "suivant"
list cut_list(list lBut)
{
list lSubList;
integer iLsub = 12;
if(iPtrList + 12 < llGetListLength(lBut))
{
lSubList = llList2List(lBut, iPtrList, iPtrList + 10);
lSubList = (lSubList=[]) + lSubList + ["Suiv/Next"];
iPtrList += 11;
}
else
{
lSubList = llList2List(lBut, iPtrList, llGetListLength(lBut) - 1);
}
return lSubList;
}
//////////////////////////////////////////////
integer iChannel = -45327;
list lNameBut = ["S/s Sol", "RDC", "2nd Floor", "Himmel"];
// This is the message to be displayed by the dialog box
// Ceci est le message à afficher dans la boîte de dialogue
string sMessage;

default
{
state_entry()
{
prepar();
llListen(iChannel, "", NULL_KEY, "");
}

touch_start(integer iPNumb)
{
/////////////////////////////////////
kAgentTouch = llDetectedKey(0);
iPtrList = 0;
////////////////////////////////////
sMessage = "Appuyez sur le bouton correspondant au numéro\nPress the button corresponding to the number";
llDialog(kAgentTouch, sMessage, order_buttons(cut_list(lNameBut)), iChannel); // Combination of the 2 functions // Combinaison des 2 fonctions
}

listen(integer iChan, string sName, key kId, string sOption)
{
llOwnerSay(sName + " (" + (string)kId + ") a choisi l'option " + sOption);
if(sOption == "Suiv/Next")
{
llDialog(kAgentTouch, sMessage, order_buttons(cut_list(lNameBut)), iChannel); //Following llDialog are exactly as the 1st // Les lldialog suivants sont comme le 1er
}
//Continuer ensuite avec les tests des valeurs des boutons
else if(sOption == "ceci ou cela")
{
//Faire l'action requise
}
//etc etc
}
}

 

 


Mettre le script dans un cube et cliquer le cube. Ensuite ... étudier sérieusement.