どんな物?†
- タイムアウトしたときに設定された選択肢を自動的に選択する。
- どの選択肢を選択するかはユーザ側で設定可能。というかそうでないと無意味だし。
- ランダムトーク中に選択肢を仕込んでも「・・・無視?」とか言われない。
- やっぱり作業の傍らで立たせてると選択肢出ても選択できないし。そこを何とかするための物。
- 略称ACS。適当なのでツッコミは無しで。
- 使えば使うほどセーブデータのサイズは増える。ちょっと注意。
- ACSに対応してないトークがタイムアウトすると・・・。
- ちゃんとタイムアウト無効をかけましょう。ここは何とかしないとなぁ。
- 一応対処法を考えてみました。対応してないトークに選択肢を使う場合、「$ACS対応 0」と記述すると幸せになれるかも。
- 自動選択を設定するたびにトークが繰り返されます(駄
記述と説明†
\![raise,OnACSChoice2,元ラベル,ジャンプ先1,表示文1,ジャンプ先2,表示文2,"トーク",制限時間]
- こちらが呼び出し用テンプレート。
- 実際に普通のトークを変換してみましょう。
*選択テスト
\![set,choicetimeout,(タイムアウト時間)]
:(105)いっつてすと。
:(206)テストです。
\q[OK,成功しました]
\q[NG,失敗しました]
*選択テスト
$ACS対応 1
\![raise,OnACSChoice2,選択テスト,成功しました,OK,失敗しました,NG,"\0(105)いっつてすと。\1(206)テストです。\0",(タイムアウト時間)]
- はい、ごく普通のテスト用トークですね。こんな感じに変換します。
- これ以降の説明で対応関係が分からなくなったらこちらを参照してください。
- (R6)のタイムアウト時間に任意の数値を入れることでタイムアウト時間を設定できます。(FYDの場合はユーザが設定可能)
*OnACSChoice2
>OnACSChoice2OFF (ACS)==OFF
>OnACSChoice2Easy (ACS)==簡易
$ジャンプ元ラベル情報 (R0)
\![set,choicetimeout,(R6)]
(R5)
\1
((if,(変数「(R0)ACイベントラベル」の存在)==0,set,(R0)ACイベントラベル,(R1),set,(R0)ACイベントラベル,((R0)ACイベントラベル)))
(if,((R0)ACイベントラベル)==(R1),\![*])\q[(R2),(R1)] \q[自動選択に設定,OnACSSet,(R0),(R1)]
(if,((R0)ACイベントラベル)==(R3),\![*])\q[(R4),(R3)] \q[自動選択に設定,OnACSSet,(R0),(R3)]
- 最初の2行は設定に応じて動作を変更するためのもの。後述。
- ジャンプ元ラベル情報はタイムアウトの際に使用します。
- (R5)はトークの内容。
- そのあとの\1は選択肢を表示する側。\p[2]、\0など好みに合わせて変更してください。
- if~「(R0)ACイベントラベル」の存在~は変数が存在しなかった際に変数を作成する部分。
- きっともっとスマートにできます。要改良。
- こちらの通常版は選択肢のあとにスペースを挟んで「自動選択に設定」という項目が出現します。
- 自動で選択される選択肢には前に\![*]がつきます。他には何も付かないので違和感たっぷり。
- なので正直こっちはお勧めしません。簡易のほうがいいんじゃないかなー。
- ちなみにOnACSSetのOnは必須。『idにOn~を指定するとOnChoiceSelectの代わりにそのイベントが発生する』ことを利用しているため。
*OnACSChoice2Easy
$ジャンプ元ラベル情報 (R0)
\![set,choicetimeout,(R6)]
(R5)
\1
((if,(変数「(R0)ACイベントラベル」の存在)==0,set,(R0)ACイベントラベル,(R1),set,(R0)ACイベントラベル,((R0)ACイベントラベル)))
\q[(if,((R0)ACイベントラベル)==(R1),●,○),OnACSSet,(R0),(R1)]\q[(R2),(R1)]
\q[(if,((R0)ACイベントラベル)==(R3),●,○),OnACSSet,(R0),(R3)]\q[(R4),(R3)]
- 真偽によってマークを変えることで簡略化。自動選択の設定はマークをクリックで行う。
- 説明しないとわかりにくい事と、マークの区別が問題。
- その気になればマークをユーザ側で設定する事も出来る、けど・・・。
*OnACSChoice2OFF
$ジャンプ元ラベル情報 (R0)
\![set,choicetimeout,(R6)]
(R5)
\1
\q[(R2),(R1)]
\q[(R4),(R3)]
- ACSがOFFの場合。
- この場合でもタイムアウト時間は有効であることに注意。
*OnChoiceTimeout
>((ジャンプ元ラベル情報)ACイベントラベル) (ACS)!=OFF&&(ACS対応)==1
>のんACSタイムアウト
- ACSを呼び出すときに「$ACS対応 0」を記述すると普通のタイムアウト反応に飛べます。
- 「$ACS対応 1」と記述することで初めて動作するようになっています。
- いちいち対応非対応を書くのが面倒なのが難点。でもOnTalkに仕込んだりすると場合によっては動作しません。
*のんACSタイムアウト
:・・・・・・。
- ここがタイムアウト反応。
- ACSがOFFの時、もしくはACS対応が0の時に呼び出されます。
*OnACSSet
$(R0)ACイベントラベル (R1)
>(R0)
- ここでジャンプ先を設定しています。
- (R0)は元ラベル名、(R1)は選択肢のジャンプ先。
- つまり、(元ラベル名)ACイベントラベルという変数にジャンプ先を格納します。
- 元ラベル名は必ずユニーク(=唯一)なものである必要があります。
呼び出す場合の記述例†
*選択テスト
\![raise,OnACSChoice2,選択テスト,成功しました,OK,失敗しました,NG,"\0(105)いっつてすと。\1(206)テストです。\0",(タイムアウト時間)]
*成功しました
(206)OKね。
*失敗しました
(206)NGが呼び出されました。正常に動作していればOKね。
ちょっとだけ†
- OnChoiceSelectは弄る必要なし。そのままで動きます。
- (当然ながら)普通のランダムトークや選択肢と共存させることが可能です。
- 但し、ACSに対応しない選択肢はタイムアウト不可もしくはACS非対応を明示する必要があるので注意。
- 選択肢3つへの改造も容易。
- ここで記述すると長くなるので、for your dreamのdic2_event.txtをご覧ください。
- リファレンスの続く限り増やせます、がそこまでやる必要あるかなぁ・・・。
- 我ながら、もう少し解り易く書けと思った。