Jump to content
Sign in to follow this  
nicol74210

Aide pour un script

Recommended Posts

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 :cry2: ) 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. :blink:

 

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

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

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. :help::cry2: . Il y a AIWander, AIEscort, AITravel et AIFollow. Je pense que je devrait utiliser AITravel ( c'est le seul que je connaisse pas :laugh: ).

 

EDIT2 : C'est pas la peine, ça ne marche pas quand même.

Share this post


Link to post
Share on other sites

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

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. :peur::smiley_suicidaire: .

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

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

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 ! :laugh: ) 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

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

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

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

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 )

 

:arrow: .

 

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

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

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×