里々の内部処理 †ここでは、里々がdll内部で行っている処理のうち、注意を要する場合があるものを取り上げています。 里々の選択肢処理 †本題の前に、里々利用者が見落としがちな基本的な原理について強調しておきます。 里々ではさくらスクリプトも使用できますが、捉え方としては「里々で作成したトークは自動的にさくらスクリプト主体の(ベースウェアが使用できる形式の)トークへと変換される」とした方が正確です。 以降、辞書のトークは自動的にさくらスクリプトに変換される事を念頭に置いてお読みください。 下例は、あるトークと、それを里々が自動的に変換した結果のさくらスクリプトです*1。 * :(7)じゃんけんするよー! :いくでー。(11)最初は…… _グー _パー【タブ】アンブッシュ \1\n[half]\0\_w[6]\s[7]じゃんけんするよー!\n\n[half]\1\_w[66]いくでー。\_w[30]\s[11]最初は ……\n\q[グー,グーグー1]\n\q[パー,アンブッシュパー2]\e 選択肢である \q[グー,グーグー1] と、 \q[パー,アンブッシュパー2] に注目して下さい。 実は、里々は選択肢に関連した情報取得変数を実装するために、選択肢について他の栞にはない独特な処理を行っています。 _選択ラベル【タブ】選択ID \q[選択ラベル,選択ID] ここまでは基本的なさくらスクリプトですが、里々はさらに続く処理で、その\q[選択ラベル,選択ID]を含めた、トーク中の全ての\q[ラベル,ID]を、次のような独特な形式へと置換します(ベースウェア側でスクリプトログを確認してみて下さい*2)。 \q[選択ラベル,選択ID(バイト値、1)選択ラベル(バイト値、1)選択番号] 結果、選択肢が選ばれ、OnChoiceSelectイベントがベースウェアから通知されると、このreference0には 留意すべき点 †しかしながら、上記の選択肢の仕様はさくらスクリプト構成のトークとしては特殊な使い方です。選択肢が記述者の思いがけない変形を受けていることが、思わぬトラブルの種になる場合もあるのです。 例えば、スクリプトログで確認できるように、MAKOTOやreplace_after.txt、OnTranslateで処理するトークの状態は SSPがいくつか独自に実装している、選択肢関係のSHIORI Eventにも注意が必要です。
結論として、里々では\q選択肢タグでOnChoiceSelectExイベントを利用しない方が無難です。 \__q[選択ID]選択ラベル\__q というタグも用意されていますが、こちらは選択IDが未加工である代わりに選択肢関係の情報取得変数も更新されません。 OnUpdateReadyのファイル数 †SHIORI Event(参照:構造とイベントの流れのReference(イベントの関連情報)は、里々では情報取得変数の(R*)で取得出来ます。 どのイベントでどのようなReferenceが取得できるかは、通常SSPの公式リファレンスでもあるUKADOCなどで確認する事ができます。 ただしネットワーク更新において更新すべきファイルが見つかった場合に発生するイベント「OnUpdateReady」で(R0)を使う場合には少し注意が必要です。 UKADOCにもあるように、OnUpdateReadyのReference0には本来「更新を行うファイルの総数から1引かれたもの」が入っています。つまりreference0が「0」のとき、更新のあったファイル数は1個である事を意味します。 しかし里々の(R0)ではこの値は補正され、更新を行うファイル数が1個の場合には(R0)にも1が入っています。 これは例えば *OnUpdateReady :ネットワーク更新を開始するよ。 :ファイルは全部で(R0)個あるみたいや。 といったトークを書く場合に(R0)を素直な序数として扱うのに役立ちます。
しかし一方で、同様に更新ファイル総数や現在更新中のファイルの番号をReferenceにもつOnUpdate.OnDownloadBeginなどでは、この補正がされない事に注意する必要があります。
#思ったように動かない例 *OnUpdate.OnDownloadBegin :今(R1)個目のファイルをダウンロード中だよ〜。 などといったトークを実現したい場合は、calc関数などを用いて #思ったように動く例 *OnUpdate.OnDownloadBegin :今(calc,(R1)+1)個目のファイルをダウンロード中だよ〜。 のようにする必要があります。 |