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 on appuie sur un bouton, l'avatar "dit" le texte correspondant au bouton sur le canal.
L'emplacement géographique du message généré par l'avatar est celui de la prim qui a créé la boîte de dialogue (pas l'emplacement de l'avatar).
|
|
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 a utilisé 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 qui écoute est à plus de 20 mètres de la prim qui généré la boite de dialogue, elle ne sera pas capable d'entendre la réponse.
- Cette limite concerne également les attachements si le porteur se déplace à plus de 20 mètres de l'endroit où l'on écoute la réponse.
Limites des messages
- Si le message contient plus de 8 lignes, une barre de défilement apparaît.
- Le message doit faire moins de 512 octets et ne pas être vide. Dans le cas contraire, le script enverra un message sur le canal DEBUG_CHANNEL.
Limites des boutons
- Si la liste des boutons est une liste vide, la liste [ "OK" ] sera utilisée à la place.
- Une erreur sera signalée sur le DEBUG_CHANNEL si :
- Il y a plus de 12 boutons.
- Un objet de la liste n'est pas une chaîne.
- Une chaîne de la liste est de taille nulle ou supérieure à 24 octets.
Exemples
<lsl>integer canal= 1000;
default {
state_entry() { llListen(canal, "", "", ""); }
touch_start(integer decompte) { 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 ordonne_boutons(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 hasard dans l'intervalle [-1000000000,-2000000000]
canal= (integer) (llFrand(-1000000000.0) - 1000000000.0);
llListen(canal, "", "", "");
}
touch_start(integer total_number) { llDialog( llDetectedKey(0), "\nChoisissez une option :\n",
ordonne_boutons(["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
Utiliser un canal négatif est une bonne idée (mais ne jamais utiliser un canal inférieur à la valeur sur 32 bits la plus petite, -2 147 483 648) <lsl>// Crée un canal au hasard dans l'intervalle [-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