SAORI関連文書。




さおりとは

ゴーストに関数・機能追加を行うSIORIから利用するプラグインで、dllやexe形式で提供されます。
なおssu(ssu.dll)は里々の補助として、ゴースト「ポストと狛犬」に標準で組み込まれていたさおりです。
現在は、satori.dllにまるごとssu自体を吸収したため、ssuの機能は設定無しで使えます。
偽林檎で使用できるさおりはこのssuのみです。他のさおりは一切使用できません。
解説サイト、SAORI集サイトのリンク

さおりを使う

里々で使う手順は以下のとおり。

  1. ghost\master\saoriフォルダに、使いたいさおり本体を置く
  2. satori_conf.txtの「@SAORI」以降の行に次のように書いて登録する
    [使うさおりの適当な短縮名],saori/[「.dll」込みの使うさおりのファイル名]
  3. 実際にさおりを使いたい箇所で、次のように書く
    引数を必要としないさおりならば、カンマ以降は省略可
    ([使うさおりの適当な短縮名],[引数1],[引数2],…)

使用例

MIYさんのmciaudio.dllを組み込む例。

  • satori_conf.txtの「@SAORI」以降の行に、次のように書いて登録する
    mciaudio,saori/mciaudio.dll
  • 辞書内の使いたい箇所で、次のように書く
    (mciaudio,load,鳥の詩.mp3)(mciaudio,play)

tips

  • さおり本体はsaoriフォルダ以外に置く事も可能。
    (里々と同じフォルダに置く場合、以降の行に上の例の「saori/」が不要)
  • [短縮名]は自分の好きな名前に設定できる。
    「、」「,」などの区切り文字は追加、削除できる。(特殊変数 > 引数区切り追加・削除

ちなみに「@SAORI」であらかじめ引数付きで設定しておくと、

曲読み込み,saori/mciaudio.dll,load
演奏,saori/mciaudio.dll,play

文中で下記のように呼び出しできるようになる。

(曲読み込み,鳥の詩.mp3)(演奏)

補足

配布されているさおり同梱の説明は里々以外の栞に向けて書かれている事が多いので、ちょっと説明。

  • Argument0,Argument1,…(Arg0,Arg1,…)

これはさおりの引数です。(「第○パラメータ」と書かれてる事もあります)
里々では上記の[引数1],[引数2]...にあたります。

([使うさおりの適当な短縮名],[Argument0],[Argument1],…)
  • Value0,Value1,…

これはさおりからの返り値です。
里々ではこれらを(S0),(S1),…と書いて取得します。
(例:日時取得時に時分秒を付ける)

「相対パス」はそのSAORIの置いてある位置から辿ったパスです。(※違う場合もあるかもしれません)
例えばさおりがghost\master\saoriフォルダに入っていて、指定したいimagel.pngファイルがghost\master\saori\skinsの中にある場合「skins\imagel.png」と書きます。

引数にウィンドウハンドル(HWND)を入れるよう指示するさおりもあります。それは下記の「ウィンドウハンドルのつかいかた」を参考にして入れてください。大抵の場合(本体ハンドル0)を使えばOK。

SAORI-basicのタイムアウト

里々ではSAORI-basicも標準でuniversalと区別無く使用できる様になっていますが、タイムアウトが設定されている為スグに値を返さない物はタイムアウトエラーになります。回避する方法としてはCLearBrain Systemshttpsさん(webarchive)の、SAORI "Basic" Proxy DLLを使用して下さい。

さおりを意図したタイミングで使う(同期呼び出し)

例えば1回のトーク中でfill_desktopを複数回呼んでも、期待するような動作はしないでしょう。
これは何故かというと、「栞がベースウェアからのリクエストを受け、辞書からさくらスクリプトを組み上げて返す」というプロセスが、ゴーストの喋り始める前の段階で行われているからです。
(「れしば」へはリアルタイムに報告するので、眺めてると順序がわかるでしょう)
喋り途中でダイナミックに演出を行う方法は用意されてます。
さくらスクリプトの\![raise,...]というコマンドで、里々にはそのraiseを使いやすくするsyncという関数があります。

以下サンプル。

*
:いくよー。\w9\w9\w9
まず赤。(sync,fill_desktop,255,0,0)\w8\w8
次は青。(sync,fill_desktop,0,0,255)\w8\w8
でもって黄色。(sync,fill_desktop,255,255,0)\w8\w8
おしまいっと。(sync,fill_desktop)

とすると「しゃべり途中に同期して」黄色く塗りつぶされます。
さおりからの返値は捨てられます。挿入されたりはしません。

*
:(calc,2+3)
:(sync,calc,2+3)

これは\0側のみ「5」と喋ります。

よく使うものであれば、replace.txtに

filldt【タブ】sync,fill_desktop

と書いた上で(filldt,255,255,0)とかすると楽。

  • ○>これってSAORIでなくてもsetや他の関数でも同期呼び出しできるんでせぅか?
  • カッコで呼び出せるものであれば何でもいけるハズです。

ウィンドウハンドルのつかいかた

ウィンドウハンドルの通知時に *hwnd が呼ばれる。
ここで変数に保存するか、さおりに直接渡す。
(R0)には本体ウィンドウ、(R1)にはバルーンウィンドウのハンドルが入ってくる。
それぞれ、\0,\1,\2...(\2以降はCROW/SSP限定)のハンドルがバイト値1で区切られたものである。
これをsplitで分割して、目的のウィンドウハンドルを得る。

例)
*hwnd
(split,(R0),(sprintf,%c,1))
$本体ハンドル0=(S0)
$本体ハンドル1=(S1)
(split,(R1),(sprintf,%c,1))
$バルーンハンドル0=(S0)
$バルーンハンドル1=(S1)

#\0・\1の本体・バルーンのハンドルを変数に保存する。~
#この変数をハンドルを必要とするさおり呼び出しに使用する。~
#(S2)以降を参照することで\2以降のハンドルも取得できるが、~
#ウィンドウが初期化されていない場合無効なハンドルが~
#渡されてくるかもしれない。(未検証)~

「カッコずらずら → \nずらずら」を回避する

連続してSAORIを使うときなど、改行していくと\nが連なってしまう問題を回避する。

(nop,
(あれ)
(これ)
(それ)
(どれ)
)

内部関数nopは「何もしない」。引数も無視される。

nop関数はset_wall_paper.exeなど使うと必ず返り値が返ってきてしまうさおりでトーク中に返り値を表示したくない時にも使います。

*
:(nop、(set_wall_paper、img.bmp、1))壁紙貼りつけたよー。

ただし以下のように記述するとさおりが動作しなくなるので注意。

*
:(nop、(sync、set_wall_paper、img.bmp、1))壁紙貼りつけたよー。

(そもそもsyncを使うと返り値が返らなくなるのでnopを使う必要はありません)

バイト値1のつくりかた

(sprintf,%c,1)

でバイト値1が返る(satori_conf.txtにsprintf,saori/ssu.dll,sprintfの登録が必要)。 hwndの分割にはこれを使う。

里々134-901以降次の書式で作れるようになりました。

(バイト値,1)

引数がSAORIで処理する前に計算されてしまうのを防ぐ

例えばこう記述して「1+1+1」内の「+」を消そうとすると

(erase、1+1+1、+)

「1+1+1」がerase処理前に計算され、「111」ではなく「3」という結果が出てしまう。 計算されなくても全角数字にが勝手に半角になってしまい困る場合もある。

対処法・1

(erase、"1+1+1"、+)

このように「"」で囲めば「1+1+1」が計算されるのを防ぎ、「"111"」と出る (ダブルクオーテーションに限らず、数字/算術記号でなければなんでも可) ただしこの場合「"」が邪魔になってしまうので

(erase、(erase、"1+1+1"、+)、")

こうやって「"」も消しておく。

対処法・2

上記の方法が面倒な場合はSAORI引数の計算を変更する。

$SAORI引数の計算【タブ】無効

SAORIを使う前にこう記述すると引数の計算を防ぐ事ができる。

ただこの状態のままだとSAORIが正常に動かなくなるという弊害もあるので、用が済んだら「$SAORI引数の計算【タブ】自動」に戻しておいた方が良い。

$SAORI引数の計算【タブ】有効
計算する。
$SAORI引数の計算【タブ】無効
計算しない。
$SAORI引数の計算【タブ】自動
各引数の先頭文字が数値または+、−記号のいずれかであれば計算する。
何も指定しなければこれ。今までと同じ動作。

easyballoonを使った、起動/終了/交代トーク

質問があったeasyballoonを使った起動/終了/交代トーク。

  • 起動/他のゴーストから交代
    *OnSatoriBoot
    (bln,change,読み込み中です。)
  • 終了
    *OnClose
    :お疲れ様でした。
    (bln,change,終了処理中です。)
  • 他のゴーストへ交代
    *OnGhostChanging
    :(R0)さんへ交代しますね。
    (bln,change,(R0)さんを呼んで来ます。)
    (bln,clear)

栞をさおりとして使う

栞の中には、さおりとしても使えるようになっているものもありますが、各栞の配布サイトでダウンロードしてきた初期状態ではさおりとして動作しないものもあります。

  • 華和梨8 詳細は華和梨ユーザーズマニュアルを参照。物凄く大雑把に言うと、
    • System.Callback.OnSaoriExecute ... saoriとして呼び出された時に評価される。
    • System.Request.Argument0 ... 引数が格納されている(末尾数値で1,2,3...と対応)。
    • System.Response.Result ... 返したい結果及びスクリプトをセットするエントリ。
    • System.Response.Value0 ... 追加情報をセットするエントリ(末尾数値で1,2,3...と対応)。里々側は(S○)で受け取る。
    • System.Response ... ステータスコードをセットするエントリ。
  • 大雑把に以下のような例になる。
    System.Callback.OnSaoriExecute : $(
    	entry ${System.Request.Argument0};
    	setstr System.Response.Result ${返したい結果及びスクリプト};
    	setstr System.Response ${ステータスコード};
    )
    この例では第一引数のイベントを呼び出す。
    返すべきステータスコードは200(正常+戻り値あり)、204(正常+戻り値なし)、400(おかしい)から選ぶ。上記ユーザーズマニュアル参照。
  • 里々 里々自体もさおりとして使うことができます。
    里々をさおりとして使用する際には特別必要なものはありません。
    satoriで登録したならば、(satori,起動)のようにして使えます。この時、引数の間にスペースが入ってはいけません。
    最初から使える関数以外の定義(例えば上記の"起動")は自分で里々形式のスクリプトを書き、さおりと同じフォルダに配置しなければなりません。
  • 忍 忍をさおりとして使用する際には特別必要なものはありません。
    shinoで登録したならば、(shino, get, OnBoot?)のようにgetというコマンドを使います。
    OnBoot?等の定義は自分で忍形式のスクリプトを書き、さおりと同じフォルダに配置しなければなりませんが、サンプルとなるゴーストが既にダウンロードできない状態のようですので利用は難しいと思います。
  • 里珠 里珠をさおりとして使うためには、別途さおりとして扱うためのスクリプトが必要ですが、現在のところ公開されているものはないようです。

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-07-12 (水) 05:15:34 (226d)