Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Probleme avec mon script !

Par SidSilver le 3/11/2002 à 22:22:59 (#2473266)

Je veux créer un script qui fait prier des moines face à une statue.
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)

Peut-être faut-il que tu leur laisse le temps de se tourner vers la statue avant d'appeler ActionPlayAnimation? C'est du pifomètre.

Par eMRaistlin le 4/11/2002 à 14:53:19 (#2477399)

Ouaippp... essaye avec un delayCommand...

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)

Pour la direction, SetFacing fait bien ce que tu suggère eMRaistlin, mais SetFacingPoint doit avoir l'effet désiré...

Par Morethil le 4/11/2002 à 15:53:03 (#2477898)

SetFacing oriente le sujet dans une direction determiné par le sujet et un point cardinal (noté en degré avec pour centre la sujet).

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)

Nanan, c'est tres correct, et c'est plutot la place d'un script OnSpawn... mais je suppose que ce code est en fait une partie d'un OnHeartBeat qui enchaine des evenement ? Non ?

Par SidSilver le 4/11/2002 à 16:21:39 (#2478139)

J'ai mis ce code dans le onHeartBeat pour que les moines prient de facon permanente (le playAnimation étant limité dans le temps).
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)

J'ai trouvé la solution !
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)

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.

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