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:
EDIT: Problem Solved, please delete this thread
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() == 039;A000039;
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, 039;A000039;)*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