[DLG] Dialogue P qui ne s'enclenche pas
Posté : dim. 30 mai 2021, 10:20
Contexte : BGT en commençant à Château-Suif (BG1).
Bonjour,
Je poste ce sujet car depuis deux bons jours je ne suis pas arrivé à faire déclencher normalement le dialogue P prévu pour la gestion d'entrée et sortie du groupe d'un PNJ par l'intermédiaire du fichier PDIALOG.2DA, bien qu'en ayant trouvé une alternative.
Descriptif du problème : Le dialogue J prend normalement le relai une fois que le PNJ a été recruté mais, lorsqu'on vire ce dernier du groupe, le P ne prend pas le relai et c'est toujours le J qui est actif lorsque le pnj exclu retourne voir Player1 après avoir été éjecté. Puis c'est un script par défaut du jeu (par exemple, du type : "Bonne nuit mesdames et messieurs ...") lorsque Player1 lui parle à nouveau.
J'ai pu contourné le problème en forçant le dialogue P par l'action dynamique SetDialog là où il faut dans le dialogue J (cf code à la fin du message avec le PNJ-test entp1).
Mais la question que je me pose est si c'est bien normal d'avoir à faire ainsi. Le problème est quand même que le jeu ignore purement et simplement le fichier P mentionné dans PDIALOG.2DA . A quoi cela pourrait-être dû? Un bug ou aurais-je fait une erreur quelque-part? Quelque-chose m'aurait-il échappé ?
Par des sauvegardes aux différentes étapes dans les entrées et sorties du groupe, j'ai pu aussi constater avec NI que le dialogue J est toujours dans la case dialogue après la sortie du PNJ.
Sinon, j'ai aussi testé au cas-où le script Dream et les banters et ces derniers s'enclenchent sans soucis (par la touche repos pour le premier et en utilisant le cheat code CTRL+I pour les seconds).
J'ai fait un mod test basique avec le moins de fioritures possibles avec deux PNJ à Château-Suif (ar0015) : entp1 et entp2. Le PNJ où le dialogue P n'a pas été forcé s'appelle entp2 et celui où le dialogue P a été forcé par SetDialog s'appelle entp1. Leurs variables death sont respectivement entp2 et entp1, scripts entp2 et entp1 dans leur case override et dialogues entp2 et entp1 dans la case dialogue dans leurs fichiers .cre.
Voilà les différents fichiers pour le PNJ entp2 :
entp2.baf :
Dialogues :
(oui... le B doit être normalement avant le nom par convention )
entp2D.baf :
ar0015.baf :
Fichiers test.tp2 et log weidu (version 246):
Et voilà pour finir le dialogue P et le dialogue J qui contourne le problème pour le PNJ entp1 (si le PNJ est sorti, le dialogue J est toujours actif mais il passe dans ce cas la main au dialogue P) :
Bonjour,
Je poste ce sujet car depuis deux bons jours je ne suis pas arrivé à faire déclencher normalement le dialogue P prévu pour la gestion d'entrée et sortie du groupe d'un PNJ par l'intermédiaire du fichier PDIALOG.2DA, bien qu'en ayant trouvé une alternative.
Descriptif du problème : Le dialogue J prend normalement le relai une fois que le PNJ a été recruté mais, lorsqu'on vire ce dernier du groupe, le P ne prend pas le relai et c'est toujours le J qui est actif lorsque le pnj exclu retourne voir Player1 après avoir été éjecté. Puis c'est un script par défaut du jeu (par exemple, du type : "Bonne nuit mesdames et messieurs ...") lorsque Player1 lui parle à nouveau.
J'ai pu contourné le problème en forçant le dialogue P par l'action dynamique SetDialog là où il faut dans le dialogue J (cf code à la fin du message avec le PNJ-test entp1).
Mais la question que je me pose est si c'est bien normal d'avoir à faire ainsi. Le problème est quand même que le jeu ignore purement et simplement le fichier P mentionné dans PDIALOG.2DA . A quoi cela pourrait-être dû? Un bug ou aurais-je fait une erreur quelque-part? Quelque-chose m'aurait-il échappé ?
Par des sauvegardes aux différentes étapes dans les entrées et sorties du groupe, j'ai pu aussi constater avec NI que le dialogue J est toujours dans la case dialogue après la sortie du PNJ.
Sinon, j'ai aussi testé au cas-où le script Dream et les banters et ces derniers s'enclenchent sans soucis (par la touche repos pour le premier et en utilisant le cheat code CTRL+I pour les seconds).
J'ai fait un mod test basique avec le moins de fioritures possibles avec deux PNJ à Château-Suif (ar0015) : entp1 et entp2. Le PNJ où le dialogue P n'a pas été forcé s'appelle entp2 et celui où le dialogue P a été forcé par SetDialog s'appelle entp1. Leurs variables death sont respectivement entp2 et entp1, scripts entp2 et entp1 dans leur case override et dialogues entp2 et entp1 dans la case dialogue dans leurs fichiers .cre.
Voilà les différents fichiers pour le PNJ entp2 :
entp2.baf :
Code : Tout sélectionner
IF
See([PC])
NumTimesTalkedTo(0)
THEN
RESPONSE #100
// Dialogue([PC])
END
Code : Tout sélectionner
BEGIN ~entp2~
IF ~!InParty(Myself)~ THEN BEGIN 10
SAY ~(dialogue entp2) Bonjour, je suis entp2~
IF ~~ THEN DO ~~ REPLY ~oui~ EXIT
IF ~~ THEN DO ~JoinParty()~ REPLY ~Viens~ EXIT //test
END
Code : Tout sélectionner
BEGIN ~entp2P~
IF ~True()~ THEN BEGIN 0
SAY ~(dialogue entp2P) Snif, adieu ...~
IF ~~ THEN REPLY ~Mouaip~ EXIT
IF ~~ THEN DO ~JoinParty()~ REPLY ~Meuh non, reviens~ EXIT
END
Code : Tout sélectionner
BEGIN ~entp2J~
IF ~True()~ THEN BEGIN 0
SAY ~(dialogue entp2J) je suis avec vous~
IF ~~ THEN REPLY ~Mouaip~ EXIT
IF ~Global("entp2bav","LOCALS",1)~ THEN REPLY ~le script entp2D fonctionne~ EXIT //Pour tester le script Dream
END
Code : Tout sélectionner
BEGIN ~entp2B~
IF ~True()~ THEN BEGIN 0
SAY ~(dialogue entp2B) Pas le temps de bavarder~
IF ~~ THEN REPLY ~Mouaip~ EXIT
END
entp2D.baf :
Code : Tout sélectionner
IF
Global("entp2bav","LOCALS",0)
THEN
RESPONSE #100
SetGlobal("entp2bav","LOCALS",1)
END
Code : Tout sélectionner
IF
Global("enttestcreations","ar0015",0)
THEN
RESPONSE #100
SetGlobal("enttestcreations","ar0015",1)
CreateCreature("entp1",[1000.800],3)
CreateCreature("entp2",[950.800],3)
END
Code : Tout sélectionner
BACKUP ~test/Backup~
AUTHOR ~Bataff~
BEGIN ~test~
EXTEND_BOTTOM ~ar0015.bcs~ ~test/ar0015.baf~
COMPILE ~test/p1/entp1.d~
COMPILE ~test/p1/entp1P.d~
COMPILE ~test/p1/entp1J.d~
COMPILE ~test/p1/entp1B.d~
COMPILE ~test/p1/entp1D.baf~
COMPILE ~test/p1/entp1.baf~
COMPILE ~test/p2/entp2.d~
COMPILE ~test/p2/entp2P.d~
COMPILE ~test/p2/entp2J.d~
COMPILE ~test/p2/entp2B.d~
COMPILE ~test/p2/entp2.baf~
COMPILE ~test/p2/entp2D.baf~
COPY ~test/p1/entp1.cre~ ~Override~
SAY NAME1 ~Perso1~
SAY NAME2 ~Perso1~
BUT_ONLY
COPY ~test/p2/entp2.cre~ ~Override~
SAY NAME1 ~Perso2~
SAY NAME2 ~Perso2~
BUT_ONLY
APPEND ~pdialog.2da~
~entp1 entp1P entp1J entp1D entp1P entp1J *** ***~
UNLESS ~entp1~
APPEND ~interdia.2da~
~entp1 entp1B entp1B~
UNLESS ~entp1~
APPEND ~pdialog.2da~
~entp2 entp2P entp2J entp2D entp2P entp2J *** ***~
UNLESS ~entp2~
APPEND ~interdia.2da~
~entp2 entp2B entp2B~
UNLESS ~entp2~
► Afficher le texte
Code : Tout sélectionner
BEGIN ~entp1P~
IF ~True()~ THEN BEGIN 11
SAY ~(script entp1P) Je suis toujours exclu ?~
IF ~~ THEN DO ~~ REPLY ~Mouaip~ EXIT
IF ~~ THEN DO ~JoinParty()~ REPLY ~Meuh non, reviens~ EXIT
END
Code : Tout sélectionner
BEGIN ~entp1J~
IF ~InParty(myself)~ THEN BEGIN 10
SAY ~(dialogue entp1J) Je suis avec vous~
IF ~~ THEN REPLY ~Ben oui~ EXIT
IF ~Global("entp1bav","LOCALS",1)~ THEN REPLY ~le script entp1D fonctionne~ EXIT //Pour tester le script Dream
END
IF ~!InParty(myself)~ THEN BEGIN 12
SAY ~(dialogue entp1J) On y va ?~
IF ~~ THEN DO ~SetDialog("entp1p")~ REPLY ~Non, tu restes ici~ EXIT
IF ~~ THEN DO ~JoinParty()~ REPLY ~Mouaip~ EXIT
END