Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
Ignite a target unit, dealing damage over time and reducing their movement speed. Every few seconds, the target unit will send out blast waves that ignite enemy units and deal over time. Any unit killed by this ability will explode and deal additional damage to nearby enemy units.
Ingame Information:
Primary debuff base ability is Cripple
Secondary debuff base ability is Curse
Both debuffs are dispellable
Primary and secondary debuffs do not stack. An instance will only be overwritten if it is equal or stronger in level
When a primary or secondary instance is overwritten, the duration is reset
Blast Waves cannot cross terrain or structures
A target can have a primary and secondary debuff simultaneously
When a target with both the primary and secondary debuff dies, the ability level taken for explosion damage and radius will be whichever ability level is higher
-------- preload (using another unit to preload effects so that it is not seen in the center of the map) --------
Unit - Create 1 FBurst_SPELL_DUMMY_UNIT_TYPE for FBurst_SPELL_DUMMY_OWNER at FBurst_TempLoc facing Default building facing degrees
Set FBurst_TempUnit = (Last created unit)
Special Effect - Create a special effect attached to the FBurst_SFX_PRIMARY_DEBUFF_AP of FBurst_TempUnit using FBurst_SFX_PRIMARY_DEBUFF
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect attached to the FBurst_SFX_SECOND_DEBUFF_AP of FBurst_TempUnit using FBurst_SFX_SECOND_DEBUFF
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect attached to the FBurst_SFX_WAVE_AP of FBurst_TempUnit using FBurst_SFX_WAVE
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect attached to the FBurst_SFX_WAVE_INDICATOR_AP of FBurst_TempUnit using FBurst_SFX_WAVE_INDICATOR
Special Effect - Destroy (Last created special effect)
Special Effect - Create a special effect attached to the FBurst_SFX_EXPLOSION_AP of FBurst_TempUnit using FBurst_SFX_EXPLOSION
Special Effect - Destroy (Last created special effect)
Unit - Remove FBurst_TempUnit from the game
-------- --------
-------- math calculations --------
For each (Integer FBurst_LoopInt) from 1 to FBurst_MAX_LEVEL, do (Actions)
Loop - Actions
Set FBurst_DOT_PRIMARY_DAMAGE[FBurst_LoopInt] = (FBurst_DOT_PRIMARY_DAMAGE[FBurst_LoopInt] x FBurst_PERIODIC_TIMER)
Set FBurst_DOT_SECONDARY_DAMAGE[FBurst_LoopInt] = (FBurst_DOT_SECONDARY_DAMAGE[FBurst_LoopInt] x FBurst_PERIODIC_TIMER)
Set FBurst_SpawnAngle[FBurst_LoopInt] = (360.00 / (Real(FBurst_WAVE_COUNT[FBurst_LoopInt])))
Set FBurst_TravelSpeed[FBurst_LoopInt] = (FBurst_TRAVEL_DISTANCE[FBurst_LoopInt] / (FBurst_TRAVEL_DURATION[FBurst_LoopInt] / FBurst_PERIODIC_TIMER))
FBurst Cast
Events
Unit - A unit Starts the effect of an ability
Conditions
(Ability being cast) Equal to FBurst_ABILITY
Actions
-------- FBurst Cast --------
-------- this trigger will check to see if the target needs a new primary instance or if its current primary instance needs to be overwritten --------
-------- if a target needs a new instance, the dummy caster will apply the slow and the target will receive the debuff effect --------
-------- if the target already has an instance, the slow and debuff effect will be reapplied, and the duration will be reset along with updated data from the new caster --------
-------- --------
-------- child keys for primary instance --------
-------- 0 - caster --------
-------- 1 - owner --------
-------- 2 - ability level --------
-------- 3 - duration --------
-------- 4 - duration counter for wave --------
-------- 5 - special effect --------
-------- --------
-------- child keys for explosion mechanic --------
-------- 10 - caster --------
-------- 11 - ability level --------
-------- --------
-------- --------
Set FBurst_Caster = (Triggering unit)
Set FBurst_AbilityLvl = (Level of FBurst_ABILITY for FBurst_Caster)
Set FBurst_TempLoc = (Position of FBurst_Target)
-------- checking if target needs to be given a primary instance --------
Set FBurst_Target = (Target unit of ability being cast)
Custom script: set udg_FBurst_UnitId = GetHandleId(udg_FBurst_Target)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FBurst_Target has buff FBurst_DEBUFF_PRIMARY) Equal to False
Then - Actions
-------- target does not have an active instance --------
-------- --------
Unit Group - Add FBurst_Target to FBurst_PrimaryGroup
Set FBurst_PrimaryGroupCount = (FBurst_PrimaryGroupCount + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_PrimaryGroupCount Equal to 1
Then - Actions
Trigger - Turn on FBurst_TRIGGER_PRIMARY_LOOP
Trigger - Turn on FBurst_TRIGGER_DOT_DEATH
Else - Actions
-------- do nothing --------
Else - Actions
-------- target has an active instance --------
-------- --------
-------- removing original effect + debuff to give it that "reapplication" effect --------
Unit - Remove FBurst_DEBUFF_PRIMARY buff from FBurst_Target
Special Effect - Destroy (Load 5 of FBurst_UnitId in FBurst_Hash)
-------- --------
Unit - Move FBurst_DummyCaster instantly to FBurst_TempLoc
Unit - Set level of FBurst_ABILITY_MOVE_SPEED for FBurst_DummyCaster to FBurst_AbilityLvl
Unit - Order FBurst_DummyCaster to Undead Necromancer - Cripple FBurst_Target
Special Effect - Create a special effect attached to the FBurst_SFX_PRIMARY_DEBUFF_AP of FBurst_Target using FBurst_SFX_PRIMARY_DEBUFF
Hashtable - Save Handle OfFBurst_Caster as 0 of FBurst_UnitId in FBurst_Hash
Hashtable - Save Handle Of(Triggering player) as 1 of FBurst_UnitId in FBurst_Hash
Hashtable - Save FBurst_AbilityLvl as 2 of FBurst_UnitId in FBurst_Hash
Hashtable - Save FBurst_DOT_PRIMARY_DURATION[FBurst_AbilityLvl] as 3 of FBurst_UnitId in FBurst_Hash
Hashtable - Save FBurst_WAVE_INTERVAL[FBurst_AbilityLvl] as 4 of FBurst_UnitId in FBurst_Hash
Hashtable - Save Handle Of(Last created special effect) as 5 of FBurst_UnitId in FBurst_Hash
-------- --------
-------- storing the highest ability level between the primary or secondary debuff --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_AbilityLvl Greater than or equal to (Load 11 of FBurst_UnitId from FBurst_Hash)
Then - Actions
-------- current ability level is equal or greater to the previous one --------
-------- --------
Hashtable - Save Handle OfFBurst_Caster as 10 of FBurst_UnitId in FBurst_Hash
Hashtable - Save FBurst_AbilityLvl as 11 of FBurst_UnitId in FBurst_Hash
Else - Actions
-------- do nothing --------
FBurst Order
Events
Unit - A unit Is issued an order targeting an object
Conditions
(Issued order) Equal to (Order(FBurst_ORDER_ID))
Actions
-------- FBurst Order --------
-------- this trigger will ensure that the caster cannot overwrite a stronger leveled instance of the primary debuff --------
-------- --------
-------- child keys required for order checking mechanic --------
-------- 2 - ability level --------
-------- --------
-------- --------
-------- there can be multiple spells in a map with the same order id. to ensure it's the one we are looking for, check for the level of the ABILITY on the triggering unit --------
Set FBurst_TempUnit = (Triggering unit)
Set FBurst_AbilityLvl = (Level of FBurst_ABILITY for FBurst_TempUnit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_AbilityLvl Greater than 0
Then - Actions
-------- order id and ability match --------
-------- --------
-------- checking if the current ability level is weaker than the target's current instance --------
Custom script: set udg_FBurst_UnitId = GetHandleId(GetOrderTarget())
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_AbilityLvl Less than (Load 2 of FBurst_UnitId from FBurst_Hash)
Then - Actions
-------- current ability level is weaker than the target's current instance --------
-------- --------
Unit - Pause FBurst_TempUnit
Unit - Order FBurst_TempUnit to Stop
Unit - Unpause FBurst_TempUnit
-------- play error message --------
Set FBurst_Owner = (Triggering player)
Custom script: if (GetLocalPlayer() == udg_FBurst_Owner) then
-------- this trigger will run the periodic actions of the primary spell (deal damage, create blast waves, and end the spell instance if it has to) --------
-------- --------
-------- child keys for primary instance --------
-------- 0 - caster --------
-------- 1 - owner --------
-------- 2 - ability level --------
-------- 3 - duration --------
-------- 4 - duration counter for wave --------
-------- 5 - special effect --------
-------- --------
-------- --------
Unit Group - Pick every unit in FBurst_PrimaryGroup and do (Actions)
Loop - Actions
Set FBurst_Target = (Picked unit)
Custom script: set udg_FBurst_UnitId = GetHandleId(udg_FBurst_Target)
-------- --------
-------- check if it is time to create blast wave (must be done before we check if the instance must end to ensure that the wave at 0 seconds is created) --------
Set FBurst_Caster = (Load 0 of FBurst_UnitId in FBurst_Hash)
Set FBurst_AbilityLvl = (Load 2 of FBurst_UnitId from FBurst_Hash)
Set FBurst_WaveCounter = ((Load 4 of FBurst_UnitId from FBurst_Hash) - FBurst_PERIODIC_TIMER)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_WaveCounter Less than or equal to 0.00
Then - Actions
-------- create blast wave --------
Special Effect - Create a special effect attached to the FBurst_SFX_WAVE_INDICATOR_AP of FBurst_Target using FBurst_SFX_WAVE_INDICATOR
Special Effect - Destroy (Last created special effect)
Custom script: set udg_FBurst_X = GetUnitX(udg_FBurst_Target)
Custom script: set udg_FBurst_Y = GetUnitY(udg_FBurst_Target)
Set FBurst_Owner = (Load 1 of FBurst_UnitId in FBurst_Hash)
Set FBurst_Angle = 0.00
For each (Integer FBurst_LoopInt) from 1 to FBurst_WAVE_COUNT[FBurst_AbilityLvl], do (Actions)
Loop - Actions
Trigger - Run FBurst_TRIGGER_CREATE_WAVE (ignoring conditions)
Set FBurst_Angle = (FBurst_Angle + FBurst_SpawnAngle[FBurst_AbilityLvl])
-------- reset timer for WaveCounter --------
Set FBurst_WaveCounter = FBurst_WAVE_INTERVAL[FBurst_AbilityLvl]
Else - Actions
-------- do nothing --------
-------- --------
-------- check end conditions before performing other loop actions --------
Set FBurst_Duration = (Load 3 of FBurst_UnitId from FBurst_Hash)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(FBurst_Target is dead) Equal to True
(FBurst_Target has buff FBurst_DEBUFF_PRIMARY) Equal to False
FBurst_Duration Less than or equal to 0.00
Then - Actions
-------- end instance --------
Unit - Remove FBurst_DEBUFF_PRIMARY buff from FBurst_Target
Special Effect - Destroy (Load 5 of FBurst_UnitId in FBurst_Hash)
-------- manually removing child keys 0-5 because child keys 6-9 might still be needed --------
Unit Group - Remove FBurst_Target from FBurst_PrimaryGroup
Set FBurst_PrimaryGroupCount = (FBurst_PrimaryGroupCount - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_PrimaryGroupCount Equal to 0
Then - Actions
Trigger - Turn off FBurst_TRIGGER_PRIMARY_LOOP
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_SecondaryGroupCount Equal to 0
Then - Actions
Trigger - Turn off FBurst_TRIGGER_DOT_DEATH
Else - Actions
-------- do nothing --------
Else - Actions
-------- do nothing --------
Else - Actions
Unit - Cause FBurst_Caster to damage FBurst_Target, dealing FBurst_DOT_PRIMARY_DAMAGE[FBurst_AbilityLvl] damage of attack type FBurst_ATTACK_TYPE and damage type FBurst_DAMAGE_TYPE
-------- --------
Hashtable - Save (FBurst_Duration - FBurst_PERIODIC_TIMER) as 3 of FBurst_UnitId in FBurst_Hash
Hashtable - Save FBurst_WaveCounter as 4 of FBurst_UnitId in FBurst_Hash
FBurst Wave Index
Events
Conditions
Actions
-------- FBurst Wave Index --------
-------- this trigger creates an individual wave of an entire blast wave mechanic --------
-------- once a wave is created, it will be added into the linked list with the necessary data to function as intended --------
-------- --------
-------- members --------
-------- SourceUnit[] = unit that will be emitting the explosions --------
-------- CasterWave[] = caster that started the effect --------
-------- OwnerWave[] = owner of CasterWave[] --------
-------- AbilityLvlWave[] = level of primary ability of caster --------
-------- WaveUnit[] = dummy unit with the wave special effect --------
-------- DistancedTraveled[] = total distance moved by WaveUnit[] --------
-------- Cos[] = cosine of the angle in which WaveUnit[] will move --------
-------- Sin[] = Sine of the angle in which WaveUnit[] will move --------
-------- WaveSfx[] = special effect of the wave --------
-------- --------
-------- --------
Set FBurst_WaveCount = (FBurst_WaveCount + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_WaveCount Equal to 1
Then - Actions
Trigger - Turn on FBurst_TRIGGER_WAVE_LOOP
Else - Actions
-------- do nothing --------
-------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_RecycledSize Equal to 0
Then - Actions
Set FBurst_MaxIndex = (FBurst_MaxIndex + 1)
Set FBurst_WaveId = FBurst_MaxIndex
Else - Actions
Set FBurst_RecycledSize = (FBurst_RecycledSize - 1)
Set FBurst_WaveId = FBurst_RecycledStack[FBurst_RecycledSize]
Set FBurst_NodeNext[FBurst_WaveId] = 0
Set FBurst_NodePrev[FBurst_WaveId] = FBurst_NodePrev[0]
Set FBurst_NodeNext[FBurst_NodePrev[0]] = FBurst_WaveId
Set FBurst_NodePrev[0] = FBurst_WaveId
-------- --------
Custom script: set udg_FBurst_WaveUnit[udg_FBurst_WaveId] = CreateUnit(udg_FBurst_SPELL_DUMMY_OWNER, udg_FBurst_SPELL_DUMMY_UNIT_TYPE, udg_FBurst_X, udg_FBurst_Y, udg_FBurst_Angle)
-------- repositioning dummy unit to the center because the target's collision size will displace the effect --------
Set FBurst_SourceUnit[FBurst_WaveId] = FBurst_Target
Set FBurst_CasterWave[FBurst_WaveId] = FBurst_Caster
Set FBurst_OwnerWave[FBurst_WaveId] = FBurst_Owner
Set FBurst_AbilityLvlWave[FBurst_WaveId] = FBurst_AbilityLvl
-------- --------
Set FBurst_DistanceTraveled[FBurst_WaveId] = FBurst_TRAVEL_DISTANCE[FBurst_AbilityLvlWave[FBurst_WaveId]]
Set FBurst_Cos[FBurst_WaveId] = (Cos(FBurst_Angle))
Set FBurst_Sin[FBurst_WaveId] = (Sin(FBurst_Angle))
-------- --------
Special Effect - Create a special effect attached to the FBurst_SFX_WAVE_AP of FBurst_WaveUnit[FBurst_WaveId] using FBurst_SFX_WAVE
Set FBurst_WaveSfx[FBurst_WaveId] = (Last created special effect)
FBurst Wave Loop
Events
Conditions
Actions
-------- FBurst Wave Index --------
-------- this trigger peridoically moves WaveUnit[] --------
-------- during the movement of WaveUnit[], the trigger will also periodically check if any units are within the radius of WaveUnit[] --------
-------- if a unit is within the radius of WaveUnit[], a secondary instance will be indexed for them --------
-------- --------
-------- members --------
-------- SourceUnit[] = unit that will be emitting the explosions --------
-------- CasterWave[] = caster that started the effect --------
-------- OwnerWave[] = owner of CasterWave[] --------
-------- AbilityLvlWave[] = level of primary ability of caster --------
-------- WaveUnit[] = dummy unit with the wave special effect --------
-------- DistancedTraveled[] = total distance moved by WaveUnit[] --------
-------- Cos[] = cosine of the angle in which WaveUnit[] will move --------
-------- Sin[] = Sine of the angle in which WaveUnit[] will move --------
-------- WaveSfx[] = special effect of the wave --------
-------- --------
-------- --------
Custom script: local real x
Custom script: local real y
Set FBurst_WaveId = 0
For each (Integer FBurst_LoopInt) from 1 to FBurst_WaveCount, do (Actions)
Loop - Actions
Set FBurst_WaveId = FBurst_NodeNext[FBurst_WaveId]
-------- --------
Custom script: set x = GetUnitX(udg_FBurst_WaveUnit[udg_FBurst_WaveId]) + udg_FBurst_TravelSpeed[udg_FBurst_AbilityLvlWave[udg_FBurst_WaveId]] * udg_FBurst_Cos[udg_FBurst_WaveId]
Custom script: set y = GetUnitY(udg_FBurst_WaveUnit[udg_FBurst_WaveId]) + udg_FBurst_TravelSpeed[udg_FBurst_AbilityLvlWave[udg_FBurst_WaveId]] * udg_FBurst_Sin[udg_FBurst_WaveId]
-------- checking if terrain ahead is pathable for WaveUnit[] --------
Custom script: set udg_CP_Point = Location(x, y)
Trigger - Run FBurst_TRIGGER_PATHING_CHECK (ignoring conditions)
-------- --------
-------- checking if instance should be ended --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
CP_PointIsWalkable Equal to False
FBurst_DistanceTraveled[FBurst_WaveId] Less than or equal to 0.00
Then - Actions
-------- end instance --------
Unit - Kill FBurst_WaveUnit[FBurst_WaveId]
Special Effect - Destroy FBurst_WaveSfx[FBurst_WaveId]
-------- --------
Set FBurst_RecycledStack[FBurst_RecycledSize] = FBurst_WaveId
Set FBurst_RecycledSize = (FBurst_RecycledSize + 1)
Set FBurst_NodeNext[FBurst_NodePrev[FBurst_WaveId]] = FBurst_NodeNext[FBurst_WaveId]
Set FBurst_NodePrev[FBurst_NodeNext[FBurst_WaveId]] = FBurst_NodePrev[FBurst_WaveId]
-------- --------
Set FBurst_WaveCount = (FBurst_WaveCount - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_WaveCount Equal to 0
Then - Actions
Trigger - Turn off FBurst_TRIGGER_WAVE_LOOP
Else - Actions
-------- do nothing --------
Else - Actions
Set FBurst_DistanceTraveled[FBurst_WaveId] = (FBurst_DistanceTraveled[FBurst_WaveId] - FBurst_TravelSpeed[FBurst_AbilityLvlWave[FBurst_WaveId]])
-------- checking if there are any nearby enemy units --------
-------- using GroupEnumUnitsInRange because GetUnitsInRangeOfLoc has a reference handle leak --------
Custom script: call GroupEnumUnitsInRange(udg_FBurst_InRangeGroup, x, y, udg_FBurst_WAVE_RADIUS[udg_FBurst_AbilityLvlWave[udg_FBurst_WaveId]], null)
-------- removing the original target so that they do not get their own secondary debuff --------
Unit Group - Remove FBurst_SourceUnit[FBurst_WaveId] from FBurst_InRangeGroup
Unit Group - Pick every unit in FBurst_InRangeGroup and do (Actions)
Loop - Actions
Set FBurst_TempUnit = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FBurst_TempUnit is A structure) Equal to False
(FBurst_TempUnit is A flying unit) Equal to False
(FBurst_TempUnit is Magic Immune) Equal to False
(FBurst_TempUnit is alive) Equal to True
(FBurst_TempUnit belongs to an enemy of FBurst_OwnerWave[FBurst_WaveId]) Equal to True
Then - Actions
Trigger - Run FBurst_TRIGGER_APPLY_DOT (ignoring conditions)
Else - Actions
-------- do nothing --------
Unit Group - Remove FBurst_TempUnit from FBurst_InRangeGroup
FBurst DoT Apply
Events
Conditions
Actions
-------- FBurst DoT Apply --------
-------- this trigger applies the DoT debuff to units who are hit by the blast wave. since the debuff is non-stacking, it will first check if the unit already has the debuff --------
-------- if the unit does not already have the debuff, it will simply be given a new instance --------
-------- if the unit does have the debuff, and the new debuff is equal or stronger in level, the debuff will be reapplied, and the duration will be reset along with updated data from the caster --------
-------- --------
-------- child keys for secondary instance --------
-------- 6 - caster --------
-------- 7 - ability level --------
-------- 8 - duration --------
-------- 9 - special effect --------
-------- --------
-------- child keys for explosion mechanic --------
-------- 10 - caster --------
-------- 11 - ability level --------
-------- --------
-------- --------
Custom script: set udg_FBurst_UnitId = GetHandleId(udg_FBurst_TempUnit)
-------- checking if unit has the debuff or not --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FBurst_TempUnit has buff FBurst_DEBUFF_SECONDARY) Equal to False
Then - Actions
-------- unit does not have buff --------
-------- --------
Unit Group - Add FBurst_TempUnit to FBurst_SeondaryGroup
Set FBurst_SecondaryGroupCount = (FBurst_SecondaryGroupCount + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_SecondaryGroupCount Equal to 1
Then - Actions
Trigger - Turn on FBurst_TRIGGER_SECONDARY_LOOP
Else - Actions
-------- do nothing --------
Else - Actions
-------- unit has buff --------
-------- --------
-------- checking if the new instance level is equal or greater than the current instance's level --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_AbilityLvlWave[FBurst_WaveId] Greater than or equal to (Load 7 of FBurst_UnitId from FBurst_Hash)
Then - Actions
-------- new instance level is equal or greater --------
-------- --------
-------- removing original effect + debuff to give it that "reapplication" effect --------
Unit - Remove FBurst_DEBUFF_SECONDARY buff from FBurst_TempUnit
Special Effect - Destroy (Load 9 of FBurst_UnitId in FBurst_Hash)
Else - Actions
-------- new instance level is not equal or greater --------
-------- --------
Skip remaining actions
-------- --------
Set FBurst_TempLoc = (Position of FBurst_TempUnit)
Unit - Move FBurst_DummyCaster instantly to FBurst_TempLoc
Unit - Order FBurst_DummyCaster to Undead Banshee - Curse FBurst_TempUnit
Special Effect - Create a special effect attached to the FBurst_SFX_SECOND_DEBUFF_AP of FBurst_TempUnit using FBurst_SFX_SECOND_DEBUFF
Unit Group - Remove FBurst_Target from FBurst_SeondaryGroup
Set FBurst_SecondaryGroupCount = (FBurst_SecondaryGroupCount - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_SecondaryGroupCount Equal to 0
Then - Actions
Trigger - Turn off FBurst_TRIGGER_SECONDARY_LOOP
-------- --------
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
FBurst_PrimaryGroupCount Equal to 0
Then - Actions
Trigger - Turn off FBurst_TRIGGER_DOT_DEATH
Else - Actions
-------- do nothing --------
Else - Actions
-------- do nothing --------
Else - Actions
Unit - Cause (Load 6 of FBurst_UnitId in FBurst_Hash) to damage FBurst_Target, dealing FBurst_DOT_SECONDARY_DAMAGE[(Load 7 of FBurst_UnitId from FBurst_Hash)] damage of attack type FBurst_ATTACK_TYPE and damage type FBurst_DAMAGE_TYPE
-------- --------
Hashtable - Save (FBurst_Duration - FBurst_PERIODIC_TIMER) as 8 of FBurst_UnitId in FBurst_Hash
FBurst DoT Death
Events
Unit - A unit Dies
Conditions
Actions
-------- FBurst DoT Death --------
-------- this trigger will run the explosion mechanic if a unit with either the primary or secondary debuff dies --------
-------- --------
-------- child keys for explosion mechanic --------
-------- 10 - caster --------
-------- 11 - ability level --------
-------- --------
-------- --------
-------- checking if dying unit has secondary debuff --------
Set FBurst_TempUnit = (Triggering unit)
Custom script: set udg_FBurst_TempInt = GetHandleId(udg_FBurst_TempUnit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Or - Any (Conditions) are true
Conditions
(FBurst_TempUnit is in FBurst_SeondaryGroup) Equal to True
(FBurst_TempUnit is in FBurst_PrimaryGroup) Equal to True
Then - Actions
-------- dying unit has debuff --------
-------- --------
Special Effect - Create a special effect attached to the FBurst_SFX_EXPLOSION_AP of FBurst_TempUnit using FBurst_SFX_EXPLOSION
Special Effect - Destroy (Last created special effect)
-------- --------
Set FBurst_Caster = (Load 10 of FBurst_TempInt in FBurst_Hash)
Set FBurst_AbilityLvl = (Load 11 of FBurst_TempInt from FBurst_Hash)
Set FBurst_Owner = (Owner of FBurst_TempUnit)
-------- --------
-------- checking if there are any nearby enemy units --------
-------- using GroupEnumUnitsInRange because GetUnitsInRangeOfLoc has a reference handle leak --------
Unit Group - Pick every unit in FBurst_InRangeGroup and do (Actions)
Loop - Actions
Set FBurst_TempUnit = (Picked unit)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
(FBurst_TempUnit is A structure) Equal to False
(FBurst_TempUnit is Magic Immune) Equal to False
(FBurst_TempUnit is alive) Equal to True
(FBurst_TempUnit belongs to an ally of FBurst_Owner) Equal to True
Then - Actions
Unit - Cause FBurst_Caster to damage FBurst_TempUnit, dealing FBurst_EXPLOSION_DAMAGE[FBurst_AbilityLvl] damage of attack type FBurst_ATTACK_TYPE and damage type FBurst_DAMAGE_TYPE
Else - Actions
-------- do nothing --------
Unit Group - Remove FBurst_TempUnit from FBurst_InRangeGroup
-------- --------
-------- manually removing child keys 10 & 11 because child keys 0-9 might still be needed --------
The winning entry - looks great, easy to use and the code is clean and consistent, approved
Suggestions: Nothing really, perhaps remove air targeting for consistency but hardly major
This site uses cookies to help personalise content, tailor your experience and to keep you logged in if you register.
By continuing to use this site, you are consenting to our use of cookies.