Page 1 sur 1

[DLG] Le dialogue se lance sans distinction des variables de condition de lancement

Posté : jeu. 02 oct. 2003, 18:56
par Grenouillebleue
Voilà le dernier problème que j'essaie de résoudre (et ça fait un bon moment en plus), donc je me tourne une dernière fois (qui est-ce que j'essaie de convaincre ? Vous me reverrez certainement avoir des emmerdes :rigoler: ) vers vous pour comprendre.

On rencontre ma PNJ chez Renal Bloodscalp. Tant qu'on n'a pas encore travaillé pour lui et tué Maevar, elle a un dialogue particulier. Une fois qu'on a tué Maevar, son dialogue change, et elle devient recrutable.

Je me suis donc dit: "bon sang mais c'est bien sûr, mon garçon (j'aime bien m'appeler mon garçon), tu vas créer une variable appelée RENAL, qui deviendra égale à 1 lorsque la mission sera terminée.

Donc si RENAL = 0 ==> Dialogue initial
si RENAL = 1 ==> Deuxième dialogue où on peut la recruter.

Là où ça se complique, c'est que visiblement ça ne marche pas. Lorsque je mets ces conditions, aucun dialogue n'est disponible et j'obtiens le message "Kim - n'a rien à vous dire".

Alors que lorsque j'enlève la condition (et que je la remplace par NumTimesTalkedTo(0)), tout marche comme sur des roulettes.

A quoi cela pourrait-il être dû, braves gens ?

Voici à quoi ressemble le début de mon fichier .d:

Code : Tout sélectionner

BEGIN J#Kim


[B](Normalement, là, ça devrait être le dialogue qu'elle sorte si on clique sur elle lorsque la mission n'est pas terminée)[/B]

IF ~Global(“Renal”,“GLOBAL”,0)~ THEN BEGIN kimstart
SAY ~I'm the best sword of this place, and no mistake. Angry Renal, and you won't live to regret it~
IF ~GENDER(“PC”,”Male”)~ THEN REPLY ~Don't make me laugh. You expect me to believe you know how to use a sword ? Go back to needleworking, lass~ GOTO kimstart1
IF ~~ THEN REPLY ~Shouldn't be too hard to be the best sword around here. Do you take pride in being the best out of the worst ?~ GOTO kimstart2
IF ~~ THEN REPLY ~Yeah ? Well, I think I could spank you one-handed~  GOTO kimstart3
IF ~~ THEN REPLY ~Uhhhh... right, whatever, girl~ GOTO kimstart4
IF ~~ THEN REPLY ~I guess I'll behave, THEN~  GOTO kimstart5
IF ~~ THEN REPLY ~Best sword ? Now that's exciting. How about a friendly duel ?~  GOTO kimstart6
IF ~GENDER(“PC”,”Male”)~ THEN REPLY ~A pretty face AND a skilled wrist ? I think I'm in love~  GOTO kimstart7
IF ~~ THEN REPLY ~And who would you be, miss ?~ GOTO kimstart8
IF ~~ THEN REPLY ~I won't let a serving girl threaten me like this. Draw your sword now, and die !~ GOTO kimstartEND
END

[B]Et là, les options de dialogue si jamais la mission est terminée[/B]

IF ~Global(“Renal”,“GLOBAL”,1)~ THEN BEGIN kimtake
SAY ~I hate to say it, but it seems you didn't blunder. Good job. Maevar won't be missed around there. I hate this kind of man with a passion~
IF ~GENDER (“PC”,”Male”)~ THEN REPLY ~It seems to me you have a problem with most men~ GOTO kimtake1
IF ~~ THEN REPLY ~That was nothing at all. He was just a coward~ GOTO kimtake2
IF ~~ THEN REPLY ~Justice always prevails in the END~ GOTO kimtake3
IF ~~ THEN REPLY ~I was thinking... I'm lacking a swordsman - or swordswoman in my party. Would you be interested ?~ GOTO kimtake4
IF ~~ THEN REPLY ~I was thinking... I'm lacking a thief in my party. Would you be interested ?~ GOTO kimtake5
IF ~GENDER(PC,Male)~ THEN REPLY ~I was thinking... I'm lacking good-looking girls in my party. Would you be interested ?~ GOTO kimtake6
IF ~~ THEN REPLY ~Now that Renal has no more use for me, how about we cross blades ?~ GOTO kimtake7
IF ~~ THEN REPLY ~I had a job to do. I did it. I got paid. That's the way of life~ GOTO kimtake2
IF ~~ THEN REPLY ~I wiped Maevar's guild out, and now is Renal's turn ! Shadow thieves shall die !~ GOTO kimtakeEND
END

Alors, euh... je ne vois vraiment pas :heu:

Posté : jeu. 02 oct. 2003, 19:18
par Silk
RENAL n'existe pas déjà ? :heu:

Posté : jeu. 02 oct. 2003, 19:28
par Lamnis Valnon
Juste une question: ou est ton SetGlobal ?

Posté : jeu. 02 oct. 2003, 19:51
par Grenouillebleue
Pour Silk
Peut-être que la variable existe déjà, mais j'ai essayé de changer en choisissant une variable nommée KIMRENAL (qui n'existe pas) et ca n'a rien changé...


Pour Lamnis
Pour l'instant, le setglobal n'est pas encore codé, mais je le mettrai dans le script de Renal, au moment où il donne la récompense aux joueurs
SETGLOBAL("KIMRENAL","GLOBAL",1)


PS: Est-ce que ça peut être dû à mon script, qui contient:

Code : Tout sélectionner

IF
	See([PC])
	NumTimesTalkedTo(0)
THEN
	RESPONSE #100
                Dialogue(Nearest([PC]))
END

Posté : jeu. 02 oct. 2003, 19:54
par Silk
a plus doublon :)

Sinon, si ça ne vient pas du nom de la variable, je ne sais pas.

Posté : jeu. 02 oct. 2003, 21:30
par Grenouillebleue
De plus en plus bizarre...

Même si je mets la variable à la valeur nécessaire, il n'exécute pas le script. C'est quand même incroyable !

Je viens de tester sur un petit script.
Avec la console, je mets KimRenal à 1.
Je VERIFIE et ça me confirme bien que KimRenal est à 1.

Bon, le petit script fait (avec les begin etc, etc, appropriés):

Code : Tout sélectionner

IF ~Global(“KimRenal”,“GLOBAL”,1)~ THEN BEGIN kimtake
  SAY ~I hate to say it, but it seems you didn't blunder. Good job. Maevar won't be missed around there. I hate this kind of man with a passion~
  IF ~~ THEN REPLY ~That was nothing at all. He was just a coward~ EXIT
END

C'est pourtant pas compliqué, non ? POURCOAAAAAA CA NE MARCHE PAAAAS ?

Posté : jeu. 02 oct. 2003, 21:35
par Silk
Je ne suis pas assez habitué à WeiDu, mais je pense que tu as un problème de protocole... :heu:

Posté : jeu. 02 oct. 2003, 23:02
par Grenouillebleue
de coa ? :8:

Posté : jeu. 02 oct. 2003, 23:41
par Isaya
Je ne sais pas ce que dit le didacticiel, mais il me semble que l'ordre des "états" du dialogue peut avoir une importance (un "état" est un point d'entrée de dialogue). Je crois qu'on met généralement au début ceux qui ont le plus de conditions et qu'on met à la fin ce qui en ont le moins. Souvent le dernier utilise une condition du genre True() qui est donc toujours vrai afin qu'il y ait toujours au moins une condition de vérifiée et que le personnage ait donc quelque chose à dire. C'est peut-être ce qui te manque.
D'autre part, je crois qu'on s'arrange pour l'état où on teste NumTimesTalkedTo() = 0 soit en premier dans l'ordre d'évaluation pour être certain que c'est bien celui-là qui apparaîtra lors de la première conversation, et non pas, comme tu l'as fait dans ton exemple, un test sur la variable Renal (ou KimRenal).
Je ne sais pas comment on code cet ordre dans le fichier .d, j'ai lu ce genre de chose dans la description du format du fichier dlg sur le site IESDP ou bien dans un tutorial de TeamBG sur les dialogues.

Pour ton problème de variable, peux-tu indiquer comment tu fixes la variable à 1 ? Je veux dire qu'il est facile de se tromper de lettre (majuscule ou minuscule, je crois que c'est important de les respecter) et qu'il faut bien toujours utiliser le même deuxième paramètre ("GLOBAL", "LOCAL" ou "ARxxxx") entre l'endroit où tu fixes la variable et l'endroit où tu la testes.
Quand tu dis que ça ne marche, est-ce que ça veut dire qu'il affiche que ton perso n'a rien à dire ? Est-ce que ce que tu as montré est dans le cas du test sur KimRenal le seul contenu du fichier .d, ou y-a-t-il d'autres dialogues ?
Essaie de réduire ton dialogue au minimum (un seul échange). Tant que ça ne marche pas, inutile d'en ajouter d'autres. Tu pourras toujours le faire après dès que tu auras résolu ce premier problème de faire parler le personnage.
Quand tu rencontres des problèmes, essaie toujours de réduire la complexité quitte à ne garder qu'un squelette afin de mieux pouvoir isoler la cause. C'est une règle générale très utile en programmation. Dans ton cas, prends le dialogue, les scripts, ..., les plus simples possibles (un seul échange). Ensuite, quand le truc simple fonctionne, on peut augmenter la complexité, mais toujours progressivement afin de mieux déterminer à partir de quel moment un problème apparaît.
Bon courage.