- Rigel 1er a écrit:
Dans les scripts de zones:
StartDialogueNoSet(): Ne prend pas en compte la distance; le PNJ vous apostrophe dès votre entrée en zone.
StartDialogue(): Prend en comtpe une distance (peut-on la choisir ou est-elle réglée par défaut?) avant que le PNJ vous adresse la parole.
Première chose : toutes les actions et toutes les triggers sont utilisables invariablement dans tous les types de fichier de script que ce soit des scripts de zone, de personnages, de cutscene etc....
Concernant les actions, il faut distinguer l'action en elle-même (dans le cas présent il s'agit de déclencher un dialogue) des conditions dans lesquelles on peut utiliser ces actions.
Par exemple, pour StartDialogueNoSet(), on peut l'utiliser de base, sans poser de conditions particulières (triggers), pour déclencher un dialogue avec un personnage qui n'est pas dans le champ de vision du groupe. C'est son utilisation maximale. Mais ça ne veut pas dire qu'on ne peut pas l'utiliser dans d'autres situations : pour cela, il faudra poser des triggers spécifiques.
Par exemple si je met le bloc de script suivant dans le #TBella.baf :
IF
See([PC]) // si Bella voit Charname (PC = Player Character)
NumTimesTalkedTo(0) // si le nombre de fois où ils se sont parlés est égal à 0
THEN
RESPONSE #100
StartDialogueNoSet(Player1) // alors comencer le dialogue avec Charname
END
Ici, comme j'ai posé la condition/trigger See([PC]), le bloc ne se déclenchera que si Charname est dans le champ de vision de Bella.
Après, on peut imaginer des conditions de distance plus fines. Par exemple, avec la trigger Range(Objet,Distance), on peut poser une condition de déclenchement dans le cas où l'Objet passe près du personnage à une certaine distance.
Par exemple :
IF
Range(Player1,10) // si Player1 passe à une distance inférieure à 10 pieds de Bella
THEN
RESPONSE #100
StartDialogueNoSet(Player1) // alors déclenchement du dialogue.
END
A titre indicatif, le champ visuel correspond à un cercle de 30 pieds de rayon.
Voilà, donc ici, Bella commence le dialogue si Charname passe à moins de 10 pieds d'elle.
Et on utilise StartDialogueNoSet() sans problème puisque ce sont les triggers qui conditionnent le déclenchement du dialogue.
C'est ce qu'utilise Anomen pour déclencher son dialogue quand on le rencontre à la Couronne de Cuivre, il ne nous parle que si on passe près de lui.
Après il y a aussi le cas de Nalia qui combine un déplacement vers Charname puis un déclenchement du dialogue quand elle est suffisemment proche de lui. Mais c'est une autre histoire, je ne vais pas surcharger inutilement, je crois que mon pavé sera déjà bien assez gros ^^
Concernant StartDialogue(), je ne sais pas si il marche quand le PNJ est hors du champ de vision ou pas, manifestement non sinon ce serait précisé mais sa grosse différence avec StartDialogueNoSet(), c'est qu'il faut préciser le fichier dialogue associé au dialogue qu'on déclenche.
Un exemple concret de l'intérêt de StartDialogue() est celui que j'évoque dans mon tutorial pour déclencher un dialogue à partir de Charname.
Dans ce cas-là on utilisera l'action :
ActionOverride(Player1,StartDialogue("player1",Player1))
et non pas ActionOverride(Player1,StartDialogueNoSet(Player1)) qui manque de précision.
"player1" désigne le fichier dialogue de Player1 ce qui signifie qu'il reverra aux blocs contenus dans le .d qui possédera un BEGIN ~Player1~
Ceci permettra de faire parler Charname à lui-même et ne sera possible qu'avec StartDialogue(), StartDialogueNoSet() ne fonctionnera pas dans ce cas.
- Rigel 1er a écrit:
Dans les scripts de personnages:
Dialog(): Il faut "cliquer" sur le pnj pour se faire "discuter" par lui.
Non, Dialog() déclenche également le dialogue entre le personnage qui fait l'action et le personnage cible placé entre les parenthèses de l'action.
Mais cette commande n'apporte rien de plus que StartDialogueNoSet(), à mon avis elle est à éviter.
En fait, pour faire un dialogue déclenché par le joueur en cliquant sur le PNJ avec le curseur dialogue, il n'y a justement pas besoin d'une Action qui déclenche le dialogue car dans cette situation, c'est le curseur qui a pour rôle de déclencheur de dialogue.
Le déclenchement des dialogues par action ne concerne que les dialogues scriptés, qui se déclenchent donc de façon automatique à un moment précis d'où la nécessité d'un script d'aileurs.
Pour les dialogues déclenchés par le joueur, le simple clic sera le déclencheur.
Après ce sont les triggers contenus dans les blocs du .d qui vont déterminer quel bloc sera déclenché à tel moment entraînant le dialogue entier.
C'est le principe du flirt pack par exemple, ces interactions avec un PNJ en cours de romance qui se déclenchent manuellement par le joueur.
Si tu veux que je te donne un exemple, pas de problème.