

YAYAでプラグインをつくるメモ。

まだ作りはじめて間も無い人間が書いたので信用性は低め。



YAYAでプラグイン作るにはココ
http://ms.shillest.net/yaya_as.xhtml
で配布されてるYAYA as PLUGINを改変する。

YAYAの使い方は文Wiki等を参照。
http://emily.shillest.net/ayaya/

PLUGIN/2.0/仕様書はココ。一通りみとく。
http://emily.shillest.net/specwiki/index.php?PLUGIN%2F2.0%2F%E4%BB%95%E6%A7%98%E6%9B%B8
ここを参考にdescript.txtにプラグインID書いておく。

yaya_plugin2.dicはテンプレートなので他の辞書を開いて書き換え。

yaya.txtはiolog, offをコメントアウトしてログ出力オンに（配布時はコメントアウトしておく）
このログを眺めてプラグインにどんなイベントが発生するのか把握するのが大事。
ゴーストと同じように発生するイベントもあるし、発生しないイベントもあり。
（ちなみにOnSecondChangeはyaya.txtの初期設定でログに記述しないようになっている）


おおざっぱに言えば常に起動していてゴーストにイベントや変数送ったりできるシェルのないゴーストみたいなもの。
SAORI使えます。ただSAORIの送信するイベントを受け取れないらしい（試したことなし）
PLUGIN/2.0なのでいまのところSSPでしか使えない。
全てのゴーストで共通して同じ事をやらせたい時に向いてる。

プラグインリンク集はここが充実。
http://disc2.s56.xrea.com/wiki/index.php?%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3




雑多。

・プラグインエクスプローラーを開いてプラグイン無効→有効をやるとリロードできる。

・プラグインのロードとアンロードイベントは「load」と「unload」。
yaya_plugin2.dic内に書かれてます。変数消すのはここでやるといいとおもう。
多分ゴースト起動中でもプラグインを無効にされるとunload発生するしその後有効にするとload発生する。

・ゴーストのフルパスはOnBootのreference[4]で取得。
SSPに最近追加されたもの。このプラグインが古いSSPに対応してないのはこのためです…。（まぁゴーストからアイコンのフルパス送って貰えれば解決するんだけど里々だとSAORI使わないとできなさそうだし）
ただこれ送信元のゴーストのパス訳じゃないのでとりあえず配列保存しといてつかいたいときに送信元ゴーストと同じ名前のゴーストのパス検索して探すようにしました。
他にパス取得できる方法あればそっちのほうがいいかも。

・リファレンスはreference0じゃなくreference[0]と書く。

・イベント送信時の

	res_event = 'OnNantoka'
	res_reference[0] = 0
	res_reference[1] = 1
	res_reference[2] = 2
	res_reference[3] = 3
	res_reference[4] = 4

↑このres_referenceは0から順番にならべるのが無難。

・共有変数プラグインは例え辞書やセーブの暗号化しても不正されやすい。
開発パレットのスクリプトから\![raiseplugin]入力すると不正できまくり。
なんか対策とっておくといいかも。
ちなみにこのプラグインは不正されてもあまり意味がないので対策とってないです。
あとどんなに対策とっても自作ゴースト作れば不正できます。

・里々から\![raiseplugin]で値を送るとき
「、」や「。」に自動的にウェイトタグが付く場合があります（「φ。」と書いても防げない）
これはプラグイン側の正規表現関数でSakuraScriptを取り除くしかないかも。

・プラグインからOnNantokaを里々ゴーストに送り、ゴースト側のOnNantokaイベント内に選択肢を記述すると選択肢がバグる。
…なんか里々だけで三回も悩まされている。

・OnNantoka {"test"}
と書くと
ゴースト側から\![raiseplugin,OnNantoka]で「test」という変数を得られるように見えますが、「test」はただバルーンに表示されるだけです。変数保存はできません。
ゴーストに変数送るときは
	res_event = 'Onイベント名'
	res_reference[*] = 変数
を送ってそのイベントで受け取るしかなさそう。

・ゴーストから\![raiseplugin]でプラグインのイベントを起こし、そのプラグインから返ってきたreferenceをnotifyイベントで受けとってすぐに変数保存し同イベントでバルーンに表示しようとするとバルーンに表示されるまで間に合う時と間に合わない時がある。
これ困る。なんとかすればなんとかなるかもしれないのでなんとかできる人はなんとかするといいとおもう。

・変数を渡すイベントは「load」「OnBoot」イベント内と、referenceの中身が変わった時に全ゴーストに向けて発生させるのがいいかもしれない。

・このプラグインのようなゴーストから送られてくる文字列や画像情報を集めるプラグインはYAYAでも作れるし色々応用きくと思う。
ゴーストの誕生日集めてその日になったら知らせるとかトーク中で使う単語群を共有するとか。
通貨、ユーザーステータス共通変数プラグインや所持アイテムのやりとりをするプラグインも作ろうと思えば作れそうだけどユーザー側から不正しやすいので自分ではちょっと手がだせないかんじ。
スタンププラグインはゴースト側から削除不可だから作れた訳で。1ゴーストに1つのみという制限も色々と気楽。

・YAYAasSAORIモジュールでも変数ファイル保存フォルダをどっかに固定すれば共有変数できなくもない。こっちの方が不正しづらそうな気がする。

・ゴースト起動中にプラグインを有効、無効にした時「load」「unload」が起きてない予感。

・二つのファイルが同一のものかそうでないか調べる時はFDIGEST使うんですね。知らなかったの自分だけな気もしますが。
24bitPNGを8bitにしただけでもちゃんと別ファイルと認識された。

・imgctlはPNGと32*32px判別にしか使ってない。
これだけで500kbはもったいないような…。でも代用できるSAORIない。PNG判別だけならあったかも。

・ほんとはddp使えるようにしたかったんだけど多分imgctlでサイズ測れないのであきらめた。
まぁ拡張子変えれば簡単に見れなくするようにはできる。

・最新版SSPではプラグインからnotifyイベント送れるようになったらしいけど今更変えるのもあれなのでこのまま。




