Mes objets scriptés parlants s'entendent de trop loin...

Répondre
Partager Rechercher
Bonjour a tous

J'ai créé un objet parlant qui agit sur d'autres objets situés autour de lui... Je voudrai qu'il agisse uniquement sur les autres objets qui lui sont proches (1 mètre maxi) ... est-ce possible ? Car pour l'instant, il agit dans un rayon de 20 m autour de lui ...

j'utilise un script de base :

default
{
state_entry()
{
llSay(0, "Hello, Avatar!");
}

touch_start(integer total_number)
{
llSay(0, "Change color");
}
}

Merci par avance
merci pour vos réponses...
J'ai bien essayé vos 2 solutions et vous en remercie ... toutes les 2 résolvent une partie de mon problème, mais.... En réalité, comme vous l'aurez compris, le script parlant annonce une couleur>>>et des objets réagissant à la parole (grâce a un autre script) changent automatiquement de couleur.... le problème, c'est que tous mes objets qui ont cette propriété changent en même temps de couleur .... si je met le script parlant directement dans mon objet, en plus de mon script changement de couleur, ce script peut il n'agir que sur l'objet en question et sur chacune de ses copies ? peut etre en lui disant de ne parler qu'aux prims linkés qui composent l'objet ???

Merci beaucoup par avance a tous
Euh.. si tout ça est dans un même objet linké, alors tu devrais utiliser llLinkedMessage plutot que llSay.

Sinon, utilises des canaux différents ou des messages différents pour tes objets. Ou alors sur les objets récepteurs, configure le llListen pour qu'il ne reçoit que les messages en provenance d'un objet nommé ou d'une clé.
Salut a tous et merci Nibb pour ton idée de llLinkedMessage, je suis sur que c'est la véritable solution a mon problème !

Par contre.... malgré mes recherches pour l'utiliser (llLinkedMessage), je bloque...
Comment pourrais-je modifier mes scripts pour qu'ils deviennent des linkmessages ???

J'utilise un script émetteur de ce type :

default
{
touch_start(integer total_number)
{
llSay(0,"purple");
state a;
}
}
state a
{
touch_start(integer total_number)
{
llSay(0,"yellow");
state default;
}
}

et comme receveur :

default
{
state_entry()
{
llListen(0,"",NULL_KEY,"");
}
listen(integer channel, string name, key id, string message)
{
if( message=="purple" )
{
llSetColor(<1,1,1>, ALL_SIDES);
}
if( message=="yellow" )
{
llSetColor(<1,0,1>, ALL_SIDES);
}
}
}

Si vous avez une idée...merci par avance, car je m'y perd un peu...
Tout est dans le wiki mais pour ton exemple, ça devrait donner ça: (j'ai pas testé).

Emetteur:
Code:
default
{
   touch_start(integer total_number)
   {
      llMessageLinked(LINKED_SET, 0, "purple", NULL_KEY);
      state a;
   }
}


state a
{
   touch_start(integer total_number)
   {
      llMessageLinked(LINKED_SET, 0, "yellow", NULL_KEY);
      state default;
   }
}
Recepteur:
Code:
default
{
   link_message(integer sender_num, integer num, string message, key id)
   {
      if( message=="purple" ) llSetColor(<1,1,1>, ALL_SIDES);
      if( message=="yellow" ) llSetColor(<1,0,1>, ALL_SIDES);
   }
}
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés