お手並み拝見。 おい。ちょいと高飛車じゃないか? 重大な問題なの!私が馬鹿になるか利口になるかの境目なんだから!
本章では、インラインスクリプトを用いた、実戦的な用例を紹介していきます。掲示板で質問されたり紹介されたりしたスクリプトもどんどん追加していきます。
(私的「華和梨」応援団には、さらにたくさん用例が紹介されています。そちらも参考にしてみてください。)
インラインスクリプトは、条件分岐や辞書の動的変更を可能にするため、華和梨の標準の機能では実現できない、幅広いネタの可能性を与えてくれます。
複数のエントリを連続して使いたいが、そのときに同じ単語がでてきてもらっては困る場合があります。たとえばこんな場合ですね。
人名 : ケンシロウ , ラオウ , トキ , アミバ , ジャキ
sentence : \0昨日、${人名}が${人名}と${人名}に決闘を申し込まれたんだって!\n\1ふーん。\n\0私、止めに行く!\n\1マジかよ。\e
本来別の人物名が入るべきところに、同じ人物名が入ってしまうと、文意がとおらなくなってしまいます。(人工無能バカ丸出しです。)
そこで、次のようにインラインスクリプトを駆使して、同じ単語を呼び出さないようにします。
人名 : ケンシロウ , ラオウ , トキ , アミバ , ジャキ
sentence : ${決闘ネタ初期化}${決闘ネタ判定}
# まず最初に3人分の名前を取り出し、中間処理用の仮エントリにセットする
決闘ネタ初期化 : $(set 変数1 ${人名})$(set 変数2 ${人名})$(set 変数3 ${人名})
# 1人目と2人目の名前が同じだったら、さくらスクリプトタグ\_eを出力してダイヤログボックスを瞬時クローズ、
# 何も話さなかったふりをする。
# 2人目、3人目の名前も同様に比較する。全員の名前が違っていた場合のみ、ネタを発動する。
決闘ネタ判定 : $(if $([ ${変数1} != ${変数2} ]) $(if $([ ${変数2} != ${変数3} ]) $(if $([ ${変数1} != ${変数3} ]) ${決闘ネタ} \_e) \_e) \_e)
決闘ネタ : \0昨日、${変数1}が${変数2}と${変数3}に決闘を申し込まれたんだって!\n\1ふーん。\n\0私、止めに行く!\n\1マジかよ。\e
これで、別の人名を使うことが保証されました。
コミュニケート反応の基礎解説で、華和梨は、話しかけられた話題に対しては自動的に反応して返答していくことを説明しました。ですが、こちらから他のゴーストに話題を切り出したり、話しかけてきたゴーストに合わせて反応したり、会話のやりとり回数に応じて反応を変えたりするには、インラインスクリプトを使います。
コミュニケート反応にも、イベント反応のシステムエントリ(system.Reference0〜system.Reference7)のような、会話のやりとりに関するシステムデータを取り扱うためのシステムエントリが存在します。
system.Sender 話しかけてきたゴーストの名前 system.Age ゴースト間の台詞の行き来が、会話開始からいくつ目か system.communicate こちらから話しかけたいゴーストの名前 system.response.unknown 文が渡されたが、対応する反応文がない場合にどう発言するかを記述する(渡された文はsystem.Reference0に格納されている) system.OtherGhost 同時に起動している他のゴースト名すべて
他のゴーストに話しかけさせてみましょう。発話タイミングはいろいろ考えられると思いますが、ここでは普通に、ランダムトークに登録してみましょう。
sentence : \0$(set system.communicate ${system.OtherGhost})おーい、${system.communicate}!\e
話しかけたい文の中で、同時起動しているゴースト一覧の中から1人、ゴーストの名前を選び出し、話しかけたいゴースト名を入れるシステムエントリsystem.communicateにセットします。
反応文を、話しかけられた相手ではなく、別の人に話しかけたい場合があるでしょう。それには、次のようにします。
["代用品"] : ${第三者探索}$(if $([ ${system.communicate} == stop ]) \0なぐさめてくれそうな人がいないよう。えぐえぐ。\e \0えーん、${system.communicate}〜、${system.Sender}がいじめるよう〜\e)
# ゴースト一覧らランダムに一個名前をとって、メッセージを送ってきた相手かどうか調べます。
# 5回試行して、全部メッセージを送ってきた相手だったら、ほかの人を見つけられなかったことにします。
第三者探索 : $(set ループ回数 1)$(while $([ ${ループ回数} <= 5 ]) $(set 対象ゴースト名 ${system.OtherGhost})$(if $([ ${対象ゴースト名} != ${system.Sender} ]) $(set ${system.communicate} ${対象ゴースト名})$(set ループ回数 6) $(set ${system.communicate} stop)$(inc ループ回数))
反応できない話しかけ文について、2回連続でまったく同じ文がきた場合に違う反応を返したい場合、こんな風にしたらどうでしょう。
# 普通の反応文には、すべて${ミミタコクリア}をつけておきます。
# つけていない場合、「ミミタコスタンバイ」後、キーワード交じり文で話しかけられても、
#「ミミタコスタンバイ」が解除されません。
["キーワード1"] : ${ミミタコクリア}\0反応1。\e
["キーワード2"] : ${ミミタコクリア}\0反応2。\e
["キーワード3"] : ${ミミタコクリア}\0反応3。\e
# unknown文にはすべて${ミミタコチェッカ}をつけておきます。
system.response.unknown : ${ミミタコチェッカ}\0よくわからないよぅ。\e
system.response.unknown : ${ミミタコチェッカ}\0知らない。\e
ミミタコクリア : $(set 直前の問いかけ "")
ミミタコチェッカ : $(if $([ ${直前の問いかけ} == ${system.Referense0}]) ${ミミタコ!} $(set 直前の問いかけ ${system.Referense0}))
ミミタコ! : \0ミミタコだよぉ!\e
このページは、偽Meisterが作成しています。