Wait

shadowcon

New Member
Reaction score
4
Okay, I've tried to write a wait, but I'm unable to compile/syntax check it at the moment, could someone do it for me? I wrote it in gedit with the syntax highlighter...

Also if you see any obvious errors, please tell me.

/S

JASS:
//========================================================================
// This is a quite simple function that I've written because I wasn't
// satisfied with the original "TriggerSleepAction" function.
// If you use it, you don't have to credit me in any way. Just don't
// claim that it's yours in any way. It uses timer arrays to wait, and 
// then returns a boolean when the timer ended. It should be MUI 
// but there might be cases when timer arrays collide and malfunction
// but that chance is like x/65536 where x is the number of timers going
// at the same time.
//
// --Shadowcon/Shjort/Mamma Mu--
//
//========================================================================
globals
	trigger RunTimer
	boolean array TimerEnded
endglobals

function RunTimer_Actions takes integer Array returns nothing
    set TimerEnded[Array] = true
endfunction

function RegisterTimer takes timer array randomnumber, integer Array returns nothing
    set RunTimer = CreateTrigger(  )
    call TriggerRegisterTimerExpireEventBJ( RunTimer, randomnumber[Array] )
    call TriggerAddAction( RunTimer, function RunTimer_Actions(Array) )
endfunction

function MyWait takes real time returns boolean
local integer Array = GetRandomInt(0, 65535)
local timer array randomnumber
call RegisterTimer(randomnumber, Array)
call StartTimerBJ( randomnumber[Array], false, time )
loop
	if TimerEnded[Array] then
		set randomnumber = null
		set RunTimer = null
		return true
	endif
endloop
endfunction
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
You leaks trigger and timer. The best way to do this is using timer, still.
 

kingkingyyk3

Visitor (Welcome to the Jungle, Baby!)
Reaction score
216
JASS:
library Wait requires TimerUtils

    private function RecordTicks takes nothing returns nothing
        call SetTimerData(GetExpiredTimer(),GetTimedData(GetExpiredTimer()) - 1)
    endfunction
    
    function Wait takes real time returns nothing
        local integer i = (time / .01)
        local timer t = NewTimer()
        call SetTimerData(t,i)
        call TimerStart(t,.01,true,function RecordTicks)
        loop
            exitwhen i <= 0
        endloop
        call ReleaseTimer(t)
        set t = null
    endfunction
endlibrary

I don't know whether it works or not, try it.
 

shadowcon

New Member
Reaction score
4
the only error I get on yours is "Line 1: Missing requirement: TimerUtils (libraries cannot require scopes"
is it my fault in some way?
 

Azlier

Old World Ghost
Reaction score
461
That failed attempt at making a wait that runs on timers is just that, a failure.
 

Darthfett

Aerospace/Cybersecurity Software Engineer
Reaction score
615
You cannot do an endless loop to simulate a 'wait'. There are only a few options: TriggerSleepAction (the [ljass]PolledWait[/ljass] native uses this in combination with timers to create a more accurate wait), Timers (using callback functions in combination with attachment systems), or Periodic Events.

If you want high speed actions, there is no substitute for timers/periodic events. A loop will hit the op(eration) limit LONG before it reaches the specified time.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Staff online

      • Ghan
        Administrator - Servers are fun

      Members online

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top