/action コラプス
/action コラプス <t>
上のマクロの各行は基本的には同じ挙動を示すけれど、厳密には違いがある。
/echo マクロ開始!
/action コラプス <wait.10>
/echo そして10秒後!
/echo マクロ開始!
/action コラプス <t> <wait.10>
/echo そして10秒後?
これら2つのマクロを何もターゲットせずに実行すれば違いが分かるだろう。要するに<t>を明記すると、それが存在しない時に出るエラーによってその行全体が無視されてしまうのである。
これを利用して条件分岐を行うテクニックがある。
例えば、以下のようなマクロを考える。
コラプス・トランス(簡易版):
/macroicon コラプス
/macroerror off
/action コラプス <t> <wait.60>
/action トランス
上のマクロはターゲットが存在する場合はコラプスを使用するが、ターゲットが存在しない時は『<t>が無い』という構文エラーによってその行全体が無視されるため、コラプスが出ないばかりか
同じ行の<wait.60>も無視される。つまり、トランスが即座に発動する。
一方でターゲットが存在する限りは<wait.60>が有効であるので、コラプスが不発であってもトランスは発動しない。連打が多い日も安心である。
勿論、厳密にはコラプスが出ても60秒後にはトランスが出てしまうのだけど、これは待ち時間の1分の間に他のマクロが起動するなりすればキャンセルされるから、実質的には問題にはならないだろう。
これを踏まえて実用レベルのマクロに仕上げる。
コラプス・トランス(実は問題あり):
/macroicon コラプス
/macroerror off
/action コラプス
/action コラプス <tt>
/action コラプス <t> <wait.1>
/action コラプス
/action コラプス <tt>
/action コラプス <t> <wait.60>
/action トランス
もしくは、
コラプス・トランス(疑似先行入力対応、実は問題あり):
/macroerror off
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス <t> <wait.1>
/action コラプス <t> <wait.60>
/action トランス
/macroicon コラプス
しかし、これらのマクロは一見すると良好に動作するように見えるけど、実はコラプスで相手を倒してしまうと1秒後にトランスが暴発する。途中の<wait.1>で1秒の待機の後、次の行で<t>が(既に死亡しているため)居ないと見做されて<wait.60>が無視されるのだ。1秒のセーフティが仇になったか。
故に、正解はこれ。
コラプス・トランス:
/macroicon コラプス
/macroerror off
/action コラプス
/action コラプス <tt>
/action コラプス <t> <wait.60>
/action トランス
もしくは、
コラプス・トランス(疑似先行入力対応):
/macroerror off
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス
/action コラプス <t> <wait.60>
/action トランス
/macroicon コラプス
なお、この手法はターゲットが無効な時に自動的に自分をターゲットにするアクションでも有効。
/echo マクロ開始!
/action ケアル <t> <wait.3>
/echo 3秒後?
それどころか、ターゲットを必要としないアクションですら応用が可能である。
/echo マクロ開始!
/action トランス <t> <wait.3>
/echo 3秒後?
これらのマクロはターゲット(敵味方を問わず)がある時と無い時で挙動が変わる。
アイデア次第で色々と応用が利きそうだ。
コラプス・トランス:
/macroicon コラプス
/macroerror off
/action コラプス <tt>
/action コラプス <t> <wait.60>
/action トランス
個人的には<t>よりも優先して<tt>を処理するのは、動作のイメージとしてはやや歪な気がする。肝心な時に誤動作の原因になるのではないだろうか。