Notes
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
La fonctionnalité Branching Dialogue vous permet de créer un script de dialogue dynamique pour les PNJ qui permet de fournir un dialogue mis à jour en fonction des actions ou des réponses du joueur dans le jeu. Le système Branching Dialogue est composé de trois parties: l’entité PNJ, les commandes de dialogue et les fichiers scène de ressources.
Conditions requises
Nous vous recommandons d’effectuer les étapes suivantes avant de commencer ce tutoriel.
Le fichier de scène
Le fichier de scène est un fichier json situé à l’intérieur du dossier dialogue dans le répertoire racine de votre pack de comportement (%localappdata%\Packages\Microsoft.MinecraftUWP_8wekyb3d8bbwe\LocalState\games\com.mojang\development_behavior_packs\<your behavior pack folder>
) qui contient toutes les informations nécessaires à votre branching dialogue. Vous pouvez créer autant de fichiers de scène que vous le souhaitez. Vous pouvez créer un fichier de scène pour chaque PNJ de votre monde ou créer un fichier de scène pour chaque chapitre de votre récit, ou vous pouvez simplement avoir un seul fichier de scène pour le monde - le choix vous appartient entièrement car la fonctionnalité branching dialogue lit tous les fichiers du dossier dialogue, quelle que soit la façon dont vous avez décidé de les organiser.
Propriétés
La première propriété est l’en-tête qui définit ce fichier json comme un fichier de scène valide.
Exemple:
{
"format_version": "1.17",
"minecraft:npc_dialogue": {}
}
Comme il s’agit d’un fichier json, nous devons ajouter des parenthèses. La propriété suivante que nous allons ajouter est la propriété «scenes», l’endroit où le branching dialogue va être stocker.
{
"format_version": "1.17",
"minecraft:npc_dialogue": {
"scenes": []
}
}
Avec les propriétés de l’en-tête et du fichier de scène en place, nous pouvons maintenant créer nos scènes individuelles pour le branching dialogue de notre PNJ. Chaque nouvelle instance de dialogue d’un PNJ demande une nouvelle scène. Celle-ci est définie dans le fichier scene en créant un tag scene. Il faut utiliser la balise scene dans le jeu pour appeler le texte que vous fournissez dans le fichier scene. Vous pouvez également configurer des boutons et des commandes de PNJ qui se comporteront de la même manière que si vous les aviez configurés à l’aide de l’éditeur de PNJ du jeu.
À présent, intéressons-nous à la structure de la scène d’un PNJ:
{
"scene_tag": "ducky_intro",
"npc_name": "Ducky",
"text": "Hello. My name is Ducky. Take this gold!",
"on_open_commands": [
"/clear @p"
],
"on_close_commands": [
"/say Enjoy the gold! "
],
"buttons": [
{
"name": "Take Gold",
"commands": [
"/give @initiator gold_ingot"
]
}
]
}
Propriétés de la scène
scene_tag: nom que vous allez utiliser pour appeler cette scène dans le jeu. Il s’agit d’une propriété obligatoire.
PNJ_name: c’est ici que vous pouvez ajouter ou modifier un nom pour la boîte de dialogue de votre PNJ. C’est une propriété facultative qui est utile pour changer dynamiquement les noms des PNJ.
Text: c’est ici que vous entrez le dialogue que vous voulez que votre PNJ affiche dans le jeu pour cette scène. Vous pouvez saisir le texte du dialogue directement ici ou utiliser le texte brut si vous utilisez un fichier de langue. C’est une propriété facultative, mais sans elle, la boîte de dialogue de votre PNJ sera vide.
on_open_commands: permet de définir les commandes qui se déclencheront quand la boîte de dialogue du PNJ s’ouvrira. Propriété facultative.
on_close_command: permet de définir quelles commandes se déclencheront quand la boîte de dialogue du PNJ se fermera. Propriété facultative.
Boutons: permet de créer des boutons pour votre PNJ. Le sous-ensemble comprend les propriétés «name» et «commands». La propriété «name» vous permet de définir le texte qui va être affiché sur le bouton de votre PNJ. La seconde propriété «commands» vous permet d’ajouter des commandes qui seront exécutées dans le jeu quand le bouton sera activé. Propriété facultative, mais obligatoire pour les boutons de PNJ.
Texte brut
Toutes les propriétés de scène énumérées ci-dessus prennent en charge le texte brut.
{
"scene_tag": "ducky_intro",
"npc_name": { "rawtext": [ { "translate": "character.name", "with": ["\n"] } ] },
"text": { "rawtext": [ { "translate": "ducky.intro.text", "with": ["\n"] } ] },
"on_open_commands": ["/clear @p"],
"on_close_commands": ["/say Enjoy the gold! "],
"buttons": [
{
"name": { "rawtext": [ { "translate": "dialogue.button.name" } ] },
"commands": [
"/give @initiator gold_ingot"
]
}
]
}
Commande Dialogue
La commande Dialogue permet aux PNJ d’ouvrir ou de lire des fichiers de scène. Cette commande propose deux modes distincts, chacun ayant son propre objectif et sa propre syntaxe.
Dialogue Open
La commande Dialogue Open sert à forcer l’ouverture de la boîte de dialogue d’un PNJ au(x) joueur(s) ciblé(s). Cette fonction était auparavant appelée Remote Fire, car elle simule l’expérience d’un clic sur un PNJ. Cette commande peut s’appliquer à n’importe quel PNJ et ne nécessite aucun pack de comportements, à moins que vous ne souhaitiez que le PNJ utilise un fichier de scène pour son dialogue (ce qui n’est pas une obligation si vous utilisez la commande Dialogue Open).
La syntaxe de Dialogue Open est la suivante:
/dialogue open <npc: target> <player: target> [sceneName:string]
/dialogue
: commande initiale.
open
:variante de la commande.
<npc: target>
:PNJ que vous ciblez.
<player: target>
: joueur que vous ciblez. Il s’agit du joueur qui verra la boîte de dialogue du PNJ.
[sceneName:string]
: nom utilisé si vous voulez utiliser un dialogue contenu dans un fichier de scène. La chaîne doit être un nom de balise de scène valide, sinon l’opération échoue. Il s’agit d’un paramètre facultatif.
Notes
Si aucun sceneName n’est spécifié, c’est le dernier dialogue que le PNJ a eu qui sera affiché.
Utilisation pratique
La commande Dialogue Open est principalement utilisée de deux façons.
La première consiste à lancer un dialogue avec un PNJ sans que le joueur n’interagisse directement avec lui, en utilisant le PNJ comme une fenêtre «pop-up» qui ne nécessite pas que le joueur clique sur le PNJ. Dans ce scénario, le PNJ n’a même pas besoin d’être visible pour le joueur dans le monde (bien qu’il doive être dans un fragment chargé et à distance de détection du joueur recevant le dialogue) et pourrait être caché sous terre ou dans un autre endroit inaccessible.
La deuxième façon d’utiliser Dialogue Open consiste à créer des arborescences branching dialogue en utilisant le fichier scène. En utilisant la commande Dialogue Open dans le fichier de scène d’un PNJ, celui-ci peut automatiquement ouvrir la boîte de dialogue suivante pour un joueur, en utilisant une commande On Close ou une commande Button. C’est la base de toutes les voies de ramification des arborescences de dialogue.
Dialogue Change
La commande Dialogue Change sert à demander à un PNJ d’utiliser le dialogue fourni dans un fichier de scène spécifiquement désigné. Pour fonctionner correctement, cette commande nécessite l’utilisation d’un pack de comportements contenant un dossier de dialogue et un fichier de scène. La commande demandera au PNJ ciblé d’extraire son dialogue de l’emplacement désigné par le nom de la balise de scène. La commande doit être exécutée avant que le joueur n’interagisse avec le PNJ.
La syntaxe de Dialogue Open est la suivante:
/dialogue change <npc: target> <sceneName:string> [player: target]
/dialogue
: commande initiale.
change
:variante de la commande.
<npc: target>
:PNJ que vous ciblez.
<sceneName:string>
: nom utilisé si vous voulez utiliser un dialogue contenu dans un fichier de scène. La chaîne doit être un nom de balise de scène valide, sinon l’opération échoue.
[player: target]
: joueur que vous ciblez (il s’agit du joueur qui verra la boîte de dialogue). Si elle est omise dans une commande "/dialogue change", le dialogue du PNJ sera mis à jour pour tous les joueurs.
Utilisation pratique
La commande Dialogue Change est principalement utilisée pour modifier le dialogue d’un PNJ à l’aide de commandes. La commande peut être extraite d’un bloc de commande déclenché par le joueur dans le monde, être lancée par un autre PNJ ou être exécutée par le PNJ ciblé lui-même.
Il se peut que vous souhaitiez modifier le dialogue d’un PNJ en fonction des actions du joueur dans le monde, comme entrer dans une zone particulière, parler avec un autre PNJ ou effectuer une tâche bien précise. Si l’action peut être évaluée, elle peut être utilisée pour exécuter la commande de dialogue et modifier le dialogue du PNJ.
La commande Dialogue Change n’ouvrepas la boîte de dialogue du PNJ comme le fait Dialogue Open, elle pointe simplement le PNJ vers le dialogue du fichier de scène que vous voulez que le joueur voie lors de sa prochaine interaction avec ce PNJ.
Ciblage
Le ciblage est un élément essentiel du système de Branching Dialogue des PNJ. Il détermine les PNJ qui reçoivent les commandes et les joueurs qui voient le dialogue. Il permet également de s’assurer que chaque joueur voit le dialogue que vous voulez qu’il voie et qu’il ne perde pas le dialogue dans des scénarios multijoueurs.
Cibler des PNJ
Pour utiliser la commande /dialogue
, il faut cibler un PNJ. Elle agira sur le PNJ à partir duquel le dialogue apparaît et utilisera l’image de ce PNJ à l’intérieur du portrait du dialogue.
Le PNJ à partir duquel vous voulez déclencher le dialogue doit exister dans le monde.
Cibler des joueurs
Quand la commande /dialogue
est appliquée, il peut y avoir des moments où il faut également cibler des joueurs. Pour cibler des joueurs, utilisez des sélecteurs de joueur tels que @a (tous les joueurs) ou @p (le joueur le plus proche). Ceux-ci fonctionnent généralement bien pour une expérience solo, mais pour avoir des changements de scène par joueur, il faut utiliser un type de cible spécial appelé @initiator(le joueur qui interagit avec le PNJ).
Exemple:
"buttons": [
{
"name": { "rawtext": [ { "translate": "dialogue.button.name" } ] },
"commands": [
"/give @initiator gold_ingot"
]
}
]
L’utilisation de ce sélecteur de cible sur des PNJ leur permet de mettre à jour leur dialogue en fonction de chaque joueur, ce qui signifie qu’en mode multijoueur, les PNJ peuvent se souvenir de l’état du dialogue de chaque joueur et leur envoyer un dialogue unique en conséquence. Ceci est utile si un joueur change le dialogue d’un PNJ et que les autres joueurs n’ont pas accès à l’ensemble de la ramification du dialogue ou pour s’assurer que chaque joueur ne reçoit qu’un seul objet d’un PNJ, ce qui empêche ce même joueur de revenir au PNJ pour obtenir d’autres objets ou empêche les autres joueurs de récupérer leurs objets.
Exemple intégral:
{
"format_version": "1.17",
"minecraft:npc_dialogue": {
"scenes": [
{
"scene_tag": "ducky_intro",
"npc_name": { "rawtext": [ { "translate": "character.name", "with": ["\n"] } ] },
"text": { "rawtext": [ { "translate": "ducky.intro.text", "with": ["\n"] } ] },
"on_open_commands": ["/clear @p"],
"on_close_commands": ["/say Enjoy the gold! "],
"buttons": [
{
"name": { "rawtext": [ { "translate": "dialogue.button.name" } ] },
"commands": [
"/give @initiator gold_ingot"
]
}
]
}
]
}
}
Commande pour déclencher la scène:
/dialogue open @e[tag=ducky] @p ducky_intro