Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Problème avec les constantes (animations)
Problème avec les constantes (animations)
Par alpha is 1337 le 11/2/2003 Ã 9:14:10 (#3212626)
void main()
{
DelayCommand(5.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT));
}
...dans le OnSpawn d'un PNJ, il y a bien les 5 secondes de délais, le PNJ s'effondre au sol, mais il se relève dessuite... :doute:
Et moi j'aimerai qu'il reste effondré au sol... Comment faire? :aide:
Merci :maboule:
AlphA da keech
Par eMRaistlin le 11/2/2003 Ã 9:48:09 (#3212754)
void main()
{
DelayCommand(5.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,100.0));
}
Avec 1.0 = vitesse normale (ne pas modifier)
et 100.0 = Duree en seconde
Par AlphA da keech le 11/2/2003 Ã 9:57:11 (#3212798)
Mais là il va rester allongé 100sec, mais après il va se lever... lol! Moi je voudrai qu'il reste tout le temps allongé... peut-être en mettant 0.0 ? lol Je sais je suis chi*nt mais bon... :)
Et puis quand on lui parle il se lève ce c*n...
Je voudrais qu'on puisse lui parler avant qu'il s'écroule, et que après, on puisse plus... Ca doit être une histoire avec des "if" ca... Bon j'vais essayer de le faire ce script (mon premier... lol) et si vous pourriez me corriger mes erreurs après ca serai cool (parce que, y'aura bcp d'erreur de quiche à mon avis...)
[EDIT]
Bon j'ai essayé:
Dans le OnSpawn: void main()
{
DelayCommand(5.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,100.0));
}
Et dans le OnConversation:void main()
{
// La je veux dire: si le PNJ n'est pas effondré par terre...
// Seulement je sais pas comment le dire autrement.
if(OBJECT_SELF != ANIMATION_LOOPING_DEAD_FRONT);
{
SpeakString("Salut!"); // Il dit salut.
}
else
{
// La je voudrai dire qu'il fait rien et la seule
// solution que j'ai trouvé c'est de rien mettre lol.
}
}
Et quand je veux compiler ca me dit:11/02/2003 10:18:46 : Erreur. 'ivrogne_test' n’est pas compilé.
ivrogne_test.nss(8): ERREUR : "if" CONDITION CANNOT BE FOLLOWED BY A NULL STATEMENT.
Aidez une quiche svp!
Par Zatournavus le 11/2/2003 Ã 13:08:30 (#3213924)
Toutes les instructions de type If, For, While ne prenne pas de ;
De plus, ton IF effectue un comparaison fausse :
OBJECT_SELF est un Object
ANIMATION_.... est un Int (entier)
tu n'a pas le droit de comparer des données de type différent.
Tu devrait plutot teste une fonction qui regarde si ton personnage effectue l'action que tu souhaites (cette fonction doit renvoyer un Int ou un booleen). regarde les fonctions qui commence par Get.
Pour finir, si ton ELSE est vide, pas la peine de le mettre ;)
Le ELSE est optionnel dans une instruction IF
(je suis au boulot, et donc je n'ai pas NWN sous les yeux pour aider plus)
:merci:
Par Reyan le 11/2/2003 Ã 14:02:43 (#3214357)
en fait ce qui serait possible c'est mettre un marqueur sur ton PNJ au moment où il s'effondre, que tu pourrais vérifier après :) un variable quoi ^_^
dans le onspawn tu met :void main()
{
DelayCommand(5.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,100.0));
DelayCommand(5.0, SetLocalInt(OBJECT_SELF, "EFFONDRE", 2));
}
là tu met au même moment (normalement) une variable nomme "EFFONDRE" avec la valeur 2 (je met 2, met sans doute que 1 suffit, c'est parce que je sais jamais si la valeur e base donné à une variable est 1 ou 0 ;) )
en suite dans le onconversation :void main()
{
int nAterre = GetLocalInt(OBJECT_SELF, "EFFONDRE");
//la on recupere la valeur de la variable EFFONDRE
//pour pouvoir l'utiliser plus facilement :)
if(nAterre != 2)
{
ActionSpeakString("Eh .. sa.. sa...sallu .... u ... u t!");
}
}
ca marche, mais je trouve qu'il s'effondre un peu vite, j'ai même pas le tps de lui parler ...
je te propose :
onspawn :void main()
{
SetLocalInt(OBJECT_SELF, "ETAT", 1);
}
onheartbeat:void main()
{
int nEtat = GetLocalInt(OBJECT_SELF, "ETAT");
if(nEtat==1)
//si il va bien, il boit
{
FloatingTextStringOnCreature("Ha ha ha !", OBJECT_SELF, FALSE);
ActionPlayAnimation(ANIMATION_FIREFORGET_DRINK);
SetLocalInt(OBJECT_SELF,"ETAT", 2);
}
if(nEtat ==2)
//si il va bien, mais qu'on a deja attendu un peu, il tombe
{
DelayCommand(3.0, ActionSpeakString("Oulla, ca t ... t ...tourne ..."));
SetLocalInt(OBJECT_SELF, "EFFONDRE", 2);
DelayCommand(5.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,100.0));
DelayCommand(5.0, FloatingTextStringOnCreature("Boom !",OBJECT_SELF, FALSE));
}
}
en fait ici on fait presque un compte à rebours, puisque le HB est appele toutes les 6sec
et onconversation :void main()
{
int nEtat = GetLocalInt(OBJECT_SELF, "ETAT");
//la on recupere la valeur de la variable EFFONDRE
//pour pouvoir l'utiliser plusfacilement :)
if(nEtat !=3)
{
//si il va bien et qu'on lui parle, il tombe
ActionSpeakString("Eh .. sa.. sa...sallu .... u ... u t!");
SetLocalInt(OBJECT_SELF, "ETAT", 3);
DelayCommand(2.0, ActionPlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,100.0));
}
}
oulla, ca marche pas mal, et ca rend pas trop mal non plus je trouve :merci:
maintenant, y a un truc dont je doute, c'est que si les creature spawn dans tout le module en même temps, et que c'est pas la zone de départ, alors ca sert à rien, puisque le temps que le PJ arrive , le poivrot sera étalé depuis longtemps ... si tu est dans ce cas, ba ... y une bidouille à faire avec le onperception, tu vide le onspawn, et tu met dans le onperceptionvoid main()
{
object oPerceived = GetLastPerceived();
if(GetIsPC(oPerceived))
SetLocalInt(OBJECT_SELF, "ETAT", 1);
}
mais comme je ne connais pas bien les règles de spawn des creatures ... si elle ne spawn que la première fois que tu arrive en vu d'elles, alors pas de pb, et pas besoin de la bidouille avec le onperception ;)
edit : j'avais pas vu la solution de Zatournavus, ca serait une bonne idée, mais j'ai pas trouvé de fonction qui recupere l'anmantion, y bien un GetCurrentAction, mais ca nous avance pas bcp ...
Par AlphA da keech le 12/2/2003 Ã 4:09:06 (#3219357)
JOL Archives 1.0.1
@ JOL / JeuxOnLine