function KnockBackUnit_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit knockbacked = LoadUnitHandle(udg_Hashtable,GetHandleId(t),0)
local integer amount = LoadInteger(udg_Hashtable,GetHandleId(t),1)
local real portion = LoadReal(udg_Hashtable,GetHandleId(t),2)
local integer current = LoadInteger(udg_Hashtable,GetHandleId(t),3)
local real angle = LoadReal(udg_Hashtable,GetHandleId(t),4)
local real x = GetUnitX(knockbacked) + portion * Cos(angle * 0.0174532)
local real y = GetUnitY(knockbacked) + portion * Sin(angle * 0.0174532)
call SaveInteger(udg_Hashtable,GetHandleId(t),3,current + 1)
if current == amount then
call FlushChildHashtable(udg_Hashtable,GetHandleId(t))
call PauseTimer(t)
call DestroyTimer(t)
elseif current < amount then
if IsTerrainPathable(x,y,PATHING_TYPE_WALKABILITY) == false then
call SetUnitX(knockbacked,x)
call SetUnitY(knockbacked,y)
else
call SetUnitX(knockbacked,GetUnitX(knockbacked))
call SetUnitY(knockbacked,GetUnitY(knockbacked))
endif
endif
set knockbacked = null
set t = null
endfunction
function KnockBackUnit takes unit knockbacked, real distance, real time, real degrees, real period returns nothing
local integer amount = R2I(time / period)
local real portion = distance / amount
local timer t = CreateTimer()
call SaveUnitHandle(udg_Hashtable,GetHandleId(t),0,knockbacked)
call SaveInteger(udg_Hashtable,GetHandleId(t),1,amount)
call SaveReal(udg_Hashtable,GetHandleId(t),2,portion)
call SaveInteger(udg_Hashtable,GetHandleId(t),3,0)
call SaveReal(udg_Hashtable,GetHandleId(t),4,degrees)
call TimerStart(t,period,true,function KnockBackUnit_Timer)
set t = null
endfunction
Name | Type | is_array | initial_value |
Hashtable | hashtable | No | |
MCaster | unit | Yes | |
MIndex | integer | No | |
MlastCreatedMine | unit | Yes | |
MMax | integer | No | |
MMineCreated | integer | Yes | |
MMineOn | boolean | Yes |
//TESH.scrollpos=0
//TESH.alwaysfold=0
function Trig_Init_Actions takes nothing returns nothing
call DisplayTextToForce( GetPlayersAll(), "|cFF00C000OxygenD KnockJump 1.0" )
set udg_Hashtable = InitHashtable()
endfunction
//===========================================================================
function InitTrig_Init takes nothing returns nothing
set gg_trg_Init = CreateTrigger()
call TriggerRegisterTimerEvent(gg_trg_Init,0.00,false)
call TriggerAddAction(gg_trg_Init,function Trig_Init_Actions)
endfunction
//TESH.scrollpos=16
//TESH.alwaysfold=0
function Trig_Mass_Flying_Knockback_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A001'
endfunction
function Trig_Mass_Flying_Knockback_Filter takes nothing returns boolean
return IsUnitEnemy(GetFilterUnit(),GetOwningPlayer(GetTriggerUnit())) == true
endfunction
function Trig_Mass_Flying_Knockback_Timer takes nothing returns nothing
local timer t = GetExpiredTimer()
local unit u = LoadUnitHandle(udg_Hashtable,GetHandleId(t),0)
call SetUnitFlyHeight(u,0.,400.)
call FlushChildHashtable(udg_Hashtable,GetHandleId(t))
call DestroyTimer(t)
set t = null
endfunction
function Trig_Mass_Flying_Knockback_Group takes nothing returns nothing
local timer t = CreateTimer()
local unit e = GetEnumUnit()
call KnockBackUnit(e,600.,1.3,57.295827 * Atan2(GetUnitY(e) - GetUnitY(GetTriggerUnit()),GetUnitX(e) - GetUnitX(GetTriggerUnit())),0.04)
call UnitAddAbility(e,'Amrf')
call UnitRemoveAbility(e,'Amrf')
call SetUnitFlyHeight(e,350.,400.)
call SaveUnitHandle(udg_Hashtable,GetHandleId(t),0,e)
call TimerStart(t,1.3 / 2,false,function Trig_Mass_Flying_Knockback_Timer)
set t = null
endfunction
function Trig_Mass_Flying_Knockback_Actions takes nothing returns nothing
local unit caster = GetTriggerUnit()
local group g = CreateGroup()
call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\Other\\Incinerate\\FireLordDeathExplode.mdl",caster,"origin"))
call GroupEnumUnitsInRange(g,GetUnitX(caster),GetUnitY(caster),300.,Filter(function Trig_Mass_Flying_Knockback_Filter))
call ForGroup(g,function Trig_Mass_Flying_Knockback_Group)
call DestroyGroup(g)
set caster = null
set g = null
endfunction
//===========================================================================
function InitTrig_KnockBack takes nothing returns nothing
set gg_trg_KnockBack = CreateTrigger()
call TriggerRegisterAnyUnitEventBJ(gg_trg_KnockBack,EVENT_PLAYER_UNIT_SPELL_EFFECT)
call TriggerAddCondition(gg_trg_KnockBack,Condition(function Trig_Mass_Flying_Knockback_Conditions))
call TriggerAddAction(gg_trg_KnockBack,function Trig_Mass_Flying_Knockback_Actions)
endfunction