台本コミュニケート仕様書†受信仕様†台本は、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 |