マクロ内で呼び出し元のシナリオファイル名を取得する
[button]タグなどはマクロ化して記述を簡略化することが多いと思いますが、マクロ化した場合、以下のような書き方はエラーになってしまいます。
code:sample.ks
code:macro.ks
[button_macro]では、storageを省略してtargetのみ指定しています。
マクロ化していなければ、sample.ks内の*jumpラベルへジャンプする動作となります。
ところがマクロ化していると、マクロ側の*jumpラベルへジャンプしようとするのでエラーとなります。
ではどうするかと言うと、いちいち[button_macro]にstorageを指定してやるのが手っ取り早いですが、やっぱりめんどくさい。怠惰は美徳やぞ
ということで、マクロ内からマクロ呼び出し元のシナリオファイル名を取得して、そいつをstorageに指定してやりましょう。
code:macro.ks
mp.storage = tyrano.plugin.kag.stat.stack.macro0.storage [iscript]~[endscript]の中がポイントです。
tyrano.plugin.kag.stat.stack.macro[0].storageが何かというと、マクロ呼び出し中に呼び出し元のシナリオファイル名を保存しておく場所です。
~~~ここから余談~~~
マクロ呼び出し元の情報を取得するなら、tyrano.plugin.kag.getStack("macro")を使ってもいいんですが、これは直前の呼び出し元を取得する関数なので、マクロ内で別のマクロを呼び出したりしていると正しいシナリオファイル名が取得できない可能性があるので、配列の0番目の要素を参照しています。
~~~ここまで余談~~~
マクロから呼び出し元のシナリオがわかるといろんなことができると思うので、参考までにどうぞ。