スクリプトゼミの第2回目です。まだまだ初級編です。
すでにスクリプトを使いこなしている方にとっては、少々たいくつな内容になりますが、ご容赦ください。
【2】スクリプトモードとワールドモード
キャラフレでは、通常ログインしてマップを移動したりチャットをする時のワールドモードと、頼まれ事などが起動した時に用いるスクリプトモードが分かれています。
ワールドモードでは、同一マップにいる他のユーザーのアバターが表示されると共に、[各種設定]の状態によりますが、自分のアバターも表示されます。
一方のスクリプトモードは、自分のアバターも他のユーザーも表示されず、自分主観の画面になり、画面が完全にスクリプトの制御下になります。
普段のデフォルト状態がワールドモードで、MMOエンジンで動作している状態です。スクリプトモードはADVエンジンに切り替えるものというわけです。
この、ADVエンジンへの切り替えは、スクリプトから明示的にコマンドを発行する必要があります。
つまり、コマンドを発行しなければADVエンジンに切り替えずに、MMOエンジンのままでスクリプトを動かすことも可能になっています。
ただ、ストーリー重視のコンテンツを作る場合は、他のユーザーと共存することでいろいろと不都合が起こる可能性が高いので、余程の意図がない限りはスクリプトモードで実行するのが安全です。
コマンド
Avatar.ScriptMode:[c][,a]
//c=0:チャットクローズしない | 1:チャットクローズする
//a=0:環境アニメ(雪など)を停止する | 1:環境アニメを停止しない
記述例
Avatar.ScriptMode:1,1
第一引数は、2015年になってから追加されたパラメータで、オープンチャットを活かしたままスクリプトモードにするか、従来通りオープンチャットをクローズするかを選択します。
第二引数は、雪や蛍などに使われている環境アニメーションを停止するかどうかです。
チャットクローズに関しては、従来は強制的にクローズされていました。ノベルシアターなどで、わいわい話しながらコンテンツを鑑賞することができるよう、追加されたパラメータです。特に意図がなければ、クローズした方が安全です。
また、環境アニメに関しても、その他アニメーションの影響で残像が残ったりする場合がありますので、どうしても活かしたい場合以外は、停止した方が安全です。
特に意図がない場合は、
Avatar.ScriptMode:1,1
と記述するのが安全ですが、過去のコンテンツは引数をサポートしておらず
Avatar.ScriptMode
となっているものも多数あります。何か問題がある場合のみ、パラメータを変更してみてください。
(※追記:引数を省略した場合は0、つまりチャットクローズしない/環境アニメ停止となります)
では、スクリプトモードを使わない場合はどういうケースがあるのでしょうか。
皆さんが良く目にする機会があるのは、アイテムデリバーやミュージックプレイヤーです。
アイテムデリバーやミュージックプレイヤーも、内部動作はスクリプトで記述されています。しかし基本的に皆がいる場所で使うものなのと、特定の処理を行ったら、短時間で終了するタイプのものなので、スクリプトモードに切り替えずに動作しています。
また、頼まれ事の導入部分で、<話を聞く><また今度>などの選択肢があるタイプのものも、<話を聞く>が選ばれてから、スクリプトモードに切り替えるものが多いです。
これは、イベント会場への移動中など頼まれ事を断って別のことをやりたい時に、モード切り替えのレスポンス悪化を回避するための意図的な演出です。
一方で、スクリプトモードに切り替えないと問題が出るケースもあります。
例えば、多人数参加のミニゲーム会場やイベント会場などで、9人以上のユーザーが同一マップにいる場合、キャラフレの制約である同一画面に9名の表示制限により、NPC登場のコマンドが進行できなくなることがあります。
また、NPCなどキャラクターのポジション指定ができるのも、スクリプトモードのみになります。
ワールドモードだと、同一画面にいつ何人いるか決定できないため、NPCの位置を固定すると、他のユーザーの表示に不都合が生じます。つまり、NPCに位置や大きさの演出をするために、他のユーザーの表示をオフにするのが、スクリプトモードの役割でもあるのです。
スクリプトモードに切り替えないでNPCを登場させるのは、ユーザーが溜まることのない通り道での頼まれ事発生に限定しないと、トラブルを生じます。
皆さんが作成するのは、イベント会場で実行されるものが殆どだと思いますので、ユーザーのコンテンツは必ずスクリプトモードにするのが安全と覚えて下さい。
また、スクリプトモードからワールドモードに戻すコマンドは用意されておらず、スクリプトを終了することで、ワールドモードに切り替わる仕様となっています。
スクリプトを終了させないで、スクリプトモードとワールドモードを行き来することはできません。