Timer help

Nexor

...
Reaction score
74
Okay, so I made a spell called Mojo Magic. It works a bit like emjl3r's Lasso spell with improvements and I use the Handle Struct system because I can't make this 1.21 issue with NewGen.

I want to end the effects after X seconds, how do I make it?
Here's the trigger:

JASS:
function Trig_Mojo_Magic_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A000'
endfunction

function Movement takes nothing returns nothing
    local timer tim = GetExpiredTimer()
    local unit caster = GetHandleUnit(tim, "Unit1")
    local unit target = GetHandleUnit(tim, "Unit2")
    local lightning light = GetHandleLightning(tim, "Light")
    local real level = GetHandleReal(tim, "Level")
    local real loc1x = GetUnitX(caster)
    local real loc1y = GetUnitY(caster)
    local real loc1z = GetLocationZ(Location(loc1x, loc1y)) + 30.0
    local real loc2x = GetUnitX(target)
    local real loc2y = GetUnitY(target)
    local real loc2z = GetLocationZ(Location(loc2x, loc2y)) + 30.0
    local real disx = loc2x - loc1x
    local real disy = loc2y - loc1y
    local real angle = Atan2(loc2y-loc1y, loc2x-loc1x)
    local real distance = SquareRoot(disx * disx + disy * disy)
 
    call MoveLightningEx( light, true, loc1x, loc1y, loc1z, loc2x, loc2y, loc2z)
    
    if distance>= 900. or GetWidgetLife(target) <.405 or GetWidgetLife(caster) <.405 then
        
        call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Undead\\DeathPact\\DeathPactTarget.mdl", loc1x, loc1y))
        call DestroyEffect( AddSpecialEffect( "Abilities\\Spells\\Undead\\DeathPact\\DeathPactTarget.mdl", loc2x, loc2y))
        call SetHandleHandle(tim, "Unit1", null)
        call SetHandleHandle(tim, "Unit2", null)
        call SetHandleHandle(tim, "Light", null)
        call SetHandleReal(tim, "Level", null)
        call SetHandleReal(tim, "Duration", null)
        call PauseTimer(tim)
        call DestroyTimer(tim)
        set caster = null
        set target = null
        call DestroyLightning(light)
    else
        if IsUnitEnemy(target, GetOwningPlayer(caster)) == true then
            call UnitDamageTarget( caster, target, level, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS ) //Damage Target
            call SetUnitState( caster, UNIT_STATE_LIFE, ( GetUnitStateSwap(UNIT_STATE_LIFE, caster) + level/2 ) ) //Heal Caster

        else
            call SetUnitState( target, UNIT_STATE_LIFE, ( GetUnitStateSwap(UNIT_STATE_LIFE, target) + level ) ) //Heal Target
            call UnitDamageTarget( caster, caster, level/2, true, false, ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNIVERSAL, WEAPON_TYPE_WHOKNOWS ) //Damage Caster
        endif
        
        if distance >= 300.0 then
            call SetUnitX(target, loc2x - distance/250*Cos(angle))
            call SetUnitY(target, loc2y - distance/250*Sin(angle))
        endif
    endif

endfunction

function Trig_Mojo_Magic_Actions takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local unit target = GetSpellTargetUnit()
    local timer tim = CreateTimer()
    local real loc1x = GetUnitX(caster)
    local real loc1y = GetUnitY(caster)
    local real loc1z = GetLocationZ(Location(loc1x, loc1y)) + 30.0
    local real loc2x = GetUnitX(target)
    local real loc2y = GetUnitY(target)
    local real loc2z = GetLocationZ(Location(loc2x, loc2y)) + 30.0
    local real level = I2R(GetUnitAbilityLevel(caster, 'A000')*20)/32
    local lightning light = AddLightningEx( "SPLK", true, loc1x, loc1y, loc1z, loc2x, loc2y, loc2z ) //Set the type of the lightning (in this case, it's Spirit Link)

    call SetLightningColor( light, 0.75, 0.2, 0.8, 0.8 ) //Set the color of the lightning
    call SetHandleHandle(tim, "Unit1", caster)
    call SetHandleHandle(tim, "Unit2", target) 
    call SetHandleHandle(tim, "Light", light)
    call SetHandleReal(tim, "Level", level)
    
    call TimerStart(tim, 0.03125, true, function Movement)

endfunction

//===========================================================================
function InitTrig_Mojo_Magic takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( t, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( t, Condition( function Trig_Mojo_Magic_Conditions ) )
    call TriggerAddAction( t, function Trig_Mojo_Magic_Actions )
endfunction


EDIT: Problem Solved, please delete this thread
 
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