LlDialog/fr

From Second Life Wiki
Jump to navigation Jump to search

Description

Fonction: llDialog( key avatar, string message, list boutons, integer canal );

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).

Ordre des boutons
9   10 11
6 7 8  
3 4 5
0 1 2
Numéros de canal constants Descriptions
DEBUG_CHANNEL 0x7FFFFFFF Canal réservé au débogage et aux messages d'alertes des scripts.
PUBLIC_CHANNEL 0x0 Canal réservé pour parler à tous les avatars alentours.

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

Vous cherchez encore des informations ? Peut-être cette page du LSLwiki pourra vous renseigner.