トップ > MAP作成 > トリガーエディタ > Jass Script > Jass講座 > トリガー
トリガーとはJass Scriptの機能のひとつで、イベント/Event、条件/Condition、アクション/Action の3つの要素からなる関数群。 指定したイベントが発生すると、条件が真の場合、アクションで示された関数が実行される。 『ユニットが死んだとき』や『ユニットがダメージを受けたとき』、『プレイヤーがチャットコマンドを入力した時』などの検知に便利。一度作成されたトリガーは明示的に破棄されるまで有効で、メモリ上に残り続ける。 使い方まず、トリガーを作成する。 local trigger tempTrig=CreateTriger() ここではローカル変数を使っているが、他のいろいろな場所から TriggerExecute 等で呼び出したいときは、グローバル変数を使うこと。 次に、トリガーにイベントを登録する。 call TriggerRegisterUnitEvent(tempTrig,Hero,EVENT_UNIT_DEATH) これは、ユニットが死亡した場合のイベント例。他のイベントに関しては、GUIのエディタで作成 -> カスタムスクリプトに変換、等で調べるといい。 トリガーに条件を登録する。 call TriggerAddCondition(tempTrig, Condition(function CustomCondition)) 後述にあるとおり、これはないほうがいいかもしれない。この例では、CustomCondition という、boolean型を返り値にもつ関数が実行される。 最後に、トリガーにアクションを登録する。 call TriggerAddAction(tempTrig,function CustomAction) この例では、CustomAction という関数が実行される。 まとめると、以下のようになる。 //下のイベントが発生したとき、実行される function CustomAction takes nothing returns nothing local unit DyingUnit = GetDyingUnit() //ここに処理を記入 endfunction function CreateTrigger_HeroDied takes unit Hero returns nothing local trigger tempTrig=CreateTriger() call TriggerRegisterUnitEvent(tempTrig,Hero,EVENT_UNIT_DEATH) //後述の理由により、条件は省略する //call TriggerAddCondition(tempTrig, Condition(function CustomCondition)) call TriggerAddAction(tempTrig,function CustomAction) endfunction 使わないイベント以下のイベントを使ってはいけない。 native TriggerRegisterTimerEvent takes trigger whichTrigger, real timeout, boolean periodic returns event native TriggerRegisterTimerExpireEvent takes trigger whichTrigger, timer t returns event これらのラッパーである、TriggerRegisterTimerEventPeriodic、TriggerRegisterTimerEventSingle、TriggerRegisterTimerExpireEventBJ も同様。 これらのイベントは一見便利だが、より処理が軽い命令に TimerStart 関数がある。こちらを使おう。 条件/Condition は必要?条件をつけると、イベントの発生条件を区切ることができ、便利な気がしないでもない。しかし、以下の点が非常に不便だ。
以上のような理由から、アクションのなかで if 命令を使って、発生条件を区分するのが定石。 注意点イベント依存の引数関数(GetTriggerUnit())などの値が保証されているのは、アクションの関数が実行された直後のみ。同じ引数関数を使うイベントが発生した場合、瞬時に上書きされてしまうからだ。利用する引数関数は上記サンプルのように、アクション内ですぐにローカル変数に格納しよう。 また、使い終わったトリガーと条件は、必ず破棄する。 |