Difference between revisions of "LlDialog/fr"

From Second Life Wiki
Jump to navigation Jump to search
m (proofread)
(en fait la limite de 20m est a partir du prim generateur de la boite et non de l'avatar ==> reprise et clarification)
 
(3 intermediate revisions by 2 users not shown)
Line 5: Line 5:
|p4_type=integer|p4_name=canal|p4_desc
|p4_type=integer|p4_name=canal|p4_desc
|func_desc=Fait apparaître une boîte de dialogue sur l'écran de l''''avatar''' avec le '''message''' et les '''boutons''' indiqués.
|func_desc=Fait apparaître une boîte de dialogue sur l'écran de l''''avatar''' avec le '''message''' et les '''boutons''' indiqués.
|func_footnote=Quand un bouton est pressé l''''avatar''' "crie" le texte correspondant au bouton sur le '''canal'''.<br/>La localisation géographique du message est celle de la prim au moment ou elle a créé le boîte de dialogue.
|func_footnote=Quand on appuie sur un bouton, l''''avatar''' "dit" le texte correspondant au bouton sur le '''canal'''.<br/>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).
|spec
|spec
|caveats=
|caveats=
*Il n'existe aucun moyen de fermer une boîte de dialogue par script.
*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 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 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.
**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.
*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 (par exemple  si le porteur se déplace trop loin de l'endroit ou la boîte de dialogue a été créée)
**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===
===Limites des messages===
*Si le message contient plus de 8 lignes, une barre de défilement est créée.
*Si le message contient plus de 8 lignes, une barre de défilement apparaît.
*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/fr|DEBUG_CHANNEL]].
*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/fr|DEBUG_CHANNEL]].


===Limites des boutons===
===Limites des boutons===
*Si la liste des '''boutons''' est une liste vide, la liste ["OK"] sera utilisée par défaut
*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/fr|DEBUG_CHANNEL]] si :
*Une erreur sera signalée sur le [[DEBUG_CHANNEL/fr|DEBUG_CHANNEL]] si :
**Il y a plus de 12 boutons.
**Il y a plus de 12 boutons.
**Un objet d'une liste n'est pas un string.
**Un objet de la liste n'est pas une chaîne.
**Un objet d'une liste est de taille nulle ou supérieure à 24 bytes.
**Une chaîne de la liste est de taille nulle ou supérieure à 24 octets.
|examples=<lsl>integer canal= 1000;
|examples=<lsl>integer canal= 1000;
list pairs = [];


default
default
Line 32: Line 31:
     state_entry()
     state_entry()
     {
     {
         llListen(canal,"", "","");
         llListen(canal, "", "", "");
     }
     }


     touch_start(integer count)
     touch_start(integer decompte)
     {
     {
         llDialog(llDetectedKey(0), "Voici une  boîte de dialogue de test.\n\nChoisisez une des options ci-dessous.",
         llDialog(
                ["Oui", "Non", "0", "1"], canal);
              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)
     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.
         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);
             llSay(0, nom + " ( position : " + (string) llGetObjectDetails(id, (list) OBJECT_POS) + ") a choisi l'option " + mes);
     }
     }
}</lsl>
}</lsl>
Line 50: Line 52:
integer canal;
integer canal;


list order_buttons(list boutons)
list ordonne_boutons(list boutons)
{
{
     return llList2List(boutons, -3, -1) + llList2List(boutons, -6, -4)
     return llList2List(boutons, -3, -1) + llList2List(boutons, -6, -4)
Line 59: Line 61:
{
{
     state_entry()
     state_entry()
     {  // Crée un canal au hazard dans le périmètre [-1000000000,-2000000000]
     {  // Crée un canal au hasard dans l'intervalle [-1000000000,-2000000000]
canal= (integer)(llFrand(-1000000000.0) - 1000000000.0);
canal= (integer) (llFrand(-1000000000.0) - 1000000000.0);


llListen(canal,"", "","");
llListen(canal, "", "", "");
     }
     }
 
     touch_start(integer total_number)
     touch_start(integer total_number)
     {
     {
         llDialog(llDetectedKey(0),"\nChoisissez une option :\n",
         llDialog(
    order_buttons(["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"]),canal);
            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)
     listen(integer _chan, string _nom, key _id, string _option)
     {
     {
Line 105: Line 110:
|helpers|related|notes
|helpers|related|notes
|notes=
|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)
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 le périmètre [-1000000000,-2000000000]
<lsl>// Crée un canal au hasard dans l'intervalle [-1000000000, -2000000000]
integer Canal = (integer)(llFrand(-1000000000.0) - 1000000000.0);
integer Canal = (integer) (llFrand(-1000000000.0) - 1000000000.0);


llDialog(llDetectedKey(0), "Choisissez une option :",
llDialog(llDetectedKey(0), "Choisissez une option :",

Latest revision as of 00:11, 4 May 2012

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.