統合版で召喚できるNPCの基本的な部分は、前回の記事でふれました。
dialogueとシーンファイルを使うことで、NPCとの会話をさらに高度にすることができます。
dialogue コマンドの使い方
指定したNPCの会話を表示する。
dialogue open @e[type=npc,name="案内人"] プレイヤーのセレクタ [sceneName]
このコマンドで、案内人という名前のNPCで、sceneNameというシーンファイルの内容を、セレクタで指定したプレイヤーに、NPCをクリックしなくても表示することができます。
sceneNameを省略すると、案内人の現在の会話が表示されます。
dialogue open @e[type=npc,name="案内人"] @a
とすると、案内人の会話が全プレイヤーに表示されます。
何らかのトリガーでこのコマンドを実行することで、プレイヤー全員に届く神の声的な使い方もできそうです。
NPCの会話をシーンファイルで指定したものに変更する
dialogue change @e[type=npc,name="案内人"] [sceneName] プレイヤーのセレクタ
案内人の会話を、セレクタで指定したプレイヤーに対してsceneNameで指定した会話に変更します。
dialogue コマンドは、会話を open で開くか、change で変更することができます。
open と change では、sceneName とプレイヤーのセレクタの順番が入れ替わっていることに気をつけましょう。
選択肢を選択しないで会話を閉じたときの処理
dialogue コマンドだけで、NPCの選択画面でなにか選択しないと会話が終わらない処理を作ることができます。
アイテムを与える選択肢を選ばないで会話が終了してしまうと、何もアイテムを入手できずに次に進んでしまうことを防ぎます。
前回の記事の場合「ボタンのモード」に入力したコマンドに、次のコマンドを追加します。
tag @initiator add selected
このコマンドで、選択肢を選択したプレイヤーに ”selected” というタグが追加されます。
続いて「終了時」のコマンドを以下のように変更します。
tp @initiator[tag=selected] 10 -60 10
dialogue @e[type=npc,name="案内人"] @initiator[tag!=selected]
選択肢を選択したプレイヤーはテレポーションさせて、そうでないプレイヤーにはもう一度案内人の会話を表示することができます。
選択肢を選択しない限り、会話から抜けることができなくなり、アイテムを入手しないと次に進めないようになります。
NPCの会話を分割する
NPCの会話が長くなってしまうと、見にくくなります。
会話が長くなる場合には、最初の会話を閉じたら次の会話が表示されるようにすると、すっきりします。
そのためには、次の会話を表示するためのシーンファイルを作る必要があります。
ダイアログのシーンファイルの作り方
ダイアログのシーンファイルを作るのにも、マインクラフトのアドオンを作るための統合環境 brdge を使うと便利です。
bridge でシーンファイルを作るには、ファイル > 新規ファイルと進みます。
出てきたダイアログの「シンプルファイル」を選択して、「Dialogue」を選んで、FileName に適当な名前(ここではnpcとしました)を入力して、右下の「+CREATE」を押します。
すると、dialogue フォルダが作成されて、その中に npc.json ファイルが作成されています。
開いてみるとこんな内容です。
{"format_version":"","minecraft:npc_dialogue":{"scenes":[]}}
format_versionのあたりを、マインクラフトの現バージョンとして、”format_version”:”1.20.50″ として一度保存し直すと、ファイルが整形されて次のようになります。
{
"format_version": "1.20.50",
"minecraft:npc_dialogue": {
"scenes": []
}
}
この “scenes”: [] のカギカッコ内にシーンの情報を追加します。
{
"format_version": "1.20.50",
"minecraft:npc_dialogue": {
"scenes": [
{
"scene_tag": "dialogue1",
"npc_name": "案内人2",
"text": "気をつけていくのだぞ"
}
]
}
}
これでシーンファイルに “dialogue1” というシーンができました。
summon npc 案内人2
で案内人2というNPCを作って、
/dialogue open @e[type=npc,name="案内人"] @a dialogue1
のコマンドを打つと、案内人2が「気をつけてゆくのだぞ」と言います。
案内人2自体のダイアログの編集で
「ここをまっすぐ行くと村がある。」
として、詳細設定で先程のコマンドを入力し、ボタンを終了時にします。
案内人2に話しかけると
と言い、この会話を終了すると続けて以下のように喋ります。
NPCに喋らせたい内容が多いときは、このような形で会話を分割すると見やすいでしょう。
一度だけ何かをさせる
シーンファイルを使うと、一度だけ何かをしてくれるNPCを作ることができます。
例えば、案内人2のダイアログを以下のようにします。
「ここをまっすぐ行くと村がある。
鉄の剣を持ってゆくとよかろう」
そして以下のコマンドを追加して「終了時」にします。
give @initiator iron_sword
これで、案内人2に話しかけると、鉄の剣をもらえるようになります。
ただこれですと、話しかけるたびに鉄の剣がもらえてしまいます。
ですので、先程の追加の会話を追加したコマンドを、以下のように変更します。
dialogue change @e[type=npc,name="案内人2"] dialogue1
こうすることで、案内人2に二回目以降話しかけても「気をつけてゆくのだぞ」と言われるだけで、鉄の剣は貰えなくなります。
dialogue change を使ってシーンファイルのシーンにダイアログを変更することができますが、書き換えたダイアログをもとに戻すのに、NPCのUIを開いて書き換えるのは面倒です。
最初の会話もシーンファイルに書いておきましょう。
{
"format_version": "1.20.50",
"minecraft:npc_dialogue": {
"scenes": [
{
"scene_tag": "dialogue",
"npc_name": "案内人2",
"text": "ここをまっすぐ行くと村がある。\n\n鉄の剣を持ってゆくとよかろう",
"on_close_commands": [
"give @initiator iron_sword",
"dialogue change @e[type=npc,name=案内人2] dialogue1"
]
},
{
"scene_tag": "dialogue1",
"npc_name": "案内人2",
"text": "気をつけていくのだぞ"
}
]
}
}
こうしておいて、以下のコマンドを打つと最初の会話に戻すことができます。
/dialogue change @e[type=npc,name=案内人2] dialogue
dialogue コマンドとシーンファイルを利用することで、NPCとの会話を高度化することができます。
シーンファイルを利用できるようにしたり、編集するのは少し大変ですが、使えるようになると非常に便利なので試してみてはいかがでしょうか。
コメント