- Joined
- Feb 8, 2015
- Messages
- 93
So I've created a spell that sends a line of 8 explosions down a path, dealing damage.
The explosions proc every 0.85 seconds, so a full line takes about 7 seconds to complete.
The spell works just fine, but the Hero has a "cooldown reset" ability, so it has to be MUI - and indeed, with hashtables, I can run several cycles at a time.
But there's this odd effect where after trying to run two casts at a time, the next cast will only make 1-2 explosions, and then stop completely. The next few are similarly dysfunctional, before eventually returning to normal.
It seems as if the SmoldTrail_i (which counts numbers of explosions) gets overridden by other casts somehow, but I can't seem to find out why - I feel like my hashtables are in order.
Also, there are several Point variables that aren't cleared - because when I did, the trigger refused to function. Is overwriting with a hashtable Location-handle-load okay? Or is this leaking like crazy?
(P.S. there's also a "dummy catapult does a burning oil effect" on target, but that's left disabled in my copy-paste, along with the visual effect)
The explosions proc every 0.85 seconds, so a full line takes about 7 seconds to complete.
The spell works just fine, but the Hero has a "cooldown reset" ability, so it has to be MUI - and indeed, with hashtables, I can run several cycles at a time.
But there's this odd effect where after trying to run two casts at a time, the next cast will only make 1-2 explosions, and then stop completely. The next few are similarly dysfunctional, before eventually returning to normal.
It seems as if the SmoldTrail_i (which counts numbers of explosions) gets overridden by other casts somehow, but I can't seem to find out why - I feel like my hashtables are in order.
Also, there are several Point variables that aren't cleared - because when I did, the trigger refused to function. Is overwriting with a hashtable Location-handle-load okay? Or is this leaking like crazy?
(P.S. there's also a "dummy catapult does a burning oil effect" on target, but that's left disabled in my copy-paste, along with the visual effect)
-
Smoldering Trail Cast
-
Events
- Unit - A unit Starts the effect of an ability
-
Conditions
- (Ability being cast) Equal to Good: Smoldering Trail (Channel)
-
Actions
- Set SmoldTrail_cast = (Triggering unit)
- Set SmoldTrail_dist = 800.00
- Set SmoldTrail_i = 8
- Set SmoldTrail_jumpdist = (SmoldTrail_dist / (Real(SmoldTrail_i)))
- -------- Calculates the angle of explosion-path --------
- Set SmoldTrail_CastP = (Position of SmoldTrail_cast)
- Set SmoldTrail_TargP = (Target point of ability being cast)
- Set SmoldTrail_ang = (Angle from SmoldTrail_CastP to SmoldTrail_TargP)
- -------- Sets the damage formula (50*x+25) where x is level of ability --------
- Set SmoldTrail_dmg = (25.00 + (50.00 x (Real((Level of (Ability being cast) for SmoldTrail_cast)))))
- -------- Creates a dummy (handle) --------
- Unit - Create 1 Dummy for (Owner of SmoldTrail_cast) at SmoldTrail_CastP facing Default building facing degrees
- Unit Group - Add (Last created unit) to SmoldTrail_ug
- -------- Saves the angle, damage, and number of explosions to this unique dummy --------
- Hashtable - Save SmoldTrail_i as 0 of (Key (Last created unit)) in SmoldTrail_hash
- Hashtable - Save SmoldTrail_dmg as 1 of (Key (Last created unit)) in SmoldTrail_hash
- Hashtable - Save SmoldTrail_ang as 2 of (Key (Last created unit)) in SmoldTrail_hash
- Hashtable - Save Handle OfSmoldTrail_CastP as 3 of (Key (Last created unit)) in SmoldTrail_hash
- -------- Cleans up the Locations --------
- Custom script: call RemoveLocation(udg_SmoldTrail_TargP)
-
Events
-
Smoldering Trail Loop
-
Events
- Time - Every 0.85 seconds of game time
- Conditions
-
Actions
-
Unit Group - Pick every unit in SmoldTrail_ug and do (Actions)
-
Loop - Actions
- Set SmoldTrail_Loopu = (Picked unit)
- -------- Loads parameters for this unit (saved in Smoldering Trail Cast) --------
- Set SmoldTrail_i = (Load 0 of (Key (Picked unit)) from SmoldTrail_hash)
- Set SmoldTrail_dmg = (Load 1 of (Key (Picked unit)) from SmoldTrail_hash)
- Set SmoldTrail_ang = (Load 2 of (Key (Picked unit)) from SmoldTrail_hash)
- Set SmoldTrail_Tempp1 = (Load 3 of (Key (Picked unit)) in SmoldTrail_hash)
- -------- Checks remaining explosion count --------
-
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-
If - Conditions
- SmoldTrail_i Greater than 0
-
Then - Actions
- -------- Duration remains... Periodic Damage (and Explosion accumulation) --------
- Set SmoldTrail_Tempp2 = (SmoldTrail_Tempp1 offset by SmoldTrail_jumpdist towards SmoldTrail_ang degrees)
- -------- Damages enemies around the point --------
- Set SmoldTrail_Tempug = (Units within 150.00 of SmoldTrail_Tempp2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) is dead) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of SmoldTrail_Loopu)) Equal to True) and ((((Matching un
- Set SmoldTrail_AlreadyDamaged = (Load 4 of (Key (Picked unit)) in SmoldTrail_hash)
-
Unit Group - Pick every unit in SmoldTrail_Tempug and do (Actions)
-
Loop - Actions
- Set SmoldTrail_Picked = (Picked unit)
- Unit - Cause SmoldTrail_Loopu to damage SmoldTrail_Picked, dealing SmoldTrail_dmg damage of attack type Spells and damage type Normal
- Unit Group - Add SmoldTrail_Picked to SmoldTrail_AlreadyDamaged
- Hashtable - Save Handle OfSmoldTrail_AlreadyDamaged as 4 of (Key (Picked unit)) in SmoldTrail_hash
-
Loop - Actions
- -------- Cleans up the tempgroup --------
- Custom script: call DestroyGroup(udg_SmoldTrail_Tempug)
- -------- Creates a dummy explosion effect --------
- Unit - Create 1 Dummy Effect: Neutral Building Explosion for Neutral Passive at SmoldTrail_Tempp2 facing Default building facing degrees
- Unit - Add a 0.98 second Generic expiration timer to (Last created unit)
- -------- Creates a dummy to apply the Burning Oil effect --------
- Unit - Create 1 Smoldering Trail Burning Oil Dummy for (Owner of SmoldTrail_Loopu) at SmoldTrail_Tempp2 facing Default building facing degrees
- Set SmoldTrail_Tempu = (Last created unit)
- Unit - Order SmoldTrail_Tempu to Attack Ground SmoldTrail_Tempp2
- Unit - Add a 1.00 second Generic expiration timer to SmoldTrail_Tempu
- -------- Resaves Variables (number of explosions left, and point of last explosion have changed) --------
- Hashtable - Save (SmoldTrail_i - 1) as 0 of (Key (Picked unit)) in SmoldTrail_hash
- Hashtable - Save Handle OfSmoldTrail_Tempp2 as 3 of (Key (Picked unit)) in SmoldTrail_hash
-
Else - Actions
- -------- Cleans hashtable, removes unit from group --------
- Unit Group - Remove SmoldTrail_Loopu from SmoldTrail_ug
- Hashtable - Clear all child hashtables of child (Key (Picked unit)) in SmoldTrail_hash
- Custom script: call RemoveLocation(udg_SmoldTrail_Tempp1)
- Custom script: call RemoveLocation(udg_SmoldTrail_Tempp2)
- Set SmoldTrail_AlreadyDamaged = (Load 4 of (Key (Picked unit)) in SmoldTrail_hash)
- Custom script: call DestroyGroup(udg_SmoldTrail_AlreadyDamaged)
- -------- Removes the dummy unit completely --------
- Unit - Remove SmoldTrail_Loopu from the game
-
If - Conditions
- -------- Removes the previous point variable --------
- Custom script: call RemoveLocation(udg_SmoldTrail_Tempp1)
-
Loop - Actions
-
Unit Group - Pick every unit in SmoldTrail_ug and do (Actions)
-
Events