Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Problème d'interprétation d'un script !
Problème d'interprétation d'un script !
Par Mel Ethybem le 28/1/2003 Ã 20:10:16 (#3120973)
void main()
{
object oNPC = GetObjectByTag("NPC_TALKER");__
object oPC = GetEnteringObject();
if(GetIsPC(oPC) && GetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC)) == FALSE && !IsInConversation(oNPC))
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}
ça c le scripte :hardos: ... donc en fait, j'aimerais savoir ce qu'est le "Dlg_Init_" du script... je vous explique la situation... c un script que j'ai trouvé sur le net et qui me permet de faire en sorte qu'un PNJ se mette à entamer un dialogue tt seul... j'ai créer un trigger qui fait que dès que le PJ rentre dedans, le PNJ lui cause direct... ok ? j'ai aussi fait un waypoint qui permet (et ça c un autre script...ou bien est-ce celui là ? lol) au PNJ de revenir à cet endroit une fois avoir fini de parler...
En fait le "Dlg_Init_" c un truc a remplacé (c le créateur du script qui la dit --> genre ça dépend du tag du PNJ, etc...) MAIS DONC C KOI ??? J'en SORS PLUS !
Je répète, que dois-je mettre à la place de "Dlg_Init_" ???? MERCI !!! J'espère m'être fait comprendre malgré ma fatigue ;-)
Par Mastokk le 28/1/2003 Ã 20:29:52 (#3121149)
void main()
{
object oNPC = GetObjectByTag("NPC_TALKER");__
object oPC = GetEnteringObject();
if(GetIsPC(oPC) && GetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC)) == FALSE && !IsInConversation(oNPC))
{
AssignCommand(oPC,ClearAllActions());
AssignCommand(oNPC,ClearAllActions());
AssignCommand(oNPC,ActionMoveToObject(oPC));
AssignCommand(oNPC,ActionStartConversation(oPC));
}
}
Par Mel Ethybem le 28/1/2003 Ã 20:37:06 (#3121204)
Autre question relative à ce script.. Comment faire pour que le PNJ ne revienne pas plusieurs fois causer au PJ à chaque fois qu'il entre et sort du trigger ????
Par eMRaistlin le 29/1/2003 Ã 1:32:19 (#3122948)
Je t'explique... (juste avant, edite ton post, je l'ai edité pour te montrer par l'exemple les balises PHP)
Pret ?
OK :
En fait, le script stocke sur le PC une variable, verifiée a chaque entree dans le trigger, qui dit : si cette variable est non, alors tu entame le dialogue Sinon, tu parle plus, et tu fais ton taff... (non mais !)...
Ceci etant, il manque dans ce script (normal : c'est pas sa place ^^), un SetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC),TRUE) afin de declarer ce dialogue comme deja dit !
Ce SetLocalInt, je suppose que ce gars, sur le net, l'a mis en fin de dialogue. Fais une recherche sur tout les script du module pourverifier si cette phrase au dessus est bien la. sionon, ajoute ca a la fin de tout tes dialogues que tu veux eviter de repetervoid main(){SetLocalInt(oPC,"Dlg_Init_" + GetTag(oNPC),TRUE) ;}
Comment marche ce script :
Il verifie (pour le get) ou cree (pour mon Set) une variable sur le PC qui s'appele Dlg_Init_Tag, ou tag est remplace par le Tag du NPC. exemple, ton NPC a un tag "JOJO", si tu lui parle, il va verifier que ton PC a la variable "Dlg_Init_JOJO", et si oui, quelle est sa valeur.
Bien entendu, nous n'avons pas encore parle a ce gars la, donc la variable est nulle (null = FALSE) donc il declenche bien le dialogue.
Si tu ne rajoute rien, alors la variable, qui n'est que recherche, ici, ne change pas... donc logiquement... le dialogue se repete, car la requete donne toujour un False a la variable.
D'ou la necessite de mettre un Set = TRUE a la fin du dialogue, pour pouvoir, la foi suivante, avoir une requete qui ramene TRUE (TRUE = 1) au lieu de FALSE, et donc un dialogue qui ne se prononce pas...
Ok ?
La ou le script est pratique, c'est qu'il te servira pour tout les NPC, ayant un tag different, car il va creer des variable differentes a chaque fois :
- Dlg_Init_JOJO
- Dlg_Init_TATA
- Dlg_Init_BOB
car a chaque fois, il ajoute le tag JOJO / TATA / BOB) a la chaine constante, et donc c'est plus dynamique.
A noter que tu peut faire la meme chose en ne faisant que le GetLocalInt(oPC,GetTag(oNPC)), mais c'est moins structure, donc dans un module ou les script commencent a s'empiler, le risque de faire des erreurs augmente...
Voila... hope this'll help...
PS : Ne jamais pomper un script sur le net : il vaut mieux essayer de le creer, qui a se tromper, car on maitrise plus le script en le creant, donc on sait toujours ce qu'il fait...
(meme si la, effectivement, le script est assez facile a decortiquer, ce n'est pas toujours le cas...)
JOL Archives 1.0.1
@ JOL / JeuxOnLine