Affichage des résultats 1 à 9 sur 9

Discussion: [DLG, WsiDU] Interruption Dialogue déplacer CHARNAME, reprend Dialogue auto

  1. #1
    Date d'inscription
    April 2009
    Localisation
    Wherever I may roam
    Messages 
    237

    [DLG, WsiDU] Interruption Dialogue déplacer CHARNAME, reprend Dialogue auto

    Bonjour,

    Lors de la rencontre avec mon PNJ se trouvant en face d'une cheminée, CHARNAME à le choix d'un banter:

    ~Je souhaite simplement profiter du feu, et recevoir un peu de chaleur.~

    auquel la réponse est:

    (L'Elfe ne répond pas et se tourne de nouveau vers le feu.)~

    J'arrive à couper le dialogue (avec un simple EXIT, END), le temps de déplacer automatique CHARNAME face au feu de cheminée, et retourner le PNJ face au feu.

    En revanche je n'arrive pas à forcer mon PNJ a reprendre le dialogue avec CHARNAME. Je veux simplement interrompre le dialogue le temps du déplacement de CHARNAME (quelques secondes), faire relancer automatiquement le banter suivant du dialogue pour poursuivre le recrutement de mon PNJ.


    IF ~~ THEN BEGIN 10
    SAY @21
    IF ~~ THEN DO ~ Face(6)
    ActionOverride(Player1,MoveToPointNoInterrupt([212.246]))~ // Elrin se retourne puis CHARNAME se déplace
    EXIT
    IF ~~ THEN DO ~ Wait(5)
    Dialogue(Nearest([PC]))~
    GOTO 11
    END


    IF ~~ THEN BEGIN 11
    SAY @24 /* ~Vous examinez discrètement l'Elfe, ses yeux semblent envoutés par le mouvement des flammes~ */
    IF ~~ THEN REPLY @25 /* TEXTE A DEFINIR */ GOTO 12
    END


    Malheureusement cela ne fonctionne pas, à la place le dialogue continue au Banter suivant. Une idée de comment procéder afin de pouvoir parvenir à ce résultat?

    Merci pour votre aide!
    Dernière modification par Faust ; 28/03/2018 à 19h53.
    "Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."

    Wherever I May Roam.

  2. #2
    Date d'inscription
    March 2010
    Localisation
    Paris
    Messages 
    1 043
    fichier_PNJ.baf
    Tu testes la distance entre ton PNJ et le player via RANGE.
    Si la distance est adéquate, tu passes une variable à 1 et tu lances le dialogue.
    Dans ton block BEGIN 11, tu vérifies que la condition est à 1 pour déclencher le block.

    Il y a sans doute d'autres moyens. A chaud, je ferai comme ça.

    Cocrane

  3. #3
    Date d'inscription
    April 2009
    Localisation
    Wherever I may roam
    Messages 
    237
    Oui effectivement, ça marche!

    Le script fait le lien:

    BEGIN ~El[r]in~
    IF ~ NumTimesTalkedTo(0)
    THEN DO SetGlobal("HireEl[r]in","GLOBAL",0)
    ~ THEN BEGIN 1

    ----------------------------------------------------------------

    IF ~~ THEN BEGIN 10
    SAY @21
    IF ~~ THEN DO ~ Face(6)
    ActionOverride(Player1,MoveToPointNoInterrupt([212.246]))
    SetGlobal("HireEl[r]in","GLOBAL",1)~
    EXIT
    END

    IF
    Global("HireEl[r]in","GLOBAL",1)
    See([PC])
    THEN
    RESPONSE #100
    Wait(2)
    Dialogue(Nearest([PC]))
    SetGlobal("HireEl[r]in","GLOBAL",2)
    END


    IF WEIGHT #0 ~ Global("HireEl[r]in","GLOBAL",1)
    ~ THEN BEGIN 11
    SAY @24
    IF ~~ THEN REPLY @25 /* GOTO 12
    END




    J'aurais aimé pouvoir faire ça uniquement en passant par des triggers situés dans le fichiers D, mais en attendant un autre moyen c'est parfait.

    Merci Coco!
    Dernière modification par Faust ; 28/03/2018 à 22h30.
    "Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."

    Wherever I May Roam.

  4. #4
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 646
    Tu n'es pas obligé de passer par un script.

    Voici deux extraits de dialogues :

    1. Ernest appelle Albert qui arrive dans la carte. Une fois Albert arrivé, Ernest reprend le dialogue.

    Code:
    CHAIN GW0003ER Ernest002.03
    @3002007 // ~Bon, bon, ça va. Vous m'avez l'air d'être de bons bougres. Sinon, vous n'auriez pas occis ces salopards.
    //	Mais faut pas m'en vouloir. On est un peu parano ces temps-ci. Bougez pas, j'vais le chercher.		Albert ! Al...bert !~
    
    DO ~SetCutSceneLite(TRUE)
    Wait(1) 
    MoveToPointNoInterrupt([4986.1423]) 
    Wait(2) 
    CreateCreature("GW0003Al",[5090.1250],2)	
    MoveToPointNoInterrupt([5040.1290]) 
    FaceObject(Player1)
    ActionOverride("GW0003Al",MoveToPointNoInterrupt([5065.1460])) 
    ActionOverride("GW0003Al",FaceObject("Player1")) 
    SmallWait(6) 
    Wait(4) 
    SetCutSceneLite(FALSE) 
    SetGlobal("GWPrison","GW0002",4) 
    ActionOverride("GW0003Er",StartDialogNoSet(Player1))~ EXIT
    
    
    CHAIN IF ~AreaCheck("GW0002") Global("GWPrison","GW0002",4)~ THEN GW0003ER Ernest002.10
    @3002008 // ~Vous êtes toujours là ?		C'est ces gens qui veulent te parler, Albert.~
    ...
    2. Une femme va ouvrir la porte derrière laquelle se sont cachés des enfants. L'un des enfants initie le dialogue.
    Code:
    ...
    == GW0007TI @3007204 // ~Bon, je vais aller les chercher.~
    
    IF ~~ DO ~SetCutSceneLite(TRUE) 
    Wait(1) 
    MoveToObjectNoInterrupt("DOOR01") 
    Wait(2) 
    OpenDoor("DOOR01") 
    MoveToPoint([698.258]) 
    CreateCreature("GW0007G1",[850.150],0) 
    ActionOverride("GW0007G1",MoveToPointNoInterrupt([735.262])) 
    ActionOverride("GW0007G1",FaceObject("GW0001Fi")) 
    Wait(3)
    CreateCreature("GW0007B2",[850.150],0) 
    ActionOverride("GW0007B2",MoveToPointNoInterrupt([850.190])) 
    ActionOverride("GW0007B2",MoveToPointNoInterrupt([780.190])) 
    ActionOverride("GW0007B2",Face(4)) Wait(2) // SmallWait(6)
    CreateCreature("GW0007G2",[850.150],0) 
    ActionOverride("GW0007G2",MoveToPointNoInterrupt([795.250])) 
    ActionOverride("GW0007G2",Face(4)) 
    Wait(2) // SmallWait(6)
    CreateCreature("GW0007Ja",[850.150],0) 
    ActionOverride("GW0007Ja",MoveToPointNoInterrupt([660.210])) 
    ActionOverride("GW0007Ja",FaceObject("GW0001Fi")) 
    SmallWait(6) 
    Wait(4) 
    SetCutSceneLite(FALSE) 
    SetGlobal("GWFirmin","GW0007",2) 
    ActionOverride("GW0007Ja",StartDialogNoSet("GW0001Fi"))~ EXIT
    
    CHAIN IF ~AreaCheck("GW0007") Global("GWFirmin","GW0007",2) NumTimesTalkedTo(0)~ THEN GW0007JA Jeannot.41
    @3007301 // ~Papa !~
    DO ~SetGlobal("GWFirmin","GW0007",3)~
    ...
    Le tout, c'est de bien jouer avec les Wait(n) et/ou les SmallWait(n). Ça va te demander de faire des essais.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  5. #5
    Date d'inscription
    April 2009
    Localisation
    Wherever I may roam
    Messages 
    237
    Cool, je vais essayer ça en rentrant ce soir !

    Merci Freddy !
    "Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."

    Wherever I May Roam.

  6. #6
    Date d'inscription
    April 2009
    Localisation
    Wherever I may roam
    Messages 
    237
    Citation Envoyé par Freddy_Gwendo Voir le message
    Tu n'es pas obligé de passer par un script.

    Voici deux extraits de dialogues :

    1. Ernest appelle Albert qui arrive dans la carte. Une fois Albert arrivé, Ernest reprend le dialogue.

    Code:
    CHAIN GW0003ER Ernest002.03
    @3002007 // ~Bon, bon, ça va. Vous m'avez l'air d'être de bons bougres. Sinon, vous n'auriez pas occis ces salopards.
    //    Mais faut pas m'en vouloir. On est un peu parano ces temps-ci. Bougez pas, j'vais le chercher.        Albert ! Al...bert !~
    
    DO ~SetCutSceneLite(TRUE)
    Wait(1) 
    MoveToPointNoInterrupt([4986.1423]) 
    Wait(2) 
    CreateCreature("GW0003Al",[5090.1250],2)    
    MoveToPointNoInterrupt([5040.1290]) 
    FaceObject(Player1)
    ActionOverride("GW0003Al",MoveToPointNoInterrupt([5065.1460])) 
    ActionOverride("GW0003Al",FaceObject("Player1")) 
    SmallWait(6) 
    Wait(4) 
    SetCutSceneLite(FALSE) 
    SetGlobal("GWPrison","GW0002",4) 
    ActionOverride("GW0003Er",StartDialogNoSet(Player1))~ EXIT
    
    
    CHAIN IF ~AreaCheck("GW0002") Global("GWPrison","GW0002",4)~ THEN GW0003ER Ernest002.10
    @3002008 // ~Vous êtes toujours là ?        C'est ces gens qui veulent te parler, Albert.~
    ...
    2. Une femme va ouvrir la porte derrière laquelle se sont cachés des enfants. L'un des enfants initie le dialogue.
    Code:
    ...
    == GW0007TI @3007204 // ~Bon, je vais aller les chercher.~
    
    IF ~~ DO ~SetCutSceneLite(TRUE) 
    Wait(1) 
    MoveToObjectNoInterrupt("DOOR01") 
    Wait(2) 
    OpenDoor("DOOR01") 
    MoveToPoint([698.258]) 
    CreateCreature("GW0007G1",[850.150],0) 
    ActionOverride("GW0007G1",MoveToPointNoInterrupt([735.262])) 
    ActionOverride("GW0007G1",FaceObject("GW0001Fi")) 
    Wait(3)
    CreateCreature("GW0007B2",[850.150],0) 
    ActionOverride("GW0007B2",MoveToPointNoInterrupt([850.190])) 
    ActionOverride("GW0007B2",MoveToPointNoInterrupt([780.190])) 
    ActionOverride("GW0007B2",Face(4)) Wait(2) // SmallWait(6)
    CreateCreature("GW0007G2",[850.150],0) 
    ActionOverride("GW0007G2",MoveToPointNoInterrupt([795.250])) 
    ActionOverride("GW0007G2",Face(4)) 
    Wait(2) // SmallWait(6)
    CreateCreature("GW0007Ja",[850.150],0) 
    ActionOverride("GW0007Ja",MoveToPointNoInterrupt([660.210])) 
    ActionOverride("GW0007Ja",FaceObject("GW0001Fi")) 
    SmallWait(6) 
    Wait(4) 
    SetCutSceneLite(FALSE) 
    SetGlobal("GWFirmin","GW0007",2) 
    ActionOverride("GW0007Ja",StartDialogNoSet("GW0001Fi"))~ EXIT
    
    CHAIN IF ~AreaCheck("GW0007") Global("GWFirmin","GW0007",2) NumTimesTalkedTo(0)~ THEN GW0007JA Jeannot.41
    @3007301 // ~Papa !~
    DO ~SetGlobal("GWFirmin","GW0007",3)~
    ...
    Le tout, c'est de bien jouer avec les Wait(n) et/ou les SmallWait(n). Ça va te demander de faire des essais.
    Bon a priori ta méthode est un poil plus compliquée car mon

    DO ~SetCutSceneLite(TRUE)
    ne se déclenche qu'à la fin du dialogue, je pensais que cela permettait d'interrompre le dialogue et de le reprendre avec

    DO ~SetCutSceneLite(FALSE).

    Il y t'il besoin de faire comme dans ton exemple et d'utiliser des CHAIN pour que ça fonctionne?

    Ici mon .D

    IF ~~ THEN BEGIN 10
    SAY @21
    IF ~~ THEN DO ~SetCutSceneLite(TRUE)
    Wait(1)
    Face(6)
    Wait(2)
    ActionOverride(Player1,MoveToPointNoInterrupt([212.246]))
    SetCutSceneLite(FALSE)
    Wait(2) ~
    REPLY @24
    REPLY @25 GOTO 12
    END
    Dernière modification par Faust ; 29/03/2018 à 23h07.
    "Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."

    Wherever I May Roam.

  7. #7
    Date d'inscription
    April 2011
    Localisation
    Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
    Messages 
    4 646
    La procédure est lancée dans un bloc Action (DO), donc est indépendante de la manière d'écrire le dialogue (BEGIN ou CHAIN).

    Si tu veux que des persos effectuent des actions pendant un dialogue, tu es obligé de simuler une fin de dialogue pour leur laisser le temps de le faire. Dans ton cas, le premier exemple devrait fonctionner parfaitement.
    CARPE DIEM...
    Co-modérateur de La Forge et de La Chambre des Scribes
    Moddeur qui s'arrache les cheveux...

  8. #8
    Date d'inscription
    April 2009
    Localisation
    Wherever I may roam
    Messages 
    237
    Citation Envoyé par Freddy_Gwendo Voir le message
    La procédure est lancée dans un bloc Action (DO), donc est indépendante de la manière d'écrire le dialogue (BEGIN ou CHAIN).

    Si tu veux que des persos effectuent des actions pendant un dialogue, tu es obligé de simuler une fin de dialogue pour leur laisser le temps de le faire. Dans ton cas, le premier exemple devrait fonctionner parfaitement.
    J'ai réussi!

    Merci Freddy, ca rend encore mieux avec une Cutscene!

    IF ~~ THEN BEGIN 10
    SAY @21
    IF ~~ THEN DO ~
    SetGlobal("HireEl[r]in","GLOBAL",1)
    SetCutSceneLite(TRUE)
    Wait(1)
    Face(6)
    ActionOverride(Player1,MoveToPointNoInterrupt([212.246]))
    Wait(1)
    ActionOverride("El[r]in",StartDialogNoSet(Player1))
    Wait(4)
    SetCutSceneLite(FALSE)~
    EXIT
    END
    IF ~Global("HireEl[r]in","GLOBAL",1)~ THEN BEGIN 11
    SAY @22
    IF ~~ THEN REPLY @23 GOTO 12
    END
    "Wrath is the burden of those who haven't faith in humanity but there's no mean to avoid it. I guess it's my choice, just try to stand it."

    Wherever I May Roam.

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

    L'avantage de la Cutscene, c'est que tu n'as pas l'impression d'interrompre le dialogue, et qu'aucun script extérieur ne vienne se superposer au dialogue.

    Sinon, j'aurais plutôt inséré la variable SetGlobal("HireEl[r]in","GLOBAL",1) après le déplacement. Mais si ça fonctionne comme ça, c'est parfait.
    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: 2
    Dernier message: 09/10/2017, 17h29
  2. Bug de dialogue
    Par guismo02310 dans le forum Compagnons d'Amn : Les modules dit "PNJ"
    Réponses: 1
    Dernier message: 26/09/2016, 23h25
  3. DIALOGUE et .TRA
    Par Cocrane dans le forum Éditeur Baldur's Gate
    Réponses: 16
    Dernier message: 19/10/2013, 23h36
  4. Réponses: 21
    Dernier message: 24/04/2012, 21h24
  5. Le dialogue final
    Par abellio dans le forum Méga-mods : Big Picture, The Darkest Day, Shadow Over Soubar, Tortured Souls, Check The Bodies, Nev
    Réponses: 2
    Dernier message: 11/07/2007, 00h32

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