[Resolu] Script générique : un NPC se rend a un waypoint via un dialogue

Répondre
Partager Rechercher
Bonjour

J'ai bien compris l'utilité des variables et je tente de faire un script pour qu'un NPC se rende a un Waypoint via un dialogue (script que je place dans Action sur la ligne ou je veux faire déplacer mon NPC), mais il bouge pas du tout. J'ai bien nommé le TAG du NPC et du Waypoint pourtant. Voici mon script :

Code PHP:

void main(string wWP,string nTag)
{
  
location lWP GetLocation(GetWaypointByTag(wWP));
  
object oCreature GetObjectByTag(nTag);

    
AssignCommand(oCreatureClearAllActions());

    
AssignCommand(oCreatureActionMoveToLocation(lWP,TRUE));

wWP c'est le tag du Waypoint
nTag c'est le tag du NPC

Je comprend pas du tout où se trouve mon erreur
Le Waypoint est sur la meme zone que le PNJ. C'est un dialogue qui est lancé dans le OnEnter de la Zone et qui fait discuter deux créatures entre-elle (le PJ n'interviens en aucune manière).

J'ai déja tenté le ActionForceMoveToObject, aucun resultat, le PNJ bouge pas d'un pouce. Meme essayer le ActionMoveToLocation, aucun resultat.
plusieurs idées :

- Vérifie bien que le Waypoint se troue dans une zone accessible par le PNJ (dans le cas contraire, le PNJ ne ferait rien)
- Si c'est le cas, mets ce script dans l'action de la dernière parole du NPC en cause (dont tu as spécifié le tag) et change l'appelant par

Code PHP:

object oCreature OBJECT_SELF
ou

Code PHP:

object oCreature GetLastSpeaker(); 



après si cela ne marche pas, je donne ma langue au premier chat transgénique qui passe
__________________
http://img91.imageshack.us/img91/9666/yingyangwm8jt3.gif
http://simaon.free.fr/
Normalement, c'est "OBJECT_SELF" qui permet de retrouver le principal PNJ impliqué dans un dialogue.

Tente ça, à tout hasard :
Code PHP:

void main(string wWP)
{
    
object oSelf OBJECT_SELF;
    
object oWaypoint GetWaypointByTag(wWP);

    
AssignCommand(oSelf,ClearAllActions());
    
AssignCommand(oSelf,ActionPauseConversation());
    
AssignCommand(oSelf,ActionMoveToObject(oWaypoint,FALSE,0.0));

    
// Ca c'est un truc tape-à-l'oeil pour voir
    // si le PNJ rajoute bien des trucs dans
    // la file d'attente des actions.
    
effect eVis EffectVisualEffect(VFX_DUR_ELEMENTAL_SHIELD);
    
AssignCommand(oSelf,ActionDoCommand(ApplyEffectToObject(DURATION_TYPE_TEMPORARY,eVis,oSelf,6.0)));

    
AssignCommand(oSelf,ActionResumeConversation());

Peut être que le script n'arrive pas non plus à trouver à quoi correspond "wWP". Dans ce cas, autant coller le point de passage en variable directement sur le PNJ, et l'appeler dans le script :
Code PHP:

object oSelf OBBJECT_SELF;
string sTag GetLocalString(oSelf,"Waypoint");
object oWaypoint GetWaypointByTag(sTag); 
Merci pour vos aides

Je suis repartie d'une fonction simple en utilisant deux scripts pour comparer et je crois que le probleme venait de la gestion de collision sur la carte, j'ai donc fais un module de test avec une carte vierge.

Le premier script visait que le NPC (tag : npc_lord) se rende au Waypoint (tag : WP_MOVE) en mode sprint :

Code PHP:

void main()
{
 
object oCreature GetObjectByTag("npc_lord");
 
location wMove GetLocation (GetWaypointByTag ("WP_MOVE"));
 
 
AssignCommand(oCreatureClearAllActions()); 
 
AssignCommand(oCreature,ActionMoveToLocation(wMove,TRUE));

Le second est generique. On le place sur une ligne de dialogue ou on veut faire deplacer le NPC dans Action, puis rafraichir et on nomme le Tag du NPC et du Waypoint de destination :

Code PHP:

void main(string oTagstring wLocation)
{
 
object oCreature GetObjectByTag(oTag);
 
location wMove GetLocation (GetWaypointByTag (wLocation));
 
 
AssignCommand(oCreatureClearAllActions()); 
 
AssignCommand(oCreature,ActionMoveToLocation(wMove,TRUE));

- oTag = npc_lord
- wLocation = WP_MOVE

Ca fonctionne bien
Répondre

Connectés sur ce fil

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