Difference between revisions of "LlDialog/fr"
Gally Young (talk | contribs) 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 | |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 | *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 | *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 | **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 | *Si le message contient plus de 8 lignes, une barre de défilement apparaît. | ||
*Le '''message''' doit faire moins de 512 | *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 | *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 | **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. | ||
|examples=<lsl>integer canal= 1000; | |examples=<lsl>integer canal= 1000; | ||
default | default | ||
Line 32: | Line 31: | ||
state_entry() | state_entry() | ||
{ | { | ||
llListen(canal,"", "",""); | llListen(canal, "", "", ""); | ||
} | } | ||
touch_start(integer | touch_start(integer decompte) | ||
{ | { | ||
llDialog(llDetectedKey(0), "Voici une boîte de dialogue de test.\n\nChoisisez une des options ci-dessous.", | 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) | 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 | 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 | { // 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( | ||
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= | ||
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 | <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
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