• 🏆 Texturing Contest #33 is OPEN! Contestants must re-texture a SD unit model found in-game (Warcraft 3 Classic), recreating the unit into a peaceful NPC version. 🔗Click here to enter!
  • It's time for the first HD Modeling Contest of 2024. Join the theme discussion for Hive's HD Modeling Contest #6! Click here to post your idea!

Orbital Bombardment v1.1b

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
This is the spell I started long time ago and found it today. I decided to finish it. I haven`t been using WE for a long time so there may be some things, however it`s leakless and MUI. Have fun with it.

Orbital Bombardment
The hero lands a flare on the ground at targeted point. After some time backup units that are in the space launch bombs which will fall on random points around the target position. When they reach ground the explode dealing damage and creating circle of lightning. The circle will be rising and dealing damage to all units within it.

Level 1 - 6 Bombs, each deals 150 damage at explosion, lightning deals 100 damage
Level 2 - 8 Bombs, each deals 200 damage at explosion, lightning deals 110 damage
Level 3 - 10 Bombs, each deals 200 damage at explosion, lightning deals 120 damage
The spell:
- fully MUI
- contains Readme and documentation
- uses hashtables
- very configurable


  • OB Hash
    • Events
      • Time - Elapsed game time is 0.00 seconds
    • Conditions
    • Actions
      • -------- === Create and store hashtable === --------
      • Hashtable - Create a hashtable
      • Set OB_Hash = (Last created hashtable)
      • -------- === Lightning effect === --------
      • Set OB_LightEff = Chain Lightning - Primary
      • -------- === Max and Min height at which the bombs start falling=== --------
      • Set OB_HMax = 1700.00
      • Set OB_HMin = 1500.00
      • -------- === Max and Min falling speed of bombs === --------
      • Set OB_FSMax = 40.00
      • Set OB_FSMin = 30.00
      • -------- === Max range of spawning bomb === --------
      • Set OB_SRMax = 400.00
      • -------- === How long the flare lasts === --------
      • Set OB_FlareDur = 4.00
      • -------- === When bombs start to fall === --------
      • -------- === Mention that it`s in fact how much time the flare must have left to start falling bombs === --------
      • Set OB_StartFall = (OB_FlareDur - 3.50)
      • -------- === Speed of Lightning === --------
      • Set OB_LightSpeed = 5.00
  • OB Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Orbital Bombardment
    • Actions
      • -------- === Counter === --------
      • Set OB_Counter = (OB_Counter + 1)
      • -------- === Basic Sets === --------
      • Set OB_Unit[1] = (Triggering unit)
      • Set OB_Point[1] = (Target point of ability being cast)
      • -------- ===Number of Bombs === --------
      • Set OB_BombNumber = (4 + (2 x (Level of Orbital Bombardment for OB_Unit[1])))
      • -------- === Damage that is taken when bomb hits the ground === --------
      • Set OB_Damage = (100.00 + (50.00 x (Real((Level of Orbital Bombardment for OB_Unit[1])))))
      • -------- === Damage dealt by lightning after exploding of the bomb === --------
      • Set OB_LightDamage = (90.00 + (10.00 x (Real((Level of Orbital Bombardment for OB_Unit[1])))))
      • Set OB_LightDamage = (OB_LightDamage / ((OB_Aoe - 20.00) / 5.00))
      • -------- === AoE of explosion === --------
      • Set OB_Aoe = 100.00
      • -------- === AoE of lightning === --------
      • Set OB_LightAoe = 150.00
      • -------- === Data dummy === --------
      • Unit - Create 1 Dummy for (Owner of OB_Unit[1]) at OB_Point[1] facing Default building facing degrees
      • Set OB_Unit[2] = (Last created unit)
      • Hashtable - Save OB_Aoe as 0 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_Damage as 1 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save Handle Of(Triggering unit) as 2 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_LightAoe as 3 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_LightDamage as 4 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_BombNumber as 5 of (Key (Last created unit)) in OB_Hash
      • -------- === Effect while waiting for the bombs to start falling === --------
      • Unit - Create 1 Dummy for (Owner of OB_Unit[1]) at OB_Point[1] facing Default building facing degrees
      • Animation - Change (Last created unit) flying height to 30.00 at 0.00
      • Special Effect - Create a special effect attached to the origin of (Last created unit) using war3mapImported\SignalFlare.mdx
      • Unit Group - Add (Last created unit) to OB_Missiles
      • Hashtable - Save 0 as 0 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_FlareDur as 1 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save OB_StartFall as 2 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save Handle Of(Last created special effect) as 3 of (Key (Last created unit)) in OB_Hash
      • Hashtable - Save Handle OfOB_Unit[2] as 4 of (Key (Last created unit)) in OB_Hash
      • Custom script: call RemoveLocation(udg_OB_Point[1])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • OB_Counter Equal to 1
        • Then - Actions
          • Trigger - Turn on OB Loop <gen>
        • Else - Actions
  • OB Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in OB_Missiles and do (Actions)
        • Loop - Actions
          • Set OB_Unit[3] = (Picked unit)
          • Set OB_Point[3] = (Position of OB_Unit[3])
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Load 0 of (Key (Picked unit)) from OB_Hash) Equal to 0
            • Then - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 1 of (Key (Picked unit)) from OB_Hash) Greater than 0.00
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Load 1 of (Key (Picked unit)) from OB_Hash) Less than or equal to (Load 2 of (Key (Picked unit)) from OB_Hash)
                    • Then - Actions
                      • For each (Integer OB_DInt) from 1 to (Load 5 of (Key (Load 4 of (Key (Picked unit)) in OB_Hash)) from OB_Hash), do (Actions)
                        • Loop - Actions
                          • Set OB_Point[4] = (OB_Point[3] offset by (Random real number between 0.00 and OB_SRMax) towards (Random real number between 0.00 and 360.00) degrees)
                          • Unit - Create 1 Dummy for (Owner of OB_Unit[3]) at OB_Point[4] facing 0.00 degrees
                          • Custom script: call RemoveLocation(udg_OB_Point[4])
                          • Special Effect - Create a special effect attached to the origin of (Last created unit) using Abilities\Weapons\SpiritOfVengeanceMissile\SpiritOfVengeanceMissile.mdl
                          • Animation - Change (Last created unit)'s size to (400.00%, 400.00%, 400.00%) of its original size
                          • Animation - Change (Last created unit) flying height to (Random real number between OB_HMin and OB_HMax) at 0.00
                          • Hashtable - Save -1.00 as 2 of (Key (Picked unit)) in OB_Hash
                          • Unit Group - Add (Last created unit) to OB_Missiles
                          • Hashtable - Save 1 as 0 of (Key (Last created unit)) in OB_Hash
                          • Hashtable - Save (Random real number between OB_FSMin and OB_FSMax) as 1 of (Key (Last created unit)) in OB_Hash
                          • Hashtable - Save Handle Of(Load 4 of (Key (Picked unit)) in OB_Hash) as 2 of (Key (Last created unit)) in OB_Hash
                          • Hashtable - Save Handle Of(Last created special effect) as 3 of (Key (Last created unit)) in OB_Hash
                    • Else - Actions
                  • Hashtable - Save ((Load 1 of (Key (Picked unit)) from OB_Hash) - 0.03) as 1 of (Key (Picked unit)) in OB_Hash
                • Else - Actions
                  • Special Effect - Create a special effect at OB_Point[3] using Abilities\Spells\Orc\FeralSpirit\feralspiritdone.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Special Effect - Destroy (Load 3 of (Key (Picked unit)) in OB_Hash)
                  • Unit - Kill OB_Unit[3]
            • Else - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Load 0 of (Key (Picked unit)) from OB_Hash) Equal to 1
                • Then - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current flying height of OB_Unit[3]) Greater than 1.00
                    • Then - Actions
                      • Animation - Change OB_Unit[3] flying height to ((Current flying height of OB_Unit[3]) - (Load 1 of (Key (Picked unit)) from OB_Hash)) at 0.00
                    • Else - Actions
                      • Set OB_Targets = (Units within (Load 0 of (Key (Load 2 of (Key (Picked unit)) in OB_Hash)) from OB_Hash) of OB_Point[3] matching (((Matching unit) belongs to an enemy of (Owner of OB_Unit[3])) Equal to True))
                      • Set OB_Damage = (Load 1 of (Key (Load 2 of (Key (Picked unit)) in OB_Hash)) from OB_Hash)
                      • Set OB_Unit[4] = (Load 2 of (Key (Load 2 of (Key (Picked unit)) in OB_Hash)) in OB_Hash)
                      • Unit Group - Pick every unit in OB_Targets and do (Actions)
                        • Loop - Actions
                          • Unit - Cause OB_Unit[4] to damage (Picked unit), dealing OB_Damage damage of attack type Spells and damage type Normal
                      • Custom script: call DestroyGroup (udg_OB_Targets)
                      • Special Effect - Create a special effect at OB_Point[3] using Abilities\Spells\Undead\ReplenishMana\ReplenishManaCaster.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Special Effect - Create a special effect at OB_Point[3] using Abilities\Weapons\Bolt\BoltImpact.mdl
                      • Special Effect - Destroy (Last created special effect)
                      • Unit - Create 1 Dummy for (Owner of OB_Unit[3]) at OB_Point[3] facing 0.00 degrees
                      • Hashtable - Save 2 as 0 of (Key (Last created unit)) in OB_Hash
                      • Hashtable - Save Handle Of(Load 2 of (Key (Picked unit)) in OB_Hash) as 1 of (Key (Last created unit)) in OB_Hash
                      • For each (Integer OB_DInt) from 1 to 8, do (Actions)
                        • Loop - Actions
                          • Set OB_Point[5] = (OB_Point[3] offset by 20.00 towards (45.00 x (Real(OB_DInt))) degrees)
                          • Set OB_Point[6] = (OB_Point[3] offset by 20.00 towards (45.00 x (Real((OB_DInt + 1)))) degrees)
                          • Custom script: set udg_OB_Light[udg_OB_DInt] = AddLightningEx(udg_OB_LightEff, true,GetLocationX(udg_OB_Point[5]),GetLocationY(udg_OB_Point[5]), GetLocationZ(udg_OB_Point[5])+30,GetLocationX(udg_OB_Point[6]),GetLocationY(udg_OB_Point[6]),GetLocationZ(udg_OB_Point[6])+30)
                          • Custom script: call RemoveLocation(udg_OB_Point[5])
                          • Custom script: call RemoveLocation(udg_OB_Point[6])
                          • Hashtable - Save Handle OfOB_Light[OB_DInt] as (OB_DInt + 1) of (Key (Last created unit)) in OB_Hash
                      • Hashtable - Save 20.00 as 10 of (Key (Last created unit)) in OB_Hash
                      • Unit Group - Add (Last created unit) to OB_Missiles
                      • Special Effect - Destroy (Load 3 of (Key (Picked unit)) in OB_Hash)
                      • Unit - Kill OB_Unit[3]
                • Else - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Load 0 of (Key (Picked unit)) from OB_Hash) Equal to 2
                    • Then - Actions
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Load 10 of (Key (Picked unit)) from OB_Hash) Less than (Load 3 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) from (Last created hashtable))
                        • Then - Actions
                          • Set OB_Real = ((Load 10 of (Key (Picked unit)) from OB_Hash) + OB_LightSpeed)
                          • Set OB_Targets = (Units within OB_Real of OB_Point[3] matching (((Matching unit) belongs to an enemy of (Owner of OB_Unit[3])) Equal to True))
                          • Set OB_Damage = (Load 4 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) from OB_Hash)
                          • Set OB_Unit[4] = (Load 2 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) in OB_Hash)
                          • Unit Group - Pick every unit in OB_Targets and do (Actions)
                            • Loop - Actions
                              • Unit - Cause OB_Unit[4] to damage (Picked unit), dealing OB_Damage damage of attack type Spells and damage type Normal
                          • Custom script: call DestroyGroup (udg_OB_Targets)
                          • For each (Integer OB_DInt) from 1 to 8, do (Actions)
                            • Loop - Actions
                              • Set OB_Point[5] = (OB_Point[3] offset by OB_Real towards (45.00 x (Real(OB_DInt))) degrees)
                              • Set OB_Point[6] = (OB_Point[3] offset by OB_Real towards (45.00 x (Real((OB_DInt + 1)))) degrees)
                              • Set OB_Light[OB_DInt] = (Load (OB_DInt + 1) of (Key (Picked unit)) in OB_Hash)
                              • Custom script: call MoveLightningEx(udg_OB_Light[udg_OB_DInt], true,GetLocationX(udg_OB_Point[5]),GetLocationY(udg_OB_Point[5]), GetLocationZ(udg_OB_Point[5])+30,GetLocationX(udg_OB_Point[6]),GetLocationY(udg_OB_Point[6]),GetLocationZ(udg_OB_Point[6])+30)
                              • Custom script: call RemoveLocation(udg_OB_Point[5])
                              • Custom script: call RemoveLocation(udg_OB_Point[6])
                          • Hashtable - Save OB_Real as 10 of (Key (Picked unit)) in OB_Hash
                        • Else - Actions
                          • For each (Integer OB_DInt) from 1 to 8, do (Actions)
                            • Loop - Actions
                              • Lightning - Destroy (Load (OB_DInt + 1) of (Key (Picked unit)) in OB_Hash)
                          • Hashtable - Save ((Load 5 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) from OB_Hash) - 1) as 5 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) in OB_Hash
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Load 5 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) from OB_Hash) Less than or equal to 0
                            • Then - Actions
                              • Unit - Kill (Load 1 of (Key (Picked unit)) in OB_Hash)
                              • Set OB_Counter = (OB_Counter - 1)
                            • Else - Actions
                          • Unit - Kill OB_Unit[3]
                    • Else - Actions
          • Custom script: call RemoveLocation(udg_OB_Point[3])
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • OB_Counter Less than or equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • OB Clean
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Triggering unit) is in OB_Missiles) Equal to True
    • Actions
      • Unit Group - Remove (Triggering unit) from OB_Missiles
      • Hashtable - Clear all child hashtables of child (Key (Triggering unit)) in OB_Hash
      • Unit - Remove (Triggering unit) from the game
v1.1b - added credits

v1.1 - small code improvements

v1.0 - first release


Credits - shamanyouranus whose Signal Flare model I used. I find this import pretty useful and it`s small size.

Keywords:
bomb, launch, space, marine, lightning, explosion, boom, fall, blue, epic, mui, starcraft
Contents

Orbital Bombardment (Map)

Reviews
12.12 IcemanBo: For long time as NeedsFix. Rejected. 11:45, 3rd Jun 2011 Maker: Check my review, post #8 of this thread. The last created hashtable, OB_Clean being on all the time and OB_Counter check are the biggest issues, but try to do the...

Moderator

M

Moderator

12.12
IcemanBo: For long time as NeedsFix. Rejected.

11:45, 3rd Jun 2011
Maker:
Check my review, post #8 of this thread. The last created hashtable, OB_Clean being on all the time and OB_Counter check are the biggest issues, but try to do the others also.
 
Level 10
Joined
Apr 25, 2009
Messages
296
Don't use (Key of(PickedUnit)) or anything like that. Its not efficient. Use:

  • Custom script: set udg_YOURINTEGER = GetHandleId(udg_UNITVARIABLE)
Don't use 'Picked Unit' or 'Triggering Unit' more then once. Set it as a variable.

The OB_Targets and stuff is unneeded. Use:

  • Custom script: set bj_wantDestroyGroup = True
  • Unit Group - Pick every unit in YOUR RANGE range matching YOUR CONDITIONS and do (Actions)
The above script simplifies the steps, and does not require a unit group variable.



This is a list of constants that you should make variables, and set those variables in map initialization.

  • Set OB_Damage = (100.00 + (50.00 x (Real((Level of Orbital Bombardment for OB_Unit[1])))))
  • Set OB_LightAoe = 150.00
  • Set OB_Aoe = 100.00
  • Set OB_LightDamage = (90.00 + (10.00 x (Real((Level of Orbital Bombardment for OB_Unit[1])))))
  • Set OB_BombNumber = (4 + (2 x (Level of Orbital Bombardment for OB_Unit[1])))
 
Level 18
Joined
Feb 28, 2009
Messages
1,970
1. Right, gonna change it.
2. Where I used it? I think it's only in clean trigger and there are 2 actions so I don't see much point in storing it to variable.
3. I don't like bj_DestroyGroup. My personal preferences.
4. This part I didn't get.

Thank you for your comment.
 
Level 7
Joined
Apr 12, 2011
Messages
124
Here's one example to what he means from one of my spells.
Constants are the values, numbers. Set them in the Init trigger to make it more configureable:
Example:
(it's not released yet :) )

  • Startup
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- ======================================================================= --------
      • -------- DON'T TOUCH THIS --------
      • -------- ======================================================================= --------
      • Hashtable - Create a hashtable
      • Set St_Hashtable = (Last created hashtable)
      • -------- ======================================================================= --------
      • -------- Configure this --------
      • -------- Formula: BaseValue + (BonusValue x Level of ability) = ActualValue --------
      • -------- St_Duration, St_LightningType, St_FloatingText and St_HitsTrees are the only variables that is not affected by the formula --------
      • -------- ======================================================================= --------
      • -------- Damage --------
      • -------- Remember: When dmg is AOE it will deal Actual_DmgAmount PER UNIT, so 3 units is (if Actual_DmgAmount is 150) 450 DMG TO EACH TARGET --------
      • -------- So lower the dmg when you have St_NrUnitsHit = more than 1 --------
      • Set St_CritAmount = 200.00
      • Set St_CritAmountSmall = 150.00
      • Set St_CritBonus = 50.00
      • Set St_DmgAmount = 100.00
      • Set St_DmgAmountBonus = 50.00
      • -------- Area of Effect --------
      • -------- AOE of spell when cast and dmg AOE of the Explode --------
      • Set St_Range = 200.00
      • Set St_RangeBonus = 50.00
      • -------- Sets the number of targets the spell hits --------
      • Set St_NrHitUnits = 2
      • Set St_NrHitUnitsBonus = 1
      • -------- Crit Chance in % --------
      • Set St_SmallCritChance = 20
      • Set St_SmallCritChanceBonus = 5
      • Set St_CritChance = 10
      • Set St_CritChanceBonus = 5
      • -------- St_Duration = 0.00 gives the duration (Until Dispelled) --------
      • Set St_Duration = 0.00
      • -------- Lightning Type --------
      • Set St_LightningType = Chain Lightning - Secondary
      • -------- Booleans --------
      • Set St_FloatingText = True
      • Set St_HitsDestructs = True
      • -------- Mana cost, Cooldown, Cast Range and Description is changed in Object Editor --------
      • -------- Trust me, i wish too it could be done in a trigger. :) --------
      • -------- ======================================================================= --------
  • [/HIDDEN]

  • Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Static Burst
    • Actions
      • Set St_Caster = (Triggering unit)
      • Set St_Level = (Level of (Ability being cast) for St_Caster)
      • Set St_Point1 = (Position of St_Caster)
      • Set St_LastHit = (Target unit of ability being cast)
      • Set St_LastHitPos = (Position of St_LastHit)
      • Set Actual_CritAmount = (St_CritAmount + (St_CritBonus x (Real(St_Level))))
      • Set Actual_CritAmountSmall = (St_CritAmountSmall + (St_CritBonus x (Real(St_Level))))
      • Set Actual_CritChance = (St_CritChance + (St_CritChanceBonus x St_Level))
      • Set Actual_SmallCritChance = (St_SmallCritChance + (St_SmallCritChanceBonus x St_Level))
      • Set Actual_DmgAmount = (St_DmgAmount + (St_DmgAmountBonus x (Real(St_Level))))
      • Set Actual_NrHitUnits = (St_NrHitUnits + (St_NrHitUnitsBonus x St_Level))
      • Set Actual_Range = (St_Range + (St_RangeBonus x (Real(St_Level))))
 
Level 18
Joined
Feb 28, 2009
Messages
1,970
I know what he meant by constants but I don`t know what it has to do with this spell. The variables he has shown are spell-level-based so they may change on each cast. They simply has to be in cast trigger. And such a things like aoe some people may want to change (however I used a constant value). In init trigger I`ve put only things which won`t change per spell level for sure.

EDIT: Oh, now I see what he exactly meant. No, I`m not gonna change it. I think people are smart enaugh to find out all they have to do is to change a value in one action.
 
Level 7
Joined
Apr 12, 2011
Messages
124
I know what he meant by constants but I don`t know what it has to do with this spell. The variables he has shown are spell-level-based so they may change on each cast. They simply has to be in cast trigger. And such a things like aoe some people may want to change (however I used a constant value). In init trigger I`ve put only things which won`t change per spell level for sure.

You should always try to set all variables in the init trigger.
Like my example showed it works if you add a formula that the values follow.
  • ------ in init ------
  • Set St_DmgAmount = 100.00
  • Set St_DmgAmountBonus = 50.00
  • ------ in Cast -----
  • Set Actual_DmgAmount = (St_DmgAmount + (St_DmgAmountBonus x (Real(St_Level))))
  • ------ so ------
  • Actual_DmgAmount = 100 + (50 * (Lvl of ability cast for triggering unit)
You place the constants in init trigger and the combination to the variable used in cast trigger so you can use the lvl :)
 
Level 37
Joined
Mar 6, 2006
Messages
9,240
You could store the level of ability being cast into a variable since you're calling it three times. Not a big deal though.
Save the handle into a variable as mentioned.
I also agree that you should set all the configurables into variables in the init trigger, like base damage, bonus damage per ability level, AoE etc.
OB_Clean shouldn't be on all the time.
The learn tooltip image is missing.
The follow though time is too short for the unit to complete the animation, set it to about 1 second or something like that.
The dummy doesn't need invulnerability ability, is has locust.
I'd set the dummy to can't raise, does not decay. And not remove it with Unit - remove unit from game.
This should be done only when you reduce obcounter, it can't be zero during other loops:
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • OB_Counter Less than or equal to 0
    • Then - Actions
      • Trigger - Turn off (This trigger)
    • Else - Actions
You can replace (Owner of(unit)) with triggering player in the cast trigger. It's slightly faster.
I recommend using bj_wantDestroyGroup for groups that you want to destroy immediately after use. Slightly better performance.
Last created hastable:
  • (Load 10 of (Key (Picked unit)) from OB_Hash) Less than (Load 3 of (Key (Load 1 of (Key (Picked unit)) in OB_Hash)) from (Last created hashtable))
 
Top