• 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!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

Storm Spirit Spellpack v1.3

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
This spellpack is from dota.
Here are the trigger for the spells :


  • Hashtable
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Hashtable - Create a hashtable
      • Set Storm_Spirit_Hashtable = (Last created hashtable)
      • Set Map_Init_Point = (Center of (Playable map area))
      • Unit - Create 1 Dummy for Neutral Passive at Map_Init_Point facing Default building facing degrees
      • Set Harvest = (Last created unit)
      • Custom script: call RemoveLocation(udg_Map_Init_Point)

Raijin creates a remnant of himself containing his essence. The Static Remnant will release its stored energy whenever an enemy unit comes near it. Lasts 12 seconds.
Level 1 - Deals 140 Damage.
Level 2 - Deals 180 Damage.
Level 3 - Deals 220 Damage.
Level 4 - Deals 260 Damage.
  • Static Remnant
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Static Remnant
    • Actions
      • Set Temp_Unit = (Triggering unit)
      • Set Temp_Point1 = (Position of Temp_Unit)
      • Unit - Create 1 Static Remnant for (Triggering player) at Temp_Point1 facing (Facing of Temp_Unit) degrees
      • Animation - Change (Last created unit)'s vertex coloring to (100.00%, 100.00%, 100.00%) with 25.00% transparency
      • Set Temp_Unit1 = (Last created unit)
      • Unit - Add a 12.00 second Generic expiration timer to Temp_Unit1
      • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit1)
      • Unit Group - Add Temp_Unit1 to Static_Remnant_UnitGroup
      • Set Damage = (100.00 + ((Real((Level of Static Remnant for Temp_Unit))) x 40.00))
      • Hashtable - Save Damage as Temp_Key of (Key Damage) in Storm_Spirit_Hashtable
      • Set Delay = 1.00
      • Hashtable - Save Delay as Temp_Key of (Key Delay) in Storm_Spirit_Hashtable
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Static Remnant Effect <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Static Remnant Effect <gen>
        • Else - Actions
      • Custom script: call RemoveLocation(udg_Temp_Point1)
  • Static Remnant Effect
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Static_Remnant_UnitGroup and do (Actions)
        • Loop - Actions
          • Set Temp_Unit = (Picked unit)
          • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
          • Set Delay = (Load Temp_Key of (Key Delay) from Storm_Spirit_Hashtable)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Delay Less than or equal to 0.00
            • Then - Actions
              • Set Temp_Point1 = (Position of Temp_Unit)
              • Set Temp_UnitGroup1 = (Units within 260.00 of Temp_Point1 matching ((((Matching unit) belongs to an ally of (Owner of Temp_Unit)) Equal to False) and (((Matching unit) is alive) Equal to True)))
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Number of units in Temp_UnitGroup1) Greater than 0
                • Then - Actions
                  • Set Damage = (Load Temp_Key of (Key Damage) from Storm_Spirit_Hashtable)
                  • Unit - Kill Temp_Unit
                  • Unit Group - Remove Temp_Unit from Static_Remnant_UnitGroup
                  • Unit - Remove Temp_Unit from the game
                  • Special Effect - Create a special effect at Temp_Point1 using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Custom script: set bj_wantDestroyGroup = true
                  • Unit Group - Pick every unit in (Units within 235.00 of Temp_Point1 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) belongs to an enemy of (Owner of Temp_Unit)) Equal to True) and (((Matching unit) is A structure) Equal to False)))) and do (Actions)
                    • Loop - Actions
                      • Unit - Cause Temp_Unit to damage (Picked unit), dealing Damage damage of attack type Spells and damage type Normal
                  • Custom script: call DestroyGroup(udg_Temp_UnitGroup1)
                  • Custom script: call RemoveLocation(udg_Temp_Point1)
                  • Hashtable - Clear all child hashtables of child Temp_Key in Storm_Spirit_Hashtable
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Static_Remnant_UnitGroup is empty) Equal to True
                    • Then - Actions
                      • Trigger - Turn off (This trigger)
                    • Else - Actions
                • Else - Actions
              • Custom script: call DestroyGroup(udg_Temp_UnitGroup1)
              • Custom script: call RemoveLocation(udg_Temp_Point1)
            • Else - Actions
              • Hashtable - Save (Delay - 0.03) as Temp_Key of (Key Delay) in Storm_Spirit_Hashtable
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Temp_Unit is dead) Equal to True
            • Then - Actions
              • Unit Group - Remove Temp_Unit from Static_Remnant_UnitGroup
              • Hashtable - Clear all child hashtables of child Temp_Key in Storm_Spirit_Hashtable
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Static_Remnant_UnitGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
            • Else - Actions

Storm focuses his energy to rip open vortex drawing an enemy to it. This process slows the Storm Spirit down for a brief period.
Level 1 - Pulls 100 units over 1 second.
Level 2 - Pulls 150 units over 1,5 second.
Level 3 - Pulls 200 units over 2 second.
Level 4 - Pulls 250 units over 2,5 second.
  • Electric Vortex
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Electric Vortex
    • Actions
      • Set Temp_Unit = (Target unit of ability being cast)
      • Set Temp_Unit1 = (Triggering unit)
      • Set Temp_Point2 = (Position of Temp_Unit)
      • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
      • Set Temp_Point1 = (Position of Temp_Unit1)
      • Lightning - Create a Chain Lightning - Primary lightning effect from source Temp_Point1 to target Temp_Point2
      • Set Lightning = (Last created lightning effect)
      • Hashtable - Save Handle OfLightning as Temp_Key of (Key Lighting) in Storm_Spirit_Hashtable
      • Unit - Create 1 Dummy for (Triggering player) at Temp_Point1 facing Default building facing degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Unit - Order (Last created unit) to Human Sorceress - Slow Temp_Unit1
      • Unit Group - Add Temp_Unit to Electric_Vortex_UnitGroup
      • Set Electric_Vortex_Pull = (50.00 + ((Real((Level of Electric Vortex for Temp_Unit1))) x 50.00))
      • Hashtable - Save Electric_Vortex_Pull as Temp_Key of (Key Pull) in Storm_Spirit_Hashtable
      • Set Electric_Vortex_Second = (0.50 + ((Real((Level of Electric Vortex for Temp_Unit1))) x 0.50))
      • Hashtable - Save Electric_Vortex_Second as Temp_Key of (Key Seconds) in Storm_Spirit_Hashtable
      • Set Electric_Vortex_Pull_and_Sec = ((Electric_Vortex_Pull x 0.03) / Electric_Vortex_Second)
      • Hashtable - Save Electric_Vortex_Pull_and_Sec as Temp_Key of (Key Seconds and Pull) in Storm_Spirit_Hashtable
      • Set Angle = (Angle from Temp_Point1 to Temp_Point2)
      • Hashtable - Save Angle as Temp_Key of (Key Angle) in Storm_Spirit_Hashtable
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Electric Vortex Pull <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Electric Vortex Pull <gen>
        • Else - Actions
      • Custom script: call RemoveLocation(udg_Temp_Point1)
      • Custom script: call RemoveLocation(udg_Temp_Point2)
  • Electric Vortex Pull
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Electric_Vortex_UnitGroup and do (Actions)
        • Loop - Actions
          • Set Temp_Unit = (Picked unit)
          • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
          • Set Electric_Vortex_Pull = (Load Temp_Key of (Key Pull) from Storm_Spirit_Hashtable)
          • Set Electric_Vortex_Second = (Load Temp_Key of (Key Seconds) from Storm_Spirit_Hashtable)
          • Set Lightning = (Load Temp_Key of (Key Lighting) in Storm_Spirit_Hashtable)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Electric_Vortex_Pull Greater than or equal to 0.00
              • Electric_Vortex_Second Greater than or equal to 0.00
              • (Temp_Unit is alive) Equal to True
            • Then - Actions
              • Set Electric_Vortex_Pull_and_Sec = (Load Temp_Key of (Key Seconds and Pull) from Storm_Spirit_Hashtable)
              • Set Angle = (Load Temp_Key of (Key Angle) from Storm_Spirit_Hashtable)
              • Set Temp_Point1 = (Position of Temp_Unit1)
              • Set Temp_Point2 = (Position of Temp_Unit)
              • Set Temp_Point3 = (Temp_Point2 offset by (-1.00 x Electric_Vortex_Pull_and_Sec) towards Angle degrees)
              • Unit - Move Temp_Unit instantly to Temp_Point3
              • Lightning - Move Lightning to source Temp_Point1 and target Temp_Point3
              • Custom script: call RemoveLocation(udg_Temp_Point1)
              • Custom script: call RemoveLocation(udg_Temp_Point2)
              • Custom script: call RemoveLocation(udg_Temp_Point3)
              • Hashtable - Save (Electric_Vortex_Pull - Electric_Vortex_Pull_and_Sec) as Temp_Key of (Key Pull) in Storm_Spirit_Hashtable
              • Hashtable - Save (Electric_Vortex_Second - 0.03) as Temp_Key of (Key Seconds) in Storm_Spirit_Hashtable
            • Else - Actions
              • Lightning - Destroy Lightning
              • Unit Group - Remove Temp_Unit from Electric_Vortex_UnitGroup
              • Hashtable - Clear all child hashtables of child Temp_Key in Storm_Spirit_Hashtable
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Electric_Vortex_UnitGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions

Storm Spirit becomes overloaded with electrical energy whenever he casts a spell. The charge is released on his next attack as an electrical burst, dealing damage and slowing nearby units.
Level 1 - Deals 30 damage.
Level 2 - Deals 50 damage.
Level 3 - Deals 70 damage.
Level 4 - Deals 90 damage.
  • Overload
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Level of Overload for (Triggering unit)) Greater than 0
    • Actions
      • Set Temp_Unit = (Triggering unit)
      • Set Temp_Point1 = (Position of Temp_Unit)
      • Unit - Create 1 Overload Dummy for (Triggering player) at Temp_Point1 facing Default building facing degrees
      • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
      • Unit - Order (Last created unit) to Orc Shaman - Bloodlust Temp_Unit
      • Custom script: call RemoveLocation(udg_Temp_Point1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Overload Effect <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Overload Effect <gen>
        • Else - Actions
  • Overload Effect
    • Events
      • Unit - A unit Is attacked
    • Conditions
      • ((Attacking unit) has buff Attacking Unit Buff ) Equal to True
    • Actions
      • Set Temp_Unit1 = (Attacking unit)
      • Unit - Remove Attacking Unit Buff buff from Temp_Unit1
      • Set Temp_Unit = (Attacked unit)
      • Set Temp_Point1 = (Position of Temp_Unit1)
      • Set Temp_Point2 = (Position of Temp_Unit)
      • Set Angle = (Angle from Temp_Point1 to Temp_Point2)
      • Unit - Create 1 Dummy for (Owner of Temp_Unit1) at Temp_Point1 facing Default building facing degrees
      • Set Temp_Unit2 = (Last created unit)
      • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit2)
      • Unit Group - Add Temp_Unit2 to Overload_UnitGroup
      • Set Damage = (10.00 + (20.00 x (Real((Level of Overload for Temp_Unit1)))))
      • Set Distance = (Distance between Temp_Point1 and Temp_Point2)
      • Hashtable - Save Distance as Temp_Key of (Key Distance) in Storm_Spirit_Hashtable
      • Hashtable - Save Angle as Temp_Key of (Key Angle) in Storm_Spirit_Hashtable
      • Hashtable - Save Damage as Temp_Key of (Key Damage) in Storm_Spirit_Hashtable
      • Hashtable - Save Handle OfTemp_Unit as Temp_Key of (Key Attacked Unit) in Storm_Spirit_Hashtable
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Overload Missile <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Overload Missile <gen>
        • Else - Actions
      • Custom script: call RemoveLocation(udg_Temp_Point1)
      • Custom script: call RemoveLocation(udg_Temp_Point2)
      • Trigger - Turn off (This trigger)
  • Overload Missile
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Overload_UnitGroup and do (Actions)
        • Loop - Actions
          • Set Temp_Unit = (Picked unit)
          • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
          • Set Temp_Unit1 = (Load Temp_Key of (Key Attacked Unit) in Storm_Spirit_Hashtable)
          • Set Temp_Point1 = (Position of Temp_Unit)
          • Set Temp_Point2 = (Position of Temp_Unit1)
          • Set Angle = (Load Temp_Key of (Key Angle) from Storm_Spirit_Hashtable)
          • Set Damage = (Load Temp_Key of (Key Damage) from Storm_Spirit_Hashtable)
          • Set Distance = (Load Temp_Key of (Key Distance) from Storm_Spirit_Hashtable)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Distance Greater than 0.00
              • (Temp_Unit1 is alive) Equal to True
            • Then - Actions
              • Set Temp_Point3 = (Temp_Point1 offset by (875.00 x 0.03) towards Angle degrees)
              • Unit - Move Temp_Unit instantly to Temp_Point3
              • Hashtable - Save (Distance - (875.00 x 0.03)) as Temp_Key of (Key Distance) in Storm_Spirit_Hashtable
              • Hashtable - Save (Angle from Temp_Point3 to Temp_Point2) as Temp_Key of (Key Angle) in Storm_Spirit_Hashtable
              • Custom script: call RemoveLocation(udg_Temp_Point3)
            • Else - Actions
              • Special Effect - Create a special effect at Temp_Point2 using Abilities\Spells\Human\ThunderClap\ThunderClapCaster.mdl
              • Special Effect - Destroy (Last created special effect)
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within 275.00 of Temp_Point2 matching ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of Temp_Unit)) Equal to True) and (((Matching unit) is alive) Equal to True)))) and do (Actions)
                • Loop - Actions
                  • Set Temp_Point3 = (Position of (Picked unit))
                  • Unit - Cause Temp_Unit to damage (Picked unit), dealing Damage damage of attack type Spells and damage type Normal
                  • Unit - Create 1 Overload Dummy for (Owner of Temp_Unit) at Temp_Point3 facing Default building facing degrees
                  • Unit - Add a 2.00 second Generic expiration timer to (Last created unit)
                  • Unit - Order (Last created unit) to Human Sorceress - Slow (Picked unit)
                  • Custom script: call RemoveLocation(udg_Temp_Point3)
              • Unit - Kill Temp_Unit
              • Unit Group - Remove Temp_Unit from Overload_UnitGroup
              • Unit - Remove Temp_Unit from the game
              • Hashtable - Clear all child hashtables of child Temp_Key in Storm_Spirit_Hashtable
              • Custom script: call RemoveLocation(udg_Temp_Point2)
              • Custom script: call RemoveLocation(udg_Temp_Point1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Overload_UnitGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
          • Custom script: call RemoveLocation(udg_Temp_Point1)
          • Custom script: call RemoveLocation(udg_Temp_Point2)

Storm Spirit becomes enveloped with energy, losing his physical form, and travels until he depletes his mana or reaches his target. While in this form, he deals damage to nearby units based on how far his electrical form has traversed. Damage, speed and area of effect improves per level.
Level 1 - Moves the Storm Spirit to the targeted location doing 8 damage per 100 units traveled at 1250 movespeed.
Level 2 - Moves the Storm Spirit to the targeted location doing 12 damage per 100 units traveled at 1875 movespeed.
Level 3 - Moves the Storm Spirit to the targeted location doing 16 damage per 100 units traveled at 2500 movespeed.
  • Ball Lightning
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Ball Lightning
    • Actions
      • Set Temp_Unit = (Triggering unit)
      • Unit - Make Temp_Unit Invulnerable
      • Unit Group - Add Temp_Unit to Ball_Lightning_UnitGroup
      • Unit - Set mana of Temp_Unit to ((Mana of Temp_Unit) - (15.00 + ((Mana of Temp_Unit) x 0.07)))
      • Unit - Turn collision for Temp_Unit Off
      • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
      • Set Temp_Point1 = (Position of Temp_Unit)
      • Set Temp_Point2 = (Target point of ability being cast)
      • Set Angle = (Angle from Temp_Point1 to Temp_Point2)
      • Hashtable - Save Angle as Temp_Key of (Key Angle) in Storm_Spirit_Hashtable
      • Set Distance = (Distance between Temp_Point1 and Temp_Point2)
      • Hashtable - Save Distance as Temp_Key of (Key Distance) in Storm_Spirit_Hashtable
      • Set Damage = (4.00 + (4.00 x (Real((Level of Ball Lightning for Temp_Unit)))))
      • Hashtable - Save Damage as Temp_Key of (Key Damage) in Storm_Spirit_Hashtable
      • Set Ball_Lightning_Plus_Damage = (4.00 + (4.00 x (Real((Level of Ball Lightning for Temp_Unit)))))
      • Hashtable - Save Ball_Lightning_Plus_Damage as Temp_Key of (Key Plus Damage) in Storm_Spirit_Hashtable
      • Set Ball_Lightning_UnitGroup_Range = (50.00 + (75.00 x (Real((Level of Ball Lightning for Temp_Unit)))))
      • Hashtable - Save Ball_Lightning_UnitGroup_Range as Temp_Key of (Key UnitGroup Range) in Storm_Spirit_Hashtable
      • Set Ball_Lightning_Movespeed = (((Real((Level of Ball Lightning for Temp_Unit))) x 625.00) + 625.00)
      • Hashtable - Save Ball_Lightning_Movespeed as Temp_Key of (Key Movespeed) in Storm_Spirit_Hashtable
      • Set Ball_Lightning_Per_100_Unit = 100.00
      • Hashtable - Save Ball_Lightning_Per_100_Unit as Temp_Key of (Key Per 100 Unit) in Storm_Spirit_Hashtable
      • Lightning - Create a Forked Lightning lightning effect from source Temp_Point1 to target Temp_Point1
      • Set Lightning = (Last created lightning effect)
      • Hashtable - Save Handle OfLightning as Temp_Key of (Key Lightning) in Storm_Spirit_Hashtable
      • Unit - Create 1 Dummy for (Triggering player) at Temp_Point1 facing Default building facing degrees
      • Hashtable - Save Handle Of(Last created unit) as Temp_Key of (Key Unit) in Storm_Spirit_Hashtable
      • Unit - Create 1 Dummy for (Triggering player) at Temp_Point1 facing Default building facing degrees
      • Hashtable - Save Handle Of(Last created unit) as Temp_Key of (Key Caster Location) in Storm_Spirit_Hashtable
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Ball Lightning Move <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on Ball Lightning Move <gen>
        • Else - Actions
      • Custom script: call RemoveLocation(udg_Temp_Point1)
      • Custom script: call RemoveLocation(udg_Temp_Point2)
  • Ball Lightning Move
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Ball_Lightning_UnitGroup and do (Actions)
        • Loop - Actions
          • Set Temp_Unit = (Picked unit)
          • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
          • Set Angle = (Load Temp_Key of (Key Angle) from Storm_Spirit_Hashtable)
          • Set Damage = (Load Temp_Key of (Key Damage) from Storm_Spirit_Hashtable)
          • Set Distance = (Load Temp_Key of (Key Distance) from Storm_Spirit_Hashtable)
          • Set Lightning = (Load Temp_Key of (Key Lightning) in Storm_Spirit_Hashtable)
          • Set Ball_Lightning_Mana_Cost = (10.00 + ((Mana of (Picked unit)) x 0.01))
          • Set Ball_Lightning_Movespeed = (Load Temp_Key of (Key Movespeed) from Storm_Spirit_Hashtable)
          • Set Ball_Lightning_Per_100_Unit = (Load Temp_Key of (Key Per 100 Unit) from Storm_Spirit_Hashtable)
          • Set Ball_Lightning_UnitGroup_Range = (Load Temp_Key of (Key UnitGroup Range) from Storm_Spirit_Hashtable)
          • Set Ball_Lightning_Plus_Damage = (Load Temp_Key of (Key Plus Damage) from Storm_Spirit_Hashtable)
          • Set Temp_Unit1 = (Load Temp_Key of (Key Unit) in Storm_Spirit_Hashtable)
          • Set Temp_Unit2 = (Load Temp_Key of (Key Caster Location) in Storm_Spirit_Hashtable)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Mana of Temp_Unit) Greater than (15.00 + ((Mana of Temp_Unit) x 0.07))
              • Distance Greater than or equal to 0.00
            • Then - Actions
              • Set Temp_Point3 = (Position of Temp_Unit1)
              • Set Temp_Point5 = (Position of Temp_Unit2)
              • Custom script: call SetUnitAnimationByIndex(udg_Temp_Unit,10)
              • Set Temp_Point1 = (Position of Temp_Unit)
              • Set Temp_Point2 = (Temp_Point1 offset by (Ball_Lightning_Movespeed x 0.03) towards Angle degrees)
              • Unit - Move Temp_Unit instantly to Temp_Point2
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between Temp_Point1 and Temp_Point3) Greater than or equal to 700.00
                • Then - Actions
                  • Set Temp_Point4 = (Temp_Point3 offset by (Ball_Lightning_Movespeed x 0.03) towards Angle degrees)
                  • Unit - Move Temp_Unit1 instantly to Temp_Point4
                  • Custom script: call RemoveLocation(udg_Temp_Point4)
                • Else - Actions
              • Lightning - Move Lightning to source Temp_Point3 and target Temp_Point2
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within Ball_Lightning_UnitGroup_Range of Temp_Point2 matching ((((Matching unit) is alive) Equal to True) and ((((Matching unit) is A structure) Equal to False) and ((((Matching unit) belongs to an enemy of (Owner of Temp_Unit)) Equal to True) and (((M and do (Actions)
                • Loop - Actions
                  • Special Effect - Create a special effect attached to the origin of (Picked unit) using Abilities\Spells\Human\ManaFlare\ManaFlareBoltImpact.mdl
                  • Special Effect - Destroy (Last created special effect)
                  • Unit - Cause Temp_Unit to damage (Picked unit), dealing Damage damage of attack type Spells and damage type Normal
                  • Unit Group - Add (Picked unit) to Ball_Lightning_Damaged_UG
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Distance between Temp_Point5 and Temp_Point3) Greater than or equal to Ball_Lightning_Per_100_Unit
                • Then - Actions
                  • Unit - Set mana of (Picked unit) to ((Mana of (Picked unit)) - Ball_Lightning_Mana_Cost)
                  • Hashtable - Save (Damage + Ball_Lightning_Plus_Damage) as Temp_Key of (Key Damage) in Storm_Spirit_Hashtable
                  • Hashtable - Save (Ball_Lightning_Per_100_Unit + 100.00) as Temp_Key of (Key Per 100 Unit) in Storm_Spirit_Hashtable
                • Else - Actions
              • Destructible - Pick every destructible within Ball_Lightning_UnitGroup_Range of Temp_Point2 and do (Actions)
                • Loop - Actions
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (Current life of (Picked destructible)) Greater than 0.00
                    • Then - Actions
                      • Unit - Order Harvest to Harvest (Picked destructible)
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (Current order of Harvest) Equal to (Order(harvest))
                        • Then - Actions
                          • Destructible - Kill (Picked destructible)
                        • Else - Actions
                          • Unit - Order Harvest to Stop
                    • Else - Actions
              • Hashtable - Save (Distance - (Ball_Lightning_Movespeed x 0.03)) as Temp_Key of (Key Distance) in Storm_Spirit_Hashtable
              • Custom script: call RemoveLocation(udg_Temp_Point1)
              • Custom script: call RemoveLocation(udg_Temp_Point2)
              • Custom script: call RemoveLocation(udg_Temp_Point3)
              • Custom script: call RemoveLocation(udg_Temp_Point5)
            • Else - Actions
              • Unit - Turn collision for Temp_Unit On
              • Unit - Kill Temp_Unit1
              • Unit - Kill Temp_Unit2
              • Unit - Remove Temp_Unit1 from the game
              • Unit - Remove Temp_Unit2 from the game
              • Unit - Make Temp_Unit Vulnerable
              • Lightning - Destroy Lightning
              • Unit Group - Remove Temp_Unit from Ball_Lightning_UnitGroup
              • Hashtable - Clear all child hashtables of child Temp_Key in Storm_Spirit_Hashtable
              • Custom script: call RemoveLocation(udg_Temp_Point3)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Ball_Lightning_UnitGroup is empty) Equal to True
                • Then - Actions
                  • Unit Group - Remove all units from Ball_Lightning_Damaged_UG
                  • Trigger - Turn off (This trigger)
                • Else - Actions
I did not make the icons!!!
Thx icons for CRAZYRUSSIAN.

Follow this instructions to import my spells :
Instructions

Keywords:
Dota, Storm, Spirit, Ball, Lightning, Remnant, Vortex, Overload, Electric, Static.
Contents

Storm Spirit v1.3 (Map)

Reviews
12th Dec 2015 IcemanBo: Too long as NeedsFix. Rejected. Add importing instructions into the map file Harvest and Overload Dummy are the same except the abilities. Delete one or the other unit type The death type for dummies should be Can't...

Moderator

M

Moderator

12th Dec 2015
IcemanBo: Too long as NeedsFix. Rejected.


Reviewed by Maker, Storm Spirit Spellpack v1.2, 14th Jan 2012

  • Add importing instructions into the map file
  • Harvest and Overload Dummy are the same except the abilities. Delete one or the other unit type
  • The death type for dummies should be Can't raise, does not decay
  • Static Remnant Effect can leak a unit group and a location
  • Static Remnant Effect isn't turned off if the caster dies while the remnant exists
  • In Electric Vortex it makes no sense to save the handle id of the caster for the caster
  • In Electric Vortex Pull you load the caster into a variable from the hashtable but you don't do anything with it, and you don't need to
  • In Electric Vortex Pull you load the pull and sec before if/then/else, but you don't need it in the else
  • In Overload Missile, take call RemoveLocation(point1) and call RemoveLocation(point2) out of the then and else
  • You should create the harvester in the hastable trigger as it belongs to your system

Reviewed by Maker, Storm Spirit Spellpack v1.1, 11th Jan 2012

Required changes:
  • Use only one hashtable
  • You have mixed map spesific actions with spell related actions in Hashtable trigger
  • Add importing instructions into the map file
  • Static Remnant Damage should be stored as a real
  • You load Static Remnant Damage before you know if you need it or not
  • You're not flushing child hashtable at the bottom of Static Remnant Effect
  • In Electric Vortex Pull, you load stuff that you might not need
  • Electric Vortex Pull can leak TempPoint1
  • Use less dummy units in object editor
  • Overload should have passive icon
  • Overload buff description is lacking
  • Overload Effect should not be on all the time
  • Ball Lightning leaks point1 and point2
  • In Ball Lightning Move, you load stuff that you might not need

Suggested changes:
  • Try to use less variables, share them between abilities
  • A unit can overload by using an ability, and hitting stop immediately. The ability isn't actually cast, but the unit gets the overload buff. Is that intended?
  • Use AddLightningEx and MoveLightningEx as custom scripts to move create/move the lighning to get some z-offset

Always put two or more casters in spell maps.
 
For Static Remnant, I wouldn't recommend 0.01, it's way too low as an interval.
0.03 is much better.

Also, you should store things like (Triggering unit) and (Attacking unit) in temporary variables to increase efficiency.

Another tip:

  • Set Temp_Key = (Key (Picked unit))
  • Set Temp_Unit = (Picked unit)
->

  • Set Temp_Unit = (Picked unit)
  • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)
 
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
    • (Ball Lightning Move <gen> is on) Equal to False
    • Then - Actions
    • Trigger - Turn on Ball Lightning Move <gen>
    • Else - Actions
It doesn't matter if you turn on a trigger that's already on.
So remove the If/Then/Else :p
Also, you stored the casting unit, but you barely used him. Instead you used triggering unit. (On ball lightning)
  • Lightning - Create a Forked Lightning lightning effect from source Temp_Point1 to target Temp_Point1
Tell me if I am wrong, but isn't that suppose to go to temppoint1 to temppoint2?

Not to be a downer but the overall triggering here is kinda disappointing. :s
Though I have not tested it ingame I will give this a 3/5. Improve the code n get a 5/5
 
Level 3
Joined
Nov 26, 2008
Messages
9
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
    • (Ball Lightning Move <gen> is on) Equal to False
    • Then - Actions
    • Trigger - Turn on Ball Lightning Move <gen>
    • Else - Actions
It doesn't matter if you turn on a trigger that's already on.
So remove the If/Then/Else :p
Also, you stored the casting unit, but you barely used him. Instead you used triggering unit. (On ball lightning)
  • Lightning - Create a Forked Lightning lightning effect from source Temp_Point1 to target Temp_Point1
Tell me if I am wrong, but isn't that suppose to go to temppoint1 to temppoint2?

Not to be a downer but the overall triggering here is kinda disappointing. :s
Though I have not tested it ingame I will give this a 3/5. Improve the code n get a 5/5

it's good how it is ,believe me :D
and IF/Then/Else is good for some pc-s , cuz if there is no if/then/else my pc goes lagging...(btw my pc is not the best :S)(sorry for my fail english xD!)

For Static Remnant, I wouldn't recommend 0.01, it's way too low as an interval.
0.03 is much better.

Also, you should store things like (Triggering unit) and (Attacking unit) in temporary variables to increase efficiency.

Another tip:

  • Set Temp_Key = (Key (Picked unit))
  • Set Temp_Unit = (Picked unit)
->

  • Set Temp_Unit = (Picked unit)
  • Custom script: set udg_Temp_Key = GetHandleId(udg_Temp_Unit)

thx :). and i updated :D!
 
Top