Countdown Timers for Events

Demonfaze

8 yrs. Hell, it's been a long time.
Reaction score
72
How exactly do you use Countdown Timers for Events? I can't seem to get it working properly.

Here is my code

tmr_ROUNDTIMER = global timer variable
tmr_ROUNDTIMERDIALOG = global timer dialog variable

Trigger 1: Setting up the timer
JASS:
set tmr_ROUNDTIMER = CreateTimer()
        call StartTimerBJ(tmr_ROUNDTIMER, false, 5 )
        call CreateTimerDialogBJ( tmr_ROUNDTIMER, "Prep Time" )
        set tmr_ROUNDTIMERDIALOG = GetLastCreatedTimerDialogBJ()


Trigger 2: Event from the timer
JASS:
function Trig_Start_Round_Trigger_Actions takes nothing returns nothing

    call showMessage(5, "Timer Expired")

endfunction

//===========================================================================
function InitTrig_Start_Round_Trigger takes nothing returns nothing
    set gg_trg_Start_Round_Trigger = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( gg_trg_Start_Round_Trigger, tmr_ROUNDTIMER )
    call TriggerAddAction( gg_trg_Start_Round_Trigger, function Trig_Start_Round_Trigger_Actions )
endfunction


The timer displays, so I know the first block of code works. The second trigger, however, doesn't appear to fire off.

Thanks in advance.
 

The_Kingpin

Member (Who are you and why should I care?)
Reaction score
41
I'm not sure, but I think it is because you create tmr_Roundtimer after the trigger has been registered, so the event is tied to <No timer>.

Hint: You can replace any function that has BJ in it with a faster function.
 

Demonfaze

8 yrs. Hell, it's been a long time.
Reaction score
72
I'm not sure, but I think it is because you create tmr_Roundtimer after the trigger has been registered, so the event is tied to <No timer>.

That sounds possible. Do you know how I can fix this?

Thanks in advance.
 

Doom-Angel

Jass User (Just started using NewGen)
Reaction score
167
should't it have then the prefix udg_ if it's global?

and also this event is created on the initialization so you have to make sure it is set before the event is being set
 

The_Kingpin

Member (Who are you and why should I care?)
Reaction score
41
Splendid! Then Declare your timer in a globals block

globals
timer tmp_Whatevertimername = CreateTimer()
endglobals

then start your timer elsewhere.

EDIT: I fail.
 

SFilip

Gone but not forgotten
Reaction score
634
Using events with timers = pointless in Jass.
Jass offers you a thing called callback for this purpose. Consider the following code:
Code:
function foo takes nothing returns nothing
    call BJDebugMsg("test")
endfunction

function bar takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t, 5., false, [B]function foo[/B])
endfunction
The message "test" will display 5 seconds after running bar. Also know that the timer has to be destroyed which I didn't do in the code above to keep it simple.
And avoid BJs in Jass. They're a very bad thing.
 

Demonfaze

8 yrs. Hell, it's been a long time.
Reaction score
72
I'd like to use a timer though, so I can have the timer window displayed in-game.
 

SFilip

Gone but not forgotten
Reaction score
634
You are using a timer in my code, but you aren't using a trigger.
You can just add call CreateTimerDialogBJ( t, "Prep Time" ) right below TimerStart and it will work fine.
It's a better idea to use natives for this purpose though, but either one works fine.
 

The_Kingpin

Member (Who are you and why should I care?)
Reaction score
41
Using events with timers = pointless in Jass.

Well actually the only reason you would need them would be to make multiple triggers to use a single timer, like with a movement system or something of the sort.
 
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