Timer Trouble

Evan1993

Ultra Cool Member
Reaction score
30
It never gets past the bolded part, why? :(
Code:
function Trig_RAM_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A024' ) ) then
        return false
    endif
    return true
endfunction

function Trig_RAM_Actions takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local location CasterPosition = GetUnitLoc(Caster)
    local location TargetPoint = GetSpellTargetLoc()
    local real Distance = DistanceBetweenPoints(CasterPosition, TargetPoint)
    local real Angle = AngleBetweenPoints(CasterPosition, TargetPoint)
    local real N = 0.00
    local location MoveToPoint
    local real MaxDamage
    local timer t = CreateTimer()
    call PauseUnit(Caster, true )
    call SetUnitPathing( Caster, false )
loop
   [B]call TimerStart(t, 0.03, false, null)
   loop
   exitwhen TimerGetRemaining(t) == 0
   endloop[/B]
    set N = (N + 20.00 ) 
    set CasterPosition = GetUnitLoc(Caster)
    set MoveToPoint = PolarProjectionBJ(CasterPosition, 20.00, Angle)
    call SetUnitPositionLoc( Caster, MoveToPoint )
    call DisplayTextToForce( GetPlayersAll(), R2S(N) + " " + R2S(Distance))
    exitwhen N > Distance or IsUnitDeadBJ(Caster) == true
    call TriggerSleepAction(0.01) 
    endloop
    call RemoveLocation(MoveToPoint)
    call RemoveLocation(CasterPosition)
    call DestroyTimer(t)
    if N > Distance or IsUnitDeadBJ(Caster) == true  then
        call PauseUnit(Caster, false )
        call SetUnitPathing(Caster, true )
        set Caster = null
        call RemoveLocation(MoveToPoint)
        set MaxDamage = 0.00
    else
    endif
endfunction

//===========================================================================
function InitTrig_RAM takes nothing returns nothing
    set gg_trg_RAM = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_RAM, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_RAM, Condition( function Trig_RAM_Conditions ) )
    call TriggerAddAction( gg_trg_RAM, function Trig_RAM_Actions )
endfunction
 

emjlr3

Change can be a good thing
Reaction score
395
loop
call TimerStart(t, 0.03, false, null)
loop
exitwhen TimerGetRemaining(t) == 0
endloop

basically ur loiping instantly, imagine trying to loop frm 1-infinite...doesnt happen, that is what you are doing here, there is no break point

which is what polledWait() is for, which basically does this, but waits an amount until the timer is done running
 

phyrex1an

Staff Member and irregular helper
Reaction score
447
However, polled waits arn't able to wait a time that short.

An example of a timer callback:

Code:
function Bar takes nothing returns nothing
   local timer t = GetExpiredTimer()
   // Do something
   call DestroyTimer(t)
   set t = null
endfunction

function Foo takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t, 0.03, false, function Bar)
    set t = null
endfunction
 

Evan1993

Ultra Cool Member
Reaction score
30
It says the distance between the caster and the Spell Target is 0.00, when it's not.

Does that mean I have to store it and transfer it with Kattanas Handle vars?

Code:
function Trig_RAM_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A024' ) ) then
        return false
    endif
    return true
endfunction

function Func takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local location CasterPosition = GetUnitLoc(Caster)
    local location TargetPoint = GetSpellTargetLoc()
    local real Distance = DistanceBetweenPoints(CasterPosition, TargetPoint)
    local real Angle = AngleBetweenPoints(CasterPosition, TargetPoint)
    local real N = 0.00
    local location MoveToPoint
    local real MaxDamage
    local timer t = GetExpiredTimer()
    call DisplayTextToForce( GetPlayersAll(), R2S(DistanceBetweenPoints(GetUnitLoc(GetSpellAbilityUnit()), GetSpellTargetLoc())))
    call PauseUnit(Caster, true )
    call SetUnitPathing( Caster, false )
    set N = (N + 20.00 ) 
    set CasterPosition = GetUnitLoc(Caster)
    set MoveToPoint = PolarProjectionBJ(CasterPosition, 20.00, Angle)
    call SetUnitPositionLoc( Caster, MoveToPoint )
    call DisplayTextToForce( GetPlayersAll(), R2S(Distance))
    call RemoveLocation(MoveToPoint)
    call RemoveLocation(CasterPosition)
    call DestroyTimer(t)
    set t = null
    if N > Distance or IsUnitDeadBJ(Caster) == true  then
        call PauseUnit(Caster, false )
        call SetUnitPathing(Caster, true )
        set Caster = null
        call RemoveLocation(MoveToPoint)
        set MaxDamage = 0.00
    else
    endif
endfunction
function Foo takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t, 0.10, false, function Func)
    set t = null
endfunction
function Trig_RAM_Actions takes nothing returns nothing
    local unit Caster = GetSpellAbilityUnit()
    local location CasterPosition = GetUnitLoc(Caster)
    local location TargetPoint = GetSpellTargetLoc()
    local real N = 0.00
    local real Distance = DistanceBetweenPoints(CasterPosition, TargetPoint)    
    loop
      call Foo()
      set N = (N + 20.00 )
      exitwhen N > Distance or IsUnitDeadBJ(Caster) == true
    endloop  
endfunction

//===========================================================================
function InitTrig_RAM takes nothing returns nothing
    set gg_trg_RAM = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_RAM, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_RAM, Condition( function Trig_RAM_Conditions ) )
    call TriggerAddAction( gg_trg_RAM, function Trig_RAM_Actions )
endfunction
 

Sim

Forum Administrator
Staff member
Reaction score
534
ping the minimap at

CasterPosition and TargetPoint. To see where they are. (One red and one blue? to see the difference)
 

AceHart

Your Friendly Neighborhood Admin
Reaction score
1,495
> Does that mean I have to store it?

Yes. Store the caster and his target point.

How would the timer callback know what trigger it was called from?
Target point is highly unstable already anyway.
 
General chit-chat
Help Users
  • No one is chatting at the moment.

      The Helper Discord

      Members online

      No members online now.

      Affiliates

      Hive Workshop NUON Dome World Editor Tutorials

      Network Sponsors

      Apex Steel Pipe - Buys and sells Steel Pipe.
      Top