Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Probleme avec mon script !
Probleme avec mon script !
Par SidSilver le 3/11/2002 à 22:22:59 (#2473266)
Le script ne marche pas...
Les moines prient mais pas face à la statue !
Ou est le problème ??? :confus:
//Script placé dans heartbeat de chaque moine :
void main()
{
object oStatue = GetObjectByTag("StatueStone");
vector vStatue = GetPosition(oStatue);
SetFacingPoint(vStatue);
ActionPlayAnimation(3,1.0,10.0);
}
Merci pour votre aide :aide:
Par LeProctophantasmiste le 4/11/2002 à 14:20:55 (#2477130)
Par eMRaistlin le 4/11/2002 à 14:53:19 (#2477399)
Si ca ne marche pas, la question suivantes est : est-ce que tout les moines regardent la meme direction, et si oui, alors est-ce que la direction est la meme que celle de la statue ?? (pasque quand je lis la description de SetFacing, je trouve ca pas tres clair... mais apres, tout depends comment il gêre ^^)
Par LeProctophantasmiste le 4/11/2002 à 15:22:51 (#2477619)
Par Morethil le 4/11/2002 à 15:53:03 (#2477898)
Plus simplement : Une valeur n va determiner la direction du sujet. Cette valeur n représente un degré sur un cercle invisible autour du sujet. Le cercle est tracé de manière anti-horraire.
Est = 0.0
Nord = 90.0
West = 180.0
Sud = 270.0
et Est(-1) = 359.0
on peux bien sur orienter une créature vers le degré 83.0, 212.0 (ou n'importe quel entier entre 0.0 et 359.0). pour orienter le sujet vers le Nord-Ouest on notera par exemple Set Facing (135.0f)
Par defaut le SetFacing est 0.0 (l'Est)
Je n'ai pas essayé la fontion SetFacingObject, mais je pense que cela trace un vecteur entre le sujet et l'objet, et que le sujet va faire face a l'objet.
Pour cette histoire de moines qui prient, effectivement, je pense que le SetFacingObject est la bonne option, mais j'ai du mal a comprendre pourquoi tu le met dans le HeartB.
Comme dit Proto, donne a tes moines 2 ou 3s pour se retourner avant de prier. Cela dit sur 6s ça fait pas beaucoup de marge pour qu'ils prient apres.
PS : Je suis un peu crevé, si je dit des conneries ne m'en veuillez pas :p
Par eMRaistlin le 4/11/2002 à 16:02:42 (#2477995)
Par SidSilver le 4/11/2002 à 16:21:39 (#2478139)
J'ai essayé de le mettre dans le onSpawn comme vous me l'avez suggéré en ajoutant un delaycommand au play animation mais dans ce cas le moine ne prie pas du tout...
En fait, dans mon script d'origine, tout les moines prient en direction du Nord... je comprends pas.
De plus, le setfacingobject renvoi l'angle dans lequel se trouve l'object, le perso se met donc dans un angle opposé pour faire face a l'objet... seulement, mes moines sont autour de la statue.
Si j'utilise le setfacingobject, les moines se retrouvent tous dans la meme direction : opposée a la direction de la statue.
Par SidSilver le 4/11/2002 à 16:35:50 (#2478252)
En fait le problème venait du fait que j'avais 2 statues avec le meme tag (pourtant dans des zones différentes)
Voici donc la solution : :D // Inséré dans onHeartBeat
void main()
{
object oStatue = GetNearestObjectByTag("StatueStone", OBJECT_SELF, 1);
vector vStatue = GetPosition(oStatue);
ActionPlayAnimation(3,1.0,10.0);
SetFacingPoint(vStatue);
}
Voilà voilà...
PS: pour les faire se prosterner a genoux mettre 4 a la place de 3 sans ActionPlayAnimation.
:maboule:
Par Jedaï le 4/11/2002 à 16:38:19 (#2478270)
C'est du moins ce qu'on m'as dit et ça paraît logique.
Donc tu peux mettre ton anim dans le OnSpawn, mais dans ce cas, je te suggère carrément de faire toutes ces actions en DelayCommand(), ça sera plus prudent. J'ai déjà essayé cette commande et ça marche très bien. N'oublie pas de réinitialiser ce prêtre à la fin de sa conversation.
Par SidSilver le 5/11/2002 à 23:45:16 (#2491466)
Provient du message de Jedaï
Alors d'abord sache que si l'on met 0.0 comme tps d'éxécution d'une animation de type boucle ("LOOP"), celle-ci s'exécutera à l'infini... enfin jusqu'à la mort du NPC :D (ou ClearAllActions()).
C'est du moins ce qu'on m'as dit et ça paraît logique.
Donc tu peux mettre ton anim dans le OnSpawn, mais dans ce cas, je te suggère carrément de faire toutes ces actions en DelayCommand(), ça sera plus prudent. J'ai déjà essayé cette commande et ça marche très bien. N'oublie pas de réinitialiser ce prêtre à la fin de sa conversation.
Désolé, j'ai testé le 0.0 dans la durée, et non seulement l'action n'est pas infinie mais en plus, elle est de tres courte durée et n'a pas le temps de se faire entierement.
JOL Archives 1.0.1
@ JOL / JeuxOnLine