台本コミュニケート仕様書†受信仕様†台本は、OnCommunicateイベントを使って各ゴーストに送信される。台本コミュニケートかどうかの判別は、次の手順で行う。 OnCommunicateイベント例: GET SHIORI/3.0 Sender: crow ID: OnCommunicate Reference0: きぃ Reference1: \0\s[0]こんにちは。\e Reference2: ECHO/1.0 Reference3: \0\s[0]きぃちゃん、\w8こんにちは。\e SecurityLevel: local Charset: Shift_JIS Reference2の内容が「ECHO/1.0」である場合、このOnCommunicateイベントは、台本コミュニケートによる台本送信である。Reference3は台本である。台本送信だった場合、台本コミュニケート対応ゴーストは、Reference3の内容をそのまま発話すべきである。*1この発話の際、Reference0に示されるゴーストを、応答Reference0に設定しなければならない。 応答例: SHIORI/3.0 200 OK Charset: Shift_JIS Sender: ポスト Value: \0\s[0]きぃちゃん、\w8こんにちは。\e Reference0: きぃ 送信仕様†台本は、ゴースト間コミュニケートを使って送信する。台本コミュニケートを行う場合、次のように設定する。台本コミュニケートを行う場合、応答Reference1を「ECHO/1.0」と設定しなければならない。同時に、応答Reference2に台本の内容を設定しなければならない。 ゴースト間コミュニケート設定例: SHIORI/3.0 200 OK Charset: Shift_JIS Sender: ポスト Value: \0\s[0]無機物っていいよね。\e Reference0: きぃ Reference1: ECHO/1.0 Reference2: \0\s[4]\1\s[10]俺に聞かれてもなー。\e 送信補助仕様†3体以上のゴーストが関係する台本トークの場合、各ゴーストへの台本送信順序管理・タイミング管理は複雑になる。そこで、さくらスクリプトを拡張し、一行で複数のゴーストのトークを記述する方法を、補助仕様として定義する。 \![ghost,ゴースト名]†
使用例: \0\s[0]餃\![ghost,きぃ]\0\s[0]子\![ghost]\0\s[0]の \![ghost,きぃ]\0\s[0]王\![ghost,ポスト]\0\s[5]蟲\![ghost]\0\s[4]\![ghost,きぃ]\0\s[4]\e 注: 便宜上2行に分けているが、本来はこれが1行である。 台本コミュニケート実装サンプル集†里々†里々における受信仕様の実装例†@台本コミュ識別子 ECHO/1.0 *COMMUNICATE該当なし >台本コミュニケート受信 【タブ】 (compare,(R2),(台本コミュ識別子)) >COMMUNICATE該当なし通常 *台本コミュニケート受信 $Value0 【タブ】 (R0) (R3) 里々における送信仕様の実装例†#きぃへの台本コミュニケート *台本トーク $Value0 【タブ】 きぃ $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (きぃ台本その1) :無機物っていいよね。 *きぃ台本その1 :(4) :(10)俺に聞かれてもなー。 里々における現実的な送信仕様の実装例†*台本トーク $Value0 【タブ】 テスト $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (テスト台本1) :これってアレだよね。 :またそういう危険なことを…。 *テスト台本1 :「アレ」って何だろう……。 :それは国家機密だ。消されたくなければ忘れろ。 :(4)……国家機密? :国家機密。 *テスト「 それは国家機密だ。 $Value0 【タブ】 テスト $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (テスト台本2) :なんか勝手にえらいことになってる~ :……マテ。お前、知らずに言っていたのか? :ちょっと待って!本当なの!? *テスト台本2 :いつの間にあなた達、国家機密なんか知ったのよ? :お互いの製造元だからな。 :(4)……製造元? :製造元。 *テスト「 お互いの製造元だからな。 :人が作ったものだったんだ……。 私はてっきり、その辺から生えてきたんだとばかり。 :ちょっと待てコラ。 文†文における受信仕様の実装例†OnCommunicate
{
if reference2 == "ECHO/1.0"
{
if "\![vanishbymyself]" !_in_ reference3
{
//---拡張コミュニケート(受信)
res_reference0 = reference0
reference3
}
}
else
{
if reference0 == "user" || reference0 == "User"
{
//---- ユーザーからの話しかけ
ReplyToUser
}
else
{
//---- ゴーストからの話しかけ
ReplyToGhost
}
}
}
文における送信仕様の実装例†ScriptTalk
{
res_reference0 = "きぃ"
res_reference1 = "ECHO/1.0"
res_reference2 = KeyScriptNo1
"\0\s[0]無機物っていいよね。\e"
}
KeyScriptNo1
{
"\0\s[4]\1\s[10]俺に聞かれてもなー。\e"
}
華和梨(OpenKEEPS)†OpenKEEPSにおける受信仕様の実装例†台本コミュ識別子 : "ECHO/1.0"
event.OnCommunicate : $(
# 話し掛けてきた相手とメッセージをユーザに提示
.setstr Sender $(SReference 0);
.setstr Message $(Reference 1);
# デフォルトでは話し掛けてきた相手に自動的に返事
SendTo ${Sender};
# コミュニケートツリーから該当するトークを検索
.setstr @aistr $(
if $[ $(SReference 2) == ${台本コミュ識別子} ] $(
# 台本コミュニケートだった
.setstr EchoMessage $(SReference 3);
.setstr @null $(.get $(EntryName "TalkCommEcho"));
.pop EchoMessage;
) else $(
# 通常コミュニケートだった
CommTalk "TalkComm" $(StringNormalize ${Sender}) ${Message};
);
);
if $[ $(length ${@aistr}) != 0 ] $(
# 該当トークがあった
resetTalkcount;
.setstr kp.internaltalkflag 1;
.entry @aistr;
) else $(
# 該当無し
StopCommunicate;
#話さないならフラグは消す
.clear kp.internaltalkflag;
);
.clear Sender;
.clear Message;
)
OpenKEEPSにおける送信仕様の実装例†# きぃへの台本コミュニケート
sentence : \0\s[0]無機物っていいよね。\e$(
SendTo きぃ;
setstr System.Response.Reference1 ${台本コミュ識別子};
setstr System.Response.Reference2 ${きぃ台本その1};
)
きぃ台本その1 : \0\s[4]\1\s[10]俺に聞かれてもなー。\e
|