Oyez, oyez !

Les résultats du vote sur les meilleurs RPG de tous les temps sont désormais dévoilés dans ce message !

Merci à toutes et à tous pour votre participation !

N'hésitez pas à aller commenter, ajouter des jeux auxquels vous n'auriez pas pensé...

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

Répondre
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne

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

.

Message par Faust »

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!
[h=6]"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."[/h]Wherever I May Roam.
Cocrane
Adepte de Grondemarteau
Ogre mage
Messages : 1328
Enregistré le : dim. 21 mars 2010, 12:03
Localisation : Paris
Contact :
Statut : Hors ligne
.

Message par Cocrane »

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
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

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

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

[LEFT]IF ~~ THEN BEGIN 10
SAY @21
IF ~~ THEN DO ~ Face(6)
ActionOverride(Player1,MoveToPointNoInterrupt([212.246]))
SetGlobal("HireEl[r]in","GLOBAL",1)~
EXIT
END
[/LEFT]
[LEFT]IF
Global("HireEl[r]in","GLOBAL",1)
See([PC])
THEN
RESPONSE #100
Wait(2)
Dialogue(Nearest([PC]))
SetGlobal("HireEl[r]in","GLOBAL",2)
END[/LEFT]
[LEFT]
[/LEFT]
[LEFT]
IF WEIGHT #0 ~ Global("HireEl[r]in","GLOBAL",1)
~ THEN BEGIN 11
SAY @24
IF ~~ THEN REPLY @25 /* GOTO 12
END

[/LEFT]



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!
[h=6]"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."[/h]Wherever I May Roam.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

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 : Tout sélectionner

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 : Tout sélectionner

...
== 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...
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Cool, je vais essayer ça en rentrant ce soir !

Merci Freddy !
[h=6]"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."[/h]Wherever I May Roam.
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :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 : Tout sélectionner

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 : Tout sélectionner

...
== 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

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

[LEFT]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
[/LEFT]
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
[h=6]"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."[/h]Wherever I May Roam.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

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...
Avatar du membre
Faust
Adepte de Grondemarteau
Loup noir
Messages : 291
Enregistré le : mer. 15 avr. 2009, 12:04
Localisation : Wherever I may roam
Statut : Hors ligne
.

Message par Faust »

Freddy_Gwendo a écrit :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
[h=6]"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."[/h]Wherever I May Roam.
Avatar du membre
Freddy_Gwendo
Adepte de Grondemarteau
Orbe ancien
Messages : 5877
Enregistré le : sam. 23 avr. 2011, 00:26
Localisation : Égaré dans un vortex entre Féérune et le Royaume de Diamant Éternel
Statut : Hors ligne
.

Message par Freddy_Gwendo »

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...
Répondre

Retourner vers « Dialogues »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité