Name | Type | is_array | initial_value |
knockAngle | real | Yes | |
knockCount | integer | No | 1 |
knockPower | real | Yes | |
knockShould | integer | Yes | |
knockTodo | integer | Yes | |
knockUnit | unit | Yes | |
knockZi | boolean | Yes | |
zzBoolean | boolean | No | |
zzInteger | integer | No | |
zzInteger2 | integer | No | |
zzLoc1 | location | No | |
zzLoc2 | location | No | |
zzReal | real | No | |
zzReal2 | real | No | |
zzUnit | unit | No | |
zzX | real | No | |
zzY | real | No |
//For all ye JASS' lovers.
function Trig_KnockBackJadd takes real kAng, real kPow, unit kUni, integer kStep returns nothing
local integer i = 1
local integer j = 0
set udg_zzBoolean = false
loop
exitwhen i > udg_knockCount
if not udg_knockZi[i] then
set udg_zzBoolean = true
set j = i
set i = udg_knockCount + 1
endif
set i = i + 1
endloop
if not udg_zzBoolean then
set udg_knockCount = udg_knockCount + 1
set j = udg_knockCount
endif
set udg_knockAngle[j] = kAng
set udg_knockPower[j] = kPow
set udg_knockUnit[j] = kUni
set udg_knockTodo[j] = kStep
set udg_knockShould[j] = kStep
set udg_knockZi[j] = true
call EnableTrigger( gg_trg_KnockBackMainJ )
endfunction
function Trig_KnockBackJ_Conditions takes nothing returns boolean
if ( not ( GetUnitTypeId(GetAttacker()) == 'hrif' ) ) then
return false
endif
return true
endfunction
function Trig_KnockBackJ_Actions takes nothing returns nothing
// Knockback angle:
set udg_zzReal = Atan2(GetUnitY(GetAttackedUnitBJ())-GetUnitY(GetAttacker()),GetUnitX(GetAttackedUnitBJ())-GetUnitX(GetAttacker()))
call Trig_KnockBackJadd(udg_zzReal,15,GetAttackedUnitBJ(),12)
endfunction
//===========================================================================
function InitTrig_KnockBackJ takes nothing returns nothing
set gg_trg_KnockBackJ = CreateTrigger( )
call TriggerRegisterAnyUnitEventBJ( gg_trg_KnockBackJ, EVENT_PLAYER_UNIT_ATTACKED )
call TriggerAddCondition( gg_trg_KnockBackJ, Condition( function Trig_KnockBackJ_Conditions ) )
call TriggerAddAction( gg_trg_KnockBackJ, function Trig_KnockBackJ_Actions )
endfunction
function Trig_KnockBackMainJ_Actions takes nothing returns nothing
local integer i = 1
loop
exitwhen i > udg_knockCount
if udg_knockZi[i] then
set udg_zzUnit = udg_knockUnit[i]
set udg_zzReal = I2R(udg_knockTodo[i]) / udg_knockShould[i]
set udg_zzReal = (udg_zzReal * udg_zzReal) * udg_knockPower[i]
set udg_zzX = GetUnitX(udg_zzUnit) + Cos(udg_knockAngle[i]) * udg_zzReal
set udg_zzY = GetUnitY(udg_zzUnit) + Sin(udg_knockAngle[i]) * udg_zzReal
if not IsTerrainPathable(udg_zzX, udg_zzY, PATHING_TYPE_WALKABILITY) then
call SetUnitX(udg_zzUnit,udg_zzX)
call SetUnitY(udg_zzUnit,udg_zzY)
endif
set udg_knockTodo[i] = udg_knockTodo[i] - 1
if udg_knockTodo[i] <= 0 then
set udg_knockZi[i] = false
if i == udg_knockCount then
set udg_knockCount = udg_knockCount - 1
endif
endif
elseif i == udg_knockCount then
set udg_knockCount = udg_knockCount - 1
if udg_knockCount <= 0 then
call DisableTrigger(GetTriggeringTrigger())
endif
endif
set i = i + 1
endloop
endfunction
//===========================================================================
function InitTrig_KnockBackMainJ takes nothing returns nothing
set gg_trg_KnockBackMainJ = CreateTrigger( )
call TriggerRegisterTimerEventPeriodic( gg_trg_KnockBackMainJ, 0.03 )
call TriggerAddAction( gg_trg_KnockBackMainJ, function Trig_KnockBackMainJ_Actions )
endfunction