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

Panneau de contrĂ´le

Recherche | Retour aux forums

JOL Archives

Petit problème avec un if

Par Cassin le 15/11/2002 Ă  13:35:43 (#2568043)

Je m'aperçois que je m'améliore de plus en plus en scripting, pourtant je me perd encore un peu avec les if, else et compagnie...

Voilà la situation : dans un zone j'ai un trigger, en passant sur ce trigger, le joueur récupère quelques variables, voit son journal avancer et récupérer l'XP d'une quête.

Voici donc mon script :

object oJoueur = GetEnteringObject();

void main()
{
SetLocalInt(oJoueur,"fin_elith",1);
SetLocalInt(oJoueur,"trig_oree",1);
if(GetLocalInt(oJoueur,"trig_oree") == 1)
{
AddJournalQuestEntry("vengeance",2,oJoueur);
GiveXPToCreature(oJoueur,GetJournalQuestExperience("vengeance"));
}
}


Le hic c'est que le joueur récupère les pts d'XP chaque fois qu'il traverse le trigger, alors que normalement ça ne devrait le faire qu'une seule fois...

Bon, je sais que je pourrais plus simplement détruire le trigger une fois les commandes effectuées, mais j'aimerais quand même comprendre pourquoi ça marche pas ?

Par miriandel le 15/11/2002 Ă  13:44:54 (#2568131)


void main()
{
if (GetLocalInt(oJoueur,"trig_oree") == FALSE)
{
SetLocalInt(oJoueur,"trig_oree", TRUE);
AddJournalQuestEntry("vengeance",2,oJoueur);
GiveXPToCreature(oJoueur,GetJournalQuestExperience("vengeance"));
}
}


Ca devrait marcher comme ça :)

Petite note: j'ai mis des TRUE et FALSE à la place de 1 et 0, ce qui aide la lisibilité pour des cas booléens comme celui-ci.

Edit: Comme l'a relevé Tyn, tu testais ta variable juste après l'avoir modifiée. Une distraction, sans doute.

Re: Petit problème avec un if

Par mobidique le 15/11/2002 Ă  13:51:42 (#2568176)

object oJoueur = GetEnteringObject();

void main()
{
SetLocalInt(oJoueur,"fin_elith",1);
SetLocalInt(oJoueur,"trig_oree",1);
if(GetLocalInt(oJoueur,"trig_oree") == 1)
{
AddJournalQuestEntry("vengeance",2,oJoueur);
GiveXPToCreature(oJoueur,GetJournalQuestExperience("vengeance"));
}
}
C'est parce que tu initialise toujours à 1 ta variable avant de la tester, donc la condition est toujours vraie, donc le code conditionnel est toujours exécuté ... Moi je fais comme ça ce genre de chose ...
void main()
{
/* Get localint créé la variable et l'initialise à 0 */
if(!GetLocalInt(oJoueur,"trig_oree") == 1)
{
AddJournalQuestEntry("vengeance",2,oJoueur);
GiveXPToCreature(oJoueur,GetJournalQuestExperience("vengeance"));
SetLocalInt(oJoueur,"trig_oree",1);

}
}

Par Tynril le 15/11/2002 Ă  13:52:16 (#2568180)

Ca va jamais se déclencher si tu places le SetLocal avant le if(GetLocal)... :p

Par Cassin le 15/11/2002 Ă  19:42:12 (#2570571)

Ah bah oui, je suis con moi... :mdr:


Bon ben merci les gars ! J'espère que la prochaine fois je ferais plus gaffe ! ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine