Affichage des résultats 1 à 5 sur 5

Discussion: [PNJ] Je n'arrive pas à implanter correctement mon NPC dans le jeu

  1. #1
    Avatar de phoeunix
    phoeunix est déconnecté Punching-ball de service (avec un solide penchant masochiste)
    Date d'inscription
    février 2008
    Localisation
    Nice
    Messages 
    471

    [PNJ] Je n'arrive pas à implanter correctement mon NPC dans le jeu

    Salutations.
    Je suis actuellement en train de créer un mod introduisant un PNJ recrutable supplémentaire qui s'appellera normalement Leila.
    A ce titre, j'ai voulu dès à présent créer une petite installation pour implanter Leila sur son point d'apparition dans le Bosquet aux Druides, lui mettre un dialogue de recrutement basique et lui permettre de rejoindre le groupe.

    Je me heurte à plusieurs problèmes :
    - Leila apparaît dès qu'on arrive dans le Bosquet aux Druides de n'importe quel point de la carte plutot que du point voulu.
    - Ce n'est pas une seule Leila mais une nuée de Leila qui apparaît en cascade.
    - Quand chaque Leila apparait elle lance un premier dialogue "Salut." avec le son "Bonjour la compagnie" attribué habituellement aux bourgeoises.
    - Puis elle vient au contact du groupe et enclenche le dialogue de recrutement mais le texte est désordonné : elle dit le texte @00000 au lieu du @0 et le PJ a le texte @1 à la place du choix @00001. Les autres textes sont les bons et le recrutement fonctionne avec la bonne séquence de dialogue.

    A part ça, le perso une fois dans le groupe est opérationnel et a les caractéristiques prévues.

    L'éventreuse a testé l'install aussi chez elle et a eu exactement le même résultat que moi.
    Voici ci-dessous le détail des fichiers de l'install.
    Merci d'avance à ceux qui m'aideront, j'espère qu'ils pourront me donner des précisions détaillées sur ce qui cloche. Vu que je débute, une correction précise serait la bienvenue.

    Le fichier DDLeila.d :
    Code:
    BEGIN ~DDLeila~
    
    // Rencontre :
    
    IF ~NumTimesTalkedTo(0)
       
     Global("DDLeilaExists","AR1900",1)~ THEN BEGIN Coucou
      SAY @0
      IF ~~ THEN REPLY @00000 GOTO Welcome
      IF ~~ THEN REPLY @00001 GOTO CasseToi
    END
    
    IF ~~ THEN BEGIN Welcome
      SAY @1
      IF ~~ THEN DO ~JoinParty()~ EXIT
    END
    
    IF ~~ THEN BEGIN CasseToi
      SAY @2
      IF ~~ THEN DO ~EscapeArea()~ EXIT
    END
    Le setup.tra
    Code:
    @0 = ~Leila NPC : version Beta 0.00~
    Le script DDLeila.baf :
    Code:
    IF
    See([PC])
    NumTimesTalkedTo(0)
    THEN
    RESPONSE #100
    Dialogue(Nearest([PC]))
    END
    Le script DDAr1900.baf
    Code:
    // Spawn Bosquet des Druides
    
    IF
      Global("DDLeila","AR1900",0)
    THEN
      RESPONSE #100
        SetGlobal("DDLeilaExists","AR1900",1)
        CreateCreature("DDLeila",[62.43],10)
    END
    Le setup.tp2 :
    Code:
    BACKUP ~Leila/backup~
    AUTHOR ~...~
    
    LANGUAGE ~Francais~
         ~french~
         ~Leila/Translations/French/Setup.tra~
    
    
    BEGIN @0
    
    // Creatures
    COPY ~Leila/Creatures/DDLeila.cre~ ~override~
    
    // Dialogues
    COMPILE ~Leila/Dialogues/DDLeila.d~
        USING ~Leila/Translations/French/DDLeila.tra~
    
    // Scripts
    COMPILE ~Leila/Scripts/DDLeila.baf~
        USING ~Leila/Translations/French/DDLeila.tra~
    
    // Pictures
    COPY ~Leila/Pictures~ ~override~
    
    // Scripts of Area
    EXTEND_BOTTOM ~AR1900.bcs~ ~Leila/Scripts/DDAr1900.baf~
    Dernière modification par Freddy_Gwendo ; 08/04/2016 à 06h41. Motif: Modification du titre de la discussion et mise en page

  2. #2
    Date d'inscription
    juillet 2003
    Localisation
    Plaisir
    Messages 
    6 940

    Re : Problème d'implantation du personnage.

    Petit exercice de mathématique amusante dans un autre contexte. Supposons que tu gagnes 1 € par mois et que tu veuilles négocier un changement de salaire (a priori une augmentation). Irais-tu demander à ton patron de modifier ton salaire pour le passer à 00001 € ?

    Bref, pour répondre à un de tes problèmes, l'apparition des "mauvaises" répliques, il te suffira de t'assurer que chaque valeur attribuée à un texte est bien différente des autres. WeiDU considère la valeur indiquée après le '@' comme un nombre et, comme j'ai cherché à le suggérer par mon petit exercice, ajouter des 0 devant un nombre n'en a jamais changé la valeur. Dès lors WeiDU prend le premier texte qui porte la valeur 0 lorsque tu précises @0 ou @0000.

    Quand au problème concernant l'apparition multiple de ton personnage, cette fois-ci je ferai plutôt appel au rappel de langue française. Oui, c'est ma journée professeur !

    Dans le jeu, les scripts s'exécutent en permanence. En pratique, le jeu exécute les scripts au rythme de répétition indiqué dans la configuration de BGConfig. En général la fréquence de l'IA est fixée à 30, donc 30 répétitions par seconde (si les actions demandées sont très courtes). Donc ton script n'arrête pas de s'exécuter et faute d'un mécanisme adapté pour l'empêcher, tes actions vont se répéter à l'infini (la création du personnage). C'est l'objectif du test Global("xxxx", "AR1900", 0) qui vérifie que la variable "xxxx" est bien à 0 pour déclencher l'action.
    Par ailleurs les variables dans des scripts sont identifiées par des textes. Comme dans tous les langages, deux mots qui ne s'écrivent pas pareils désignent des variables différents.

    Donc quand tu testes la variable "DDLeila" à 0 et qu'ensuite tu mets à 1 la variable "DDLeilaExists" (note bien que tu as ajouté "Exists" en plus), forcément la variable "DDLeila" reste à 0, donc le script se dit que la condition est encore vérifié et qu'il faut effectuer l'action, à savoir créer le personnage. Et ainsi de suite...

    Jeune phoeunix / Shalendra, vous me copierez 100 fois : "je ne remettrai plus ma copie sans l'avoir préalablement relue".

    En ce qui concerne les conditions d'apparition du personnage, rien dans ce que tu as écrit ne permet de conditionner son apparition en fonction de ton point d'arrivée sur la carte. D'une part, ton script la crée dès que tu arrives sur la carte, la seule condition étant qu'elle n'existe pas déjà (enfin, dès que tu auras corrigé le problème de nom de variable). D'autre part, la commande qui force son apparition définit de façon fixe le point de création en [62.43], soit en haut à gauche de la carte. Ta remarque laisse entendre que tu n'es pas satisfait du point auquel Leila apparaît mais je ne sais pas ce que tu souhaitais obtenir. Il te faudrait le préciser pour qu'on comprenne ce qui ne satisfait pas.

    Pour terminer, comme tu n'as pas fourni le contenu du fichier .tra associé à ton dialogue, il n'est pas possible de répondre à ta remarque concernant le doublage vocal. C'est en effet sur la ligne @0 (contenant a priori @0 = ~Salut.~ si j'ai bien compris ce que tu attendais) qu'on pourrait trouver les éléments permettant de comprendre. Le doublage vocal dépend d'une association entre le texte et le son qui se fait à partir du fichier .tra en indiquant après le texte le nom du fichier son associé sous la forme [NOMFIC] ou NOMFIC désigne un nom de fichier de jusqu'à 8 caractères.

    Il faut également savoir que WeiDU n'ajoute de nouveau texte dans le fichier dialog.tlk que si les textes de ton mod n'existent pas déjà dans le fichier. Si le texte est déjà présent, WeiDU se contente de faire pointer ton dialogue sur le texte existant. Or une phrase aussi simple et courante que ~Salut.~ a de très grandes chances d'exister. Si le jeu original a associé au texte ~Salut.~ le son "Bonjour la compagnie", ton dialogue récupérera donc et le texte et le son.
    Je ne suis pas certain de la façon de procéder pour éviter un tel problème. La meilleure solution consiste à trouver une réplique initiale plus originale pour éviter que WeiDU ne puisse réutiliser un texte existant et le son éventuellement associé.
    De toute façon, il faudrait que tu nous fournisses le contenu du fichier .tra du dialogue pour en avoir le coeur net.

    Sur ce, bienvenue et bonne continuation dans le monde merveilleux mais sans pitié de la création de mod.

  3. #3
    Avatar de phoeunix
    phoeunix est déconnecté Punching-ball de service (avec un solide penchant masochiste)
    Date d'inscription
    février 2008
    Localisation
    Nice
    Messages 
    471

    Re : Problème d'implantation du personnage.

    Des nouvelles du front... De bonnes nouvelles même

    Grâce à tes précieuses indictions Isaya, j'ai pu avec l'aide de Jack l'éventreuse, régler la plupart des problèmes :

    - Le dialogue de recrutement marche impecc, les réponses s'emboitent bien.
    - Y a plus le dialogue subsidiaire avec le "Salut" et le son. (le "salut" ne faisait pas partie d'un des dialogues du .tra)
    - Une seule et unique Leila apparait.
    - Leila apparait effectivement en haut à gauche de la carte. Je voudrais la placer ailleurs mais je sais pas faire mais c'est pas bien grave pour l'instant.


    Donc tout va bien SAUF un dernier truc dont je me suis rendu compte qu'aujourd'hui : Leila n'a pas son prénom dans la fiche de personnage, ni dans les dialogues, ni dans le jeu quand je mets le curseur dessus, ni dans l'inventaire (nulle part quoi).
    Ca me chiffonne un peu et je sais pas comment m'y prendre.
    C'est donc l'occasion d'en remettre une couche :

    Le SFLeila.d (j'ai changé de préfix, celui là est le définitif que j'ai fait enregistrer ; j'ai fait toutes les modifs de préfixe dans tous les fichiers) :
    Code:
    BEGIN ~SFLeila~
    
    // Rencontre :
    
    IF ~NumTimesTalkedTo(0)
        Global("SFLeilaExists","AR1900",2)
        Global("SFLeila","AR1900",2)~ THEN BEGIN Coucou
      SAY @1
      IF ~~ THEN REPLY @10000 GOTO Welcome
      IF ~~ THEN REPLY @10001 GOTO CasseToi
    END
    
    IF ~~ THEN BEGIN Welcome
      SAY @2
      IF ~~ THEN DO ~JoinParty()
                     IncrementGlobal("SFLeilaExists","AR1900",1)
                     IncrementGlobal("SFLeila","AR1900",1)~ EXIT
    END
    
    IF ~~ THEN BEGIN CasseToi
      SAY @3
      IF ~~ THEN DO ~EscapeArea()~ EXIT
    END
    Le SFLeila.tra (celui-ci n'était pas spécialement destiné à la lecture par autrui et je n'ai pas la prétention de penser qu'il fera dire d'autres que moi... la vie est triste parfois) :
    Code:
    @50000 = ~Leila~
    
    // Rencontre :
    
    @1 = ~Salut toi, tu m'emmenes faire un tour ?~
    @10000 = ~Oui pourquoi pas, tu m'as l'air physiquement intelligente !~
    @10001 = ~Je crois que tu es un petit trop complètement trop sûre de toi, alors tu vas rester ici sagement comme une conne à attendre que la pluie te tombe sur la gueule. Hahaha je t'ai cassée !~
    @2 = ~Ca promet ! En route !~
    @3 = ~Lol, connard ! Mais dégage de là, vas te faire buter par un dragon !~
    Le setup.tra :
    Code:
    @0 = ~Leila NPC : version Beta 0.00~
    Le SFLeila.baf :
    Code:
    IF
      Global("SFLeilaExists","AR1900",1)
      Global("SFLeila","AR1900",1)
      !StateCheck(Player1,STATE_SLEEPING)
      !Detect([ENEMY])
      See([PC])
      NumTimesTalkedTo(0)
    THEN
      RESPONSE #100
      IncrementGlobal("SFLeilaExists","AR1900",1)
      IncrementGlobal("SFLeila","AR1900",1) 
      ActionOverride("SFLeila",StartDialogueNoSet(Player1))
    END
    Le SFAr1900.baf :
    Code:
    // Spawn Bosquet des Druides
    
    IF
      Global("SFLeila","AR1900",0)
    THEN
      RESPONSE #100
        SetGlobal("SFLeilaExists","AR1900",1)
        SetGlobal("SFLeila","AR1900",1)
        CreateCreature("SFLeila",[62.43],10)
       
    END
    Le setup.tp2 :
    Code:
    BACKUP ~Leila/backup~
    AUTHOR ~...~
    
    LANGUAGE ~Francais~
         ~french~
         ~Leila/Translations/French/Setup.tra~
    
    
    BEGIN @0
    
    // Creatures
    COPY ~Leila/Creatures/SFLeila.cre~ ~override~
    
    // Dialogues
    COMPILE ~Leila/Dialogues/SFLeila.d~
        USING ~Leila/Translations/French/SFLeila.tra~
    
    // Scripts
    COMPILE ~Leila/Scripts/SFLeila.baf~
        USING ~Leila/Translations/French/SFLeila.tra~
    
    // Pictures
    COPY ~Leila/Pictures~ ~override~
    
    // Scripts of Area
    EXTEND_BOTTOM ~AR1900.bcs~ ~Leila/Scripts/SFAr1900.baf~
    Concernant le SFLeila.cre :
    - quand je met Leila dans shortname, que je sauvegarde et que je rouvre, le prénom n'y est lus : est-ce normal ?
    - dans la section other attributes / scripting and dialog j'ai mis SFLeila dans Override script, Death Variable et Dialog file.


    D'avance, d'autres remerciements pour m'aider à doner son nom à Leila.

  4. #4
    Date d'inscription
    avril 2003
    Localisation
    Bordeaux
    Messages 
    1 151

    Re : Problème d'implantation du personnage.

    Il faut que tu rajoute une ligne dans ton setup.tra
    @1 = ~Leila~
    et que tu complètes l'instruction suivante dans ton setup.tp2
    COPY ~Leila/Creatures/SFLeila.cre~ ~override~
    SAY NAME1 @1
    SAY NAME2 @1
    Développeur du mod Akadis version disponible Beta 3.1b : envoyez moi un M. P
    Responsable de la maintenance du mod
    Kim

  5. #5
    Date d'inscription
    juillet 2003
    Localisation
    Plaisir
    Messages 
    6 940

    Re : Problème d'implantation du personnage.

    Certaines questions relèvent du b-a-ba de la création de mod. Je t'invite à lire tous les tutoriels référencés dans le sujet épinglé du forum sur les outils.
    En particulier, les deux sites indiqués en premier, même s'ils sont assez ancien, comportent des informations techniques (appelées "théorie" sur l'un d'entre eux) qui permettent de mieux appréhender certaines contraintes du moteur de jeu Infinity Engine. Les outils décrits sont un peu dépassés mais les informations restent vraies.
    Par ailleurs, xena a écrit un tutoriel sur la création de mod qui devrait également t'apporter des informations ou des exemples (j'y reviendrai).

    Sans développer (je te laisse le soin de lire les tutoriels pour mieux comprendre), voici quelques réponses.

    En ce qui concerne le nom de ton personnage, tu verras que les fichiers CRE, ITM, ... ne mémorisent pas les noms et descriptions. Ils se contentent de pointer sur le texte qui se trouvent dans le fichier dialog.tlk. C'est la raison pour laquelle tu ne retrouves pas le nom du personnage quand tu recharges le fichier CRE.
    Pour que le personnage ait un nom une fois dans le jeu, il faut que tu t'assures de l'ajouter au moment où la procédure d'installation (le fichier TP2) copie le fichier CRE. Si tu regardes le tutoriel de Xena, tu verras qu'elle a ajouté des lignes "SAY ..." juste après l'instruction "COPY ... xxxx.CRE ...".
    Puisque tu utilises (contrairement à son tutoriel) un fichier .tra pour les textes, il te faut remplacer le nom entre ~~ par une référence @50000 (valeur reprise de ton fichier SFLeila.tra) et déplacer la ligne @50000 = ~Leila~ dans ton fichier setup.tra. C'est en effet dans ce fichier que WeiDU ira chercher la référence, pas dans le fichier SFLeila.tra, qu'il n'utilisera que pour compiler le fichier SFLeila.d.
    Pour résumer, un fichier .tra est généralement associé à un fichier .d ou à un fichier .tp2. Il faut mettre dans Toto.tra les textes référencés dans Toto.d. Et il faut mettre dans setup.tra (plus précisément le fichier indiqué au tout début du fichier tp2) les textes référencés dans le fichier tp2.

    Dans un tout autre registre, j'ai noté que tu avais tenu compte de la modification du nom de variable pour la création. Mais maintenant tu as deux variables, c'est à dire très probablement une de trop. D'ailleurs tu testes partout les deux (sauf au début du script de la zone) et tu les modifies partout de la même façon. Très clairement, il y en a une d'inutile. Tu dois donc pourvoir supprimer celle qui n'est pas testée au moment de la création du personnage (SFLeilaExists).
    Par ailleurs, la modification des variables quand le personnage rejoint le groupe est inutile. Etant donné que tu lui as déjà parlé, la condition NumTimesTalkedTo(0) suffira à interdire de réutiliser la réplique initiale du dialogue (pas besoin de modifier les variables pour ça).

    Le point d'apparition de Leila est choisi par [62.43], des coordonnées X, Y. Si cette valeur ne te convient pas, utilise les touches rapides (peut-être X de mémoire) pour montrer le nom de la zone et qui donne également les valeurs X,Y sous le pointeur de la souris. Va à l'endroit souhaité et reprend les valeurs affichées pour la commande CreateCreature.

Discussions similaires

  1. Réponses: 3
    Dernier message: 18/02/2013, 23h12
  2. quelques dons que je ne parviens pas à traduire correctement?
    Par Ugo dans le forum La Chambre des Scribes
    Réponses: 9
    Dernier message: 11/02/2012, 16h40
  3. [BWP] Fixpack ne semble pas fonctionner correctement
    Par colonel klinck dans le forum Méga-mods : Big Picture, The Darkest Day, Shadow Over Soubar, Tortured Souls, Check The Bodies,
    Réponses: 5
    Dernier message: 03/12/2011, 16h52
  4. [ToBEx] Comment arriver a le faire fonctionner correctement ?
    Par saroumane dans le forum Le Bazar de l'Aventurier
    Réponses: 14
    Dernier message: 16/08/2011, 12h38
  5. [PNJ] Je n'arrive pas à installer mon mod de PNJ
    Par Maledarion dans le forum Créatures, Monstres et NPC
    Réponses: 7
    Dernier message: 13/11/2006, 21h14

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 244 245 246 247 248 249 250 251