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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comment attendre la fin d'un combat, ou stopper un combat ?

Par Amaranthe le 17/8/2002 à 13:31:32 (#1974515)

Voili voila mon probleme...

Je souhaiterai obliger un joueur a faire quelque chose.

Donc facile, je met un :


AssignCommand(oPC,ActionAFAire... ) ;


Le probleme, c'est quand cet ordre arrive et que le PC en question est considéré comme étant encore en combat...

La question donc, comment être sur que mon PC n'est plus en combat... ou plutôt comment attendre la fin de ce combat.

J'ai éssayé une petite boucle... mais je me heurte au traditionnel... too many instructions...

while (GetIsInCombat(oPC)==TRUE)
ActionWait(2.0);


Je dois sans doutes passer a coté de quelque chose...

Des idées ?

Par Kemay le 17/8/2002 à 14:06:47 (#1974676)

Cela dépend de ce que tu veux exactement:

Si tu souhaites stopper le combat, il suffit de faire un ClearAllActions() avant ton AssignCommand()

Si tu souhaites attendre la fin du combat, c'est plus compliqué =P
en fait ça dépend des créatures impliquées dans le combat. Si ce sont des créatures uniques, tu peux modifier leur onDeath script pour faire effectuer ton action au PC après la mort de la créature.

Sinon tu peux aussi passer par un ExecuteScript récursif pour éviter la boucle.

au lieu de :

while (GetIsInCombat(oPC)==TRUE)
ActionWait(2.0);


tu mets :
ExecuteScript("leScript",oPC);


avec comme script leScript.nss :
void main()
{
if GetIsInCombat(OBJECT_SELF)
{
DelayCommand(6.0,ExecuteScript("leScript",OBJECT_SELF));
return;
}
AssignCommand(OBEJCT_SELF,ActionAFaire());
}


Note: Tu te heurteras toujours au "Too many instructions" si tu écris une boucle potentiellement infinie (c'est à dire si elle n'a pas un nombre d'exécution définie)

Par Amaranthe le 17/8/2002 à 14:19:20 (#1974723)

Y' a pas ;)

T'es bon ;)

Je me disais bien que je ratais quelque chose...

ClearAllActions bien sur !

Merci.

Par Théranthil le 17/8/2002 à 15:10:18 (#1974917)

Je profite de ce post pour poser une question assez proche.

Si je veux qu'un NPC attaque une enclume pendant mettons 5 sec.

Est ce que je mets tous simplement ActionAttack puis ActionWait(5)? Ou est ce que dans ce cas la il n'attendra pas tant qu'il n'aura pas détruit l'enclume?

Par Kemay le 17/8/2002 à 15:19:51 (#1974963)

Non pour faire cela, tu fais:

ActionAtack(oEnclume);
DelayCommand(5.0,ClearAllActions());

ActionWait() n'arrête rien : C'est une action comme les autres qui force le PNJ à ne rien faire pendant un certain temps. Si tu fais

ActionAttack();
ActionWait(5.0);

Le PNJ va attaquer jusqu'à ce que pour une raison X il ne puisse plus (destruction de ce qu'il attaque, sa propre destruction, ..) et une fois qu'il aura fini d'attaquer, il attendra pendant 5 secondes.

JOL Archives 1.0.1
@ JOL / JeuxOnLine