![]() |
|
| トップページへ | [ 一覧 | 検索 | 最終更新 ] [ 差分 | 履歴 | 凍結 ] |
|
|
直前の会話をもう一度再生する†『文』には直前の会話を再生する機能がありません。これをスクリプト側で実現するのが本稿の趣旨です。会話の再生時には、ベースウェアからAIの『OnAiTalk』が呼ばれますが、主にこのOnAiTalk関数に細工します。 OnAiTalkを改造する†初期状態のOnAiTalk関数は、だいたい以下のような構造をしています。 aya_aitalk.dic //---- OnAiTalkイベント --------------------------------
OnAiTalk
{
if RAND(100) < communicateratio
{
//---- communicateratio % の率で他ゴーストへ話しかけ
StartCommunicate
}
else
{
if mikireflag == 0
{
//---- 通常のランダムトーク、ただしチェイン中はチェイントーク
if CHAIN.IDName == "" {
RandomTalk
}
else {
ChainTalk
}
}
else
{
//---- 見切れ中なので見切れ中のトークを行う
MikireTalk
}
}
}
『文』では、ランダムトークを実現するためにOnAiTalk関数からRandomTalk関数を呼び出していますので、RandomTalk関数の戻り値を取得して、その戻り値を会話として再生するようにすれば、直前の会話を記憶しておくことが出来ます。改造したOnAiTalk関数は以下のようになります。 //---- OnAiTalkイベント --------------------------------
OnAiTalk
{
if RAND(100) < communicateratio
{
//---- communicateratio % の率で他ゴーストへ話しかけ
StartCommunicate
}
else
{
if mikireflag == 0
{
//---- 通常のランダムトーク、ただしチェイン中はチェイントーク
if CHAIN.IDName == "" {
lastTalk = RandomTalk //ここ!
}
else {
lastTalk = ChainTalk //ここ!
}
lastTalk //ここ!
}
else
{
//---- 見切れ中なので見切れ中のトークを行う
MikireTalk
}
}
}
「//ここ!」が変更した場所です。 メニュー周りの改造†変数を保存するだけでは再生機能が実現できないので、次にメニューを改造します。 #include(): No such page: 選択肢注意『文』でのメニュー表示を行う『OpenMenu』関数は、基本的に以下のようになっています。 aya_menu.dic //---- メインメニュー展開 ------------------------
OpenMenu
{
"\0\s[0]"
--
"はい、なんでしょうか?"
"%username、なんですか?"
"ん‥‥どうしたの?"
--
"\n\n/
\q[なんか話して,AITALK]\n/
\q[しゃべり頻度を変えて,TALKINTERVAL]\n/
\q[コミュニケート,COMMUNICATEOPEN]\n/
\q[AIについて,ABOUTAYA]\n/
\q[なんでもない,CANCEL]\e"
}
まず、これを以下のように変更します。 //---- メインメニュー展開 ------------------------
OpenMenu
{
"\0\s[0]"
--
"はい、なんでしょうか?"
"%username、なんですか?"
"ん‥‥どうしたの?"
--
"\n\n" //ここから
--
if lastTalk != "" {
"\q[さっきなんて言ったの?,OnLastTalk]\n"
}
-- //ここまで
"\q[なんか話して,AITALK]\n/
\q[しゃべり頻度を変えて,TALKINTERVAL]\n/
\q[コミュニケート,COMMUNICATEOPEN]\n/
\q[AIについて,ABOUTAYA]\n/
\q[なんでもない,CANCEL]\e"
}
『OnLastTalk』関数を作る†新たに作るOnLastTalk関数は以下のようにします。 OnLastTalk {
"\0\s[0]えっと\w2‥\w2‥\w2‥\w9\w9\w9\c/
%lastTalk"
}
これで、メニュー『さっきなんて言ったの?』を選択すると、OnLastTalk関数が呼ばれ、直前の会話が再生されるようになります。 これを応用して、lastTalkを簡易配列にするなどの変更を行えば、N個前の会話を再生するようなスクリプトも組めると思います。 |
|
最終更新日: 2006-12-09 (土) 16:12:52
|