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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Pb de script dans OnPerception...

Par Cassin le 22/8/2002 à 19:36:36 (#2006726)

Salut tout le monde !

Me revoilà sur le forum après quelques semaines de vacances :D


Et j'ai déjà un petit problème dans mon module...

Voilà le hic : lorsque le joueur entre dans une zone, un PNJ se précipite sur lui pour lui dire qu'il est en retard et doit se rendre au temple. Une fois la discution terminée, le PNJ va au temple par un waypoint. Tout ça se déclenche par un script sur le OnPerception du PNJ.

Jusque là ça marche. Problème, lorsque le joueur se rend au temple, le PNJ le voit à nouveau et il se précipite une nouvelle fois sur lui. Bon, la conversation ne s'enclenche pas à cause d'une condition dans TextAppearsWhen, mais j'ai voulu modifier mon script pour mettre une condition dedans.

J'ai fais ça :

object oVu = GetLastPerceived();
void main()
{
if(!(GetLocalInt(GetPCSpeaker(), "conv_moine") != 1))

if (GetIsPC(oVu))
{
ActionStartConversation (oVu, "garde_temple", TRUE);
}
}


Le but étant que lorsque "conv_moine" passe à 1 (ça c'est dans le dialogue), le PNJ ne se précipite plus sur le joueur (mais puisse quand même engager la conversation si on clique dessus).

Where's the bleme ?

Par Mellinsa le 22/8/2002 à 20:38:19 (#2007069)

Une solution simple : DestroyObject(OBJECT_SELF) un fois rendu au temple

Par Cassin le 23/8/2002 à 0:13:39 (#2008381)

DestroyObject ??? :eek:

Ca va pas me détruire mon moine ça ???

Par Mellinsa le 23/8/2002 à 0:23:16 (#2008450)

Oui c pour ça que c simple, l'autre solution c de t'arranger pour qu'il est d'autre chose à dire avec SetLocalInt, là dessus je t'aiderais bien mais g pas encore compris comment les faires. Quoique c assez simple si tu utilise le petit chapeau à droite de Edit

Par Fed le 23/8/2002 à 1:35:10 (#2008873)


Le but étant que lorsque "conv_moine" passe à 1 (ça c'est dans le dialogue), le PNJ ne se précipite plus sur le joueur (mais puisse quand même engager la conversation si on clique dessus).


Tu n'etais pas si loin de ca. L'idée y est, mais la condition dans ton premier if n'est pas bonne.


if(!(GetLocalInt(GetPCSpeaker(), "conv_moine") != 1))

reviens à dire : (prendre sa respiration ici ;) ) "si la variable locale conv_moine du PJ ayant discuté avec l'objet auquel est attache le script n'est pas differente de 1"

Déjà, tu as deux négations qui s'annulent elles-même dans ta condition


if(GetLocalInt(GetPCSpeaker(), "conv_moine") == 1)

Ce qui éclaircit un peu la chose.

Maintenant, on peut voir que le script ne sera executé que si la variable locale conv_moine est egale a 1.

Or, c'est l'inverse de ce que souhaite.

En version corrigée, ca donne ca :

if(GetLocalInt(GetPCSpeaker(), "conv_moine") == 0)


Puisque, par defaut, les variables locales de type int ont comme valeur 0.

ou encore :


if(GetLocalInt(GetPCSpeaker(), "conv_moine") != 1)


au choix du cuistot !

Mainenant que la logique est bonne, mais il reste un petit probleme.
Sur un script attaché à l'evenement onPerceived, la fonction GetPCSpeaker() retourne toujours OBJECT_INVALID !

Il faut donc que tu applique cette fonction soit a OBJECT_SELF, si tu desire que ca soit le PNJ qui porte cette variable, soit a oVu, si tu desire que ca soit le PJ qui porte la variable (Mais dans ce dernier cas tu devras echanger les deux conditions de tes if).

Avec tout ca tu devrais pouvoir t'en sortir :)

Par Oz Flyd le 23/8/2002 à 4:13:53 (#2009490)

Oula c quoi tt ca

Par Kemay le 23/8/2002 à 11:31:37 (#2010950)

Le problème c'est l'utilisation de GetPCSpeaker() en dehors d'une conversation. Ici le joueur est défini par GetLastPerceived:

object oVu = GetLastPerceived();
void main()
{
if( GetIsPC(oVu) && GetLocalInt(oVu,"conv_moine") == 0 )
ActionStartConversation(oVu, "garde_temple",TRUE);
}


Note: Dans ce cas, il vaut mieux utiliser "==0" que "!=1" au cas où dans la suite du module cette variable pourrait être encore modifiée

Par Cassin le 23/8/2002 à 13:25:51 (#2011825)

Oki, ça marche, merci tout le monde !

Brrr, j'ai besoin de me remettre dans le bain, après 3 semaines sans avoir touché un seul script moi ! ;)

JOL Archives 1.0.1
@ JOL / JeuxOnLine