• 🏆 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!

Shock Explosion v1.02

This spell is very customizable and with some modifications, you can do many things.

The spell is totally MUI, leakless (i think) and without bugs (i don't guarantee it 100% free bug, since minors bugs are also possible on every spell).

Spell Description :

The Tauren hit the ground with a powerful attack, creating a shock wave. The shock wave propagates up to the place aimed before creating an explosion which stuns the close enemies and deals them damages, while sending rocks everything around one. These rocks deal damage and stun the enemies close to the place where they land.

Level 1 - Explosion deals 100 damages and stun for 2 seconds. The rocks deal 25 damages and stun for 1 seconds.
Level 2 - Explosion deals 150 damages and stun for 2 seconds. The rocks deal 50 damages and stun for 1 seconds.
Level 3 - Explosion deals 200 damages and stun for 2 seconds. The rocks deal 75 damages and stun for 1 seconds.
Level 4 - Explosion deals 250 damages and stun for 2 seconds. The rocks deal 100 damages and stun for 1 seconds.

The Triggers :

  • SE Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Setting the Unit-Type of the Sand Wave's Dummy. --------
      • -------- Définis le Type-Unité du Dummy de la Vague de Sable. --------
      • Set SE_SandUnitType = SE SandWave Dummy
      • -------- Setting the Speed of the Sand Wave for each Level. --------
      • -------- Définis la Vitesse de la Vague de Sable pour chaque Niveau. --------
      • Set SE_SandSpeed[1] = 25.00
      • Set SE_SandSpeed[2] = 25.00
      • Set SE_SandSpeed[3] = 25.00
      • Set SE_SandSpeed[4] = 25.00
      • -------- Set the Interval of the Creation of the Sand Effects for each Level. --------
      • -------- Définis l'Intervalle de Création des Effets de Sable pour chaque Niveau. --------
      • Set SE_SandInterval[1] = 2
      • Set SE_SandInterval[2] = 2
      • Set SE_SandInterval[3] = 2
      • Set SE_SandInterval[4] = 2
      • -------- Setting the Model of the Sand Wave special effects. --------
      • -------- Définis le Modèle des effets spéciaux de la Vague de Sable. --------
      • Set SE_SandModel = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
      • -------- Setting the Damages dealt by the Explosion for each Level. --------
      • -------- Définis les Dommages infligés par l'Explosion pour chaque Niveau. --------
      • Set SE_ExplosionDamages[1] = 100.00
      • Set SE_ExplosionDamages[2] = 150.00
      • Set SE_ExplosionDamages[3] = 200.00
      • Set SE_ExplosionDamages[4] = 250.00
      • -------- Setting the AOE of the Damages dealt by the Explosion for each Level. --------
      • -------- Définis l'AOE des Dommages infligés par l'Explosion pour chaque Niveau. --------
      • Set SE_ExplosionDamagesAoe[1] = 300.00
      • Set SE_ExplosionDamagesAoe[2] = 300.00
      • Set SE_ExplosionDamagesAoe[3] = 300.00
      • Set SE_ExplosionDamagesAoe[4] = 300.00
      • -------- Setting the Model of the Explosion special effects. --------
      • -------- Définis le Modèle des effets spéciaux de l'Explosion. --------
      • Set SE_ExplosionModel = Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
      • -------- Setting the Unit-Type of the Rocks Dummys. --------
      • -------- Définis le Type-Unité des Rochers Dummys. --------
      • Set SE_RocksUnitType = SE Rock Dummy
      • -------- Setting the Number of Flying Rocks for each Level. --------
      • -------- Définis le Nombre de Rochers Volants pour chaque Niveau. --------
      • Set SE_RocksNumber[1] = 9
      • Set SE_RocksNumber[2] = 12
      • Set SE_RocksNumber[3] = 15
      • Set SE_RocksNumber[4] = 18
      • -------- Setting the Minimum and Maximum Scale of the Rocks for each Level. (maybe more natural looking). --------
      • -------- Définis la Taille Minimum et la Taille Maximum des Rochers pour chaque Niveau. (éventuellement, plus naturel) --------
      • Set SE_RockScaleMin[1] = 90.00
      • Set SE_RockScaleMin[2] = 90.00
      • Set SE_RockScaleMin[3] = 90.00
      • Set SE_RockScaleMin[4] = 90.00
      • Set SE_RockScaleMax[1] = 110.00
      • Set SE_RockScaleMax[2] = 110.00
      • Set SE_RockScaleMax[3] = 110.00
      • Set SE_RockScaleMax[4] = 110.00
      • -------- Setting the Total Angle covered by the Rocks. --------
      • -------- Définis l'Angle Total couvert par les Rocks. --------
      • -------- Set it to 360 to have a Circle. If you set it to 180, the rocks will be sent only facing the wave. --------
      • -------- Mettez le Ã* 360 pour avoir un Cercle. Si vous le mettez Ã* 180, les rochers ne seront envoyés que dans le sens de la vague de sable. --------
      • Set SE_RocksAngle[1] = 360.00
      • Set SE_RocksAngle[2] = 360.00
      • Set SE_RocksAngle[3] = 360.00
      • Set SE_RocksAngle[4] = 360.00
      • -------- Setting the Angle between each Rocks, depending of the 2 precedents variables. --------
      • -------- Définis l'Angle entre chaque Rocher, dépendant des 2 variables précédentes. --------
      • For each (Integer A) from 1 to 4, do (Actions)
        • Loop - Actions
          • Set SE_RocksIntervalAngle[(Integer A)] = (SE_RocksAngle[(Integer A)] / (Real(SE_RocksNumber[(Integer A)])))
      • -------- Setting the Maximum Random Angle's Offset for the Rocks for each Level. --------
      • -------- Définis le Décalement Maximum Aléatoire de l'Angle d'un Rocher pour chaque Niveau. --------
      • Set SE_RocksAngleRandom[1] = 4.50
      • Set SE_RocksAngleRandom[2] = 4.50
      • Set SE_RocksAngleRandom[3] = 4.50
      • Set SE_RocksAngleRandom[4] = 4.50
      • -------- Setting the Speed of the Rocks for each Level. --------
      • -------- Définis la Vitesse des Rochers pour chaque Niveau. --------
      • Set SE_RockSpeed[1] = 5.00
      • Set SE_RockSpeed[2] = 5.00
      • Set SE_RockSpeed[3] = 5.00
      • Set SE_RockSpeed[4] = 5.00
      • -------- Setting the Base Height Speed of the Rocks for each Level. --------
      • -------- Définis la Vitesse de Base en Hauteur des Rochers pour chaque Niveau. --------
      • Set SE_RockHeightSpeed[1] = 18.00
      • Set SE_RockHeightSpeed[2] = 18.00
      • Set SE_RockHeightSpeed[3] = 18.00
      • Set SE_RockHeightSpeed[4] = 18.00
      • -------- Setting the Height Speed Decrement of the Rocks for each Level. --------
      • -------- Définis la Decrémentation de la Vitesse en Hauteur des Rochers pour chaque Niveau. --------
      • Set SE_RockHeightDecrement[1] = 0.45
      • Set SE_RockHeightDecrement[2] = 0.45
      • Set SE_RockHeightDecrement[3] = 0.45
      • Set SE_RockHeightDecrement[4] = 0.45
      • -------- Setting the Damages dealt by the Rocks for each Level. --------
      • -------- Définis les Dommages infligés par les Rochers pour chaque Niveau. --------
      • Set SE_RocksDamages[1] = 25.00
      • Set SE_RocksDamages[2] = 50.00
      • Set SE_RocksDamages[3] = 75.00
      • Set SE_RocksDamages[4] = 100.00
      • -------- Setting the AOE of the Damages dealt by the Rocks for each Level. --------
      • -------- Définis l'AOE des Dommages infligés par les Rochers pour chaque Niveau. --------
      • Set SE_RocksDamagesAoe[1] = 75.00
      • Set SE_RocksDamagesAoe[2] = 75.00
      • Set SE_RocksDamagesAoe[3] = 75.00
      • Set SE_RocksDamagesAoe[4] = 75.00
      • -------- Both of these set the Damages Types of the damages inflicted by the Spell. --------
      • -------- Les deux suivant définissent les Types de Dommages des dégâts infligés par le Sort. --------
      • Set SE_AttackType = Spells
      • Set SE_DamageType = Magic
      • -------- Creating Hashtable and storing it in a Variable. --------
      • -------- Creation de la Hashtable et stockage dans une Variable. --------
      • Hashtable - Create a hashtable
      • Set SE_Hash = (Last created hashtable)
  • SE Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shock Explosion
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SE Loop <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on SE Loop <gen>
        • Else - Actions
      • Set SE_Point = (Position of (Triggering unit))
      • Set SE_Point2 = (Target point of ability being cast)
      • Unit - Create 1 SE_SandUnitType for (Triggering player) at SE_Point facing SE_Point2
      • Set SE_Unit = (Last created unit)
      • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
      • Unit Group - Add SE_Unit to SE_WaveGroup
      • Hashtable - Save (Level of Shock Explosion for (Triggering unit)) as 0 of SE_Integer in SE_Hash
      • Hashtable - Save Handle Of(Triggering unit) as 1 of SE_Integer in SE_Hash
      • Hashtable - Save (Angle from SE_Point to SE_Point2) as 2 of SE_Integer in SE_Hash
      • Hashtable - Save (Distance between SE_Point and SE_Point2) as 3 of SE_Integer in SE_Hash
      • Hashtable - Save 1 as 4 of SE_Integer in SE_Hash
      • Custom script: call RemoveLocation(udg_SE_Point)
      • Custom script: call RemoveLocation(udg_SE_Point2)
  • SE Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SE_WaveGroup and do (Actions)
        • Loop - Actions
          • Set SE_Unit = (Picked unit)
          • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
          • Set SE_Integer2 = (Load 0 of SE_Integer from SE_Hash)
          • Set SE_Integer3 = (Load 4 of SE_Integer from SE_Hash)
          • Set SE_Real = ((Load 3 of SE_Integer from SE_Hash) - SE_SandSpeed[SE_Integer2])
          • Set SE_Real2 = (Load 2 of SE_Integer from SE_Hash)
          • Set SE_Point = (Position of SE_Unit)
          • Set SE_Point2 = (SE_Point offset by SE_SandSpeed[SE_Integer2] towards SE_Real2 degrees)
          • Unit - Move SE_Unit instantly to SE_Point2
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SE_Integer3 Equal to SE_SandInterval[SE_Integer2]
            • Then - Actions
              • Special Effect - Create a special effect at SE_Point2 using SE_SandModel
              • Special Effect - Destroy (Last created special effect)
              • Hashtable - Save 1 as 4 of SE_Integer in SE_Hash
            • Else - Actions
              • Hashtable - Save (SE_Integer3 + 1) as 4 of SE_Integer in SE_Hash
          • Hashtable - Save SE_Real as 3 of SE_Integer in SE_Hash
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SE_Real Less than or equal to SE_SandSpeed[SE_Integer2]
            • Then - Actions
              • Unit - Set level of Stun Explosion for SE_Unit to SE_Integer2
              • Unit - Order SE_Unit to Orc Tauren Chieftain - War Stomp
              • Unit - Add a 1.00 second Generic expiration timer to SE_Unit
              • Unit Group - Remove SE_Unit from SE_WaveGroup
              • Special Effect - Create a special effect at SE_Point2 using SE_ExplosionModel
              • Special Effect - Destroy (Last created special effect)
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within SE_ExplosionDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
                • Loop - Actions
                  • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_ExplosionDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
              • For each (Integer SE_Integer3) from 0 to (SE_RocksNumber[SE_Integer2] - 1), do (Actions)
                • Loop - Actions
                  • Set SE_Real = (((SE_RocksIntervalAngle[SE_Integer2] x (Real(SE_Integer3))) - (SE_RocksAngle[SE_Integer2] / 2.00)) + (SE_Real2 + (Random real number between (0.00 - SE_RocksAngleRandom[SE_Integer2]) and SE_RocksAngleRandom[SE_Integer2])))
                  • Unit - Create 1 SE_RocksUnitType for (Owner of SE_Unit) at SE_Point2 facing SE_Real degrees
                  • Set SE_Unit2 = (Last created unit)
                  • Custom script: set udg_SE_Integer4 = GetHandleId(udg_SE_Unit2)
                  • Set SE_Real3 = (Random real number between SE_RockScaleMin[SE_Integer2] and SE_RockScaleMax[SE_Integer2])
                  • Unit Group - Add SE_Unit2 to SE_RockGroup
                  • Animation - Change SE_Unit2 flying height to SE_RockHeightSpeed[SE_Integer2] at 0.00
                  • Animation - Change SE_Unit2's size to (SE_Real3%, SE_Real3%, SE_Real3%) of its original size
                  • Hashtable - Save SE_Integer2 as 0 of SE_Integer4 in SE_Hash
                  • Hashtable - Save Handle Of(Load 1 of SE_Integer in SE_Hash) as 1 of SE_Integer4 in SE_Hash
                  • Hashtable - Save SE_Real as 2 of SE_Integer4 in SE_Hash
                  • Hashtable - Save SE_RockHeightSpeed[SE_Integer2] as 3 of SE_Integer4 in SE_Hash
              • Custom script: call FlushChildHashtable(udg_SE_Hash, udg_SE_Integer)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_SE_Point)
          • Custom script: call RemoveLocation(udg_SE_Point2)
      • Unit Group - Pick every unit in SE_RockGroup and do (Actions)
        • Loop - Actions
          • Set SE_Unit = (Picked unit)
          • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
          • Set SE_Integer2 = (Load 0 of SE_Integer from SE_Hash)
          • Set SE_Real = ((Load 3 of SE_Integer from SE_Hash) - SE_RockHeightDecrement[SE_Integer2])
          • Set SE_Real2 = (Load 2 of SE_Integer from SE_Hash)
          • Set SE_Point = (Position of SE_Unit)
          • Set SE_Point2 = (SE_Point offset by SE_RockSpeed[SE_Integer2] towards SE_Real2 degrees)
          • Unit - Move SE_Unit instantly to SE_Point2
          • Animation - Change SE_Unit flying height to ((Current flying height of SE_Unit) + SE_Real) at 0.00
          • Hashtable - Save SE_Real as 3 of SE_Integer in SE_Hash
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current flying height of SE_Unit) Less than SE_RockHeightSpeed[SE_Integer2]
            • Then - Actions
              • Unit - Set level of Stun Rocks for SE_Unit to SE_Integer2
              • Unit - Order SE_Unit to Orc Tauren Chieftain - War Stomp
              • Unit - Add a 0.01 second Generic expiration timer to SE_Unit
              • Unit Group - Remove SE_Unit from SE_RockGroup
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within SE_RocksDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
                • Loop - Actions
                  • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_RocksDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
              • Custom script: call FlushChildHashtable(udg_SE_Hash, udg_SE_Integer)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (SE_WaveGroup is empty) Equal to True
                  • (SE_RockGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off SE Loop <gen>
                • Else - Actions
            • Else - Actions
          • Custom script: call RemoveLocation(udg_SE_Point)
          • Custom script: call RemoveLocation(udg_SE_Point2)
Some Credits :

Ty to Psyrim and his Impossibles Bosses, which inspired me for this spell (yes, yes, boss 3 ^^)
Ty to Maddeem for detect 2forgotten leaks, for gave me the english triggers and for had the idea of add a random scale configurable for the rocks.

Changelog :

1.00 : Initial release.
1.01 : Removed 2forgotten groups leaks. Added 2variables to configure a random scale of the rocks.
1.02 : Added a Variable for the Interval of Creation of the Sand Wave effects. Upgraded test map.

Keywords:
Shock, Explosion, Shock Explosion, Schock, Vladadamm, GUI, MUI, Rocks, Sand, Ground, Earth.
Contents

Shock Explosion v1.02 (Map)

Reviews
30 Jan 2012 Bribe: Approved 4/5. If you created less dust then it wouldn't be so bad on Frames Per Second.

Moderator

M

Moderator

30 Jan 2012
Bribe: Approved 4/5. If you created less dust then it wouldn't be so bad on Frames Per Second.
 
Level 23
Joined
Jan 1, 2011
Messages
1,504
  • SE Init
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Setting the Unit-Type of the Sand Wave's Dummy. --------
      • -------- Définis le Type-Unité du Dummy de la Vague de Sable. --------
      • Set SE_SandUnitType = SE SandWave Dummy
      • -------- Setting the Speed of the Sand Wave for each Level. --------
      • -------- Définis la Vitesse de la Vague de Sable pour chaque Niveau. --------
      • Set SE_SandSpeed[1] = 25.00
      • Set SE_SandSpeed[2] = 25.00
      • Set SE_SandSpeed[3] = 25.00
      • Set SE_SandSpeed[4] = 25.00
      • -------- Setting the Model of the Sand Wave special effects. --------
      • -------- Définis le Modèle des effets spéciaux de la Vague de Sable. --------
      • Set SE_SandModel = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
      • -------- Setting the Damages dealt by the Explosion for each Level. --------
      • -------- Définis les Dommages infligés par l'Explosion pour chaque Niveau. --------
      • Set SE_ExplosionDamages[1] = 100.00
      • Set SE_ExplosionDamages[2] = 150.00
      • Set SE_ExplosionDamages[3] = 200.00
      • Set SE_ExplosionDamages[4] = 250.00
      • -------- Setting the AOE of the Damages dealt by the Explosion for each Level. --------
      • -------- Définis l'AOE des Dommages infligés par l'Explosion pour chaque Niveau. --------
      • Set SE_ExplosionDamagesAoe[1] = 300.00
      • Set SE_ExplosionDamagesAoe[2] = 300.00
      • Set SE_ExplosionDamagesAoe[3] = 300.00
      • Set SE_ExplosionDamagesAoe[4] = 300.00
      • -------- Setting the Model of the Explosion special effects. --------
      • -------- Définis le Modèle des effets spéciaux de l'Explosion. --------
      • Set SE_ExplosionModel = Abilities\Spells\Other\Volcano\VolcanoDeath.mdl
      • -------- Setting the Unit-Type of the Rocks Dummys. --------
      • -------- Définis le Type-Unité des Rochers Dummys. --------
      • Set SE_RocksUnitType = SE Rock Dummy
      • -------- Setting the Number of Flying Rocks for each Level. --------
      • -------- Définis le Nombre de Rochers Volants pour chaque Niveau. --------
      • Set SE_RocksNumber[1] = 9
      • Set SE_RocksNumber[2] = 12
      • Set SE_RocksNumber[3] = 15
      • Set SE_RocksNumber[4] = 18
      • -------- Setting the Total Angle covered by the Rocks. --------
      • -------- Définis l'Angle Total couvert par les Rocks. --------
      • -------- Set it to 360 to have a Circle. If you set it to 180, the rocks will be sent only facing the wave. --------
      • -------- Mettez le Ã* 360 pour avoir un Cercle. Si vous le mettez Ã* 180, les rochers ne seront envoyés que dans le sens de la vague de sable. --------
      • Set SE_RocksAngle[1] = 360.00
      • Set SE_RocksAngle[2] = 360.00
      • Set SE_RocksAngle[3] = 360.00
      • Set SE_RocksAngle[4] = 360.00
      • -------- Setting the Angle between each Rocks, depending of the 2 precedents variables. --------
      • -------- Définis l'Angle entre chaque Rocher, dépendant des 2 variables précédentes. --------
      • For each (Integer A) from 1 to 4, do (Actions)
        • Loop - Actions
          • Set SE_RocksIntervalAngle[(Integer A)] = (SE_RocksAngle[(Integer A)] / (Real(SE_RocksNumber[(Integer A)])))
      • -------- Setting the Maximum Random Angle's Offset for the Rocks for each Level. --------
      • -------- Définis le Décalement Maximum Aléatoire de l'Angle d'un Rocher pour chaque Niveau. --------
      • Set SE_RocksAngleRandom[1] = 4.50
      • Set SE_RocksAngleRandom[2] = 4.50
      • Set SE_RocksAngleRandom[3] = 4.50
      • Set SE_RocksAngleRandom[4] = 4.50
      • -------- Setting the Speed of the Rocks for each Level. --------
      • -------- Définis la Vitesse des Rochers pour chaque Niveau. --------
      • Set SE_RockSpeed[1] = 5.00
      • Set SE_RockSpeed[2] = 5.00
      • Set SE_RockSpeed[3] = 5.00
      • Set SE_RockSpeed[4] = 5.00
      • -------- Setting the Base Height Speed of the Rocks for each Level. --------
      • -------- Définis la Vitesse de Base en Hauteur des Rochers pour chaque Niveau. --------
      • Set SE_RockHeightSpeed[1] = 18.00
      • Set SE_RockHeightSpeed[2] = 18.00
      • Set SE_RockHeightSpeed[3] = 18.00
      • Set SE_RockHeightSpeed[4] = 18.00
      • -------- Setting the Height Speed Decrement of the Rocks for each Level. --------
      • -------- Définis la Decrémentation de la Vitesse en Hauteur des Rochers pour chaque Niveau. --------
      • Set SE_RockHeightDecrement[1] = 0.45
      • Set SE_RockHeightDecrement[2] = 0.45
      • Set SE_RockHeightDecrement[3] = 0.45
      • Set SE_RockHeightDecrement[4] = 0.45
      • -------- Setting the Damages dealt by the Rocks for each Level. --------
      • -------- Définis les Dommages infligés par les Rochers pour chaque Niveau. --------
      • Set SE_RocksDamages[1] = 25.00
      • Set SE_RocksDamages[2] = 50.00
      • Set SE_RocksDamages[3] = 75.00
      • Set SE_RocksDamages[4] = 100.00
      • -------- Setting the AOE of the Damages dealt by the Rocks for each Level. --------
      • -------- Définis l'AOE des Dommages infligés par les Rochers pour chaque Niveau. --------
      • Set SE_RocksDamagesAoe[1] = 75.00
      • Set SE_RocksDamagesAoe[2] = 75.00
      • Set SE_RocksDamagesAoe[3] = 75.00
      • Set SE_RocksDamagesAoe[4] = 75.00
      • -------- Both of these set the Damages Types of the damages inflicted by the Spell. --------
      • -------- Les deux suivant définissent les Types de Dommages des dégâts infligés par le Sort. --------
      • Set SE_AttackType = Spells
      • Set SE_DamageType = Magic
      • -------- Creating Hashtable and storing it in a Variable. --------
      • -------- Creation de la Hashtable et stockage dans une Variable. --------
      • Hashtable - Create a hashtable
      • Set SE_Hash = (Last created hashtable)
  • SE Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Shock Explosion
    • Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SE Loop <gen> is on) Equal to False
        • Then - Actions
          • Trigger - Turn on SE Loop <gen>
        • Else - Actions
      • Set SE_Point = (Position of (Triggering unit))
      • Set SE_Point2 = (Target point of ability being cast)
      • Unit - Create 1 SE_SandUnitType for (Triggering player) at SE_Point facing SE_Point2
      • Set SE_Unit = (Last created unit)
      • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
      • Unit Group - Add SE_Unit to SE_WaveGroup
      • Hashtable - Save (Level of Shock Explosion for (Triggering unit)) as 0 of SE_Integer in SE_Hash
      • Hashtable - Save Handle Of(Triggering unit) as 1 of SE_Integer in SE_Hash
      • Hashtable - Save (Angle from SE_Point to SE_Point2) as 2 of SE_Integer in SE_Hash
      • Hashtable - Save (Distance between SE_Point and SE_Point2) as 3 of SE_Integer in SE_Hash
      • Custom script: call RemoveLocation(udg_SE_Point)
      • Custom script: call RemoveLocation(udg_SE_Point2)
  • SE Loop
    • Events
      • Time - Every 0.03 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in SE_WaveGroup and do (Actions)
        • Loop - Actions
          • Set SE_Unit = (Picked unit)
          • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
          • Set SE_Integer2 = (Load 0 of SE_Integer from SE_Hash)
          • Set SE_Real = ((Load 3 of SE_Integer from SE_Hash) - SE_SandSpeed[SE_Integer2])
          • Set SE_Real2 = (Load 2 of SE_Integer from SE_Hash)
          • Set SE_Point = (Position of SE_Unit)
          • Set SE_Point2 = (SE_Point offset by SE_SandSpeed[SE_Integer2] towards SE_Real2 degrees)
          • Unit - Move SE_Unit instantly to SE_Point2
          • Special Effect - Create a special effect at SE_Point2 using SE_SandModel
          • Special Effect - Destroy (Last created special effect)
          • Hashtable - Save SE_Real as 3 of SE_Integer in SE_Hash
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SE_Real Less than or equal to SE_SandSpeed[SE_Integer2]
            • Then - Actions
              • Unit - Set level of Stun Explosion for SE_Unit to SE_Integer2
              • Unit - Order SE_Unit to Orc Tauren Chieftain - War Stomp
              • Unit - Add a 1.00 second Generic expiration timer to SE_Unit
              • Unit Group - Remove SE_Unit from SE_WaveGroup
              • Special Effect - Create a special effect at SE_Point2 using SE_ExplosionModel
              • Special Effect - Destroy (Last created special effect)
              • Unit Group - Pick every unit in (Units within SE_ExplosionDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
                • Loop - Actions
                  • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_ExplosionDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
              • For each (Integer SE_Integer3) from 0 to (SE_RocksNumber[SE_Integer2] - 1), do (Actions)
                • Loop - Actions
                  • Set SE_Real = (((SE_RocksIntervalAngle[SE_Integer2] x (Real(SE_Integer3))) - (SE_RocksAngle[SE_Integer2] / 2.00)) + (SE_Real2 + (Random real number between (0.00 - SE_RocksAngleRandom[SE_Integer2]) and SE_RocksAngleRandom[SE_Integer2])))
                  • Unit - Create 1 SE_RocksUnitType for (Owner of SE_Unit) at SE_Point2 facing SE_Real degrees
                  • Set SE_Unit2 = (Last created unit)
                  • Custom script: set udg_SE_Integer4 = GetHandleId(udg_SE_Unit2)
                  • Unit Group - Add SE_Unit2 to SE_RockGroup
                  • Animation - Change SE_Unit2 flying height to SE_RockHeightSpeed[SE_Integer2] at 0.00
                  • Hashtable - Save SE_Integer2 as 0 of SE_Integer4 in SE_Hash
                  • Hashtable - Save Handle Of(Load 1 of SE_Integer in SE_Hash) as 1 of SE_Integer4 in SE_Hash
                  • Hashtable - Save SE_Real as 2 of SE_Integer4 in SE_Hash
                  • Hashtable - Save SE_RockHeightSpeed[SE_Integer2] as 3 of SE_Integer4 in SE_Hash
              • Custom script: call FlushChildHashtable(udg_SE_Hash, udg_SE_Integer)
            • Else - Actions
          • Custom script: call RemoveLocation(udg_SE_Point)
          • Custom script: call RemoveLocation(udg_SE_Point2)
      • Unit Group - Pick every unit in SE_RockGroup and do (Actions)
        • Loop - Actions
          • Set SE_Unit = (Picked unit)
          • Custom script: set udg_SE_Integer = GetHandleId(udg_SE_Unit)
          • Set SE_Integer2 = (Load 0 of SE_Integer from SE_Hash)
          • Set SE_Real = ((Load 3 of SE_Integer from SE_Hash) - SE_RockHeightDecrement[SE_Integer2])
          • Set SE_Real2 = (Load 2 of SE_Integer from SE_Hash)
          • Set SE_Point = (Position of SE_Unit)
          • Set SE_Point2 = (SE_Point offset by SE_RockSpeed[SE_Integer2] towards SE_Real2 degrees)
          • Unit - Move SE_Unit instantly to SE_Point2
          • Animation - Change SE_Unit flying height to ((Current flying height of SE_Unit) + SE_Real) at 0.00
          • Hashtable - Save SE_Real as 3 of SE_Integer in SE_Hash
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (Current flying height of SE_Unit) Less than SE_RockHeightSpeed[SE_Integer2]
            • Then - Actions
              • Unit - Set level of Stun Rocks for SE_Unit to SE_Integer2
              • Unit - Order SE_Unit to Orc Tauren Chieftain - War Stomp
              • Unit - Add a 0.01 second Generic expiration timer to SE_Unit
              • Unit Group - Remove SE_Unit from SE_RockGroup
              • Unit Group - Pick every unit in (Units within SE_RocksDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
                • Loop - Actions
                  • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_RocksDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
              • Custom script: call FlushChildHashtable(udg_SE_Hash, udg_SE_Integer)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (SE_WaveGroup is empty) Equal to True
                  • (SE_RockGroup is empty) Equal to True
                • Then - Actions
                  • Trigger - Turn off SE Loop <gen>
                • Else - Actions
            • Else - Actions
          • Custom script: call RemoveLocation(udg_SE_Point)
          • Custom script: call RemoveLocation(udg_SE_Point2)
The spell is nice but the rocks look too uniform to be natural, perhaps have their scale be random, and the location be a bit randomized as well.
You leak unit group here:
  • Unit Group - Pick every unit in (Units within SE_ExplosionDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
    • Loop - Actions
And
  • Unit Group - Pick every unit in (Units within SE_RocksDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
    • Loop - Actions
    • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_RocksDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
To fix these put
  • Custom script: set bj_wantDestroyGroup = true
Before the unitgroup
 
Level 1
Joined
Dec 21, 2010
Messages
3
Can you make them to attack units / hero only ?
When i tried use this spell on buildings / towers, it is also damage them, even the rocks after explosion too.
 
y, but you'll need to modify the SE_Loop triggers, in the two little pick every units (those Within X Range of Point), change the matching to this : Matching unit belongs to an enemi to Owner of SE_Unit Equal to TRUE and Matching unit is a Building Equal to FALSE.

But, i thought it was more realist with building damages. If a big meteor fall on your hause, your hause will been entirely or not destroyed. Same princip for the catapults xD
 
Level 1
Joined
Dec 21, 2010
Messages
3
y, but you'll need to modify the SE_Loop triggers, in the two little pick every units (those Within X Range of Point), change the matching to this : Matching unit belongs to an enemi to Owner of SE_Unit Equal to TRUE and Matching unit is a Building Equal to FALSE.

But, i thought it was more realist with building damages. If a big meteor fall on your hause, your hause will been entirely or not destroyed. Same princip for the catapults xD

Ah yes, i found them.
Well i agree in your opinion, but most in a AoS type map you really don't want your towers got rid by a One Huge spell like this.
Thanks for your great spell, i vote it 5/5.
 
Ah yes, i found them.
Well i agree in your opinion, but most in a AoS type map you really don't want your towers got rid by a One Huge spell like this.
Thanks for your great spell, i vote it 5/5.

y, but you can have only 4rocks for example. So it's not specially huge, just depends on the configurations ^^

You can also decreases damages etc...
 
How can I do so that the spell does not affect structures?
You should filter the damage action from "SE Loop" trigger like this:

  • Custom script: set bj_wantDestroyGroup = true
  • Unit Group - Pick every unit in (Units within SE_ExplosionDamagesAoe[SE_Integer2] of SE_Point2 matching (((Matching unit) belongs to an enemy of (Owner of SE_Unit)) Equal to True)) and do (Actions)
    • Loop - Actions
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • ((Picked unit) is A structure) Equal to False
        • Then - Actions
          • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage (Picked unit), dealing SE_ExplosionDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
        • Else - Actions
If you want a more efficient group action, do it like this:

  • Custom script: set bj_wantDestroyGroup = true
  • Unit Group - Pick every unit in (Units within SE_ExplosionDamagesAoe[SE_Integer2] of SE_Point2) and do (Actions)
    • Loop - Actions
      • Set SE_TempUnit = (Picked unit)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (SE_TempUnit is alive) Equal to True
          • (SE_TempUnit is A structure) Equal to False
          • (SE_TempUnit belongs to an enemy of (Owner of SE_Unit)) Equal to True
        • Then - Actions
          • Unit - Cause (Load 1 of SE_Integer in SE_Hash) to damage SE_TempUnit, dealing SE_ExplosionDamages[SE_Integer2] damage of attack type SE_AttackType and damage type SE_DamageType
        • Else - Actions
  • Custom script: call RemoveLocation(udg_SE_Point)
 
Top