Je ne suis pas certain d'avoir compris ta question.
Mais tu as deux manières principales de lancer un dialogue. Les deux impliquant des variables :
Code : Tout sélectionner
Fichier .baf
IF
NumTimesTalkedTo(0) // Compteur de discussion
See(Player1)
Range(Player1,20)
THEN
RESPONSE #100
SmallWait(1)
FaceObject(Player1)
SmallWait(1)
StartDialogueNoSet(Player1)
END
puis Fichier .D
IF ~NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY ~blabla.~
IF ~~ THEN REPLY ~blabla1~ GOTO 1
IF ~~ THEN REPLY ~blabla2~ GOTO 1
IF ~~ THEN REPLY ~blabla3~ GOTO 3
END
ou
Fichier .baf
IF
Global("GWMove","LOCALS",2) // Variable
See(Player1)
THEN
RESPONSE #100
SmallWait(1)
FaceObject(Player1)
StartDialogueNoSet(Player1)
END
Fichier .D
IF ~Global("GWMove","LOCALS",2)~ THEN BEGIN 0
SAY ~blabla.~
IF ~~ THEN REPLY ~blabla1~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1 // Variable mofifiée pour éviter des boucles infinies du Dialogue
IF ~~ THEN REPLY ~blabla2~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1
IF ~~ THEN REPLY ~blabla3~ DO ~SetGlobal("GWMove","LOCALS",4)~ GOTO 3
END
Tu peux aussi mixer les deux :
Code : Tout sélectionner
Fichier .baf
IF
Global("GWMove","LOCALS",2) // Variable
See(Player1)
NumTimesTalkedTo(0)
THEN
RESPONSE #100
SmallWait(1)
FaceObject(Player1)
StartDialogueNoSet(Player1)
END
Fichier .D
IF ~Global("GWMove","LOCALS",2) NumTimesTalkedTo(0)~ THEN BEGIN 0
SAY ~blabla.~
IF ~~ THEN REPLY ~blabla1~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1 // Variable mofifiée pour éviter des boucles infinies du Dialogue
IF ~~ THEN REPLY ~blabla2~ DO ~SetGlobal("GWMove","LOCALS",3)~ GOTO 1
IF ~~ THEN REPLY ~blabla3~ DO ~SetGlobal("GWMove","LOCALS",4)~ GOTO 3
END
Dans ce cas, tu n'es pas obligé de changer la variable GWMove, puisqu'à la fin du dialogue, le compteur NumTimesTalkedTo sera passé à 1.
1. Les possibilités sont infinies, le but du jeu étant de définir tes variables dans un fichier baf :
- Soit dans celui de ton perso (KLARE.baf par exemple). Dans ce cas, tu peux utiliser toutes sortes de variables de types Global("Nom Variable","LOCALS",n) avec LOCALS s'appliquant uniquement au perso concerné, Global("Nom Variable","Nom de la Zone",n) qui ne s'applique que dans la zone (ou carte) concernée (par ex. "AR2500"), Global("Nom Variable","GLOBAL",n) qui gère une variable globale pouvant intervenir n'importe où dans tout le jeu.
- Soit dans celui d'une autre créature ou d'une carte.
2. Ensuite, tu utilises ces variables comme conditions de démarrage du dialogue :
- IF ~Global("Variable1","LOCALS",1)~ THEN BEGIN 0 : le dialogue commence à cette ligne lorsque Variable1 = 1 pour le personnage qui initie le dialogue.
- IF ~Global("Variable2","AR9999",2)~ THEN BEGIN 2 : le dialogue commence à cette ligne lorsque Variable2 = 2 et que tu te trouves dans la carte AR9999.
- IF ~Global("Variable3","GLOBAL",3)~ THEN BEGIN 8 : le dialogue commence à cette ligne lorsque Variable3 = 3 n'importe où dans le jeu.
Là encore, pour simplifier, je ne t'ai donné que des exemples simples impliquant une seule variable, mais tu peux en rajouter d'autres, comme l'assurance que le perso à qui tu t'adresses est disponible (pas mort, pas endormi, pas immobilisé...), est dans les parages (sinon, c'est un peu lourdingue), sans compter des combinaisons de variables différentes...
Bref, les possibilités sont infinies. La seule régle importante est que tu les reprennes dans tes dialogues et surtout que tu n'oublies pas de les modifier à la sortie du dialogue, sinon tes persos recommenceront à lancer le dialogue en boucle !
Et surtout, n'oublie-pas les "". Sans quoi, tu auras droit à des erreurs de compilation !
En espérant que cela réponde à ta question.