-
Knockback 2D Copy
-
Events
-
Map initialization
-
-
Conditions
-
Actions
-
Custom script: set udg_KB2D_Hash = InitHashtable()
-
-------- -------------------------------------------- --------
-
-------- Creating Tree Cutter --------
-
-------- -------------------------------------------- --------
-
Set KB2D_Loc = (Center of (Playable map area))
-
Unit - Create 1 Peasant for Neutral Passive at KB2D_Loc facing Default building facing degrees
-
Set KB2D_Cutter = (Last created unit)
-
Unit - Hide KB2D_Cutter
-
Custom script: call UnitAddAbility(udg_KB2D_Cutter,'Aloc')
-
Custom script: call RemoveLocation(udg_KB2D_Loc)
-
-------- -------------------------------------------- --------
-
-------- Determines the Knockback Loop --------
-
-------- -------------------------------------------- --------
-
Set KB2D_Loop = 0.03
-
-------- -------------------------------------------- --------
-
-------- -------------------------------------------- --------
-
Custom script: call ExecuteFunc("InitKnockback2D")
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function destroys knockback --------
-
-------- -------------------------------------------- --------
-
Custom script: function DestroyKnockback takes nothing returns nothing
-
Hashtable - Clear all child hashtables of child KB2D_Key in KB2D_Hash
-
Unit Group - Remove KB2D_U from KB2D_LoopGroup
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function applies knockback to unit --------
-
-------- -------------------------------------------- --------
-
-------- Requires --------
-
-------- KB2D_Target --------
-
-------- KB2D_Angle --------
-
-------- KB2D_Duration --------
-
-------- KB2D_Distance --------
-
-------- KB2D_SFX --------
-
-------- KB2D_AllowDestroyTree --------
-
-------- -------------------------------------------- --------
-
Custom script: function ApplyKnockbackEffect takes nothing returns nothing
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
-
(KB2D_Target is A structure) Equal to False
-
(KB2D_Target is A flying unit) Equal to False
-
(KB2D_Target is alive) Equal to True
-
(KB2D_Target is in KB2D_LoopGroup) Equal to False
-
-
-
-
Then - Actions
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,1,udg_KB2D_Angle)
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,2,udg_KB2D_Duration)
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_TempKey,3,udg_KB2D_Distance)
-
Hashtable - Save KB2D_SFX as 5 of KB2D_TempKey in KB2D_Hash
-
Hashtable - Save KB2D_AllowTreeDestroy as 6 of KB2D_TempKey in KB2D_Hash
-
Unit Group - Add KB2D_Target to KB2D_LoopGroup
-
-
Else - Actions
-
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function applies speed --------
-
-------- -------------------------------------------- --------
-
Custom script: function ApplyKnockbackSpeed takes nothing returns real
-
Custom script: local real velocity = (udg_KB2D_Distance/udg_KB2D_Duration) * (udg_KB2D_Loop * 2)
-
Custom script: local real friction = (velocity/udg_KB2D_Duration) * (udg_KB2D_Loop * udg_KB2D_Loop)
-
Custom script: return velocity - friction
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function applies knockback coordinates --------
-
-------- -------------------------------------------- --------
-
Custom script: function ApplyKnockbackCoordinates takes nothing returns nothing
-
Custom script: local real speed = ApplyKnockbackSpeed()
-
Custom script: call SetUnitX(udg_KB2D_U, GetUnitX(udg_KB2D_U) + speed * Cos(udg_KB2D_Angle * bj_DEGTORAD))
-
Custom script: call SetUnitY(udg_KB2D_U, GetUnitY(udg_KB2D_U) + speed * Sin(udg_KB2D_Angle * bj_DEGTORAD))
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function checks the collision size --------
-
-------- -------------------------------------------- --------
-
Custom script: function GetUnitCollisionSize takes nothing returns integer
-
-------- -------------------------------------------- --------
-
-------- This is based from tier 3 halls,thanks to Vexorian for this code :D --------
-
-------- -------------------------------------------- --------
-
Custom script: local integer maxcollision = 196
-
Custom script: local integer a = 0
-
Custom script: local integer radius = maxcollision
-
Custom script: local real x = GetUnitX(udg_KB2D_U)
-
Custom script: local real y = GetUnitY(udg_KB2D_U)
-
Custom script: loop
-
Custom script: if IsUnitInRangeXY(udg_KB2D_U, x + radius, y, 0) then
-
Custom script: set a = radius
-
Custom script: else
-
Custom script: set maxcollision = radius
-
Custom script: endif
-
Custom script: exitwhen maxcollision - a <= 1
-
Custom script: set radius = (maxcollision + a) / 2
-
Custom script: endloop
-
Custom script: set radius = radius - maxcollision + a
-
Custom script: return radius
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function applies the bouncing angle --------
-
-------- -------------------------------------------- --------
-
Custom script: function GetKnockbackAngle takes nothing returns nothing
-
Custom script: set udg_KB2D_TouchRadius = I2R(GetUnitCollisionSize()) + 50
-
Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
-
Set KB2D_Hit = False
-
Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
-
Loop - Actions
-
Set KB2D_Dest = (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current life of KB2D_Dest) Greater than 0.00
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
KB2D_AllowTreeDestroy Equal to False
-
-
Then - Actions
-
Unit - Order KB2D_Cutter to Harvest (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current order of KB2D_Cutter) Equal to (Order(harvest))
-
-
Then - Actions
-
Destructible - Kill (Picked destructible)
-
-
Else - Actions
-
-
-
Else - Actions
-
-
Set KB2D_Hit = True
-
-
Else - Actions
-
-
Unit - Order KB2D_Cutter to Stop
-
-
-
Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
(Number of units in KB2D_TempGroup) Greater than 0
-
(Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
-
KB2D_Hit Equal to True
-
-
-
-
Then - Actions
-
Set KB2D_Angle = (360.00 - KB2D_Angle)
-
Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,3,udg_KB2D_Distance * 0.4)
-
Set KB2D_Hit = False
-
Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
-
Loop - Actions
-
Set KB2D_Dest = (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current life of KB2D_Dest) Greater than 0.00
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
KB2D_AllowTreeDestroy Equal to False
-
-
Then - Actions
-
Unit - Order KB2D_Cutter to Harvest (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current order of KB2D_Cutter) Equal to (Order(harvest))
-
-
Then - Actions
-
Destructible - Kill (Picked destructible)
-
-
Else - Actions
-
-
-
Else - Actions
-
-
Set KB2D_Hit = True
-
-
Else - Actions
-
-
Unit - Order KB2D_Cutter to Stop
-
-
-
Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
(Number of units in KB2D_TempGroup) Greater than 0
-
(Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
-
KB2D_Hit Equal to True
-
-
-
-
Then - Actions
-
Set KB2D_Angle = ((KB2D_Angle + 180.00) mod 360.00)
-
Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
-
Set KB2D_Hit = False
-
Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
-
Loop - Actions
-
Set KB2D_Dest = (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current life of KB2D_Dest) Greater than 0.00
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
KB2D_AllowTreeDestroy Equal to False
-
-
Then - Actions
-
Unit - Order KB2D_Cutter to Harvest (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current order of KB2D_Cutter) Equal to (Order(harvest))
-
-
Then - Actions
-
Destructible - Kill (Picked destructible)
-
-
Else - Actions
-
-
-
Else - Actions
-
-
Set KB2D_Hit = True
-
-
Else - Actions
-
-
Unit - Order KB2D_Cutter to Stop
-
-
-
Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
(Number of units in KB2D_TempGroup) Greater than 0
-
(Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
-
KB2D_Hit Equal to True
-
-
-
-
Then - Actions
-
Set KB2D_Angle = (360.00 - KB2D_Angle)
-
Set KB2D_Offset = (KB2D_Loc offset by KB2D_TouchRadius towards KB2D_Angle degrees)
-
Set KB2D_Hit = False
-
Destructible - Pick every destructible within KB2D_TouchRadius of KB2D_Offset and do (Actions)
-
Loop - Actions
-
Set KB2D_Dest = (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current life of KB2D_Dest) Greater than 0.00
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
KB2D_AllowTreeDestroy Equal to False
-
-
Then - Actions
-
Unit - Order KB2D_Cutter to Harvest (Picked destructible)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Current order of KB2D_Cutter) Equal to (Order(harvest))
-
-
Then - Actions
-
Destructible - Kill (Picked destructible)
-
-
Else - Actions
-
-
-
Else - Actions
-
-
Set KB2D_Hit = True
-
-
Else - Actions
-
-
Unit - Order KB2D_Cutter to Stop
-
-
-
Set KB2D_TempGroup = (Units within KB2D_TouchRadius of KB2D_Loc matching (((((Matching unit) is A flying unit) Equal to False) and (((Matching unit) is Ethereal) Equal to False)) and ((((Matching unit) is alive) Equal to True) and ((Matching unit) Not equal to KB2D_U))))
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
Or - Any (Conditions) are true
-
Conditions
-
(Number of units in KB2D_TempGroup) Greater than 0
-
(Terrain pathing at KB2D_Offset of type Walkability is off) Equal to True
-
KB2D_Hit Equal to True
-
-
-
-
Then - Actions
-
Custom script: call DestroyKnockback()
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_KB2D_Offset)
-
Custom script: call DestroyGroup(udg_KB2D_TempGroup)
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_KB2D_Offset)
-
Custom script: call DestroyGroup(udg_KB2D_TempGroup)
-
-
Else - Actions
-
-
Custom script: call RemoveLocation(udg_KB2D_Offset)
-
Custom script: call DestroyGroup(udg_KB2D_TempGroup)
-
-
Else - Actions
-
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,1,udg_KB2D_Angle)
-
Custom script: call RemoveLocation(udg_KB2D_Offset)
-
Custom script: call DestroyGroup(udg_KB2D_TempGroup)
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function will move the unit --------
-
-------- -------------------------------------------- --------
-
Custom script: function MoveKnockbackUnit takes nothing returns nothing
-
Set KB2D_Loc = (Position of KB2D_U)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
KB2D_Timer Less than KB2D_Duration
-
-
Then - Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(KB2D_U is dead) Equal to True
-
-
Then - Actions
-
Custom script: call DestroyKnockback()
-
-
Else - Actions
-
Custom script: call GetKnockbackAngle()
-
Custom script: call ApplyKnockbackCoordinates()
-
Custom script: call SaveReal(udg_KB2D_Hash,udg_KB2D_Key,4,udg_KB2D_Timer + udg_KB2D_Loop)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
(Random integer number between 1 and 5) Less than 2
-
-
Then - Actions
-
Special Effect - Create a special effect at KB2D_Loc using KB2D_SFX
-
Special Effect - Destroy (Last created special effect)
-
-
Else - Actions
-
-
-
-
-
Else - Actions
-
Custom script: call DestroyKnockback()
-
-
-
Custom script: call RemoveLocation(udg_KB2D_Loc)
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- This function will be run periodically --------
-
-------- -------------------------------------------- --------
-
Custom script: function Knockback2DLoop takes nothing returns nothing
-
Unit Group - Pick every unit in KB2D_LoopGroup and do (Actions)
-
Loop - Actions
-
Set KB2D_U = (Picked unit)
-
Custom script: set udg_KB2D_Key = GetHandleId(udg_KB2D_U)
-
-------- -------------------------------------------- --------
-
-------- Load --------
-
-------- -------------------------------------------- --------
-
Set KB2D_Angle = (Load 1 of KB2D_Key from KB2D_Hash)
-
Set KB2D_Duration = (Load 2 of KB2D_Key from KB2D_Hash)
-
Set KB2D_Distance = (Load 3 of KB2D_Key from KB2D_Hash)
-
Set KB2D_Timer = (Load 4 of KB2D_Key from KB2D_Hash)
-
Set KB2D_SFX = (Load 5 of KB2D_Key from KB2D_Hash)
-
Set KB2D_AllowTreeDestroy = (Load 6 of KB2D_Key from KB2D_Hash)
-
Custom script: call ExecuteFunc("MoveKnockbackUnit")
-
-
-
Custom script: endfunction
-
-------- -------------------------------------------- --------
-
-------- Reset Trigger --------
-
-------- -------------------------------------------- --------
-
Custom script: function InitKnockback2D takes nothing returns nothing
-
Custom script: local trigger t = GetTriggeringTrigger()
-
Custom script: call TriggerClearActions(t)
-
Custom script: call TriggerAddAction(t, function Knockback2DLoop)
-
Trigger - Add to (This trigger) the event (Time - Every KB2D_Loop seconds of game time)
-
-
-
Example Copy
-
Events
-
Unit - A unit Is attacked
-
-
Conditions
-
Actions
-
Set KB2D_Source = (Attacking unit)
-
Set KB2D_Target = (Attacked unit)
-
Custom script: set udg_KB2D_TempKey = GetHandleId(udg_KB2D_Target)
-
Set KB2D_SFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
-
Set KB2D_Distance = 500.00
-
Set KB2D_Duration = 1.50
-
Set KB2D_Loc = (Position of KB2D_Source)
-
Set KB2D_Offset = (Position of KB2D_Target)
-
Set KB2D_Angle = (Angle from KB2D_Loc to KB2D_Offset)
-
Set KB2D_AllowTreeDestroy = True
-
Custom script: call ExecuteFunc("ApplyKnockbackEffect")
-
Custom script: call RemoveLocation(udg_KB2D_Offset)
-
Custom script: call RemoveLocation(udg_KB2D_Loc)
-
-
Like if my hero gets damaged he will get knockback instead of attacked? is this possible?