Affichage des résultats 1 à 5 sur 5

Discussion: [DLG] Comment utiliser des variables dans un dialogue ?

  1. #1
    Date d'inscription
    March 2010
    Localisation
    Paris
    Messages 
    1 043

    [DLG] Comment utiliser des variables dans un dialogue ?

    Petite question que je n'ai pas encore approfondi de mon coté.

    Si dans le cadre d'un dialogue, le Charname fait un choix de réponse qui oriente l'histoire, je suppose qu'il est possible de mettre à jour des paramètres via le dialogue?

    Exemple
    Le Charname se fait un ami ou un ennemi selon la réponse sélectionnée. On peut imaginer une variable du jeu qui s’appelle 'relation' qui prendra la valeur 'ami' ou 'ennemi'.

    Existe t'il des mots clés ACTION qui permettent de mettre à jour la valeur d'une variable?
    Existe t'il des mots clés CONDITION qui permettent de tester la valeur d'une variable?

    Dans le cadre de l'éditeur, je propose cette liste de mots clés CONDITION et ACTION. Existe-t-il un lien qui explique le rôle de chaque mot clé ?

    Cocrane
    Dernière modification par Freddy_Gwendo ; 25/03/2016 à 20h44. Motif: Modification du titre de la discussion

  2. #2
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 647
    Réponse en deux points :

    Si ce que tu cherches, c'est rendre ton interlocuteur ennemi, c'est simple. A la fin du dialogue, tu insères DO ~Enemy()~ EXIT.


    Quant aux variables, oui, on peut les gérer avec les dialogues, comme avec les scripts :

    30 SetGlobal(S:Name*,S:Area*,I:Value*)
    This action sets a variable (specified by name) in the scope (specified by area) to the value (specified by value).


    109 IncrementGlobal(S:Name*,S:Area*,I:Value*)
    This action alters the specified variable, in the specified scope, by the amount indicated. The amount can be positive or negative. Variables in the local scope cannot be changed with this action.

    Et tu peux les utiliser dans des conditions avec

    0x400F Global(S:Name*,S:Area*,I:Value*)
    Returns true only if the variable with name 1st parameter of type 2nd parameter has value 3rd parameter.


    0x4034 GlobalGT(S:Name*,S:Area*,I:Value*)
    See Global(S:Name*,S:Area*,I:Value*) except the variable must be greater than the value specified to be true.


    0x4035 GlobalLT(S:Name*,S:Area*,I:Value*)
    As above except for less than
    Le hic, c'est que la mise-à-jour des variables se fait lorsque le dialogue se termine.
    En d'autres termes, tu ne peux pas définir une variable dans une session de dialogue et t'en servir comme condition dans la même session. Il faut que le dialogue prenne fin pour qu'elle soit mise-à-jour.
    Une des astuces consistait à terminer le dialogue par une cinématique rapide qui se conclue par une reprise du dialogue déclenché en utilisant la variable modifiée.


    Heureusement, ToBEx remédie à ce problème, mais il faut l'installer et modifier les actions que je t'ai indiquées par celles de ToBEx : SetGlobal(....) est remplacé par DialogueSetGlobal(....) qui enregistre automatiquement la variable lorsqu'elle est définie pendant une session du dialogue. On peut donc utiliser sa dernière définition dans une condition ultérieure pendant la même session.


    Quant aux liens, tu trouveras ton bonheur dans la bible IESDP :

    - Actions : http://iesdp.gibberlings3.net/script...ions/index.htm
    - Triggers : http://iesdp.gibberlings3.net/script...gers/index.htm
    Dernière modification par Freddy_Gwendo ; 11/08/2013 à 00h24.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  3. #3
    Date d'inscription
    July 2003
    Localisation
    Plaisir
    Messages 
    6 832
    Dans le jeu, les variables utilisées sont des nombres. La signification des différentes valeurs est au choix de l'auteur. Une variable non utilisée vaut 0 en cas de test de sa valeur, il vaut donc mieux réserver 0 à ce cas. Dans ton cas, tu pourrais associer ami à 1 et ennemi à 2, 0 signifiant que le dialogue n'a pas encore eu lieu.

    La référence pour les actions et les triggers est encore et toujours IESDP.

    Pour fixer la valeur d'une variable, c'est la fonction SetGlobal. Il existe aussi IncrementGlobal pour ajouter ou retrancher une valeur à une variable (pas forcément 1). Elles sont décrites dans la page des actions. J'ai indiqué celles pour BG II puisque c'est le jeu que tu couvres, mais la liste varie d'un jeu à l'autre.

    Pour tester les variables, on utilise Global pour tester si une variable a une valeur bien précise. Il existe aussi des tests inférieur, supérieur : GlobalLT (Less Than) et GlobalGT (Greater Than). Ils sont décrits sur la page des triggers.
    Il existe aussi un moyen de comparer deux variables globales : GlobalsEqual, GlobalsLT, GlobalsGT.

    Il y a d'autres éléments qui peuvent servir dans des dialogues, notamment des variables de type timer (qui déclenchent lorsqu'un certain temps s'est écoulé), qui ont des actions et des triggers spécifiques. Cherche les noms de fonctions avec le mot Timer pour les trouver dans les pages indiquées.
    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
    March 2010
    Localisation
    Paris
    Messages 
    1 043
    Freddy_gendo, Ysaya,
    merci pour vos retours. Ca confirme ce que j'imaginais mis à par que les noms de variables sont des nombres. Ca va nécessiter d'être encore plus vigilant dans le codage script et dialogue.

    La liste des conditions et actions étant très longue, je sais quoi faire dans le métro Parisien si je m'ennuie.

    D'après ce que j'ai vu, les variables peuvent être créées par rapport à une zone Area mais pouvons nous en créer par rapport à toutes les maps (sorte de variable globale au jeu).
    Exemple:
    le mod est divisé en n chapitres.

    Selon le chapitre en cours les évènements ne seront pas les mêmes. J'ai donc besoin de savoir à tous moments quelque soit la carte à quel chapitre on est.

    Cocrane

  5. #5
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 647
    Petite précision : ce sont les valeurs des variables qui sont des nombres.

    Ex : SetGlobal("GWEnemy";"LOCALS";1) --> la créature à laquelle cette variable est appliquée devient ennemie.

    Quant au champ d'application des variables, il y en a 3 :

    - GLOBAL : s'applique dans tout le jeu.
    - AREA : s'applique uniquement dans une zone.
    - LOCALS : s'applique une créature et est reprise dans son script et/ou ses dialogues.

    D'où :

    Code:
    IF
      Global("GWExplore";"GLOBAL",1)
      Global("GWExplore";"GW0001";0)
    THEN
      RESPONSE #100
        SetGlobal("GWExplore";"GW0001",1)
        Explore()
    END

    --> La valeur "1" de la variable GWExplore indique que les cartes ne sont plus recouvertes par le "brouillard de guerre".
    --> Le script précédent en début de GW0001.bcs supprime le brouillard lorsque je pénètre dans la carte. Je dois le rajouter à toutes les cartes concernées.

    En gros, tu peux utiliser le même nom de variable pour les cartes que pour des codes globaux, mais ça devient vite difficile de s'y retrouver...

    Quant à ta gestion des chapitres, j'ai utilisé des variables globales, du style SetGlobal("GWMission";"GLOBAL";n) avec n dépendant du degré d'achèvement de la mission ou de la connaissance de certains éléments.
    Chaque fois que l'on pénètre dans une carte, un script du style du précédent permet d'accéder à certaines parties de la carte, ouvre des portes, affiche des animations autrefois désactivées, active des spawn points, crée de nouvelles créatures à des endroits spécifiques, etc....

    Tu pourrait procéder de même avec les chapitres.
    Dernière modification par Freddy_Gwendo ; 25/03/2016 à 20h42.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

Discussions similaires

  1. Réponses: 3
    Dernier message: 30/11/2015, 07h48
  2. [WeiDU] Définition automatique des variables RGB dans les effets #51 et 52
    Par Freddy_Gwendo dans le forum Programmation WeiDU
    Réponses: 3
    Dernier message: 19/10/2015, 15h32
  3. TEXTSCREEN : comment l'utiliser ?
    Par Cocrane dans le forum Fichiers images
    Réponses: 19
    Dernier message: 05/10/2014, 17h21
  4. [LVL1NPC] Comment l'utiliser?
    Par Lycein dans le forum Le Bazar de l'Aventurier
    Réponses: 3
    Dernier message: 18/11/2011, 11h02
  5. [BG2][BUG] [SPOILER] Demande de global variables pour réparer un trou dans le scénario
    Par Folken dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 2
    Dernier message: 13/03/2010, 10h32

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 252 253 254 255 256