nicol74210 Posted December 22, 2009 Bonjour tout le monde, ( j'espère que j'ai placé le sujet dans le bon topic )voila je suis en train de développer un mod pour Morrowind intitulé "Le peuple des elfes réfugiés" ( oui je manque d'inspiration ) et j'ai un problème pour un script qui fait : - qu'à un certain moment les gardes de Seyda Nihyn nous poursuivent en courrant, - s'arrêtent devant nous - et nous parlent ( commande : ForceGreeting ) - dès qu'ils ont fini de nous parler, ils repartent Voila mon script : ( ce script est rattaché aux gardes ) Begin _ESM_garde_seyda_nihyn Short done If ( player->GetJournalIndex "_ESM_quete" == 20 ) AIFollow, player, 0 0 0 0 0 0 0 0 0 ForceRun If ( GetDistance, Player < 100 ) If ( done == 0 ) ForceGreeting ClearForceRun AIWander 2000 24 0 60 20 20 20 0 0 0 20 0 set done to 1 Endif Endif Else Return Endif End Les gardes ne font que se tourner vers mon perso quand il est pret, et à la fin du dialogue ils suivent mon perso. Est-ce que quelqu'un pourrait m'aider parce-que j'y passe une semaine à régler ce problème, ça m'arrangerait . Share this post Link to post Share on other sites
darketheal Posted December 22, 2009 Bon je ne connais pas grand chose aux script de morrowind mais avec un peu de logique je remarque : - tu as un esle avec rien après donc soit il manque un bout de script soit tu ne le met pas (si on se base sur le C ça ne sert à rien et/ou ça peut générer des erreurs) - ton script à un return qui ne retourne rien...(en C c'est une procédure mais dans ton cas c'est plutôt une fonction donc ça devrait retourner quelque chose) Maintenant j'émet une hypothèse : peut être n'est-ce pas AIFollow qu'il faut mettre mais autre chose, encore une fois je n'y connais rien... Sur ce je te souhaite de trouver la solution rapidement et facilement ^^ Share this post Link to post Share on other sites
nicol74210 Posted December 22, 2009 D'accord merci, t'avait raison j'ai mis un Else avec Return à la fin, donc ça ne sert à rien . Mais je pense qu'il faut ajouter une commande genre "If ( GetAIPackageDone == 1 )" ou un truc comme ça... Je rééssaye et je dis si ça marche . EDIT : Ca ne marche pas quand même. Faut que je trouve un autre moyen. . Il y a AIWander, AIEscort, AITravel et AIFollow. Je pense que je devrait utiliser AITravel ( c'est le seul que je connaisse pas ). EDIT2 : C'est pas la peine, ça ne marche pas quand même. Share this post Link to post Share on other sites
Confridín Posted December 22, 2009 Essaie avec un script global (donc non attaché à un personnage mais à un activateur situé dans la cell) Begin _ESM_garde_seyda_nihyn Short done If ( done == 0 ) If ( player->GetJournalIndex "_ESM_quete" == 20 ) "IDGARDE"->AIFollow, player, 0 0 0 0 0 0 0 0 0 "IDGARDE"->ForceRun (refaire avec chacun des gardes) Set done to 1 endif elseif ( done == 1 ) If ( "IDGARDE"->GetDistance, Player < 100 ) ForceGreeting "IDGARDE"->ClearForceRun "IDGARDE"->AIWander 2000 24 0 60 20 20 20 0 0 0 20 0 set done to 2 endif Endif End Share this post Link to post Share on other sites
nicol74210 Posted December 23, 2009 D'accord je vais tester ce matin. Merci pour le conseil . EDIT : J'ai attaché le script à un coprin violet ( UNIQUE ) mais les gardes ne font rien, même si je n'attache pas le script à quelque chose. Il faut que ça soit moi qui enclenche le dialogue pour qu'ils me parlent. . Faut que j'y arrive c'est un truc qui est essentiel pour mon mod. Share this post Link to post Share on other sites
Katan-Amn Posted December 23, 2009 A mon avis, se sont les commandes "AIFollow, player, 0 0 0 0 0 0 0 0 0" et "ForceRun" qui ne se lance pas. Mets un messagebox juste à la suite, pour voir si il te l'affiche quand ton journal est a 20. Messagebox "Lancement du AIfollow" Si le message s'affiche, c'est qu'il y a un soucis avec la ligne AIFollow... Share this post Link to post Share on other sites
Confridín Posted December 23, 2009 Chaque garde a bien un ID différent ? Share this post Link to post Share on other sites
nicol74210 Posted December 24, 2009 Confridin >> Non c'est tous "Imperial Guard". Katan >> OK je vais tester merci. EDIT : Lorsque mon journal est à 20, le message s'affiche une infinité de fois, les gardes ne font que se tourner vers moi et quand je suis à moins de 100 unités d'un des gardes, ils me parlent mais avec plein de MessageBox après. En fait, je pense ( incroyable ! ) que le problème c'est que les gardes me poursuivent tant que je suis à plus de 100 unités d'eux, et quand je suis à moins de 100 unités d'eux, ils me parlent, le "done" devient 1 et donc ils arrêtent de me poursuivre. Mais le hic c'est que mon journal est toujours à 20 et aussi à 40 donc les gardes continuent de me poursuivre. C'est donc : une commande pour poursuivre, une pour arrêter et après une infinité pour me re-poursuivre qui sont enclenchées ! Alors je vais tester un nouveau script . Le voici : Begin _ESM_garde_seyda_nihyn If ( player->GetJournalIndex "_ESM_quete" =! 20 ) Return Endif If ( player->GetJournalIndex "_ESM_quete" > 20 ) Return Endif AIFollow, player, 0 0 0 0 0 0 0 0 0 ForceRun If ( GetDistance, Player > 500 ) Return Endif ForceGreeting ClearForceRun AIWander 2000 24 0 60 20 20 20 0 0 0 20 0 End Parce-que le Journal est mis à jour à 40 quand les gardes nous parlent, à 30 c'est quand on a annulé la quête. Share this post Link to post Share on other sites
Confridín Posted December 24, 2009 Ca ne marchera pas. Pour qu'un script d'action fonctionne, il faut que l'identifiant soit unique. Il faut donc que chaque garde possède une ID différente, et que chaque ID ne soit présent qu'une fois dans tout le jeu. Ensuite, utilise mon script et ca devrait fonctionner. Mais il y a peut-être plus simple. Il suffirait d'ajouter par script une amende au joueur. Les gardes vont ainsi se précipiter dessus naturellement, et il suffira de créer un dialogue spécifique avec comme condition "être garde", "être dans seyda" et avoir l'entrée journal à 20. Share this post Link to post Share on other sites
nicol74210 Posted December 24, 2009 Ouais merci pour l'info mais j'ai déjà essayé il y a 5 jours. J'ai déjà testé ton script mais sans l'identifiant unique. Je vais essayer de créer un garde et faire le script en global comme tu me l'a dit. Faut que je me replonge dans "le scripting pour les abru novices". EDIT : Merci pour l'astuce ça a marché, mon script ( enfin ... le tien ) est impec'. EDIT2 : J'espère que je vais pas trop vous ralentir, à force de demander des question. ^^ Share this post Link to post Share on other sites
Katan-Amn Posted December 30, 2009 Je pige pas comment ça se fait que le script ne marchait pas, étant rattaché au garde.... Share this post Link to post Share on other sites
nicol74210 Posted December 30, 2009 Parce-que le script se rattachait à des gardes qui ont tous le même ID. Mais quand je disais que les gardes se tournent vers moi c'est normal : ils se tourneraient même sans le script ( j'suis vraiment con bête moi quand je veux ) . Pour l'instant mon mod avance bien, j'ai pû continuer grâce à votre aide. Share this post Link to post Share on other sites
Katan-Amn Posted December 30, 2009 Normalement, si tu ne cible pas une fonction, tu peux la laisser telle quelle dans le script, elle agira sur l'objet au quel il est assigné. Share this post Link to post Share on other sites
nicol74210 Posted December 31, 2009 Ouais ben c'est ça que je trouve anormal, mais ça devait être le fait que le même script soit utilisé plusieurs fois pour des personnages qui ont un ID identique. Fallait faire un garde à l'ID unique. Share this post Link to post Share on other sites