Wednesday, April 26, 2017

NPCとの対話

しばらく前に書いたスクリプトイベントの、NPCとの対話で、PCがする発言の選択肢を表示する部分。(選択の結果については別のコールバックで処理)

現状は上の画像のような力技で書いていて、さすがにこれはダメなので、
  • 条件付きの選択肢テキストを定義しておけば、対話ウィンドウの表示時に、システムが勝手に選んで表示
  • 選んだ選択肢ごとの結果の処理も、選択肢テキストとカップリングで定義
できるようにしたいという感じ。

それで、自分の能力では、下の画像のようになら出来るかなあというイメージ。
このコードを、少なくとも対話ウィンドウが表示される前の、どこかのタイミングで走らせる。(タイミングはスクリプト書く側の自由。=これを走らせるコードをスクリプトに書く必要アリ)
  • ID: TESで言うEditorID
  • AnswerTextID: 対話の相手が、選択肢への返答として発する、テキストのEditorID
  • Condition: booleanを返すLuaコード
  • Answer: 選択肢を選択したら走らせるLuaコード*1
  • Result: 選択肢を選択したら走らせるLuaコード*2
全部string型になっちゃうので、ちょっと見難いけど。。

クエストspecificな噂テキスト(TESではConversationと言ってるぽい)も、こんな感じで定義できそう。(データ的には、ConditionとAnswerTextIDだけで良い)

AnswerTextについては、別の記事として書きます。

*1 AnswerじゃなくてResultですね。*2が正解です。

6 comments:

  1. ああ、分かりました、先にAnswr Topic読んだのが間違いだったかも。

    ReplyDelete
  2. QuestTopicの表示はどのように取捨選択されるんでしょうか?

    ReplyDelete
    Replies
    1. まだ作ってないので、やろうとしてるイメージでの話ですが、
      システムがメモリ内にある、全questTopic型データのConditionコードを走らせて、trueが返ってきたものを表示します。

      Delete
    2. Dialogue型とAnswerText型の話をしてしまったので、混乱しちゃいますね。
      選択肢データについては、Dialogue型でやってるようなシステム側がする自動条件チェックはしないで、全部、個々のquestTopic型データに登録されている条件チェックコードだけでやろうかなと思ってます。

      Delete
    3. 分かりました
      キーワードとフォーマットを決めてくれたら書けそうですね
      まあ、書いてるうちにこうスべきってなっていくんだろうけど

      Delete
  3. questTopic型でAnswerTextを指定せずに、AnswerText型で親トピック(parentQuestTopicID: string;)を指定した方が良いかも?

    ReplyDelete