Affichage des résultats 1 à 4 sur 4

Discussion: [DLG] Comment lancer un dialogue avec la condition "J'ai l'objet 'untel' " ?

  1. #1
    Date d'inscription
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41

    [DLG] Comment lancer un dialogue avec la condition "J'ai l'objet 'untel' " ?

    C'est encore moi !
    La question du jour portera sur les objets... L'exemple du jour sera la romance de SAERILEJ qui m'est revenue en tête parce qu'elle offrait la fonction que je souhaite reprendre dans mon mod :
    Retirer un item de CHARNAME pour valider une quête (même si ici c'est un poil différent)

    Bref, l'idée est simple : On lance la quête, on va pougner un pauvre NPC hostile dans un coin et on récupère un Item.
    On retourne voir le PNJ avec l'item et paf quête accomplie, go étape suivante.

    Sauf que... j'ai toujours pas deviner comment en faire une condition pour lancer le dialogue de fin a savoir : CHARNAME a un item précis sur lui.


    Le mod me laisse supposer divers truc quand je fouine dedans en diagonale :

    Code:
    BEGIN SAERILEJ
    IF ~Global("NSRingofGaxx","LOCALS",1)~ THEN BEGIN NSRingofGaxx
    SAY @1349
    IF ~~ THEN DO ~SetGlobal("NSRingofGaxx","LOCALS",2)DropItem("ring39",[-1.-1])~ EXIT
    END
    En gros... j'ai tendance a comprendre : si 'donne anneau a PJ' > lui faire dire 'non' > Jeter l'item au sol
    Pas ce que je veux, même si ça peut être utile à autre chose.

    Code:
    IF ~Global("NSRingofGaxx","LOCALS",3)~ THEN BEGIN NSDestroyGaxx
    SAY @1351 
    IF ~~ THEN DO ~SetGlobal("NSRingofGaxx","LOCALS",4)DestroyItem("ring39")~ EXIT
    END
    Ici, on s'est acharné à donner l'item à la demoiselle vu que la variable a loupé, du coup elle le détruit.
    C'est bien la fin de mon étape où l'item apporté disparait pour pas encombrer le jeu.

    Code:
    IF ~Global("NSGiftofTyrSOA","LOCALS",1)~ THEN BEGIN NSBooksSOA
    SAY @1347
    =
    @1348
    IF ~~ THEN DO ~GiveItemCreate("NSCHBOOK","Saerileth",0,0,0)GiveItemCreate("NSWSBOOK","Saerileth",0,0,0)SetGlobal("NSGiftofTyrSOA","LOCALS",2)~
    EXIT
    END
    La on apporte un journal à la demoiselle? du coup elle écrit deux trucs et on bloque le texte.
    En gros la fonction peut être utilisée pour donner une récompense.

    Tout ça m'est bien utile et demande une vérification, mais... reste mon problème. Comment être sur que CHARNAME a bien l'item?
    Dernière modification par Freddy_Gwendo ; 25/03/2016 à 21h01. 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
    Comme je n'ai jamais joué ce mod (les mods NPC me plaisent plutôt moyennement), je suis allé faire un tour dans ses fichiers pour te donner la manière de lancer ces dialogues.

    Autant partir sur une base connue que de se lancer dans un long discours théorique...


    Ce qui importe, ce sont les "actions" et les "triggers".

    D'ailleurs, je te conseille vivement de télécharger la doc IESDP afin de l'avoir en permanence lorsque tu codes.


    Bref, si tu veux initier ton dialogue à partir de conditions ("triggers"), tu dois définir ces conditions dans un script. Lorsqu'elles sont remplies, le script lance le dialogue.



    Dans le mod que tu cites, les conditions se trouvent dans les fichiers .baf de Saerileth, notamment SAERILET.baf et SAERIL25.baf (pour ToB).


    On y trouve ceci :

    Code:
    IF
     HasItem("ring39",Myself) <-- Condition : Saerileth possède l'anneau de Gaxx
     Global("NSRingofGaxx","LOCALS",0)
    THEN
     RESPONSE #100
      SetGlobal("NSRingofGaxx","LOCALS",1) <-- Variable remplissant la condition précédente
      StartDialogueNoSet(Player1) <-- Action : Saerileth s'adresse à <CHARNAME>
    END

    D'où le Dialogue :

    Code:
    IF ~Global("NSRingofGaxx","LOCALS",1)~ THEN BEGIN NSRingofGaxx
     SAY @1349 = ~Cet anneau est mauvais, <CHARNAME>! Je ne souffrirai pas à son toucher, ni ne le porterai.~
      IF ~~ THEN DO ~SetGlobal("NSRingofGaxx","LOCALS",2) <-- La variable est incrémentée d'une unité pour éviter de reprendre le dialogue en boucle
               DropItem("ring39",[-1.-1])~ EXIT <-- ACTION : Jette l'anneau
    END

    Puis le bloc de script

    Code:
    IF
     HasItem("ring39",Myself)
     Global("NSRingofGaxx","LOCALS",2)
    THEN
     RESPONSE #100
      SetGlobal("NSRingofGaxx","LOCALS",3)
      StartDialogueNoSet(Player1)
    END

    renvoie au dialogue suivant :

    Code:
    IF ~Global("NSRingofGaxx","LOCALS",3)~ THEN BEGIN NSDestroyGaxx
     SAY @1351 = ~Le fait que tu me redonnes cet anneau me dit que tu le détruirais par la lumière de Tyr.~ 
      IF ~~ THEN DO ~SetGlobal("NSRingofGaxx","LOCALS",4)
                     DestroyItem("ring39")~ EXIT
    END

    De même :

    Code:
    IF
     InParty(Myself) <-- Saerileth est dans le groupe
     Dead("Demogor2") <-- Démogorgon est retourné au "Paradis des Démons"
     AreaCheck("AR3000") <-- On se trouve dans cette zone
     Global("NSGiftofTyrSOA","LOCALS",0)
    THEN
     RESPONSE #100
      SetGlobal("NSGiftofTyrSOA","LOCALS",1) <-- Variable résumant les conditions précédentes
      StartDialogueNoSet(Player1)
    END

    lance ce dialogue :

    Code:
    IF ~Global("NSGiftofTyrSOA","LOCALS",1)~ THEN BEGIN NSBooksSOA
     SAY @1347 = ~<CHARNAME>! Qu'est ce que c'est? Il semble que l'Aveugle Tyr m'a béni avec sa faveur avec ces présents~
     =
         @1348 = ~Peut être que ces tomes contiennent un message du Dieu Mutilé. Regardons les!!~
      IF ~~ THEN DO ~GiveItemCreate("NSCHBOOK","Saerileth",0,0,0)
                     GiveItemCreate("NSWSBOOK","Saerileth",0,0,0)
                     SetGlobal("NSGiftofTyrSOA","LOCALS",2)~
    EXIT
    END


    Citation Envoyé par Klare
    Sauf que... j'ai toujours pas deviner comment en faire une condition pour lancer le dialogue de fin a savoir : CHARNAME a un item precis sur lui.
    C'est donc le trigger HasItem("ring39",Myself) !

    "Myself" renvoyant à Saerileth, utilise "Player1" pour <CHARNAME> si tu lances le dialogue à partir du script de ton NPC, ou conserve "Myself" si tu le lances à partir d'un des scripts de <CHARNAME> (mais évite le plus possible d'intervenir dans ces derniers).


    Tu peux aussi utiliser celui-ci :

    0x4042 PartyHasItem(S:Item*)
    Returns true if any of the party members have the specified item in their inventory. This trigger also checks with container items (e.g. Bags of Holding).



    Petite note : la variable Global("NSGiftofTyrSOA","LOCALS",1) utilise le code "LOCALS" qui n'est pris en compte que pour le script de Saerileth, si tu voulais une variable lançable n'importe quand et par n'importe qui, il faudrait utiliser le code "GLOBAL". On peut même utiliser des variables de zone (en remplaçant "LOCALS" par "AR3000" par exemple) opérationnelles uiquement dans certaines zones.
    Dernière modification par Freddy_Gwendo ; 14/03/2013 à 15h42.
    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
    April 2012
    Localisation
    Picardie, fausses terres de la pluie annuelle.
    Messages 
    41
    Tout marche, ma petite quete est réalisée. Snif, j'en pleurerai presque, j'ai plus que du dialogue a coder et ca devrais pas être un probleme.

    Merci beaucoup

    [Notament pour la doc que je ne retrouvais plus.]

  4. #4
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 647
    De rien.

    Mais je te conseille de lire les tutos d'Armand : presque toutes les opérations de base sur les dialogues y sont expliquées.


    Et bon courage pour la suite !
    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: 4
    Dernier message: 15/02/2016, 21h09
  2. Réponses: 7
    Dernier message: 13/04/2015, 11h33
  3. Réponses: 0
    Dernier message: 08/03/2013, 17h26
  4. Réponses: 2
    Dernier message: 14/12/2008, 22h53
  5. CD 1 griffé, comment lancer le jeu ?
    Par Traubon le nain dans le forum La Taverne d'Amkethran (Baldur's Gate 2)
    Réponses: 4
    Dernier message: 03/01/2006, 16h54

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