Working with local triggers

Tinki3

Special Member
Reaction score
418
I know how to add Actions, Conditions, Events to local triggers, but, I'm not too sure as to how I would refer back to that local trigger.

For example:
JASS:
function Action_2 takes nothing returns nothing
    //How would I refer back to "trig", in this function? (so that I could do something with targ)
endfunction

function Action_1 takes nothing returns nothing
    local unit targ = GetSpellTargetUnit()
    local trigger trig = CreateTrigger()

    call SetHandleHandle(t, "targ", targ)
    call SetHandleHandle(t, "trig", trig)

    call TriggerRegisterUnitEvent(trig, targ, EVENT_UNIT_DEATH)
    ...
endfunction

Also, would it be neccessary to handle targ with trig ("t" is just an example handle)?

If anyone can help, It'll be greatly appreciated =)
 
1

1337D00D

Guest
GetTriggeringTrigger() will return the trigger that has Action_2 in it, assuming that you are adding Action_2 as an action to "trig".
 
1

1337D00D

Guest
Well i'm not too sure. Explain a little more, like what is this trigger for and why do you need to call back to "trig"?.
 

Tinki3

Special Member
Reaction score
418
> Explain a little more, like what is this trigger for and why do you need to call back to "trig"?

I need to call back to trig, so that I can do something with the unit targ.

Could you maybe give me an example, if you can?
 
1

1337D00D

Guest
Code:
function whee takes nothing returns nothing
    call GetHandleUnit(GetTriggeringTrigger(),"unit") //Returns the unit stored as "unit" with subject of trigger "t"
endfunction

function Trig_La_Bamba takes nothing returns nothing
    local trigger t = CreateTrigger()
    call SetHandleHandle(t,"unit",BLAH)
    call TriggerRegisterDeathEvent(t,BLAH)
    call TriggerAddAction(t,function whee)
    set t=null
endfunction
 

Andrewgosu

The Silent Pandaren Helper
Reaction score
716
Yes, You do. Just store the triggeraction to the local trigger and restore it in the "Action_2" trigger. Or, use the Vexorian method, which uses only conditions instead of triggeractions(few threads below, somewhere). The local trigger needs to be destroyed, also, if You don't need it anymore.
 

Arkan

Nobody rides for free
Reaction score
92
JASS:
local trigger t=CreateTrigger()
local triggeraction ta=function whatever
call SetHandleHandle(t,"ta",ta)


I think? Never used KaTTaNas...

It would be easier to use a Condition function though, no need to worry about triggeractions.
 

Pyrogasm

There are some who would use any excuse to ban me.
Reaction score
134
> The local trigger needs to be destroyed, also, if You don't need it anymore
BAD IDEA.

Vexorian and (I believe) IceFrog have shown multiple times that destroying triggers with ActionFuncs is inherently bad, and that destroying triggers with only Events and ConditionFuncs may not be as bad.

It can screw something up with the handle Ids if you destroy a trigger with an ActionFunc, and as such, you shouldn't do it.

Vexorian and IceFrog also ran a few tests to see if triggers without ActionFuncs can be safely destroyed, and he has hesistantly confirmed this in this thread.


EDIT: To store an actionfunc, you would do something like the following:
JASS:
local trigger T = CreateTrigger()
local triggeraction TA = TriggerAddAction(T, function SomeFunc)
call SetHandleHandle(T, "ActionFunc", TA)
set T = null
set TA = null
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top