台本コミュニケート仕様書

受信仕様

台本は、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,ゴースト名]

  • このタグから次の\![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行である。

台本コミュニケート実装サンプル集

里々

里々における受信仕様の実装例

@台本コミュ識別子
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

*1 Reference3の内容、キーワード、使用タグが受信したゴーストにとって不利益な場合、Reference3の内容を加工して発話すること、或いは発話しないことは許される。

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-08-13 (月) 08:14:20