globals
hashtable MyHash
endglobals
function MySpellKnock takes nothing returns nothing
local timer t = GetExpiredTimer()
local integer id = GetHandleId(t)
local unit tar = LoadUnitHandle(MyHash,id,0)
local integer c = LoadInteger(MyHash,id,5) //counts the # of times ran
local real x = GetUnitX(tar)
local real y = GetUnitY(tar)
local real Mdist = LoadReal(MyHash,id,4)
local real ang = LoadReal(MyHash,id,3)
local real newX = x+(Mdist/c)*Cos(ang)
local real newY = y+(Mdist/c)*Sin(ang)
local real fDx = LoadReal(MyHash,id,1)-newX
local real fDy = LoadReal(MyHash,id,2)-newY
local real fDist = fDx*fDx+fDy*fDy
call SetUnitX(tar,newX)
call SetUnitY(tar,newY)
call DestroyEffect(AddSpecialEffect("Your effect's path",newX,newY))
if fDist <= 1225 then
call PauseTimer(t)
call DestroyTimer(t)
call FlushChildHashtable(MyHash,id)
endif
call SaveInteger(MyHash,id,5,c+1)
set t = null
set tar = null
endfunction
function MySpellAct takes nothing returns nothing
local timer t = CreateTimer()
local integer id = GetHandleId(t)
local unit cast = GetTriggerUnit()
local unit tar = GetSpellTargetUnit()
local real x = GetUnitX(cast)
local real y = GetUnitY(cast)
local real tx = GetUnitX(tar)
local real ty = GetUnitY(tar)
local real distX = tx-x
local real distY = ty-y
local real ang = Atan2(distY,distX)
local real dist = (SquareRoot(distX*distX+distY*distY))/2
//will send the unit away half the distance between the caster and target
call SaveUnitHandle(MyHash,id,0,tar)
call SaveReal(MyHash,id,1,tx+dist*Cos(ang))
call SaveReal(MyHash,id,2,ty+dist*Sin(ang))
call SaveReal(MyHash,id,3,ang)
call SaveReal(MyHash,id,4,dist)
call SaveInteger(MyHash,id,5,0)
call TimerStart(t,0.035,true,function MySpellKnock)
set t = null
set cast = null
set tar = null
endfunction
function MySpellCond takes nothing returns boolean
return GetSpellAbilityId() == 'A000'
endfunction
function InitTrig_MySpell takes nothing returns nothing
local trigger t = CreateTrigger()
set MyHash = InitHashtable()
call TriggerRegisterAnyUnitEventBJ(t,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(t,Condition(function MySpellCond))
call TriggerAddAction(t,function MySpellAct)
set t = null
endfunction