キャラクター

キャラクター

  • 0

12月16日 <t>と<wait.60>を利用した条件分岐について

公開
/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 コラプス

クリックして表示クリックして隠す
 上の、疑似先行入力に対応していない方のマクロは以下のようにした方が構文がシンプルで行数が節約できるけど、

コラプス・トランス:
/macroicon コラプス
/macroerror off
/action コラプス <tt>
/action コラプス <t> <wait.60>
/action トランス

 個人的には<t>よりも優先して<tt>を処理するのは、動作のイメージとしてはやや歪な気がする。肝心な時に誤動作の原因になるのではないだろうか。

 なお、この手法はターゲットが無効な時に自動的に自分をターゲットにするアクションでも有効。

/echo マクロ開始!
/action ケアル <t> <wait.3>
/echo 3秒後?

 それどころか、ターゲットを必要としないアクションですら応用が可能である。

/echo マクロ開始!
/action トランス <t> <wait.3>
/echo 3秒後?

 これらのマクロはターゲット(敵味方を問わず)がある時と無い時で挙動が変わる。

 アイデア次第で色々と応用が利きそうだ。
コメント(0)
コメント投稿

コミュニティウォール

最新アクティビティ

表示する内容を絞り込むことができます。
※ランキング更新通知は全ワールド共通です。
※PvPチーム結成通知は全言語共通です。
※フリーカンパニー結成通知は全言語共通です。

表示種別
データセンター / ホームワールド
使用言語
表示件数