「台本コミュニケート仕様書」の編集履歴(バックアップ)一覧はこちら
「台本コミュニケート仕様書」(2012/02/28 (火) 16:27:45) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
[[台本トーク(仮)]]に戻る
#contents
----
*台本コミュニケート仕様書 [#ta8d9b43]
**受信仕様 [#r45fd0ca]
台本は、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: きぃ
**送信仕様 [#f0ed8608]
台本は、ゴースト間コミュニケートを使って送信する。台本コミュニケートを行う場合、次のように設定する。台本コミュニケートを行う場合、応答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
**送信補助仕様 [#g7e5aab9]
3体以上のゴーストが関係する台本トークの場合、各ゴーストへの台本送信順序管理・タイミング管理は複雑になる。そこで、さくらスクリプトを拡張し、一行で複数のゴーストのトークを記述する方法を、補助仕様として定義する。
***\![ghost,ゴースト名] [#c90a4137]
-このタグから次の\![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行である。
*台本コミュニケート実装サンプル集 [#o8a0719b]
**里々 [#x44d6852]
***里々における受信仕様の実装例 [#mbb5cd5e]
@台本コミュ識別子
ECHO/1.0
*COMMUNICATE該当なし
>台本コミュニケート受信 【タブ】 (compare,(R2),(台本コミュ識別子))
>COMMUNICATE該当なし通常
*台本コミュニケート受信
$Value0 【タブ】 (R0)
(R3)
***里々における送信仕様の実装例 [#b6d0d5fb]
#きぃへの台本コミュニケート
*台本トーク
$Value0 【タブ】 きぃ
$Value1 【タブ】 (台本コミュ識別子)
$Value2 【タブ】 (きぃ台本その1)
:無機物っていいよね。
*きぃ台本その1
:(4)
:(10)俺に聞かれてもなー。
***里々における現実的な送信仕様の実装例 [#b012a5a0]
*台本トーク
$Value0 【タブ】 テスト
$Value1 【タブ】 (台本コミュ識別子)
$Value2 【タブ】 (テスト台本1)
:これってアレだよね。
:またそういう危険なことを…。
*テスト台本1
:「アレ」って何だろう……。
:それは国家機密だ。消されたくなければ忘れろ。
:(4)……国家機密?
:国家機密。
*テスト「 それは国家機密だ。
$Value0 【タブ】 テスト
$Value1 【タブ】 (台本コミュ識別子)
$Value2 【タブ】 (テスト台本2)
:なんか勝手にえらいことになってる~
:……マテ。お前、知らずに言っていたのか?
:ちょっと待って!本当なの!?
*テスト台本2
:いつの間にあなた達、国家機密なんか知ったのよ?
:お互いの製造元だからな。
:(4)……製造元?
:製造元。
*テスト「 お互いの製造元だからな。
:人が作ったものだったんだ……。
私はてっきり、その辺から生えてきたんだとばかり。
:ちょっと待てコラ。
**文 [#dafb30dd]
***文における受信仕様の実装例 [#o63ebc70]
OnCommunicate
{
if reference2 == "ECHO/1.0"
{
if "\![vanishbymyself]" !_in_ reference3
{
//---拡張コミュニケート(受信)
res_reference0 = reference0
reference3
}
}
else
{
if reference0 == "user" || reference0 == "User"
{
//---- ユーザーからの話しかけ
ReplyToUser
}
else
{
//---- ゴーストからの話しかけ
ReplyToGhost
}
}
}
***文における送信仕様の実装例 [#q86d786f]
ScriptTalk
{
res_reference0 = "きぃ"
res_reference1 = "ECHO/1.0"
res_reference2 = KeyScriptNo1
"\0\s[0]無機物っていいよね。\e"
}
KeyScriptNo1
{
"\0\s[4]\1\s[10]俺に聞かれてもなー。\e"
}
**華和梨(OpenKEEPS) [#fd78940b]
***OpenKEEPSにおける受信仕様の実装例 [#z865f614]
台本コミュ識別子 : "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における送信仕様の実装例 [#g432a090]
# きぃへの台本コミュニケート
sentence : \0\s[0]無機物っていいよね。\e$(
SendTo きぃ;
setstr System.Response.Reference1 ${台本コミュ識別子};
setstr System.Response.Reference2 ${きぃ台本その1};
)
きぃ台本その1 : \0\s[4]\1\s[10]俺に聞かれてもなー。\e
*付録:台本コミュニケート支援ゴースト「[[Director:http://shobu.hp.infoseek.co.jp/#Ghost]]」 [#pf08d4a1]
**Directorの概要 [#c6437382]
3体以上のゴーストが関係する台本トークの場合、各ゴーストへの台本送信順序管理・タイミング管理は複雑になる。そこで、前述の管理機構をアプリゴーストとして独立させたのが、ゴースト「Director」である。\![ghost]タグを含むさくらスクリプトを、本ゴーストに「台本コミュニケートの台本」として送信すると、自動的に該当ゴーストへ適切な順序・タイミングで台本を送信する。複雑な台本を、あたかも通常のさくらスクリプトと同じ程度のコストで記述できるメリットがある。
**Director併用時のOpenKEEPSにおける送信仕様の実装例 [#q4dd57f0]
sentence : \0\b[-1]\e$(
SendTo Director;
setstr System.Response.Reference1 "ECHO/1.0";
setstr System.Response.Reference2 (
\![ghost,きぃ]\0\s[0]きぃです。
\![ghost,テスト]\0\s[0]テストです。
\![ghost,ポスト]\0\s[0]三波春男でございます。
\![ghost,きぃ]\0\s[4]
\![ghost,テスト]\0\s[4]
\e
);
)