- Joined
- Apr 24, 2012
- Messages
- 5,113
-
TK Setup
-
Events
- Map initialization
- Conditions
-
Actions
- Custom script: set udg_TK_Hash = InitHashtable()
- -------- CONFIGURATION --------
- -------- Determines the speed of the Tree --------
- Set TK_TreeSpeed = 37.50
- -------- Determines the tree destroy radius while knocbacked --------
- Set TK_TreeDestroyRadius = 250.00
- -------- Note:That will be also used to knockback units --------
- -------- Determines the knocback distance of the units/trees --------
- Set TK_KBDistanceBase = 200.00
- Set TK_KBDistancePerLevel = 100.00
- -------- Determines the distance the main knocbacked tree can go --------
- Set TK_TreeDistanceBase = 750.00
- Set TK_TreeDistancePerLevel = 250.00
- -------- Determines the damage per level --------
- Set TK_DamageBase = 100.00
- -------- Determines the damage multiplier --------
- Set TK_DamageBaseX = 1.00
- Set TK_DamagePerLevelX = 1.00
- -------- Note:that is the multiplier --------
- -------- Determines the knockback sfx --------
- Set TK_KnocbackSFX = Abilities\Weapons\AncientProtectorMissile\AncientProtectorMissile.mdl
- -------- Tree Setup --------
- Set TK_CutSysLoc = (Center of (Playable map area))
- Unit - Create 1 Peasant for Neutral Passive at TK_CutSysLoc facing Default building facing degrees
- Set TK_Cutter = (Last created unit)
- Unit - Hide TK_Cutter
- Unit - Make TK_Cutter Invulnerable
- Set TK_DestroyOrder = harvest
- Custom script: call RemoveLocation(udg_TK_CutSysLoc)
-
Events
-
TK Cast
-
Events
- Unit - A unit Starts the effect of an ability
-
Conditions
- (Ability being cast) Equal to Tree Knocback
-
Actions
- -------- Variables --------
- Set TK_Caster = (Triggering unit)
- Set TK_TargetTree = (Target destructible of ability being cast)
- Set TK_Owner = (Triggering player)
- Set TK_Level = (Level of Tree Knocback for TK_Caster)
- -------- Creating Fake Tree --------
- Set TK_Loc = (Position of TK_TargetTree)
- Set TK_CasterLoc = (Position of TK_Caster)
- Unit - Create 1 TK Dummy Tree for TK_Owner at TK_Loc facing Default building facing degrees
- Set TK_Dummy = (Last created unit)
- Custom script: set udg_TK_DummyKey = GetHandleId(udg_TK_Dummy)
- Custom script: call UnitAddAbility(udg_TK_Dummy,'Aloc')
- -------- Saving Variables --------
- Set TK_DummyAngle = (Angle from TK_CasterLoc to TK_Loc)
- Hashtable - Save TK_Level as 0 of TK_DummyKey in TK_Hash
- Hashtable - Save Handle OfTK_Owner as 1 of TK_DummyKey in TK_Hash
- Hashtable - Save TK_DummyAngle as 2 of TK_DummyKey in TK_Hash
- Hashtable - Save (Strength of TK_Caster (Include bonuses)) as (Key Str) of TK_DummyKey in TK_Hash
- -------- Starting Loop --------
- Unit Group - Add TK_Dummy to TK_LoopGroup
- Trigger - Turn on TK Loop <gen>
- -------- LEAK --------
- Custom script: call RemoveLocation(udg_TK_Loc)
- Custom script: call RemoveLocation(udg_TK_CasterLoc)
-
Events
-
TK Loop
-
Events
- Time - Every 0.03 seconds of game time
- Conditions
-
Actions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- (TK_LoopGroup is empty) Equal to False
-
Then - Actions
-
Unit Group - Pick every unit in TK_LoopGroup and do (Actions)
-
Loop - Actions
- Set TK_U = (Picked unit)
- Custom script: set udg_TK_UKey = GetHandleId(udg_TK_U)
- -------- Loading --------
- Set TK_Level = (Load 0 of TK_UKey from TK_Hash)
- Set TK_Owner = (Load 1 of TK_UKey in TK_Hash)
- Set TK_Angle = (Load 2 of TK_UKey from TK_Hash)
- Set TK_DistanceTravelled = (Load 4 of TK_UKey from TK_Hash)
- Set TK_MaxDistance = (TK_TreeDistanceBase + (TK_TreeDistancePerLevel x (Real(TK_Level))))
- Set TK_ULoc = (Position of TK_U)
- -------- Checking if the tree hasnt reach its max distance --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- TK_DistanceTravelled Less than TK_MaxDistance
-
Then - Actions
- Set TK_Offset = (TK_ULoc offset by TK_TreeSpeed towards TK_Angle degrees)
- Unit - Move TK_U instantly to TK_Offset
- Custom script: call RemoveLocation(udg_TK_Offset)
- -------- SFX --------
- Special Effect - Create a special effect at TK_ULoc using TK_KnocbackSFX
- Special Effect - Destroy (Last created special effect)
- Unit - Make TK_U face ((Facing of TK_U) + 12.00) over 0.00 seconds
- -------- Tree Knocback --------
-
Destructible - Pick every destructible within TK_TreeDestroyRadius of TK_ULoc and do (Actions)
-
Loop - Actions
- Set TK_TempTree = (Picked destructible)
- Custom script: call IssueTargetOrder(udg_TK_Cutter,udg_TK_DestroyOrder,udg_TK_TempTree)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- (Current order of TK_Cutter) Equal to (Order(TK_DestroyOrder))
- (Current life of TK_TempTree) Greater than 0.00
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- Set TK_TempTreeLoc = (Position of TK_TempTree)
- Destructible - Kill TK_TempTree
- Unit - Create 1 TK Dummy Tree for TK_Owner at TK_TempTreeLoc facing Default building facing degrees
- Set TK_Dummy = (Last created unit)
- Custom script: set udg_TK_DummyKey = GetHandleId(udg_TK_Dummy)
- Custom script: call UnitAddAbility(udg_TK_Dummy,'Aloc')
- -------- Adding knockback --------
- Set KB2D_Target = TK_Dummy
- Set KB2D_Angle = (Angle from TK_ULoc to TK_TempTreeLoc)
- Set KB2D_Key = TK_DummyKey
- Set KB2D_Distance = (TK_KBDistanceBase + (TK_KBDistancePerLevel x (Real(TK_Level))))
- Set KB2D_Duration = 1.00
- Custom script: call ExecuteFunc("ApplyKnockbackEffect")
- Custom script: call RemoveLocation(udg_TK_TempTreeLoc)
- Else - Actions
-
If - Conditions
- Unit - Order TK_Cutter to Stop
-
Loop - Actions
- -------- Unit Knockback --------
- Set TK_TempGroup = (Units within TK_TreeDestroyRadius of TK_ULoc)
-
Unit Group - Pick every unit in TK_TempGroup and do (Actions)
-
Loop - Actions
- Set TK_TempU = (Picked unit)
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
-
And - All (Conditions) are true
-
Conditions
- (TK_TempU is A structure) Equal to False
- (TK_TempU is Magic Immune) Equal to False
- (TK_TempU is alive) Equal to True
- (TK_TempU belongs to an enemy of TK_Owner) Equal to True
- (TK_TempU is in KB2D_LoopGroup) Equal to False
-
Conditions
-
And - All (Conditions) are true
-
Then - Actions
- Unit - Cause TK_U to damage TK_TempU, dealing TK_Damage damage of attack type Spells and damage type Normal
- Custom script: set udg_TK_TempKey = GetHandleId(udg_TK_TempU)
- Set TK_TempLoc = (Position of TK_TempU)
- -------- Saving Variables --------
- Set KB2D_Target = TK_TempU
- Set KB2D_Angle = (Angle from TK_ULoc to TK_TempLoc)
- Set KB2D_Key = TK_TempKey
- Set TK_Damage = (TK_DamageBase + ((TK_DamageBaseX + (TK_DamagePerLevelX x (Real(TK_Level)))) x (Real((Load (Key Str) of TK_UKey from TK_Hash)))))
- Set KB2D_Distance = (TK_KBDistanceBase + (TK_KBDistancePerLevel x (Real(TK_Level))))
- Set KB2D_Duration = 1.00
- Custom script: call ExecuteFunc("ApplyKnockbackEffect")
- -------- LEAK --------
- Custom script: call RemoveLocation(udg_TK_TempLoc)
- Else - Actions
-
If - Conditions
-
Loop - Actions
- Hashtable - Save (TK_DistanceTravelled + TK_TreeSpeed) as 4 of TK_UKey in TK_Hash
- -------- LEAK --------
- Custom script: call DestroyGroup(udg_TK_TempGroup)
-
Else - Actions
- Unit - Remove TK_U from the game
- Hashtable - Clear all child hashtables of child TK_UKey in TK_Hash
- Unit Group - Remove TK_U from TK_LoopGroup
-
If - Conditions
- Custom script: call RemoveLocation(udg_TK_ULoc)
-
Loop - Actions
-
Unit Group - Pick every unit in TK_LoopGroup and do (Actions)
-
Else - Actions
- Trigger - Turn off (This trigger)
-
If - Conditions
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
Events
Here is the link for the system:
http://www.hiveworkshop.com/forums/spells-569/knockback-v1-6-v1-0-a-223634/
Map file of this spell: