Page 1 sur 1

[DLG] Dialogue de départ personnalisé

Posté : dim. 14 janv. 2018, 23:17
par Cocrane
Le joueur décide de réorganiser son groupe et un PNJ en sort. Le PNJ dit une phrase bateau parmi les répliques possibles et s'en va. (sauf exception)

Exemple:
"Heureux de vous avoir rencontré et au revoir.Bonne nuit mesdames, mesdames bonne nuit."
"Cela a été un vrai plaisir de partir à l'aventure avec vous. Heureux de vous avoir rencontré et au revoir."

Je n'ai pas trouvé le dialogue qui contient ces phrases ni où est codé le script passant à ce dialogue de départ pour les PNJ.
Je pense que c'est lié à ce type de script:
ChangeAIScript("",DEFAULT)
SetLeavePartyDialogFile()
LeaveParty()

J'ai géré un dialogue de départ permettant au PNJ de signaler qu'il resterait à disposition à l'Auberge du Heaume et de la cape (même logique que la Couronne de cuivre). Ce dialogue (adapté pour chacun) marche pour plusieurs PNJ sans problème. Mais pour certains, le PNJ se dirige vers le PLAYER1 et pas de dialogue. Le fichier dialogue n'est plus lié au PNJ. J'ai l'impression que pour certains PNJ, le départ du groupe est codé différemment dans BG.


Exemple qui ne marche pas avec AJANTIS
BEGIN ~IMOENP~

IF ~!inparty(MySelf)
Global("ImoenRecrut","GLOBAL",1)~ THEN BEGIN 1
SAY @1 /* <CHARNAME>, Ca y est les ducs ont fait de vous le Protecteur du peuple! Gorion doit vous regarder avec fierté et moi je suis ravie pour vous. Je suis fin prête à vous accompagner dans cette nouvelle aventure!~ */
IF ~~ THEN
REPLY @2 /* ~Excellent, joigne toi à moi.~ */
DO ~SetGlobal("ImoenRecrut","GLOBAL",2)
JoinParty()~
EXIT

IF ~~ THEN
REPLY @3 /* ~Je n'ai pas besoin de toi pour le moment.~ */
EXIT
END


// Imoen congédiée du groupe
IF ~!inparty(MySelf)
Global("ImoenRecrut","GLOBAL",2)
AreaCheck("AR7216")~ THEN BEGIN 2
SAY @4 /* ~Je vais rester à l'auberge au cas où tu aurais besoin de moi.~*/
IF ~~ THEN
DO ~SetGlobal("ImoenRecrut","GLOBAL",1)
MoveToPoint([190.905])~
EXIT
END

IF ~!inparty(MySelf)
Global("ImoenRecrut","GLOBAL",1)
!AreaCheck("AR7216")~ THEN BEGIN 3
SAY @5 /* ~Si tu as besoin de moi, je serai à l'auberge du Heaume et de la cape.~*/
IF ~~ THEN
DO ~SetGlobal("ImoenRecrut","GLOBAL",5)
EscapeArea()~
EXIT
END
Ce dialogue marche bien pour Imoen, Kivan par exemple mais pas pour Kagain ni Ajantis.


Qui a des infos sur ce sujet?

Cocrane

Posté : dim. 14 janv. 2018, 23:55
par Isaya
Je te renvoie à ce tutoriel de création de PNJ recrutable.
Le dialogue remis en place au moment du départ est généralement nommé xxxxP.dlg. Il gère aussi le retour dans l'équipe.
C'est la phase d'ajout du PNJ dans le fichier pdialog.2da qui stipule les noms des dialogues pour le renvoi et lorsqu'il intègre le groupe, auxquels on associe par homogénéité avec les développeurs les suffixes P et J.
C'est pour cela que le jeu peut se contenter de SetLeavePartyDialogFile() sans avoir à préciser le nom.

Le fait que le personnage se dirige vers le PJ semble bien coïncider avec un dialogue. Si tu n'as pas de texte d'erreur du jeu pour une absence de réplique prévue (j'ai oublié l'intitulé exact), il est possible que le fichier dialogue indiqué dans pdialog.2da n'ait pas été trouvé (nom incorrect ?).

Posté : lun. 15 janv. 2018, 19:55
par Cocrane
Tout s'explique avec ton message.

Dans le cadre de mon mod, j'ai créé de nouveaux fichiers dialogues. Pour faire simple et "en gros", j'ai ajouté la lettre 'P' au bou du nom du PNJ, "P" pour le mod "Protecteur".

Selon les cas, le hasard a fait que le nom du fichier était identique à un fichier existant lié au dialogue de départ. J'ai donc écrasé le fichier d'origine sans m'en rendre compte. Le départ et le retour se passe avec
mon dialogue.

Le mieux est de:
- modifier le fichier 2DA pour mettre mon fichier de dialogue.
- écraser le fichier
- autre

Je vois dans le fichier plusieurs entêtes de colonne:
POST_DIALOG_FILE
JOIN_DIALOG_FILE
DREAM_SCRIPT_FILE
25POST_DIALOG_FILE
25JOIN_DIALOG_FILE
25DREAM_SCRIPT_FILE
25OVERRIDE_SCRIPT_FILE

Exemple:
POST_DIALOG_FILE JOIN_DIALOG_FILE DREAM_SCRIPT_FILE 25POST_DIALOG_FILE 25JOIN_DIALOG_FILE 25DREAM_SCRIPT_FILE 25OVERRIDE_SCRIPT_FILE
IMOENP IMOENJ IMOEND IMOENP IMOENJ IMOEND imoe25
AJANTP AJANTJ *** AJANTP AJANTJ *** ***

Ca fait beaucoup de fichiers dialogues et je suppose qu'il y a un évènement déclencheur pour chacun.

Pour ma part, le dialogue PNJ étant simple je comptais utiliser un seul fichier.





Cocrane

Posté : lun. 15 janv. 2018, 22:39
par Isaya
Tu comprends maintenant pourquoi la communauté a choisi d'utiliser un préfixe pour les fichiers afin de se démarquer les uns des autres...

La façon de procéder dépend avant tout de la façon dont ton mod s'insère dans le jeu. A moins que tu ne fasses un mod comme BG1Tutu, qui une fois installé dans BG II empêche d'y jouer tant qu'on ne désinstalle pas le mod, tu n'as pas la liberté de toucher au fichier pdialog.2da sans casser le jeu.

Pour les personnages existants, au lieu de faire un nouveau fichier, tu peux compléter le fichier existant. Tu pourrais t'appuyer sur l'ajout d'une variable un peu comme celle qu'utiliser BGT pour déterminer qu'on ne fait pas la transition vers BG II ("endofbg1" inférieure à 2) afin d'avoir des scripts ou des dialogues en continuité pour les personnages repris dans BG II tout en gardant un seul et même fichier. Par exemple

Exemple pour KAGAIP.D de BGT décompilé par WeiDU :

Code : Tout sélectionner

IF WEIGHT #0 ~  False()
[color="#FF8C00"]  GLOBAL("DebutProtecteur","GLOBAL",0)[/color] /* Ajout pour s'assurer que cela ne se déclenche que dans une partie normale */
~ THEN BEGIN 0 // from:
  SAY #81284 /* ~Oh, de toute façon, ma réputation s'est sans doute tassée à l'heure qu'il est. A toute, tas de nouilles.~ */
  IF ~~ THEN EXIT
END

IF WEIGHT #1 ~  Global("IWasKickedOut","LOCALS",0)
[color="#FF8C00"]  GLOBAL("DebutProtecteur","GLOBAL",0)[/color]
~ THEN BEGIN 1 // from:
  SAY #81285 /* ~Vous manquez pas de mordant. Si jamais vous cherchez des muscles de nain dans l'coin, je suis votre homme !!!~ */
  IF ~~ THEN DO ~SetGlobal("IWasKickedOut","LOCALS",1)
~ EXIT
END

IF WEIGHT #0 ~  False()
[color="#FF8C00"]  GLOBAL("DebutProtecteur","GLOBAL",1)[/color] /* Ajout pour s'assurer que cela ne déclenche qu'après le début de ton mod */
~ THEN BEGIN 0 // from:
  SAY @1234567 /* ~Ton nouveau message d'adieu pour Kagain.~ */
  IF ~~ THEN EXIT
END

Idem avec la même condition à 1 pour la réplique proposant de revenir dans le groupe
De même il faudrait ajouter GLOBAL("DebutProtecteur","GLOBAL",0) aux autres cas de démarrage de dialogues pour la partie BG1 (surtout pour le dialogue J)
Remarque : je ne suis certain à 100 % que la combinaison de False() et d'une autre condition fonctionne puisque le but de False() est d'attraper le cas où aucune condition prévue ailleurs dans le dialogue n'a déclenché. Néanmoins, au pire, il faudrait simplement remplacer False() par le test de ta variable.


Pour le fichier pdialog.2da, comme les intitulés de colonnes l'expliquent il y a des dialogues et des scripts. Le numéro 25 fait référence à des dialogues / scripts exploités dans ToB (BG 2.5). Le script est utilisé par les romances. Les deux dialogues sont indispensables car ils correspondent au personnage dans et hors du groupe.

Posté : mar. 16 janv. 2018, 21:53
par Cocrane
Tu comprends maintenant pourquoi la communauté a choisi d'utiliser un préfixe pour les fichiers afin de se démarquer les uns des autres...
J'ai manqué effectivement de rigueur mais vu la montagne de choses à gérer, j'ai pris des raccourcis "dangereux". La plupart de mes fichiers sont avec le préfixe "CO" ou avec un "P" à une position improbable dans le fichier(DLG, ITEM et BAM). Pour les dialogues des pnj ça ne m'a pas réussi.

Peux tu me donner le lien où je peux vérifier que mon préfixe est disponible et le réserver?
La façon de procéder dépend avant tout de la façon dont ton mod s'insère dans le jeu. A moins que tu ne fasses un mod comme BG1Tutu, qui une fois installé dans BG II empêche d'y jouer tant qu'on ne désinstalle pas le mod, tu n'as pas la liberté de toucher au fichier pdialog.2da sans casser le jeu.
Le Mod Protecteur de Baldur démarre à la mort de Sarevok et on reste sur les cartes de BG1. Actuellement, je l'ai moddé sous BGT.

Pour éviter de générer des problèmes potentiels avec d'autres mods, je vais donc respecter la méthode de BG et mettre à jour les fichiers de dialogues de type P et J en suivant ton conseil. Je prends donc le fichier de dialogue d'origine et je le modifie. C'est ce fichier qui sera donc installé.
Que se passe t'il si un autre moddeur fait de même? L'un écrasera l'autre. Il y a un mot clé pour ajouter des blocks et modifier des blocks existants?

Vu pour le fichier Pdialogue, je vais l'utiliser uniquement pour la gestion du groupe.


Cocrane

Posté : mar. 16 janv. 2018, 21:57
par Freddy_Gwendo
Hé hé, ça me rappelle de très anciennes discussions. ;)
Mais il n'est jamais trop trad : dépêche toi de réserver CO ici. Pour l'instant, il n'est pas encore pris...

Posté : mar. 16 janv. 2018, 22:12
par Cocrane
Oui c'est vrai :$ .

J'avais pas réussi à un créer un compte... Et du coup, ça m'avait soulé. :rtfm:

En vieillissant, je gagne en patience. (enfin on y croit).

Cocrane

Posté : mar. 16 janv. 2018, 22:26
par Cocrane
Je dois être bête car j'ai toujours le même problème.

Je renseigne la fiche.

Je signale que c'est Khalid le mari de Jaheira. Je valide, je reste sur la page.

Et j'ai un refus:
The Following Errors Were Found
Please fill the "Security" field correctly. This helps us to prevent the Lair from being beset by automated bots.
Je clique sur "answer ICI" et je passe sur une autre page parlant de la communauté.

J'ai raté quoi?

Cocrane

Posté : mar. 16 janv. 2018, 23:16
par Cocrane
Je viens de travailler sur les dialogues d'un nouveau PNJ à recruter.

Le dialogue de 1ière rencontre et d'entrée dans le groupe| OSWLAD: OK

Le dialogue de départ| OSWLAP: OK

Le dialogue de retour| OSWLAJ: KO
> C'est le dialogue de départ qui se lance.
.D
BEGIN ~OSWALD~

// 1ière rencontre
IF ~!InParty(Myself)
NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY @1 /* ~Protecteur, mon nom est Oswald et j'appartenais à la garde ducale. Mon bras est solide et mon coeur courageux. Je tiens à servir ma cité et je serai honnoré de mettre ma lame au service d'un héros tel que vous.~ */

IF ~~ THEN
REPLY @2 /* ~Je t'accepte avec plaisir dans mon équipe.~ */
DO ~SetGlobal("OswaldRecrut","GLOBAL",2)
JoinParty()~
EXIT

IF ~global("OSWALDpourquoi","GLOBAL",0)~ THEN
REPLY @3 /* ~Pourquoi tu ne fais plus partie de la garde ducale?~ */
DO ~setglobal("OSWALDpourquoi","GLOBAL",1)~
GOTO 1

IF ~~ THEN
REPLY @4 /* ~Il n'y a pas de place pour toi dans mon groupe pour le moment.~ */
EXIT
END

IF ~~ THEN BEGIN 1
SAY @5 /* ~Pour être franc (géné), Macros voit des ennemis potentiels partout. Il a remplacé une grande partie de la garde dès son arrivée. De bon soldats ont été remerciés... Prenez moi dans votre équipe et vous ne le regretterez pas!~ */

IF ~~ THEN
REPLY @2 /* ~Je t'accepte avec plaisir dans mon équipe.~ */
DO ~SetGlobal("OswaldRecrut","GLOBAL",2)
JoinParty()~
JOURNAL @6 /* ~Macros, responsable de la sécurité des ducs, a remplacé une grande partie de la garde ducale à son arrivée. D'après Oswald, ancien garde ducal, il voit des ennemis partout...~ */
EXIT

IF ~~ THEN
REPLY @4 /* ~Il n'y a pas de place pour toi dans mon groupe pour le moment.~ */
JOURNAL @6 /* ~Macros, responsable de la sécurité des ducs, a remplacé une grande partie de la garde ducale à son arrivée. D'après Oswald, ancien garde ducal, il voit des ennemis partout...~ */
EXIT
END



// Sortie du groupe ********************************************************************************************************************************
BEGIN ~OSWALP~

IF ~AreaCheck("AR7216")~ THEN BEGIN 0
SAY @1000 /* ~Je vais rester à l'auberge au cas où tu aurais besoin de moi.~*/
IF ~~ THEN
DO ~MoveToPoint([190.905])~
EXIT
END

// Bloqué dans le temple de Bhaal
IF ~Global("Bhaal_temple_bloque","GLOBAL",1)~ THEN BEGIN 1
SAY @1002 /* ~J'aurai choisi un autre moment pour nous séparer mais c'est vous le chef. Je vais trouver une sortie et retourner à l'auberge.~*/
IF ~~ THEN
DO ~EscapeArea()~
EXIT
END

IF ~!AreaCheck("AR7216")~ THEN BEGIN 2
SAY @1001 /* ~Si tu as besoin de moi, je serai à l'auberge du Heaume et de la cape.~*/
IF ~~ THEN
DO ~EscapeArea()~
EXIT
END



// Retour dans le groupe *****************************************************************************************************************************
BEGIN ~OSWALJ~

IF ~True()~ THEN BEGIN 0
SAY @1100 /* ~Si tu as besoin de moi, je suis prêt à te rejoindre.~ */

IF ~~ THEN
REPLY @1001 /* ~Oui, tu es le bienvenu.~ */
DO ~JoinParty()~
EXIT

IF ~~ THEN
REPLY @1102 /* ~Il n'y a pas de place pour toi dans mon groupe pour le moment.~ */
EXIT
END
Pdialogue.2DA
OSWALD OSWALP OSWALJ *** OSWALP OSWALJ *** ***
TP2
COMPILE ~PDBA1CH8\DLG\OSWALD.d~ ~override~ USING ~PDBA1CH8\DLG\OSWALD.tra~
APPEND ~pdialog.2da~
~OSWALD OSWALP OSWALJ *** OSWALP OSWALJ *** ***~
UNLESS ~OSWALD~
Je ne vois pas où est le problème.

J'ai l'impression que j'ai mal compris le rôle de OSWALJ. C'est pour le dialogue lorsque Oswald est dans le groupe? pas pour retourner dans le groupe. :$ Mais je vois des NPC avec des dialogues sans J et P...

Cocrane

Posté : mer. 17 janv. 2018, 00:22
par Freddy_Gwendo
Je n'ai jamais créé de NPC, mais voici le code utilisé par Ajantis :

Code : Tout sélectionner

//Dialoguesets 
APPEND ~pdialog.2da~
~C#Ajantis 	C#AjanP 	C#AjanJ 	C#AjanD 	C#Aja25P 	C#Aja25J 		C#Aja25D 	C#Ajan25~
UNLESS ~C#Ajantis~


APPEND ~interdia.2da~
~C#Ajantis 	C#AjanB      C#Aja25B~
UNLESS ~C#Ajantis~

Comparé au tien, il semble manquer des fichiers, notamment pour ToB.

Sinon,
An NPC has 3 different dialogs attached to it:
[INDENT]1. E)THEA.d - Initial dialog
2. E)THEAP.d - Post-party dialog (this runs after kicking our NPC from the party)
3. E)THEAJ.d - Join-party dialog (this runs while the NPC is in the party)[/INDENT]

Again, note that the name of our dialogs can be at most 8 characters long. You’re free to use any name you want, but it’s a good idea to use your NPC’s name, suffixed by P and J .
Dans ton cas :

premier dialogue --> OSWALD
après départ : OSWALDP
autres dialogues une fois dans le groupe : OSWALDJ

Si ton code est OSWAL ==> OSWAL, OSWALP, OSWALJ

Edit : Je t'ai envoyé un mail pour BWL.

Posté : mer. 17 janv. 2018, 12:48
par Cocrane
Ok, c'est bien ce que je pensais au final:
- dialogue d'initial (première rencontre)
OSWALD

- dialogue de départ et de retour dans le groupe
OSWALP

- dialogue une fois que le PNJ est dans le groupe
OSWALJ

Il reste plus qu'à paramétrer tout ça.


Reste le point ci-dessous à traiter:
La façon de procéder dépend avant tout de la façon dont ton mod s'insère dans le jeu. A moins que tu ne fasses un mod comme BG1Tutu, qui une fois installé dans BG II empêche d'y jouer tant qu'on ne désinstalle pas le mod, tu n'as pas la liberté de toucher au fichier pdialog.2da sans casser le jeu.
Le Mod Protecteur de Baldur démarre à la mort de Sarevok et on reste sur les cartes de BG1. Actuellement, je l'ai moddé sous BGT.

Pour éviter de générer des problèmes potentiels avec d'autres mods, je vais donc respecter la méthode de BG et mettre à jour les fichiers de dialogues de type P et J en suivant ton conseil. Je prends donc le fichier de dialogue d'origine et je le modifie. C'est ce fichier qui sera donc installé.
Que se passe t'il si un autre moddeur fait de même? L'un écrasera l'autre. Il y a un mot clé pour ajouter des blocks et modifier des blocks existants?

Cocrane

Posté : mer. 17 janv. 2018, 20:57
par Freddy_Gwendo
Tu trouveras ton bonheur dans le chapitre 8 de la doc WeiDU : comment ajouter une réplique à un dialogue existant, une interaction avec un nouveau personnage, etc...

Posté : mer. 17 janv. 2018, 22:01
par Cocrane
La doc Weidu ne m'a pas du tout inspirée.

Du coup, j'ai jeté un oeil sur le TP2 de quelques mods.

1- Ajouter un nouveau block à un DLG existant
.D avec un APPEND

Sans avoir cherché ça me semble être la solution.

2- Modifier le contenu d'un block existant

On repère un texte et on fait une substitution.
COPY_EXISTING ~B!GavinJ.dlg~ ~override~
DECOMPILE_AND_PATCH BEGIN
REPLACE_TEXTUALLY ~\(TakePartyItem("[_]RINGJOS")\)~ ~\1 GiveItem("%tutu_var%RINGJOS","%tutu_scriptbg%FTOWN2")~
END
BUT_ONLY_IF_IT_CHANGES

COPY_EXISTING ~halbaz.dlg~ ~override~
DECOMPILE_AND_PATCH BEGIN
// Ajoute des variables pour savoir si Garrick a eu l'armure de barde rajoutée par le BG1NPC (2/2)
REPLACE_TEXTUALLY CASE_SENSITIVE EXACT_MATCH ~GiveItemCreate("X#GARCH2",Player1,1,0,0)~ ~GiveItemCreate("X#GARCH2",Player1,1,0,0) SetGlobal("gtt#armuregarrick","GLOBAL",2)~
END
C'est la bonne méthode?


Je suis tombé sur ce code.
// explication des chansons
OUTER_SET nbdiaggarrcharname = STATE_WHICH_SAYS 3614 IN ~bg1npc/tra/%s/X#PCINIT.tra~ FROM garrij



Cocrane

Posté : mer. 17 janv. 2018, 23:07
par Freddy_Gwendo
Tout dépend de ce que tu veux faire : ajouter une réplique à bloc de dialogue existant, modifier les conditions des répliques, les actions d'une réplique... Pour chaque cas, il existe une commande spécifique.
Attention toutefois aux problèmes de compatibilité entre mods : si un mod modifie déjà un bloc, il faut faire très attention au code que l'on emploie.

Par ailleurs, la dernière fonction que tu évoques permet de retrouver l'indice d'une réplique d'un dialogue, très utile en cas de dialogue modifié par un mod.

Les intonnations dans les dialogues.

Posté : ven. 19 janv. 2018, 08:46
par Almaguemnon
Bonjour Cocrane.

Comme je commence à faire les voix que tu m'a demandées; j'en arrive à un point important que toute personne qui à faite du théâtre se posera: Quel ton employer dans les phrases?

Souvent c'est évident; mais entre le narratif, l'interrogatif, la boutade; il y a une marge certaine. Donc pour ne pas perdre notre temps en dizaines d'essais, il serait bien que tu le rajoute dans le fichier pour les voix, comme pour les pièces de théatre, comment doit être dite la phrase.

Désolé de t'embêter avec cela; mais sinon tu auras des textes aussi mauvais, voire plus que ceux d'origines du premier Baldur.

Amicalement.

Al

Posté : sam. 20 janv. 2018, 15:37
par Cocrane
Almaguemnon> je te fais un retour demain. Quel PNJ as tu choisi?


Freddy>
pour le moment, j'ai eu besoin de modifier les conditions et d'ajouter un block.

Je suis intéressé par le code pour ajouter une réplique. (je pense que ça peut servir. :-))

Là j'avance, sur le codage de tous les PNJ recrutables d'origine BG1 que je vais proposer.

Cocrane

Posté : sam. 20 janv. 2018, 16:42
par Cocrane
Au niveau de la gestion des PNj, j'ai un soucis avec les recrutements par 2.

Je prends en exemple, Jaheira + Khalid.

Lorsque l'un des 2 est exclu du groupe, je veux qu'au final ils restent sur la carte en attente.

La personne exclue va voir le Charname puis se positionne: OK
La 2nd personne, se retrouve exclue, va se positionner puis va aussi voir le Charname: KO

Comment empêcher proprement la 2nd personne d'aller discuter avec le charname?

Pour info, voici le code pour Jaheira:
APPEND ~JAHEIRAP~

// 1iere rencontre dans le mod: recrutement possible
IF WEIGHT #0 ~Global("Protecteur_baldur","GLOBAL",1)
Global("IWasKickedOut","LOCALS",0)
Global("recrut_init","LOCALS",0)~ THEN BEGIN 0
SAY @1 /* ~Félicitations, votre titre est amplement mérité. Dommage que Gorion ne soit plus de ce monde pour vous féliciter à son tour. Khalid et moi mmême serions ravis d'intégrer votre groupe.~ */
IF ~~ THEN
REPLY @2 /* ~Le plaisir est partagé. Rejoignez moi.~ */
DO ~ActionOverride("KHALID",JoinParty())
SetGlobal("recrut_init","LOCALS",1)
JoinParty()~
EXIT

IF ~~ THEN
REPLY @3 /* ~Restez dans le coin, votre aide pourrait être utile.~ */
DO ~SetGlobal("recrut_init","LOCALS",1)
SetGlobal("IWasKickedOut","LOCALS",1)
MoveToPoint([965.487])~
EXIT
END


// Xième rencontre: recrutement possible
IF WEIGHT #0 ~Global("Protecteur_baldur","GLOBAL",1)
Global("IWasKickedOut","LOCALS",1)
Global("recrut_init","LOCALS",1)~ THEN BEGIN 1
SAY @4 /* ~Auriez-vous besoin de notre aide?~ */
IF ~~ THEN
REPLY @5 /* ~Oui, rejoint moi.~ */
DO ~ActionOverride("KHALID",SetGlobal("IWasKickedOut","LOCALS",0))
ActionOverride("KHALID",JoinParty())
SetGlobal("IWasKickedOut","LOCALS",0)
JoinParty()~
EXIT

IF ~AreaCheck("AR7216")~ THEN
REPLY @3 /* ~Restez dans le coin, votre aide pourrait être utile.~ */
DO ~MoveToPoint([965.487])~
EXIT

IF ~!AreaCheck("AR7216")~ THEN
REPLY @3 /*~Restez dans le coin, votre aide pourrait être utile.~ */
EXIT
END


// Exclu du groupe
IF WEIGHT #0 ~Global("Protecteur_baldur","GLOBAL",1)
Global("IWasKickedOut","LOCALS",0)
Global("recrut_init","LOCALS",1)~ THEN BEGIN 2
SAY @6 /* ~Je pense que c'est une erreur mais c'est à vous de décider. Khalid et moi nous vous laissons.~ */

IF ~AreaCheck("AR7216")~ THEN
REPLY @3 /* ~Restez dans le coin, votre aide pourrait être utile.~ */
DO ~ActionOverride("KHALID",SetGlobal("IWasKickedOut","LOCALS",1))
ActionOverride("KHALID",LeaveParty())
ActionOverride("KHALID",MoveToPoint([965.487]))
SetGlobal("IWasKickedOut","LOCALS",1)
MoveToPoint([965.487])~
EXIT

IF ~!AreaCheck("AR7216")~ THEN
REPLY @7 /* ~Retournez à l'auberge, votre aide pourrait être utile.~ */
DO ~ActionOverride("KHALID",SetGlobal("IWasKickedOut","LOCALS",1))
ActionOverride("KHALID",LeaveParty())
ActionOverride("KHALID",EscapeAreaMove("AR7216",965,487,10))
SetGlobal("IWasKickedOut","LOCALS",1)
EscapeAreaMove("AR7216",965,487,10)~
EXIT
END

END



Cocrane

Posté : mar. 16 oct. 2018, 22:18
par Cocrane
J'ai un autre soucis.

J'ai refait une install complète de mod pour tout retester et j'ai le soucis suivant.

Le fichier Pdialog.2da ne contient plus l'ensemble des PNJ. Si j'en colle un complet et que je relance l'installation. Idem les PNJ de BG1 disparaissent de la liste et mes nouveaux PNJ sont bien présents. De plus, la structure est différente.

Avant installation
avantInstall.jpg
Après installation.
avantInstall.jpg
Code dans mon TP2:
COPY_EXISTING ~MONTAP.dlg~ ~override~
DECOMPILE_AND_PATCH BEGIN
REPLACE_TEXTUALLY ~GlobalLT("ENDOFBG1","GLOBAL",2)~ ~GlobalLT("ENDOFBG1","GLOBAL",2) Global("Protecteur_baldur","GLOBAL",0)~
END
BUT_ONLY_IF_IT_CHANGES
COMPILE ~PDBA1CH8\DLG\MONTAP.d~ ~override~ USING ~PDBA1CH8\DLG\MONTAP.tra~

COPY_EXISTING ~XZARP.dlg~ ~override~
DECOMPILE_AND_PATCH BEGIN
REPLACE_TEXTUALLY ~GlobalLT("ENDOFBG1","GLOBAL",2)~ ~GlobalLT("ENDOFBG1","GLOBAL",2) Global("Protecteur_baldur","GLOBAL",0)~
END
BUT_ONLY_IF_IT_CHANGES
COMPILE ~PDBA1CH8\DLG\XZARP.d~ ~override~ USING ~PDBA1CH8\DLG\XZARP.tra~

// Nouveaux PNJ
COMPILE ~PDBA1CH8\DLG\OSWALP.d~ ~override~ USING ~PDBA1CH8\DLG\OSWALP.tra~
APPEND ~pdialog.2da~
~OSWALD OSWALP OSWALJ *** OSWALP OSWALJ *** ***~
UNLESS ~OSWALD~
C'est comme si mon code retirait les lignes du PDIALOG.

Et bien sur le dialogue ne se déclenche plus avec le bon texte. :-)


Qu'en pensez-vous?

Cocrane

Posté : mer. 17 oct. 2018, 01:35
par Freddy_Gwendo
Bizarre, bizarre... Vous avez dit bizarre ?

Testé avec WeiDU 246 et le pdialog.2da de ToB, ça fonctionne (cf. fichier joint) :

Code : Tout sélectionner

APPEND ~pdialog.2da~
~OSWALD       OSWALP             OSWALJ            ***            OSWALP             OSWALJ                ***                   ***~
UNLESS ~OSWALD~ 
Soit c'est un problème d'espaces entre les valeurs (ce dont je doute fort), soit ton fichier 2da a été corrompu par un autre mod installé avant le tien. Tu devrais vérifier quels mods le modifient.

Posté : jeu. 18 oct. 2018, 21:48
par Cocrane
Je vois que dans ton fichier PDIALOG.2DA, il n'y a pas les PNJ de BG1.

Est ce normal dans une install BGT avec TOB?

Cocrane

Posté : jeu. 18 oct. 2018, 22:15
par Freddy_Gwendo
Normal :
Freddy_Gwendo a écrit :
Testé avec WeiDU 246 et le pdialog.2da de ToB
Comme je n'ai pas d'installation BGT sous la main, je l'ai testé sur BG2-ToB.

Le code que j'ai testé devrait fonctionner avec un fichier pdialog.2da de BGT qui ajoute les données de BG1 à celles de BG2. Si ça ne fonctionne pas sur ta machine, soit ta version de WeiDU a un souci, soit c'est le fichier 2da qui a un souci avant d'être patché.

Ceci dit, si tu me donnes en pièces jointes ton fichier 2da BGT (renommé txt pour que le logiciel du forum l'accepte), je peux faire un test dessus.

Posté : mar. 23 oct. 2018, 18:28
par Cocrane
En utilisant ton fichier comme base. Je n'ai plus de problème de pertes de lignes.

J'ignore l'origine du problème dans le fichier de départ mais vu que ça marche à nouveau, j'avance sur le reste. :-).

Cocrane

Posté : lun. 08 juin 2020, 20:49
par Cocrane
Bon, je reviens sur ce sujet sur lequel je tourne rond. :-)

Lorsque le MOD commence, je créé les PNJ de BG1 à recruter dans l'auberge du Heaume et de la cape si ils ne sont pas dans l'équipe du joueur.

Le Charname peut aller dialoguer avec ces PNJ.

J'ai le soucis suivant: Charname va pour discuter avec l'un deux et à priori de manière aléatoire j'ai le message suivant:
"X semble avoir à faire et ne pas vouloir discuter."

Le fichier PDialog ne contient pas les noms de tous les PNJ. Si je les ajoute et que je lance une partie, j'ai quand même le problème et ce n'est pas toujours le même PNJ...

Si je lance à nouveau l'installe, les noms que j'ai ajouté sont effacés du PDIALOGE.2da

Pour mes 3 nouveaux PNJ, j'atoute des données dans le PDIALOG:

Code : Tout sélectionner

COMPILE ~CDB\DLG\OSWALP.d~ ~override~ USING ~CDB\DLG\OSWALP.tra~
APPEND ~PDIALOG.2da~
~OSWALD       OSWALP             OSWALJ            ***            OSWALP             OSWALJ             ***                 ***~
UNLESS ~OSWALD~
Je joins mes fichiers pour savoir si vous avez une explication:
PDIALOG_install.D2A résultat de l'installation
PDIALOG_complet.D2A

AR7216.baf qui génère l'apparition des PNJ.
dialogue de DYNAHEIR + MINSC (format DLG en réalité)
mon TP2

Cocrane

Posté : lun. 08 juin 2020, 20:51
par Cocrane
MINSC et DYNAHEIR .TXT -> DLG en réalité