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é...
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
- 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
.
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!
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.
-
- Adepte de Grondemarteau
- Ogre mage
- Messages : 1328
- Enregistré le : dim. 21 mars 2010, 12:03
- Localisation : Paris
- Contact :
- Statut : Hors ligne
.
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
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
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
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!
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.
- 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
.
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.
2. Une femme va ouvrir la porte derrière laquelle se sont cachés des enfants. L'un des enfants initie le dialogue.
Le tout, c'est de bien jouer avec les Wait(n) et/ou les SmallWait(n). Ça va te demander de faire des essais.
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.~
...
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)~
...
CARPE DIEM...Co-modérateur de La Forge et de La Chambre des Scribes
Moddeur qui s'arrache les cheveux...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
Bon a priori ta méthode est un poil plus compliquée car monFreddy_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.
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
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.~ ...
Le tout, c'est de bien jouer avec les Wait(n) et/ou les SmallWait(n). Ça va te demander de faire des essais.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)~ ...
[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.
- 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
.
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.
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...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
- Faust
- Adepte de Grondemarteau
- Loup noir
- Messages : 291
- Enregistré le : mer. 15 avr. 2009, 12:04
- Localisation : Wherever I may roam
- Statut : Hors ligne
.
J'ai réussi!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.
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.
- 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
.
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.
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...
Moddeur qui s'arrache les cheveux...
... avec Menace sur le Royaume de Diamant Éternel.
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 0 invité