LlDialog/fr
LSL Portail Francophone | LSL Portail Anglophone | Fonctions | Évènements | Types | Operateurs | Constantes | Contrôle d'exécution | Bibliothèque | Tutoriels |
Description
Fonction: llDialog( key avatar, string message, list boutons, integer canal );247 | N° de fonction |
1.0 | Delais |
10.0 | Energie |
Fait apparaître une boîte de dialogue sur l'écran de l'avatar avec le message et les boutons indiqués.
• key | avatar | – | UUID d'avatar | |
• string | message | |||
• list | boutons | |||
• integer | canal |
Quand un bouton est pressé l'avatar "crie" le texte correspondant au bouton sur le canal.
La localisation géographique du message est celle de la prim au moment ou elle a créé le boîte de dialogue.
|
|
Avertissements
- Cette fonction fait dormir le script pendant 1.0 secondes.
- Il n'existe aucun moyen de fermer une boîte de dialogue par script.
- Il n'y a aucun moyen pour le script de détecter si l'utilisateur à utiliser le (petit) bouton "ignorer" ("ignore") car aucun message n'est émis.
- Il n'y a aucun moyen de distinguer un message émis par une boîte de dialogue d'un message émis par un autre moyen par le même utilisateur.
- Il est important de prendre en compte la possibilité que le message ne soit pas un de ceux proposées par la boîte de dialogue.
- Si la prim est déplacée et "crie" en dehors du pérmimètre ou la boîte de dialogue a été crée, elle ne sera pas capable d'entendre la réponse.
- Cette limite concerne également les attachements (par exemple si le porteur se déplace trop loin de l'endroit ou la boîte de dialogue a été créée)
message limits
- Si le message contient plus de 8 lignes, une barre de défilement est créée.
- Le message doit faire moins de 512 bytes et ne pas être vide. Dans le cas contrainte, le script enverra un message sur le DEBUG_CHANNEL.
buttons limits
- Si la liste des boutons est une liste vide, la liste ["OK"] sera utilisée par défaut
- Une erreur sera signalée sur le DEBUG_CHANNEL si :
- Il y a plus de 12 boutons.
- Un objet d'une liste n'est pas un string.
- Un objet d'une liste est de taille nulle ou supérieure à 24 bytes.
Exemples
<lsl>integer canal= 1000; list pairs = [];
default {
state_entry() { llListen(canal,"", "",""); }
touch_start(integer count) { llDialog(llDetectedKey(0), "Voici une boîte de dialogue de test.\n\nChoisisez une des options ci-dessous.", ["Oui", "Non", "0", "1"], canal); } listen(integer canal, string nom, key id, string mes) { if(id == llGetOwnerKey(id))//N'écoute pas les objets, à moins qu'ils ne soient pas dans la région. llSay(0,nom+ " ( position : " + (string)llGetObjectDetails(id, (list)OBJECT_POS) + ") a choisi l'option " + mes); }
}</lsl>
Codes utiles
<lsl>//Une fonction optimale pour placer les boutons dans le bon ordre de lecture integer canal;
list order_buttons(list boutons) {
return llList2List(boutons, -3, -1) + llList2List(boutons, -6, -4) + llList2List(boutons, -9, -7) + llList2List(boutons, -12, -10);
}
default {
state_entry() { // Crée un canal au hazard dans le périmètre [-1000000000,-2000000000]
canal= (integer)(llFrand(-1000000000.0) - 1000000000.0);
llListen(canal,"", "","");
}
touch_start(integer total_number) { llDialog(llDetectedKey(0),"\nChoisissez une option :\n",
order_buttons(["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]),canal);
}
listen(integer _chan, string _nom, key _id, string _option) { llSay(0, _nom+ " a choisi l'option " + _option); }
}</lsl>
Notes
Utilisez un canal négatif est une bonne idée (mais jamais inférieur à la valeur 32-bits la plus petite -2 147 483 648) <lsl>// Crée un canal au hasard dans le périmètre [-1000000000,-2000000000] integer Canal = (integer)(llFrand(-1000000000.0) - 1000000000.0);
llDialog(llDetectedKey(0), "Choisissez une option :",
["Oui", "Non", "0", "1"], Canal);</lsl>
Il est impossible pour un avatar d'envoyer des messages manuellement sur un canal négatif et il y a peu de chance qu'un autre objet utilise ce canal