
ゴーストをスタンプ帳に対応させたい作者向け解説。


■ 用意するファイル

▽スタンプの画像
32px*32pxサイズのPNG画像。左上1pxの色で自動的に透過されます。
タグで指定したパスにこの規格にそった画像が存在しないと追加されません。
画像は特にスタンプっぽい画像にする必要はありません。
画像の形式がPNGであれば拡張子は.pngでなくても拡張子が付いてなくても構いません。



■ SakuraScript

▽\![raiseplugin,スタンプ帳,OnStampAdd,スタンプパス,スタンプタイトル,スタンプコメント]

スタンプを押します。
「スタンプ帳」は「379E0DA0-131C-11DD-E1AC-90009E101CFE」でも可。

【スタンプパス】
送信元ゴーストのルートディレクトリからのスタンプ画像までのパス。
先頭に「\」はいらない。「..\」は使えない。ファイル名まで書く。

【スタンプタイトル】
さくらスクリプトは削除される。省略可。

【スタンプコメント】
<br>で改行。さくらスクリプトは削除される。省略可。

・スタンプは削除不可、ゴースト一体につき一個までです。
・\Cタグを使えばトークさせないで渡す事も可能。
・一度スタンプを渡した後同じタイトルのゴーストで渡すと上書きされます。
スタンプの画像とテキストの書き換えは何度でもできます。
逆に一文字でも違うタイトルのゴーストで全く同じスタンプを渡しても別なスタンプと扱われ上書きされません。
・ゴーストがアンインストールされてもスタンプはそのまま残ります。
・一覧表示順は新着順。以前のデータと違うデータで上書きすると一番手前に移動。
過去のデータと全く同じのデータを送ると上書きされませんし、順移動もしません。（画像が同一かどうかも調べてます）


▽\![raiseplugin,スタンプ帳,OnMenuExec,ゴースト名]

スタンプ帳メニューを出します。
これはSSPオーナードローメニューのプラグイン項目からも出せるのでゴースト側から呼び出さなくても特に何か問題がおきたりはしません。

【ゴースト名】
ここにゴースト名を書くとそのゴーストのスタンプ情報ページを直接開きます。
省略されているか該当ゴーストのスタンプが存在しないとメニューのトップページを開きます。


▽\![raiseplugin,スタンプ帳,OnStampInfoCall]

OnStampInfoを発生させます。
OnStampInfoは他にはゴースト起動時、プラグインのロード、アンロード時のタイミングで発生します。



■ SHIORI Event

▽OnStampInfo

スタンプ情報を取得できます。
> Reference0 全スタンプ個数
> Reference1 送信元ゴーストのスタンプの存在。あれば1、なければ0
複数ゴースト起動していると信用性が薄くなるので直前に「\![raiseplugin,スタンプ帳,OnStampInfoCall]」を送信するのを推奨。
> Reference2 プラグインのパス
> Reference3 全スタンプ情報
　「ゴーストタイトル(バイト値1)スタンプファイル名(バイト値1)タイトル(バイト値1)コメント(バイト値1)スタンプ押した時刻」
　をバイト値2でつなげた配列。
　スタンプ画像は「プラグインのパス\icon」内にあります。…あとはわかるな？
> Reference4 このプラグインが動いていれば1、いなければ0


■
SSPではゴーストにプラグインを同梱できるそうなのでこのプラグインを同梱して配布してもよいでしょう。
気軽に同梱できるほど容量軽くありませんが。

同時に同じタイトルのゴーストが複数起動しているとスタンプのやりとりが上手くいかない事があるかもしれません。
（確実に対象ゴーストのパスを取得できる方法が今の所ないため）





■ 辞書サンプル

スタンプ画像をghost\master\stamp.pngにおいてあるのを前提としています。
【※ゴースト名】はゴーストの名前(\0の名前ではない)に書き換えてください。

ただスタンプ追加するだけなら画像用意して\![raiseplugin,スタンプ帳,OnStampAdd,スタンプパス,スタンプタイトル,スタンプコメント]と書くだけでも問題ないです。




▽AYA/YAYA

//reference内のバイト値1を自動的にカンマ化しないタイプのテンプレート向けです。
//テンプレートに「var.req.value ,= REPLACE(_value, C_BYTE1, ",")	// バイト値1はカンマ化してしまう」が存在している場合動かないので「var.req.value ,= _value」に書き換えてください。
//それができない場合は別な方法を使って既にスタンプを押されているかどうかの判別をしてください。


OnStampInfo {
スタンプ帳動作=reference4
スタンプ帳情報=(CHR(2))+reference3
}
OnGhostUnload {
ERASEVAR('スタンプ帳動作')
ERASEVAR('スタンプ帳情報')
}

スタンプ {
	"\0"
	--
		if basewarename!="SSP" {
		"\s[0]ベースウェアがスタンプ帳に対応していません。"
		}
		elseif !スタンプ帳動作 {
		"\s[0]スタンプ帳のプラグインが動いていません。"
		}
		elseif "%(CHR(2))【※ゴースト名】%(CHR(1))"_in_スタンプ帳情報 {
		"\s[0]スタンプはもう押されています。"
		}
		else {
		"\![raiseplugin,スタンプ帳,OnStampAdd,ghost\master\stamp.png,タイトル,コメント]\s[0]スタンプを押しました。"
		}
	--
	"\e"
}





▽里々 1　条件付きで貰えるようにする、スタンプを押した時/押せなかった時の専用トークを書く場合

＊OnStampInfo
＄スタンプ帳動作	（Ｒ４）
＄スタンプ帳情報	（sprintf,%c,2）（Ｒ３）

＊OnSatoriLoad
＄引数区切り追加	（sprintf,%c,3）

＊OnSatoriClose
＄スタンプ帳動作	
＄スタンプ帳情報	


＊スタンプ
＞スタンプ非対応	!（compare、（Sender）、SSP）
＞スタンプ非動作	!（スタンプ帳動作）
＞スタンプもうある	（count（sprintf,%c,3）（スタンプ帳情報）（sprintf,%c,3）（スタンプ帳検索語））
＞スタンプまだない

＠スタンプ帳検索語
（sprintf,%c,2）【※ゴースト名】（sprintf,%c,1）


＊スタンプ非対応
：ベースウェアがスタンプ帳に対応していません。

＊スタンプ非動作
：スタンプ帳のプラグインが動いていません。

＊スタンプもうある
：スタンプはもう押されています。

＊スタンプまだない
：\![raiseplugin,スタンプ帳,OnStampAdd,ghost\master\stamp.png,タイトル,コメント]スタンプを押しました。





▽里々 2　簡易版。単純に起動するとスタンプが手に入るだけ。

＊OnBoot
（スタンプを押す）（起動した）

＊OnGhostChanged
（スタンプを押す）（交代した）

＠スタンプを押す
（if，!（compare、（Sender）、NiseRingo），\![raiseplugin,スタンプ帳,OnStampAdd,ghost\master\stamp.png,タイトル,コメント]）

＊起動した
：ここに起動トークを書く。

＊交代した
：ここに交代トークを書く。





▽華和梨　猫夢紗さんからいただきました。ありがとうございます。


:rem
=======================================================
ゴースト「ほねほね親子」の辞書を参考に、プラグイン「スタンプ帳」のsample.txtと同じ処理を目指し、「華和梨」を少し勉強してみました。

ですが、実際に「華和梨」を使った事がないので、誤った記述があるかもしれません。
その場合、助言いただけると大変嬉しいです。

また、このテキストが、誰かのお役に立てたら感激です。

sample.txtの処理内容と違う部分は、ゴースト終了時にセーブデータにセーブされたスタンプ情報を削除しないって所だけです。
sample.txtで言う OnGhostUnload と ＊OnSatoriUnload に当たるその処理は、特に必要だとは思わない処理なので、その部分は省かせていただきました。

■ 5/ 8
　ゴースト「ほねほね親子」のわた蔵様から、ご指摘いただいた部分を修正しました。
　ありがとうございます。
　又、わた蔵様のBLOG（記事：http://rottenheaven.at.infoseek.co.jp/cgi-bin/diarypro/diary.cgi?no=118）にも、
　「華和梨」のサンプルが上がっているので、宜しければそちらもご覧下さい。
　「華和梨使いの偉いお方」なので、私のより更に細かな物に仕上がってると思います。

※又、このテキストの転載・改造・修正等、どうぞご自由に。

by.猫夢紗　http://www3.to/nekoq
=======================================================
:endrem


#スタンプ帳の情報を拾う
event.OnStampInfo : $(

	#送信元ゴーストのスタンプの存在。あれば1、なければ0
	setstr StampInfo_A ${System.Request.Reference1};

	#このプラグインが動いていれば1、いなければ0
	setstr StampInfo_B ${System.Request.Reference4};
)

#スタンプが押されてるか押されてないかの処理
#※プラグイン「スタンプ帳」配布元の sample.txt で「スタンプ」「＊スタンプ」に該当
StampEv : $(
	if $[ ${System.Request.Sender} == "SSP" ] $(
	#SSPで起動している

		if $[ ${StampInfo_B} == 1 ] $(
		#更に、プラグイン「スタンプ帳」が動いている

			if $[ ${StampInfo_A} == 0 ]
			#プラグイン「スタンプ帳」にスタンプはまだ押されていない

				$(entry StampNasi)

			#プラグイン「スタンプ帳」にスタンプが押されていた
			else 	$(entry StampAri)
			)
		)
	)
)

#スタンプは未所持なので、ぺたり。
StampNasi : (
	\t
	\![raiseplugin","スタンプ帳","OnStampAdd","ghost\master\stamp.png","スタンプ","お近づきの印に…。<br>　ぺたり。]
	\0\_b[stamp.png,inline]\n
	お近づきの印に、スタンプ帳にスタンプを押させていただきました。\w8
	\1ワイらとの友情の証や。\w8　大事にするんやで。
	\e
)

#スタンプは持ってるので、もう押しません。
StampAri : (
	\t
	\0もう持ってるじゃないですか。\w8
	\1気持ちはわかるんやけど、スタンプは一回だけやで。
	\e
)


