Difference between revisions of "LlMessageLinked/fr"

From Second Life Wiki
Jump to navigation Jump to search
m (proofread)
m (Typos)
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Multi-lang}}{{LSL Function/link/fr}}{{LSL_Function/fr
{{LSL Function/link/fr}}{{LSL_Function/fr
|func_id=164|func_sleep=0.0|func_energy=10.0
|func_id=164|func_sleep=0.0|func_energy=10.0
|func=llMessageLinked|sort=MessageLinked
|func=llMessageLinked|sort=MessageLinked
Line 7: Line 7:
|p4_type=key|p4_name=id
|p4_type=key|p4_name=id
|func_desc=Déclenche un évènement [[link_message/fr|link_message]] avec les paramètres '''num''', '''str''' et '''id''' dans le groupe ou le lien '''linknum'''.
|func_desc=Déclenche un évènement [[link_message/fr|link_message]] avec les paramètres '''num''', '''str''' et '''id''' dans le groupe ou le lien '''linknum'''.
|func_footer=Vous pouvez utiliser '''id''' comme une seconde zone de type string (dans le LSL la zone de type [[key/fr|key]] est implémentée comme un [[string/fr|string]] avec un formatage spécial). Le type n'a aucun effet sur les données stockées dans le string et le key.
|func_footer=Vous pouvez utiliser '''id''' comme une seconde zone de type string{{Footnote|en LSL, la zone de type [[key/fr|key]] est implémentée comme un [[string/fr|string]] (mais avec différents opérateurs et différentes restrictions). Les conversions de type n'ont aucun effet sur les données stockées dans la chaîne et la clé.}}. Les tailles de '''str''' et de '''id''' ne sont limitées que par la quantité de mémoire disponible pour le script.
|constants
|constants
|func_footnote
|func_footnote
|return_text
|return_text
|spec
|spec
|caveats=*Un script peut entendre son propre "message lié" si '''linknum''' est positionné à '''LINK_SET''' ou '''LINK_THIS'''. Cette option crée des risques de boucles infinies. Faites attention à la façon dont vos messages sont traités.
|caveats=*Un script peut entendre son propre "message lié" si '''linknum''' désigne la prim contenant le script {{Footnote|Il y a quatre façons pour un script de faire référence à lui-même : avec un [[llGetLinkNumber/fr|numéro de prim]] précis, avec [[LINK_THIS/fr|LINK_THIS]], avec [[LINK_SET/fr|LINK_SET]] et avec [[LINK_ALL_CHILDREN/fr|LINK_ALL_CHILDREN]] (si la prim est une prim fille).}}. Cette possibilité crée des risques de boucles infinies. Faites attention à la façon dont vos messages sont traités et transmis.
* Certains utilisateurs ont observé des échecs dans l'envoi simultané de messages liés à un grand nombre de scripts dans des prims différentes en utilisant '''LINK_SET''', '''LINK_ALL_OTHERS''' & '''LINK_ALL_CHILDREN''' (cad sans rendre toutes les prims destinatrices). Si vous rencontrez ce problèmes, une astuce consiste à placer les scripts dans la même prim et à utiliser des fonctions telles [[llSetLinkPrimitiveParams/fr|llSetLinkPrimitiveParams]] pour modifier une prim sans qu'elle ne contienne le script et à utiliser un simple message lié.
* Les messages envoyés via llMessageLinked à un script qui [[llSleep/fr|dort]], qui est [[LSL Delay/fr|delayé]] ou qui [[lag/fr|laggue]] sont mis en file d'attente jusqu'à la fin du délai. La file d'attente d'évènements peut contenir 64 évènements.
** Si un évènement est reçu alors que la file d'attente est pleine, ce nouvel évènement est jeté sans que l'on en soit averti.
** Évitez d'envoyer simultanément des messages liés à un grand nombre de scripts, car cela peut causer des "pointes de lag". Cela apparaît la plupart du temps quand on utilise les drapeaux multiprims LINK_*, et cela peut ralentir ou arrêter l'exécution d'un script.
** Évitez d'envoyer des messages liés à une cible plus vite qu'elle ne peut les traiter. Si vous faites cela, vous risquez de remplir la file d'attente des évènements et que les messages suivants ne soient perdus sans que vous n'en soyez averti.
* Quand l'[[state/fr|état]] d'un script change, tous les évènements en attente sont perdus, y compris les messages liés mis en file d'attente.
* Si '''link_num''' est un numéro de lien invalide, la fonction échoue en silence.
* Si '''str''' et '''id''' épuisent la mémoire disponible du script qui intercepte l'évènement link_message résultant, ce script plantera avec une erreur de  [[LSL_Errors/fr#Script_run-time_error:_Stack-Heap_Collision_.28collision_entre_tas_et_pile.29]].
|examples=<lsl>default{ // Suppositions : // nom de l'objet : LSLWiki // nom du script : _lslwiki
|examples=<lsl>default{ // Suppositions : // nom de l'objet : LSLWiki // nom du script : _lslwiki
     state_entry() {
     state_entry() {
Line 37: Line 43:
     state_entry() {     
     state_entry() {     
         list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()];   
         list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()];   
         string list_parameter = llDumpList2String(my_list, "|"); // converti un list en un string
         string list_parameter = llDumpList2String(my_list, "|"); // convertit un list en un string
         llMessageLinked(LINK_THIS, 0, list_parameter, "")
         llMessageLinked(LINK_THIS, 0, list_parameter, "")
     }
     }
Line 46: Line 52:
}</lsl>
}</lsl>
|also_header
|also_header
|also_events={{LSL DefineRow||[[link_message/fr|link_message]]|Evènement déclenché lorsqu'un message lié est reçu.}}
|also_events={{LSL DefineRow||[[link_message/fr|link_message]]|Évènement déclenché lorsqu'un message lié est reçu.}}
|also_functions
|also_functions
|also_articles
|also_articles
|also_footer
|also_footer
|notes=*Utilisez [[llMessageLinked/fr|llMessageLinked ]] dans une simple prim permet aux développeurs de réduire certaines limites du LSL en permettant à des scripts de coopérer et de réaliser des actions syncronisées. Faites attention à ne pas créer de boucles infinies.
|notes=*Utiliser [[llMessageLinked/fr|llMessageLinked ]] dans une même prim permet aux développeurs de réduire certaines limites du LSL en répartissant les fonctionnalités entre des scripts qui coopèrent et se actions synchronisent. Quand vous employez ces techniques, faites extrêmement attention à ne pas créer de boucles infinies comme mentionné auparavant.
*Les tailles de str et de id sont à priori seulement limitées par la mémoire disponible.
*Si vous constatez des problèmes en envoyant un même message à un grand nombre de prims avec LINK_SET, LINK_ALL_OTHERS et LINK_ALL_CHILDREN, vous pouvez contourner le problème en plaçant tous les scripts des prims filles dans une seule prim et en utilisant des fonctions spécialisées comme [[llSetLinkPrimitiveParams]] pour modifier la prim dans laquelle le script résidait auparavant. -- [[User:Void Singer|Void Singer]]
 
====Notes de bas de page====
{{Footnotes}}
 
|cat1=Communications/fr
|cat1=Communications/fr
|cat2=Link/fr
|cat2=Link/fr

Latest revision as of 04:24, 11 October 2008

Description

Fonction: llMessageLinked( integer linknum, integer num, string str, key id );

Déclenche un évènement link_message avec les paramètres num, str et id dans le groupe ou le lien linknum.

• integer linknum N° de lien ou un code LINK_*
• integer num
• string str
• key id

Vous pouvez utiliser id comme une seconde zone de type string[1]. Les tailles de str et de id ne sont limitées que par la quantité de mémoire disponible pour le script.

Codes Descriptions
LINK_ROOT 1 Envoie à la la prim racine.
LINK_SET -1 Envoie à toutes les prims.
LINK_ALL_OTHERS -2 Envoie à toutes les autres prims
Codes Description
LINK_ALL_CHILDREN -3 Envoie à toutes les prims filles
LINK_THIS -4 Envoie à la prim contenant ce script.

Avertissements

  • Un script peut entendre son propre "message lié" si linknum désigne la prim contenant le script [2]. Cette possibilité crée des risques de boucles infinies. Faites attention à la façon dont vos messages sont traités et transmis.
  • Les messages envoyés via llMessageLinked à un script qui dort, qui est delayé ou qui laggue sont mis en file d'attente jusqu'à la fin du délai. La file d'attente d'évènements peut contenir 64 évènements.
    • Si un évènement est reçu alors que la file d'attente est pleine, ce nouvel évènement est jeté sans que l'on en soit averti.
    • Évitez d'envoyer simultanément des messages liés à un grand nombre de scripts, car cela peut causer des "pointes de lag". Cela apparaît la plupart du temps quand on utilise les drapeaux multiprims LINK_*, et cela peut ralentir ou arrêter l'exécution d'un script.
    • Évitez d'envoyer des messages liés à une cible plus vite qu'elle ne peut les traiter. Si vous faites cela, vous risquez de remplir la file d'attente des évènements et que les messages suivants ne soient perdus sans que vous n'en soyez averti.
  • Quand l'état d'un script change, tous les évènements en attente sont perdus, y compris les messages liés mis en file d'attente.
  • Si link_num est un numéro de lien invalide, la fonction échoue en silence.
  • Si str et id épuisent la mémoire disponible du script qui intercepte l'évènement link_message résultant, ce script plantera avec une erreur de LSL_Errors/fr#Script_run-time_error:_Stack-Heap_Collision_.28collision_entre_tas_et_pile.29.

Exemples

<lsl>default{ // Suppositions : // nom de l'objet : LSLWiki // nom du script : _lslwiki

   state_entry() {
       llMessageLinked(LINK_THIS, 0, llGetScriptName(), "");
   }
   link_message(integer sender_num, integer num, string msg, key id) {
       llOwnerSay(msg);
       // Le propriétaire de l'objet LSLWiki entendra :
       // LSLWiki:_lslwiki
   }    

}</lsl>

Codes utiles

<lsl>default { // une façon rapide de débuguer link_message

   link_message(integer sender_num, integer num, string msg, key id) {
       llSay(DEBUG_CHANNEL, llList2CSV([sender_num, num, msg, id]));
   }

}</lsl> <lsl>// Il s'agit ici juste d'un exemple, vous ne devriez pas utiliser les messages liés (link message) de cette façon.

default{ // comment communiquer un nombre illimité de paramètres. // On suppose que le caractère de séparation des strings n'est utilisé dans aucun string de la source.

   state_entry() {    
       list my_list = [1, 2.0, "a string", <1, 2, 3>, <1, 2, 3, 4>, llGetOwner()];  
       string list_parameter = llDumpList2String(my_list, "

Notes

  • Utiliser llMessageLinked dans une même prim permet aux développeurs de réduire certaines limites du LSL en répartissant les fonctionnalités entre des scripts qui coopèrent et se actions synchronisent. Quand vous employez ces techniques, faites extrêmement attention à ne pas créer de boucles infinies comme mentionné auparavant.
  • Si vous constatez des problèmes en envoyant un même message à un grand nombre de prims avec LINK_SET, LINK_ALL_OTHERS et LINK_ALL_CHILDREN, vous pouvez contourner le problème en plaçant tous les scripts des prims filles dans une seule prim et en utilisant des fonctions spécialisées comme llSetLinkPrimitiveParams pour modifier la prim dans laquelle le script résidait auparavant. -- Void Singer

Notes de bas de page

  1. ^ en LSL, la zone de type key est implémentée comme un string (mais avec différents opérateurs et différentes restrictions). Les conversions de type n'ont aucun effet sur les données stockées dans la chaîne et la clé.
  2. ^ Il y a quatre façons pour un script de faire référence à lui-même : avec un numéro de prim précis, avec LINK_THIS, avec LINK_SET et avec LINK_ALL_CHILDREN (si la prim est une prim fille).

Voir également

Évènement

•  link_message Évènement déclenché lorsqu'un message lié est reçu.

Fonctions

•  llGetLinkNumber Renvoie le N° de lien de la prim le contenant.
Vous cherchez encore des informations ? Peut-être cette page du LSLwiki pourra vous renseigner.