#contents ---- *台本コミュニケート仕様書 [#g4212d97] **受信仕様 [#f3f41907] 台本は、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の内容をそのまま発話すべきである。((Reference3の内容、キーワード、使用タグが受信したゴーストにとって不利益な場合、Reference3の内容を加工して発話すること、或いは発話しないことは許される。))この発話の際、Reference0に示されるゴーストを、応答Reference0に設定しなければならない。 応答例: SHIORI/3.0 200 OK Charset: Shift_JIS Sender: ポスト Value: \0\s[0]きぃちゃん、\w8こんにちは。\e Reference0: きぃ **送信仕様 [#l36fd368] 台本は、ゴースト間コミュニケートを使って送信する。台本コミュニケートを行う場合、次のように設定する。台本コミュニケートを行う場合、応答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 **送信補助仕様 [#y11bb723] 3体以上のゴーストが関係する台本トークの場合、各ゴーストへの台本送信順序管理・タイミング管理は複雑になる。そこで、さくらスクリプトを拡張し、一行で複数のゴーストのトークを記述する方法を、補助仕様として定義する。 ***\![ghost,ゴースト名] [#j9cd0c5e] -このタグから次の\![ghost,ゴースト名]タグまでの範囲は、「ゴースト名」で示されたゴーストのトークである。 -ここで言う「ゴースト名」は、\0側の名前を指す。 -行頭にこのタグがない場合、このタグ羅列を送信したゴースト名をAとすると、「\![ghost,A]」があると仮定して解釈する。 -行末にこのタグがない場合、最後に現れた\![ghost,ゴースト名]から行末までを範囲として解釈する。 -「\![ghost]」という略記法を解釈する。タグ羅列を送信したゴースト名をAとすると、「\![ghost,A]」と表記した場合と等価である。 -このタグの範囲内末尾に「\e」がない場合、自動的に「\e」を補完して解釈する。 使用例: \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行である。 *台本コミュニケート実装サンプル集 [#y2edf6f9] **里々 [#t7102c57] ***里々における受信仕様の実装例 [#c9f6a1a9] @台本コミュ識別子 ECHO/1.0 *COMMUNICATE該当なし >台本コミュニケート受信 【タブ】 (compare,(R2),(台本コミュ識別子)) >COMMUNICATE該当なし通常 *台本コミュニケート受信 $Value0 【タブ】 (R0) (R3) ***里々における送信仕様の実装例 [#e2c2ba65] #きぃへの台本コミュニケート *台本トーク $Value0 【タブ】 きぃ $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (きぃ台本その1) :無機物っていいよね。 *きぃ台本その1 :(4) :(10)俺に聞かれてもなー。 ***里々における現実的な送信仕様の実装例 [#d0118b05] *台本トーク $Value0 【タブ】 テスト $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (テスト台本1) :これってアレだよね。 :またそういう危険なことを…。 *テスト台本1 :「アレ」って何だろう……。 :それは国家機密だ。消されたくなければ忘れろ。 :(4)……国家機密? :国家機密。 *テスト「 それは国家機密だ。 $Value0 【タブ】 テスト $Value1 【タブ】 (台本コミュ識別子) $Value2 【タブ】 (テスト台本2) :なんか勝手にえらいことになってる~ :……マテ。お前、知らずに言っていたのか? :ちょっと待って!本当なの!? *テスト台本2 :いつの間にあなた達、国家機密なんか知ったのよ? :お互いの製造元だからな。 :(4)……製造元? :製造元。 *テスト「 お互いの製造元だからな。 :人が作ったものだったんだ……。 私はてっきり、その辺から生えてきたんだとばかり。 :ちょっと待てコラ。 **文 [#nca34ec3] ***文における受信仕様の実装例 [#r766479f] OnCommunicate { if reference2 == "ECHO/1.0" { if "\![vanishbymyself]" !_in_ reference3 { //---拡張コミュニケート(受信) res_reference0 = reference0 reference3 } } else { if reference0 == "user" || reference0 == "User" { //---- ユーザーからの話しかけ ReplyToUser } else { //---- ゴーストからの話しかけ ReplyToGhost } } } ***文における送信仕様の実装例 [#t89582c6] ScriptTalk { res_reference0 = "きぃ" res_reference1 = "ECHO/1.0" res_reference2 = KeyScriptNo1 "\0\s[0]無機物っていいよね。\e" } KeyScriptNo1 { "\0\s[4]\1\s[10]俺に聞かれてもなー。\e" } **華和梨(OpenKEEPS) [#f2426348] ***OpenKEEPSにおける受信仕様の実装例 [#y4a4c402] 台本コミュ識別子 : "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における送信仕様の実装例 [#w4f071ff] # きぃへの台本コミュニケート sentence : \0\s[0]無機物っていいよね。\e$( SendTo きぃ; setstr System.Response.Reference1 ${台本コミュ識別子}; setstr System.Response.Reference2 ${きぃ台本その1}; ) きぃ台本その1 : \0\s[4]\1\s[10]俺に聞かれてもなー。\e