投稿日:
最終更新:

近くにいる時だけ、キャラに話しかけて会話できる仕掛けの作り方 - RPG風ワールドに是非

キャラと会話する仕掛け

RPG風の配布ワールドなどによくある、「キャラと会話する」仕掛け。例えば街の村人に近寄るとチャットに「村人に話しかける」と出てきて、クリックすると会話できます。この仕掛けを、「話しかけるキャラクターの近くでないと、チャット欄で"話しかける"を押しても何も起こらない」という機能付きで作り方を解説します。この仕掛けを使った素晴らしい配布ワールドやサーバーを楽しみにしています!


「キャラに近寄って話しかける仕掛け」とは?

RPG風の配布ワールドにて

RPG風の配布ワールドで旅をしているあなた。小さな家を見つけたので入ってみることにしました。果たして中では何が待ち受けているのでしょうか。

村人に近寄って話しかけよう

家の中には、ポツンと一人村人が。近寄ると「寂しい村人に話しかける」とチャット欄に表示されます。クリックしてみましょう。 (「RECORDING」はReplayModの録画中を示すアイコンです)

少しづつ会話文が表示されていく

「ここは寂しい場所です...」「申し訳ありませんが、私に手伝えることはありません。速やかにお帰り下さい。」と少しづつ会話が進みます。RPGでよくある、特に意味の無いモブキャラでした。

「村人の近くにいる人を検知して、tellrawコマンドを使ってるだけでしょ?」 ...確かにそうです。人を検知してtellrawで少しづつ会話文を流しているのですが、この仕掛けはそれだけでは終わりません。


遠い場所では会話を始められなくなっている

この仕掛けは、チャット欄の文章をクリックすると会話が始まりますが、例えばボス戦中なのに、チャットを遡って町の人々との会話ができたらおかしいですよね。そこで、この仕掛けでは会話する人から離れると「- - - - -」と区切り線が流れ、クリックしても会話が始まらないようにしています。


AcrossTheTimeの仕掛けを丸パクリしました

当ブログの常連さんの中には、この会話システムの動作に見覚えがある方もいるかもしれません。実はこれ、私が攻略記事を書いているAcross The Time」に設置されていたものを丸パクリしました。製作者のMr PiccomasterさんとThundesrtruckさん、素晴らしいアイデア、回路、コマンドをありがとうございます!


回路作成の前に。setblockコマンドのメッセージを非表示にしよう

ブロック設置の通知を消すには

今回解説する仕掛けでは、setblockコマンドを使っています。実はsetblockコマンドは、/gamerule commandBlockOutput falseコマブロの通知を非表示にしていても、ブロックを設置した旨の通知が表示されてしまうんです... そこで、以下のコマンドでコマンドのあらゆる通知を非表示にしましょう。

コマンドの実行結果の通知を無効化するコマンド
/gamerule sendCommandFeedback false

このコマンドでは、コマンドを実行した時に返ってくるあらゆる通知をOFFにします。そのため、このコマンドを実行しても"ゲームルールが更新されました"の通知は表示されませんのでご注意下さい。


キャラと会話する仕掛けの回路とコマンドの解説

会話するキャラクターを召喚しよう - MCStackerを活用

会話するキャラを召喚しよう

まずは会話するキャラクターを召喚しましょう。AIを無効化して動きを止めるだけでOKです。

MCStackerでSummonコマンドを作成しよう

久々に登場、「MCStacker」です。Summonモードで好きなMobを選び、以下の項目を設定しましょう。

  • 「No AI」にチェックを入れる→動かなくなる
  • Mobの鳴き声を消したいなら、「Silent」にチェックを入れる
  • 「Invulnerable」にチェックを入れる→クリエイティブ以外で倒せなくなる。(詳しい解説)
  • 「Name」にMobの名前を入力する
コマンドの例: 服を着せて人っぽくしたゾンビを召喚するコマンド
召喚するキャラクターの例
バージョン1.9の場合:
/summon Zombie ~ ~1 ~ {CustomName:"鍛冶屋のおじさん",CustomNameVisible:1,ArmorItems:[{id:leather_boots,Count:1,tag:{display:{color:9060115}}},{id:leather_leggings,Count:1,tag:{display:{color:9060115}}},{id:leather_chestplate,Count:1,tag:{display:{color:9060115}}},{id:skull,Damage:3,Count:1,tag:{SkullOwner:MHF_Villager}}],Invulnerable:1,NoAI:1,Silent:1}

バージョン1.8の場合: /summon Zombie ~ ~1 ~ {CustomName:"鍛冶屋のおじさん",CustomNameVisible:1,Equipment:[{},{id:leather_boots,Count:1,tag:{display:{color:9060115}}},{id:leather_leggings,Count:1,tag:{display:{color:9060115}}},{id:leather_chestplate,Count:1,tag:{display:{color:9060115}}},{id:skull,Damage:3,Count:1,tag:{SkullOwner:MHF_Villager}}],Invulnerable:1,NoAI:1,Silent:1}
MCStackerで召喚する座標を設定する方法

Mobを召喚する座標を設定したい場合は、MCStackerの「Summon Coordinates」に座標を入力してください。絶対座標(~を付けない座標)の場合は「Relative...」のチェックを外します。


クリックすると会話が始まる文をチャットに流す回路とコマンドの解説

キャラに近づいたかどうか判定する回路

それでは回路とコマンドを解説していきます。キャラの真下の地下など、読み込み範囲内だけどピストンなどの動作音が届かない場所にこのようなコンパレーター式クロック回路を作って「A」に繋げます。

「A」のコマンドブロックに入力するコマンド
/testfor @a[x=キャラの座標x,y=キャラの座標y,z=キャラの座標z,r=2]
例えば「x50,y64,z-200」の場所にキャラを設置したなら「x=50,y=64,z=-200,r=2」になります。

クリックで会話が始まる文を流すコマンドブロック

「A」にコンパレーターを繋いで、画像のようにブロックと赤石パウダーを伸ばした先に「B」を置きます。ついでに、手前にレッドストーントーチとピストンをスクショのように設置しておきましょう。

「B」のコマンドブロックに入力するコマンド
表示される文章
/tellraw @a[x=キャラの座標x,y=キャラの座標y,z=キャラの座標z,r=2] ["",{"text":"寂しい村人に話しかける","color":"green","underlined":"true","clickEvent":{"action":"run_command","value":"/setblock 」の場所のx y z redstone_block"}}]

キャラクターの周辺にいる人に、tellrawコマンドで文章を流します。クリックした時のアクションを「run_command」にして、スクショの「あ」の場所にレッドストーンブロックを設置するよう設定しています。

tellrawコマンドを驚くほど直感的に作成できるツールの紹介記事
tellrawコマンドを簡単に作れるツール
https://www.napoan.com/tellraw-command-generator/

tellrawコマンドを作る時は、こちらのツールを使うと便利です。クリックイベント/ホバーイベントの設定なども可能です。

MCDjitでバニラでも日本語入力できます

バージョン1.8までの話ですが、ゲーム内で日本語を入力したい時は「McDjit」が便利です。ツールを起動させておくだけでどこでも日本語が使えます。([2016年2月14日追記] ツールは削除されています。1.8ではメモ帳コピペで我慢しましょう...)


キャラから遠ざかると会話できなくする回路とコマンドの解説

クリックした後の処理部分の回路

レッドストーントーチの下のコマンドブロックを「C」、「あ」の座標の下のコマブロを「D」とします。

「C」のコマンドブロックに入力するコマンド
/tellraw @a[x=キャラの座標x,y=キャラの座標y,z=キャラの座標z,r=4] ["",{"text":"- - - - -","color":"dark_gray","bold":"true"}]
「話しかける」を表示する範囲より少し広い、半径「r=4」を条件にしています。RSトーチで信号が反転しているので、キャラから2ブロック以上離れたら「- - - - -」と表示されます。
「D」のコマンドブロックに入力するコマンド
/setblock ~ ~1 ~ air
「話しかける」をクリックすると、「あ」の場所にレッドストーンブロックが設置されますが、そのレッドストーンブロックを即座に消去するのがこのコマンドです。
プレイヤーが遠くにいると信号を遮断する回路

そして一番重要なのがこの部分。プレイヤーがキャラの半径2ブロック以内にいるとピストンが引っ込んで回路が繋がり、「あ」に赤石ブロックが設置された時に「E」が動きます。逆にプレイヤーがキャラの遠くにいるとピストンが出てきて、羊毛で信号を遮断します! だからクリックしても何も起きないんです。

「E」のコマンドブロックに入力するコマンド
/setblock 後述する「い」の座標x y z redstone_block

会話の内容を決めるコマンドの解説

会話文の内容を表示する回路

最後に、キャラクターが話す会話文の内容を表示する回路を作ります。

「1」のコマンドブロックに入力するコマンド
/setblock ~ ~1 ~ air
「E」のコマンドブロックによって「い」の場所にレッドストーンブロックが設置されますが、そのレッドストーンブロックを即座に消去するのがこのコマンドです。
「2」のコマンドブロックに入力するコマンド
/tellraw @a[x=キャラの座標x,y=キャラの座標y,z=キャラの座標z,r=2] ["",{"text":"ここは寂しい場所です..."}]
「3」のコマンドブロックに入力するコマンド
/tellraw @a[x=キャラの座標x,y=キャラの座標y,z=キャラの座標z,r=2] ["",{"text":"申し訳ありませんが、私に手伝えることはありません。速やかにお帰り下さい。"}]

「2」「3」では、キャラクターの近くのプレイヤーにシンプルな文章を送っています。ここに「クリックしたらレッドストーンブロックを設置して回路を動かす」みたいな仕掛けを入れておけば、さらに会話から色々な仕掛けを作動させることができます!JSON Creator」なども活用して、奥深い会話イベントを作りましょう。

この記事が皆さんのお役に立てたら幸いです

いかがでしたか。この仕掛けを使った楽しい配布ワールドやサーバーを楽しみにしています。また、皆さんがコマンドや回路で気になることなどコメント下さい。


最近書いたコマンド解説記事

 

 

コメント

記事の内容が最新のものと異なる場合があります。ご了承ください。

“近くにいる時だけ、キャラに話しかけて会話できる仕掛けの作り方 - RPG風ワールドに是非” への15件のフィードバック

  1. 要望 より:

    MCDjitの解説ページ消えてんのなら、リンクを消すか公式へのリンクに置き換えるべきでは?
    それと、コメント欄変わってメールアドレス必要になってるけど、消して!メアド入れたくないwww

  2. [kazu] コマンドクリエイター より:

    スコアボードで会話をする方法はありますか?やろうとするとこうなるので

    • 匿名 より:

      スコアボードの値をきっかけに会話文を流すということでしょうか。
      会話は自動的に進んでいくのか、それともプレイヤーが何かアクションを起こしてから会話が進行するのか教えて頂ければ助かります。
      プレイヤーのアクションをきっかけに会話を進める場合は、何かアクションを起こした際にプレイヤーに会話の進行のフラグとなるスコアを付与し、tellrawコマンドのターゲットセレクターにそのスコアを条件として追加すれば実現可能です。

      • [kazu] コマンドクリエイター より:

        やってみましたが @a[score_story_min=1,score_conversation_min=200]とするとやはり連続で流れてしまいます。恐らく = がいけないと思うのですが。。。

        • 匿名 より:

          スコアの条件が「min=」、つまり最小しか指定されていないのでそれ以上スコアを増やしても延々と流れ続けます。
          @a[score_story_min=1,score_story=1,score_conversation_min=200,score_conversation=200] とすればstoryが1かつconversationが200の時のみ流れます。会話と同時にスコアを増やすのを忘れずに。

          • [kazu] コマンドクリエイター より:

            本当にありがとうございます!!これからもがんばってください

      • [kazu] コマンドクリエイター より:

        ありがとうございます!! これで問題が解決しました!!

  3. より:

    これは1.10でもできますか?もしくは1.9

  4. パープル@実況者 より:

    コマンドを実行しても、ワールドの範囲外には紹介できませんと出てきて、できません!
    どうすればいいでしょうか?
    コマンド↓
    /summon Villager ~372 ~68 ~1029 {CustomName:”コンビニの店員さん”,CustomNameVisible:1,Profession:0,Invulnerable:1,NoAI:1,Silent:1}

  5. 名無し より:

    日本語ツールなら、MCJPISS2のリンクを貼ってみては?

  6. ぽんこつ より:

    このピストンというのは粘着ピストンですか?

  7. ゴミクラフター より:

    /testforコマンドは1.10で座標を入力するときはどうしたらいいのですか?

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください