Warcraft3のMOD総合案内
- Jass Script/トリガー の編集
[
ファイルを添付する
] [
このページの名前を変更する
] [
このページを編集する
]
サイトメニュー
ページ一覧
最近の更新ページ
使い方
トップへ戻る
Jass講座
[[トップ>FrontPage]] > [[MAP作成]] > [[トリガーエディタ]] > [[Jass Script]] > [[Jass講座]] > トリガー ~ ~ ---- #contents ---- *トリガーとは [#nf18e6de] Jass Scriptの機能のひとつで、''イベント/Event''、''条件/Condition''、''アクション/Action'' の3つの要素からなる関数群。 指定したイベントが発生すると、条件が真の場合、アクションで示された関数が実行される。 『ユニットが死んだとき』や『ユニットがダメージを受けたとき』、『プレイヤーがチャットコマンドを入力した時』などの検知に便利。一度作成されたトリガーは明示的に破棄されるまで有効で、メモリ上に残り続ける。 *使い方 [#k895f86b] まず、トリガーを作成する。 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 *使わないイベント [#yed141d9] 以下のイベントを使ってはいけない。 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'' は必要? [#faa92197] 条件をつけると、イベントの発生条件を区切ることができ、便利な気がしないでもない。しかし、以下の点が非常に不便だ。 -条件で指定する関数には、引数がつけられない -条件分岐は、アクション内でしても実質かわらない -実は、Condition関数で作られる ''conditionfunc'' 型をメモリから開放するには、''DestroyCondition'' を使わなければならず、メモリリークの原因ともなりうる。 以上のような理由から、アクションのなかで ''if'' 命令を使って、発生条件を区分するのが定石。 *注意点 [#o3558a55] イベント依存の引数関数(GetTriggerUnit())などの値が保証されているのは、アクションの関数が実行された直後のみ。同じ引数関数を使うイベントが発生した場合、瞬時に上書きされてしまうからだ。利用する引数関数は上記サンプルのように、アクション内ですぐに[[ローカル変数>Jass Script/local]]に格納しよう。 また、使い終わったトリガーと条件は、必ず破棄する。
タイムスタンプを変更しない
[[トップ>FrontPage]] > [[MAP作成]] > [[トリガーエディタ]] > [[Jass Script]] > [[Jass講座]] > トリガー ~ ~ ---- #contents ---- *トリガーとは [#nf18e6de] Jass Scriptの機能のひとつで、''イベント/Event''、''条件/Condition''、''アクション/Action'' の3つの要素からなる関数群。 指定したイベントが発生すると、条件が真の場合、アクションで示された関数が実行される。 『ユニットが死んだとき』や『ユニットがダメージを受けたとき』、『プレイヤーがチャットコマンドを入力した時』などの検知に便利。一度作成されたトリガーは明示的に破棄されるまで有効で、メモリ上に残り続ける。 *使い方 [#k895f86b] まず、トリガーを作成する。 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 *使わないイベント [#yed141d9] 以下のイベントを使ってはいけない。 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'' は必要? [#faa92197] 条件をつけると、イベントの発生条件を区切ることができ、便利な気がしないでもない。しかし、以下の点が非常に不便だ。 -条件で指定する関数には、引数がつけられない -条件分岐は、アクション内でしても実質かわらない -実は、Condition関数で作られる ''conditionfunc'' 型をメモリから開放するには、''DestroyCondition'' を使わなければならず、メモリリークの原因ともなりうる。 以上のような理由から、アクションのなかで ''if'' 命令を使って、発生条件を区分するのが定石。 *注意点 [#o3558a55] イベント依存の引数関数(GetTriggerUnit())などの値が保証されているのは、アクションの関数が実行された直後のみ。同じ引数関数を使うイベントが発生した場合、瞬時に上書きされてしまうからだ。利用する引数関数は上記サンプルのように、アクション内ですぐに[[ローカル変数>Jass Script/local]]に格納しよう。 また、使い終わったトリガーと条件は、必ず破棄する。
テキスト整形のルールを表示する