Affichage des résultats 1 à 8 sur 8

Discussion: [DLG] Problèmes divers rencontrés lors de la création d'un dialogue de PNJ

  1. #1
    Date d'inscription
    May 2004
    Localisation
    Angers
    Messages
    1 102

    [DLG] Problèmes divers rencontrés lors de la création d'un dialogue de PNJ

    Voilà un problème que je n'avais pas encore rencontré dans le codage de dialogues.

    Pour mon personnage Flora, je voulais la faire interagir avec le Duergar Ilyich qui détient les fameux glands. Ilyich enclenche un dialogue à partir du moment où il détecte le PJ pour la première fois (le PJ n'a pas à venir lui parler donc).

    J'ai donc réussi à créer une alternative à ce dialogue, puisqu'à partir de la première réplique d'Ilyich, j'utilise les fonctions EXTEND_BOTTOM et APPEND pour parler sur un dialogue entre lui et Flora, sans que le PJ puisse intervenir ( il avait normalement plusieurs réponses possibles suite à la première réplique d'Ilyich ). Mais bon, pour que ce soit plus clair, voici les parties de code.

    Code:
    EXTEND_BOTTOM ILYICH 0
    IF ~InParty("Flora")
          Global("FloIlyich","GLOBAL",0)~ THEN DO ~SetGlobal("FloIlyich","GLOBAL",1)~ EXTERN ILYICH IlyichFlo1
    END 
    
    APPEND ILYICH
    IF ~~ THEN BEGIN IlyichFlo1 
      SAY ~Tiens tiens, mais ne serait-ce pas une des chères compagnes de notre maître ?~
      IF ~~ THEN EXTERN Flora FloIlyich1
    END
    Voilà le début du dialogue. Comme vous pouvez le voir, après la première réplique d'Ilyich (non présente ici), il renchaîne sur une autre réplique. Jusque là, ça marche. Cependant, la suite du dialogue que je n'ai pas indiquée ne s'enclenche pas. Normalement, Flora devrait lui répondre, grâce à la fonction APPEND toujours, mais rien ne se passe, le dialogue se termine comme ça.

    J'ai essayé différentes façons de procéder (avec CHAIN, ou avec un bloc de dialogue normal pour les répliques de Flora), mais rien non plus.
    J'ai aussi remarqué autre chose de bizarre. Dans le tutorial de WeiDU, il faut utiliser normalement la condition "IsValidForPartyDialog("Flora")" plutôt que celle que j'utilise, "InParty("Flora")". Cependant, cette fonction ne semble pas vérifiée dans le jeu, et le dialogue ne s'enclenche donc pas, en remettant à la place les réponses du PJ. Je ne vois pas pourquoi cette fonction ne marche pas, puisque Flora est là lors du dialogue, elle n'est pas morte, rien... et ce dialogue se trouve dans le même fichier .d que les autres dialogues que j'ai déjà codés et qui fonctionnent.
    Pour les blocs APPEND de Flora, j'ai essayé les minuscules (Flora) et les majuscules (FLORA) mais ce n'est pas ça... j'ai essayé de mettre une variable pour voir si elle est vérifiée mais ça ne marche pas non plus, le dialogue s'arrête donc à la fin de ma réplique d'Iliych.

    Qu'est-ce qui ne marche pas ?
    Dernière modification par Freddy_Gwendo ; 02/04/2016 à 02h44. Motif: Modification du titre de la discussion et mise en page


  2. #2
    Date d'inscription
    November 2004
    Localisation
    Paris
    Messages
    1 991
    La commande APPEND ne devrait-elle pas se situer en premier, afin de signaler a weidu que tu colle ce morceaux de code au fichier dialogue de Ilyich?
    Sinon:

    IF ~~ THEN EXTERN Flora FloIlyich1
    "Flora" c'est le nom du fichier de dialogue dans lequel se trouve FloIlyich1?
    Lies are never forgotten, they go on and they grow
    Chat orange et D'Oghmatique.
    Rodolpho Remington, barde/boulanger, s'exprime en FF99CC > Bio RP

  3. #3
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 455
    L'intérêt de WeiDU est d'éviter d'avoir à se taper des références EXTERN comme tu le fais là. Il y a un bon exemple de ce genre de dialogue dans la documentation WeiDU : partie Tutorials sur INTERJECT. L'exemple de Minsc avec les dryades semble tout à fait comparable à ce que tu veux faire.
    Comme disent les anglais, RTFM.
    Peu disponible
    Guide d'installation (et FAQ) de Baldur's Gate, Baldur's Gate II, Baldur's Gate Trilogy (BGT), BG1Tutu, Widescreen, BGEE
    Pensez à utiliser à la fonction Recherche pour trouver une réponse à votre question !

  4. #4
    Date d'inscription
    May 2004
    Localisation
    Angers
    Messages
    1 102
    Bon, juste pour dire que le problème est réglé ( depuis un moment d'ailleurs ). En fait, il fallait simplement mettre ce dialogue dans le fichier xxxxxxP.dlg du PNJ, que je n'avais pas encore créé, car ce dialogue devait s'enclencher lorsque Flora serait dans le groupe. Maintenant ça marche .

    Autre problème par contre, que j'avais déjà signalé : pour ces dialogues en question, le trigger "IsReadyForPartyDialog" ne fonctionne pas avec mon PNJ, le dialogue ne s'enclenche pas. Avec un autre trigger comme "InParty" par exemple, ça fonctionne...


  5. #5
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 455
    Bonne nouvelle. Juste pour information (pour ceux qui se poseraient la même question), pourrais-tu préciser comment tu as opéré, s'il te plaît ? Merci beaucoup.

    Je suppose que tu veux parler de IsValidForPartyDialog ? Car IsReadyForPartyDialog n'existe pas, en tout cas avec les fichiers TRIGGER.IDS d'origine.
    Si tu t'es trompé de nom, tu aurais dû au moins avoir un message d'alerte dans le fichier log de WeiDU à la compilation ou à l'installation. As-tu vérifié ?

    Dans tous les cas, la meilleure méthode consiste souvent à comparer comment Bioware a codé ça dans le jeu original. On trouve de nombreux usages de IsValidForPartyDialog pour les interventions des PNJ, en particulier lorsque le dialogue vérifie la présence de plusieurs personnages (si plusieurs peuvent intervenir). Mais on trouve aussi InParty, comme dans l'exemple suivant, le dialogue de Ribald pour reconnaître la présence de Mazzy :
    Code:
    InParty("Mazzy")
    See("Mazzy")
    !StateCheck("Mazzy",STATE_SLEEPING)
    Global("RibaldMazzy","LOCALS",0)
    J'ignore pourquoi on trouve les deux formes. On pourrait croire que IsValidForPartyDialog est un trigger incluant tous les tests de cet exemple mais IESDP est très peu bavard sur ce trigger.

  6. #6
    Date d'inscription
    May 2004
    Localisation
    Angers
    Messages
    1 102
    Comment j'ai fait ? Bon, reprenons...

    Au départ, j'avais tout mis dans le même fichier dialogue, nommé "flora.d", et considéré comme le dialogue associé au personnage "Flora" via CreMaker. Cependant, ce fichier dialogue ne fonctionne que lorsque le personnage est en-dehors du groupe. Autrement dit, on mettra dans ce fichier le dialogue qui permettra de recruter le PNJ.

    Donc, comme le dialogue devait avoir lieu après le recrutement du PNJ, ça ne pouvait pas marcher.

    A partir du moment où un personnage est recruté, il est doté de plusieurs fichiers dialogues spécifiques ( je prendrai ici l'exemple de mon PNJ, Flora ) : BFLORA.dlg ( pour les banters ), FLORAP ( lorsque le PNJ est renvoyé du groupe ), FLORAJ ( pour les diverses interventions du PNJ en cours de partie ), je dois en oublier un, mais je sais plus lequel.

    Suivant ce que je viens de dire, l'intervention de mon PNJ doit être écrite dans un nouveau fichier .d ( qui sera ensuite compilé en .dlg ) que je nomme FLORAJ.d. Et voilà, ça fonctionne... car à partir du moment où le PNJ est recruté, il ne tiens plus compte que de ces fichiers que j'ai cité, le "Flora.d" ne fonctionne donc plus.


    Maintenant pour mon autre problème, alors oui c'est bien du "IsValidForPartyDialog" dont je parlais, désolé je me suis trompé en écrivant . Weidu reconnaît bien le trigger puisqu'il n'y a pas de message d'erreur, c'est dans le jeu que ça ne fonctionne pas. Je me dis que ça a peut-être un rapport avec le fichier .cre, enfin, tant que ça marche avec l'autre trigger, "InParty", ça me va...


  7. #7
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages
    6 455
    Merci pour les explications que tu as fournies qui sont très intéressantes pour les personnes intéressées par la création d'un PNJ. C'est peut-être une introduction utile au tutorial de xena.

    Cela dit, j'aurais dû être plus explicite pour ma demande d'explication. Ton premier message montrait une méthode de modification "à la main" des dialogues n'exploitant pas les capacités un peu avancées de WeiDU qui simplifient ce genre d'ajout. Donc ma question portait plutôt sur le fait de savoir quelle commandes tu avais finalement utilisées : INTERJECT, CHAIN, ... avec éventuellement un extrait de code montrant l'équivalent (a priori beaucoup plus simple) de ce que tu avais montré dans ton premier message. Une sorte de "ne faites pas ça mais plus simplement ceci".

    J'ai toutefois une toute petite réserve. L'utilisation des 4 fichiers DLG (au fait, le quatrième, c'est celui qui sert avant le premier recrutement) n'est pas obligatoire mais elle a l'avantage de respecter la convention de nommage mise en place par Bioware. Par ailleurs elle simplifie l'écriture des conditions de déclenchement des différentes répliques (par exemple en évitant d'avoir à traiter la présence dans le groupe) et est donc préférable.
    Enfin, il n'y a pas de lien direct entre fichier .D et fichier .DLG. L'ajout par WeiDU des éléments dans l'un ou l'autre des fichiers DLG dépend simplement des instructions BEGIN <nom du DLG> ou APPEND <nom du DLG> qui précèdent les blocs d'arborescence de discussion dans ton fichier .D. Tu peux donc avoir un seul et même fichier .D si tu le souhaites ou au contraire en avoir 10 rien que pour générer le fichier Bxxx (par exemple si ton personnage est très bavard avec les autres membres du groupe et que tu veux éviter d'avoir un fichier .D trop gros). Mais c'est bien plus simple pour t'y retrouver si tu as effectivement un fichier .D par DLG.

  8. #8
    Date d'inscription
    May 2004
    Localisation
    Angers
    Messages
    1 102
    Je suis d'accord avec ton dernier paragraphe, j'avais dû mal m'exprimer .

    J'ai simplement utilisé la commande APPEND, comme prévu au départ, parce que INTERJECT et INTERJECT_COPY_TRANS causent quelques petits problèmes embêtants assez difficiles à décrire, mais ce que je peux dire, c'est que dans mon cas, où je cherche à faire intervenir un PNJ alors que normalement le PJ a plusieurs choix de réplique à ce moment, ça fou le bourdel dans le fichier .dlg.

    Cependant, je viens de me rendre compte combien il était important de mettre bien ordre les fichiers .d. Par exemple, bien faire attention à mettre tous les dialogues d'un PNJ externe ( en utilisant APPEND ) au même endroit, histoire qu'il n'y ait pas plusieurs fois le même APPEND, sinon certains dialogues peuvent ne pas fonctionner. Il faut aussi mettre les dialogues du PNJ en premier dans le fichier, puis les APPEND et les INTERJECT_COPY_TRANS.

    L'utilisation de la commande APPEND n'est finalement pas si compliquée, à partir du moment où comme je l'ai dit il faut s'organiser et organiser proprement le fichier dialogue.


Discussions similaires

  1. [KIM] Dialogue arrêté avec Adalon
    Par bobo_1 dans le forum Kim
    Réponses: 5
    Dernier message: 01/10/2008, 18h56
  2. [MOD] Dialogue étrange avec Anomen
    Par Django-Dren dans le forum Le Bazar de l'Aventurier
    Réponses: 3
    Dernier message: 06/03/2008, 20h48
  3. [VALEN] Pas de dialogue avec le PJ ?
    Par nael dans le forum Compagnons d'Amn : Les modules dit "PNJ"
    Réponses: 2
    Dernier message: 14/04/2007, 15h27
  4. [BUG] Dialogue vide avec Firkraag
    Par Guillaume dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 14
    Dernier message: 20/08/2005, 11h41

Les tags pour cette discussion

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243