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

Storming Hammers v1.0 - GUI

  • Like
Reactions: Vinz
[TD] STORMING HAMMERS [ GUI ] [/TD]
SPELL DESCRIPTION:
full

[TD] SPELL IMAGES: [/TD]

onCreation

onCharge

onStorming


Creates a storm cloud or cumulonimbushit on a targeted location! xD
full

The storm cloud successfully charged
full

It has a job to storm the area for the sake of DESTRUCTION! Its hammer time!
full

full


[TD] CHANGELOGS :[/TD][TD]
v1.0 - Released
[/TD]
[TD] CREDITS :[/TD][TD]
Jad ( KB3D System )
[/TD]

Storming Hammers Configuration

Storming Hammers Execution

Storming Hammers Loop

  • Storming Hammers Configuration
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- --------
      • -------- * SPELL CONFIGURATION FIELD * --------
      • -------- --------
      • -------- OBJECT EDITOR ( F6 ) --------
      • -------- --------
      • -------- - --------
      • -------- The spell or ability used in the triggers. ( Import the Storming Hammers Ability ) --------
      • Set SH_Ability = Storming Hammers
      • -------- The chain lightning dummy ability used in the triggers. ( Import the Storming Hammers Dummy Ability ) --------
      • Set SH_DummyAbility = Storming Hammers ( Dummy Ability )
      • -------- The dummy unit type used in the triggers. ( Import the Storming Hammers Dummy Unit ) --------
      • Set SH_DummyType = Storming Hammers Dummy
      • -------- - --------
      • -------- --------
      • -------- SPELL DATA --------
      • -------- --------
      • -------- - --------
      • -------- The maximum or numbers of levels of the spell or ability. ( Must be equal to number of levels in Storming Hammers Ability ) --------
      • Set SH_AbilityMaxLevel = 3
      • -------- - --------
      • -------- The maximum radius or the area of effect of the spell or ability. --------
      • Set SH_Radius[1] = 350.00
      • Set SH_Radius[2] = 375.00
      • Set SH_Radius[3] = 400.00
      • -------- - --------
      • -------- The activation delay of the storm cloud to start producing multiple hammers --------
      • Set SH_ActivationDelay[1] = 4.00
      • Set SH_ActivationDelay[2] = 4.00
      • Set SH_ActivationDelay[3] = 4.00
      • -------- - --------
      • -------- The duration of the spell or ability , starts ticking after the activation delay ( SH_ActivationDelay ). --------
      • Set SH_Duration[1] = 6.00
      • Set SH_Duration[2] = 7.50
      • Set SH_Duration[3] = 9.00
      • -------- - --------
      • -------- Destroy Trees? True = Yes , False = No --------
      • Set SH_DestroyTrees = True
      • -------- - --------
      • -------- The attack type and damage type of the source. ( Caster ) --------
      • Set SH_AttackType = Spells
      • Set SH_DamageType = Normal
      • -------- - --------
      • -------- An artificial floor height where hammer units are detected. The value is recommended. --------
      • Set SH_FloorHeight = 25.00
      • -------- - --------
      • -------- The interval of the looping trigger. Recommended Value: 0.03125000 = 1 second / 32 Iterations/Frames --------
      • Set SH_LoopInterval = 0.02
      • -------- ^ I've modified it to 0.02 = 0.02222220 = 1 second / 45 Iterations/Frames ( Smooth Motions ) --------
      • -------- ^ Modify at your own risk: changing this value affects the spell performance. --------
      • -------- - --------
      • -------- --------
      • -------- CLOUD AND HAMMERS DATA --------
      • -------- --------
      • -------- - --------
      • -------- The art model used to attach in the cloud. --------
      • Set SH_Effect[1] = Abilities\Spells\Human\CloudOfFog\CloudOfFog.mdl
      • -------- An effect occurs when the cloud activates. --------
      • Set SH_Effect[7] = Abilities\Spells\Orc\Purge\PurgeBuffTarget.mdl
      • -------- - --------
      • -------- The size of the cloud. --------
      • Set SH_CloudSize[1] = 2.20
      • Set SH_CloudSize[2] = 2.35
      • Set SH_CloudSize[3] = 2.50
      • -------- - --------
      • -------- The creation height of the cloud. --------
      • Set SH_CloudHeight[1] = 500.00
      • Set SH_CloudHeight[2] = 500.00
      • Set SH_CloudHeight[3] = 500.00
      • -------- - --------
      • -------- The art model used and trail effect to attach in the hammers. --------
      • Set SH_Effect[2] = Abilities\Spells\Human\StormBolt\StormBoltMissile.mdl
      • Set SH_Effect[3] = Abilities\Spells\Undead\AbsorbMana\AbsorbManaBirthMissile.mdl
      • -------- ^ If you want to disable the trail effect then you can remove the model path and leave a space "<space>" --------
      • -------- - --------
      • -------- The pitch of the hammers. ( 90 = Upward , -90 = Downward ) --------
      • Set SH_Pitch = -90.00
      • -------- ^ Recommended Value --------
      • -------- - --------
      • -------- Apply Player Colors To Hammers? True = Yes , False = No ( Default: PLAYER_NEUTRAL_PASSIVE COLOR ) --------
      • Set SH_HammerPlayerColor = False
      • -------- - --------
      • -------- The amount or number of hammers created. Value != 0 --------
      • Set SH_HammerAmount[1] = 4
      • Set SH_HammerAmount[2] = 5
      • Set SH_HammerAmount[3] = 6
      • -------- - --------
      • -------- The size of the hammers. --------
      • Set SH_HammerSize[1] = 1.50
      • Set SH_HammerSize[2] = 1.55
      • Set SH_HammerSize[3] = 1.60
      • -------- - --------
      • -------- The minimum and maximum fall time of the hammers. --------
      • Set SH_HammerFallMinTime[1] = 0.60
      • Set SH_HammerFallMinTime[2] = 0.55
      • Set SH_HammerFallMinTime[3] = 0.50
      • Set SH_HammerFallMaxTime[1] = 1.20
      • Set SH_HammerFallMaxTime[2] = 1.15
      • Set SH_HammerFallMaxTime[3] = 1.10
      • -------- - --------
      • -------- The collision radius of the hammers. --------
      • Set SH_HammerCollision[1] = 100.00
      • Set SH_HammerCollision[2] = 125.00
      • Set SH_HammerCollision[3] = 150.00
      • -------- - --------
      • -------- The damage of the hammers in collision radius. --------
      • Set SH_HammerDamage[1] = 10.00
      • Set SH_HammerDamage[2] = 15.00
      • Set SH_HammerDamage[3] = 20.00
      • -------- - --------
      • -------- The interval of creating multiple hammers. --------
      • Set SH_HammerSpawnInterval[1] = 0.75
      • Set SH_HammerSpawnInterval[2] = 0.60
      • Set SH_HammerSpawnInterval[3] = 0.45
      • -------- - --------
      • -------- An effect occurs when the hammers landed on the ground. --------
      • Set SH_Effect[4] = Abilities\Weapons\Bolt\BoltImpact.mdl
      • -------- - --------
      • -------- An effect occurs at the enemy units when damaged by the hammers. --------
      • Set SH_Effect[5] = Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
      • -------- - --------
      • -------- The attachment point of all art models created in dummy units. ( Default: origin ) --------
      • Set SH_EffectAttach = origin
      • -------- - --------
      • -------- * OPTIONAL * --------
      • -------- Hammers Chain Lightning? True = Yes , False = No --------
      • Set SH_HammerChainLightning = True
      • -------- ^ IF: TRUE = Import the Storming Hammers Dummy Ability --------
      • -------- ^ IF: FALSE = Ignore and leave the Storming Hammers Dummy Ability --------
      • -------- - --------
      • -------- * OPTIONAL * --------
      • -------- Hammers Knockback? True = Yes , False = No --------
      • Set SH_HammerKB = True
      • -------- ^ IF: TRUE = Import the KB3D System ( Jad ) --------
      • -------- ^ IF: FALSE = Ignore and leave the KB3D System ( Jad ) and the next KB DATA section. --------
      • -------- - --------
      • -------- --------
      • -------- KB DATA --------
      • -------- --------
      • -------- - --------
      • -------- A looping effect occurs when the enemy unit is in knockback state or motion. --------
      • Set SH_Effect[6] = Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
      • -------- - --------
      • -------- The range of the knockback. --------
      • Set SH_KB_Range[1] = 120.00
      • Set SH_KB_Range[2] = 140.00
      • Set SH_KB_Range[3] = 160.00
      • -------- - --------
      • -------- The speed of the knockback. ( Distance Per Second ) --------
      • Set SH_KB_Speed[1] = 300.00
      • Set SH_KB_Speed[2] = 350.00
      • Set SH_KB_Speed[3] = 400.00
      • -------- - --------
      • -------- The acceleration of the knockback. ( Only NEGATIVE Values ) --------
      • Set SH_KB_Acceleration[1] = -100.00
      • Set SH_KB_Acceleration[2] = -100.00
      • Set SH_KB_Acceleration[3] = -100.00
      • -------- - --------
      • -------- The maximum height of the knockback. --------
      • Set SH_KB_MaxHeight[1] = 100.00
      • Set SH_KB_MaxHeight[2] = 100.00
      • Set SH_KB_MaxHeight[3] = 100.00
      • -------- - --------
      • -------- --------
      • -------- CODE DATA --------
      • -------- * DON'T TOUCH THE CODES BELOW UNLESS SOME OF THEM MALFUNCTIONS * --------
      • -------- --------
      • -------- - --------
      • -------- ............................................................................................................... --------
      • -------- Loop Event --------
      • Trigger - Add to Storming Hammers Loop <gen> the event (Time - Every SH_LoopInterval seconds of game time)
      • -------- ............................................................................................................... --------
      • -------- Tree Checker Setup --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SH_DestroyTrees Equal to True
        • Then - Actions
          • Custom script: set udg_SH_TreeChecker = CreateUnit( Player( 15 ) , udg_SH_DummyType , 0 , 0 , 0 )
          • Custom script: call UnitAddAbility( udg_SH_TreeChecker , 'Ahar' ) // Harvest Ability
          • -------- single location reference --------
          • Set SH_CustomLocation = (Point(0.00, 0.00))
        • Else - Actions
      • -------- ............................................................................................................... --------
      • -------- Preload Objects --------
      • -------- Abilities and Units: --------
      • Custom script: set udg_SH_PickedUnit = CreateUnit( Player( 15 ) , udg_SH_DummyType , 0 , 0 , 0 )
      • Custom script: call UnitAddAbility( udg_SH_PickedUnit , udg_SH_Ability )
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SH_HammerChainLightning Equal to True
        • Then - Actions
          • Custom script: call UnitAddAbility( udg_SH_PickedUnit , udg_SH_DummyAbility )
        • Else - Actions
      • Custom script: call RemoveUnit( udg_SH_PickedUnit )
      • -------- Effects: --------
      • Set SH_EffectAmount = 7
      • For each (Integer SH_CustomInteger) from 1 to SH_EffectAmount, do (Actions)
        • Loop - Actions
          • Custom script: call Preload( udg_SH_Effect[ udg_SH_CustomInteger ] )
      • -------- ............................................................................................................... --------
      • -------- Initialize Calculations --------
      • For each (Integer SH_CustomInteger) from 1 to SH_AbilityMaxLevel, do (Actions)
        • Loop - Actions
          • Set SH_CustomReal[SH_CustomInteger] = (SH_CloudHeight[SH_CustomInteger] x 2.00)
      • -------- ............................................................................................................... --------
      • -------- index reference --------
      • Set SH_CurrentIndex = 0
      • -------- ............................................................................................................... --------
      • -------- for global variable declaration and nulling --------
      • Set SH_PickedUnit = No unit
      • -------- ............................................................................................................... --------
      • -------- --------
      • -------- * END OF SPELL CONFIGURATION FIELD * --------
      • -------- --------
      • Custom script: endfunction
      • Custom script:
      • Custom script: // !Custom Pitch Animation! //
      • Custom script: function SH_SetPitch takes unit u, real pitch returns nothing
      • Custom script: local integer i = R2I( pitch * bj_RADTODEG + 90.5 )
      • Custom script: if 179 < i then
      • Custom script: set i = 179
      • Custom script: elseif 0 > i then
      • Custom script: set i = 0
      • Custom script: endif
      • Custom script: call SetUnitAnimationByIndex( u , i )
  • Storming Hammers Execution
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to SH_Ability
    • Actions
      • -------- --------
      • -------- OnCast --------
      • -------- --------
      • -------- no locals declared --------
      • -------- --------
      • -------- instance storage --------
      • Set SH_MaxIndex = (SH_MaxIndex + 1)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • SH_MaxIndex Equal to 1
        • Then - Actions
          • Trigger - Turn on Storming Hammers Loop <gen>
        • Else - Actions
      • -------- --------
      • -------- allocations --------
      • Set SH_Caster[SH_MaxIndex] = (Triggering unit)
      • Set SH_CasterPlayer[SH_MaxIndex] = (Owner of SH_Caster[SH_MaxIndex])
      • Set SH_Level[SH_MaxIndex] = (Level of SH_Ability for SH_Caster[SH_MaxIndex])
      • Custom script: set udg_SH_X[ udg_SH_MaxIndex ] = GetSpellTargetX( )
      • Custom script: set udg_SH_Y[ udg_SH_MaxIndex ] = GetSpellTargetY( )
      • Custom script: set udg_SH_Unit[ udg_SH_MaxIndex ] = CreateUnit( udg_SH_CasterPlayer[ udg_SH_MaxIndex ] , udg_SH_DummyType , udg_SH_X[ udg_SH_MaxIndex ] , udg_SH_Y[ udg_SH_MaxIndex ] , GetRandomReal( 0 , 360 ) )
      • Custom script: set udg_SH_CloudModelHandler[ udg_SH_MaxIndex ] = AddSpecialEffectTarget( udg_SH_Effect[ 1 ] , udg_SH_Unit[ udg_SH_MaxIndex ] , udg_SH_EffectAttach )
      • Custom script: call SetUnitScale( udg_SH_Unit[ udg_SH_MaxIndex ] , udg_SH_CloudSize[ udg_SH_Level[ udg_SH_MaxIndex ] ] , 0 , 0 )
      • Custom script: call SetUnitFlyHeight( udg_SH_Unit[ udg_SH_MaxIndex ] , udg_SH_CloudHeight[ udg_SH_Level[ udg_SH_MaxIndex ] ] , 0 )
      • -------- --------
      • -------- counters --------
      • Set SH_HammerSpawnIntervalCounter[SH_MaxIndex] = 0.00
      • Set SH_ActivationDelayCounter[SH_MaxIndex] = 0.00
      • Set SH_DurationCounter[SH_MaxIndex] = 0.00
      • Set SH_CustomBoolean[SH_MaxIndex] = False
      • -------- --------
      • -------- phase one insert cloud --------
      • Set SH_Phase[SH_MaxIndex] = 1
      • -------- --------
  • Storming Hammers Loop
    • Events
    • Conditions
    • Actions
      • -------- --------
      • -------- OnLoop --------
      • -------- --------
      • -------- declaration of locals: --------
      • Custom script: local real x
      • Custom script: local real y
      • Custom script: local real x2
      • Custom script: local real y2
      • Custom script: local integer i
      • Custom script: local unit u
      • -------- --------
      • For each (Integer SH_CurrentIndex) from 1 to SH_MaxIndex, do (Actions)
        • Loop - Actions
          • -------- --------
          • -------- phase one cloud --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SH_Phase[SH_CurrentIndex] Equal to 1
            • Then - Actions
              • -------- --------
              • -------- cloud activation --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SH_ActivationDelayCounter[SH_CurrentIndex] Greater than or equal to SH_ActivationDelay[SH_Level[SH_CurrentIndex]]
                • Then - Actions
                  • -------- --------
                  • -------- cloud activation effect --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SH_CustomBoolean[SH_CurrentIndex] Equal to False
                    • Then - Actions
                      • Custom script: set udg_SH_CloudModelHandler2[ udg_SH_CurrentIndex ] = AddSpecialEffectTarget( udg_SH_Effect[ 7 ] , udg_SH_Unit[ udg_SH_CurrentIndex ] , udg_SH_EffectAttach )
                      • Set SH_CustomBoolean[SH_CurrentIndex] = True
                    • Else - Actions
                  • -------- --------
                  • -------- hammers produce time --------
                  • Set SH_HammerSpawnIntervalCounter[SH_CurrentIndex] = (SH_HammerSpawnIntervalCounter[SH_CurrentIndex] + SH_LoopInterval)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SH_HammerSpawnIntervalCounter[SH_CurrentIndex] Greater than or equal to SH_HammerSpawnInterval[SH_Level[SH_CurrentIndex]]
                    • Then - Actions
                      • -------- --------
                      • For each (Integer SH_CustomInteger) from 1 to SH_HammerAmount[SH_Level[SH_CurrentIndex]], do (Actions)
                        • Loop - Actions
                          • -------- --------
                          • -------- spawn offset --------
                          • Custom script: set x = udg_SH_X[ udg_SH_CurrentIndex ] + GetRandomReal( 0 , udg_SH_Radius[ udg_SH_Level[ udg_SH_CurrentIndex ] ] ) * Cos( GetRandomReal( -bj_PI , bj_PI ) )
                          • Custom script: set y = udg_SH_Y[ udg_SH_CurrentIndex ] + GetRandomReal( 0 , udg_SH_Radius[ udg_SH_Level[ udg_SH_CurrentIndex ] ] ) * Sin( GetRandomReal( -bj_PI , bj_PI ) )
                          • -------- --------
                          • -------- hammers creation --------
                          • Set SH_MaxIndex = (SH_MaxIndex + 1)
                          • Custom script: set udg_SH_CustomUnit[ udg_SH_MaxIndex ] = CreateUnit( udg_SH_CasterPlayer[ udg_SH_CurrentIndex ] , udg_SH_DummyType , x , y , GetRandomReal( 0 , 360 ) )
                          • Custom script: set udg_SH_HammerModelHandler[ udg_SH_MaxIndex ] = AddSpecialEffectTarget( udg_SH_Effect[ 2 ] , udg_SH_CustomUnit[ udg_SH_MaxIndex ] , udg_SH_EffectAttach )
                          • Custom script: set udg_SH_TrailModelHandler[ udg_SH_MaxIndex ] = AddSpecialEffectTarget( udg_SH_Effect[ 3 ] , udg_SH_CustomUnit[ udg_SH_MaxIndex ] , udg_SH_EffectAttach )
                          • Custom script: call SetUnitScale( udg_SH_CustomUnit[ udg_SH_MaxIndex ] , udg_SH_HammerSize[ udg_SH_Level[ udg_SH_CurrentIndex ] ] , 0 , 0 )
                          • Custom script: call SetUnitFlyHeight( udg_SH_CustomUnit[ udg_SH_MaxIndex ] , udg_SH_CustomReal[ udg_SH_Level[ udg_SH_CurrentIndex ] ] , 0 )
                          • Custom script: call SH_SetPitch( udg_SH_CustomUnit[ udg_SH_MaxIndex ] , udg_SH_Pitch )
                          • -------- --------
                          • -------- hammers player color boolean --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • SH_HammerPlayerColor Equal to True
                            • Then - Actions
                              • Unit - Change color of SH_CustomUnit[SH_MaxIndex] to (Color of SH_CasterPlayer[SH_CurrentIndex])
                            • Else - Actions
                              • Unit - Change color of SH_CustomUnit[SH_MaxIndex] to (Color of Neutral Passive)
                          • -------- --------
                          • Set SH_Caster[SH_MaxIndex] = SH_Caster[SH_CurrentIndex]
                          • Set SH_CasterPlayer[SH_MaxIndex] = SH_CasterPlayer[SH_CurrentIndex]
                          • Set SH_Level[SH_MaxIndex] = SH_Level[SH_CurrentIndex]
                          • Set SH_Unit[SH_MaxIndex] = SH_Unit[SH_CurrentIndex]
                          • Set SH_HammerCurrentHeight[SH_MaxIndex] = (Current flying height of SH_CustomUnit[SH_MaxIndex])
                          • Set SH_HammerFallTimeCalculation[SH_MaxIndex] = (SH_HammerCurrentHeight[SH_MaxIndex] / ((Random real number between SH_HammerFallMinTime[SH_Level[SH_MaxIndex]] and SH_HammerFallMaxTime[SH_Level[SH_MaxIndex]]) / SH_LoopInterval))
                          • -------- --------
                          • -------- phase two insert hammer --------
                          • Set SH_Phase[SH_MaxIndex] = 2
                          • -------- --------
                      • -------- --------
                      • -------- reset --------
                      • Set SH_HammerSpawnIntervalCounter[SH_CurrentIndex] = 0.00
                      • -------- --------
                    • Else - Actions
                  • -------- --------
                  • Set SH_DurationCounter[SH_CurrentIndex] = (SH_DurationCounter[SH_CurrentIndex] + SH_LoopInterval)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SH_DurationCounter[SH_CurrentIndex] Greater than or equal to SH_Duration[SH_Level[SH_CurrentIndex]]
                    • Then - Actions
                      • -------- --------
                      • -------- !CloudDestroy! --------
                      • Special Effect - Destroy SH_CloudModelHandler[SH_CurrentIndex]
                      • Special Effect - Destroy SH_CloudModelHandler2[SH_CurrentIndex]
                      • Unit - Kill SH_Unit[SH_CurrentIndex]
                      • Set SH_Phase[SH_CurrentIndex] = 3
                      • -------- --------
                    • Else - Actions
                  • -------- --------
                • Else - Actions
                  • -------- --------
                  • Set SH_ActivationDelayCounter[SH_CurrentIndex] = (SH_ActivationDelayCounter[SH_CurrentIndex] + SH_LoopInterval)
                  • -------- --------
            • Else - Actions
          • -------- --------
          • -------- phase two hammers --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SH_Phase[SH_CurrentIndex] Equal to 2
            • Then - Actions
              • -------- --------
              • Set SH_HammerCurrentHeight[SH_CurrentIndex] = (SH_HammerCurrentHeight[SH_CurrentIndex] - SH_HammerFallTimeCalculation[SH_CurrentIndex])
              • Custom script: call SetUnitFlyHeight( udg_SH_CustomUnit[ udg_SH_CurrentIndex ] , udg_SH_HammerCurrentHeight[ udg_SH_CurrentIndex ] , 0 )
              • -------- --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SH_HammerCurrentHeight[SH_CurrentIndex] Less than or equal to SH_FloorHeight
                • Then - Actions
                  • -------- --------
                  • Custom script: set x = GetUnitX( udg_SH_CustomUnit[ udg_SH_CurrentIndex ] )
                  • Custom script: set y = GetUnitY( udg_SH_CustomUnit[ udg_SH_CurrentIndex ] )
                  • Custom script: call DestroyEffect( AddSpecialEffect( udg_SH_Effect[ 4 ] , x , y ) )
                  • -------- --------
                  • -------- single dummy caster creation --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SH_HammerChainLightning Equal to True
                    • Then - Actions
                      • Custom script: set u = CreateUnit( udg_SH_CasterPlayer[ udg_SH_CurrentIndex ] , udg_SH_DummyType , x , y , GetRandomReal( 0 , 360 ) )
                      • Custom script: call UnitAddAbility( u , udg_SH_DummyAbility )
                      • Custom script: call UnitApplyTimedLife( u , 'BTLF' , 1 )
                    • Else - Actions
                  • -------- --------
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • SH_DestroyTrees Equal to True
                    • Then - Actions
                      • -------- --------
                      • Custom script: call MoveLocation( udg_SH_CustomLocation , x , y )
                      • Destructible - Pick every destructible within SH_HammerCollision[SH_Level[SH_CurrentIndex]] of SH_CustomLocation and do (Actions)
                        • Loop - Actions
                          • Set SH_Tree = (Picked destructible)
                          • Unit - Order SH_TreeChecker to Harvest SH_Tree
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Current order of SH_TreeChecker) Equal to (Order(harvest))
                            • Then - Actions
                              • Destructible - Kill SH_Tree
                            • Else - Actions
                          • Unit - Order SH_TreeChecker to Stop
                      • -------- --------
                    • Else - Actions
                  • -------- --------
                  • -------- * KB3D SYSTEM * --------
                  • -------- --------
                  • Custom script: call GroupEnumUnitsInRange( bj_lastCreatedGroup , x , y , udg_SH_HammerCollision[ udg_SH_Level[ udg_SH_CurrentIndex ] ] , null )
                  • Custom script: loop
                  • Custom script: set udg_SH_PickedUnit = FirstOfGroup( bj_lastCreatedGroup )
                  • Custom script: exitwhen udg_SH_PickedUnit == null
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (SH_PickedUnit is dead) Equal to False
                      • (SH_PickedUnit is Magic Immune) Equal to False
                      • (SH_PickedUnit is A flying unit) Equal to False
                      • (SH_PickedUnit belongs to an enemy of SH_CasterPlayer[SH_CurrentIndex]) Equal to True
                    • Then - Actions
                      • -------- --------
                      • -------- normal damage effect --------
                      • Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_SH_Effect[ 5 ] , udg_SH_PickedUnit , udg_SH_EffectAttach ) )
                      • Unit - Cause SH_Caster[SH_CurrentIndex] to damage SH_PickedUnit, dealing SH_HammerDamage[SH_Level[SH_CurrentIndex]] damage of attack type SH_AttackType and damage type SH_DamageType
                      • -------- --------
                      • -------- chain lightning boolean --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • SH_HammerChainLightning Equal to True
                        • Then - Actions
                          • -------- --------
                          • -------- dummy caster single chain lightning --------
                          • Custom script: call IssueTargetOrder( u , "chainlightning" , udg_SH_PickedUnit )
                          • -------- --------
                        • Else - Actions
                      • -------- --------
                      • -------- knockback boolean --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (SH_PickedUnit is A structure) Equal to False
                          • SH_HammerKB Equal to True
                        • Then - Actions
                          • -------- --------
                          • Custom script: set i = GetHandleId( udg_SH_PickedUnit )
                          • Custom script: set x2 = GetUnitX( udg_SH_PickedUnit )
                          • Custom script: set y2 = GetUnitY( udg_SH_PickedUnit )
                          • -------- --------
                          • Custom script: if not LoadBoolean( udg_KB3D_HA , i , i ) then
                          • Set KB3D_Unit = SH_PickedUnit
                          • Set KB3D_Range = SH_KB_Range[SH_Level[SH_CurrentIndex]]
                          • Set KB3D_Speed = SH_KB_Speed[SH_Level[SH_CurrentIndex]]
                          • Custom script: set udg_KB3D_Angle = Atan2( y2 - y , x2 - x ) * bj_RADTODEG
                          • Set KB3D_Accel = SH_KB_Acceleration[SH_Level[SH_CurrentIndex]]
                          • Set KB3D_AttackType = SH_AttackType
                          • Set KB3D_DamageType = SH_DamageType
                          • Set KB3D_Damager = SH_Caster[SH_CurrentIndex]
                          • Set KB3D_DestroyTree = SH_DestroyTrees
                          • Set KB3D_FaceAngle = False
                          • Set KB3D_Fx = SH_Effect[6]
                          • Set KB3D_Attach = SH_EffectAttach
                          • Set KB3D_iKB = True
                          • Set KB3D_UnpathableStop = True
                          • Set KB3D_Zoffset = SH_KB_MaxHeight[SH_Level[SH_CurrentIndex]]
                          • -------- --------
                          • -------- Registed All of the Settings --------
                          • Custom script: call ExecuteFunc( "KB3D_Registration" )
                          • Custom script: endif
                          • -------- --------
                        • Else - Actions
                      • -------- --------
                    • Else - Actions
                  • Custom script: call GroupRemoveUnit( bj_lastCreatedGroup , udg_SH_PickedUnit )
                  • Custom script: endloop
                  • -------- --------
                  • -------- !HammerDestroy! --------
                  • Special Effect - Destroy SH_HammerModelHandler[SH_CurrentIndex]
                  • Special Effect - Destroy SH_TrailModelHandler[SH_CurrentIndex]
                  • Unit - Kill SH_CustomUnit[SH_CurrentIndex]
                  • Set SH_Phase[SH_CurrentIndex] = 3
                  • -------- --------
                  • Custom script: set u = null
                  • -------- --------
                • Else - Actions
              • -------- --------
            • Else - Actions
          • -------- --------
          • -------- phase three recycling --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • SH_Phase[SH_CurrentIndex] Equal to 3
            • Then - Actions
              • -------- --------
              • -------- recycling indexes --------
              • Set SH_Caster[SH_CurrentIndex] = SH_Caster[SH_MaxIndex]
              • Set SH_CasterPlayer[SH_CurrentIndex] = SH_CasterPlayer[SH_MaxIndex]
              • Set SH_Level[SH_CurrentIndex] = SH_Level[SH_MaxIndex]
              • Set SH_Unit[SH_CurrentIndex] = SH_Unit[SH_MaxIndex]
              • Set SH_CustomUnit[SH_CurrentIndex] = SH_CustomUnit[SH_MaxIndex]
              • Set SH_CloudModelHandler[SH_CurrentIndex] = SH_CloudModelHandler[SH_MaxIndex]
              • Set SH_CloudModelHandler2[SH_CurrentIndex] = SH_CloudModelHandler2[SH_MaxIndex]
              • Set SH_HammerModelHandler[SH_CurrentIndex] = SH_HammerModelHandler[SH_MaxIndex]
              • Set SH_TrailModelHandler[SH_CurrentIndex] = SH_TrailModelHandler[SH_MaxIndex]
              • Set SH_DurationCounter[SH_CurrentIndex] = SH_DurationCounter[SH_MaxIndex]
              • Set SH_ActivationDelayCounter[SH_CurrentIndex] = SH_ActivationDelayCounter[SH_MaxIndex]
              • Set SH_HammerSpawnIntervalCounter[SH_CurrentIndex] = SH_HammerSpawnIntervalCounter[SH_MaxIndex]
              • Set SH_CustomBoolean[SH_CurrentIndex] = SH_CustomBoolean[SH_MaxIndex]
              • Set SH_X[SH_CurrentIndex] = SH_X[SH_MaxIndex]
              • Set SH_Y[SH_CurrentIndex] = SH_Y[SH_MaxIndex]
              • Set SH_HammerCurrentHeight[SH_CurrentIndex] = SH_HammerCurrentHeight[SH_MaxIndex]
              • Set SH_HammerFallTimeCalculation[SH_CurrentIndex] = SH_HammerFallTimeCalculation[SH_MaxIndex]
              • Set SH_Phase[SH_CurrentIndex] = SH_Phase[SH_MaxIndex]
              • -------- --------
              • -------- eliminate instance on storage --------
              • Set SH_CurrentIndex = (SH_CurrentIndex - 1)
              • Set SH_MaxIndex = (SH_MaxIndex - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • SH_MaxIndex Equal to 0
                • Then - Actions
                  • Trigger - Turn off (This trigger)
                • Else - Actions
              • -------- --------
            • Else - Actions
          • -------- --------


Greetings Hivers!

" A cloud is a fascinating environment for spells when gets involved "

" Useful at hammers destruction , chain lightning , storms and damage plus knockback massive group of enemies "

" It should be called raining hammers or falling hammers but I prefer STORMING hammers! "

" Unit Indexer System is perfect for this type of spell but I've decided to index it manually "
Contents

Storming Hammers v1.0 - GUI (Map)

Reviews
KILLCIDE
Ehh what are the point of these? Set SH_CurrentIndex = 0 Set SH_PickedUnit = No unit This should not be hardcoded: Custom script: call IssueTargetOrder( u , "chainlightning" , udg_SH_PickedUnit A user might decide to change the ability Everyting...
Level 37
Joined
Jul 22, 2015
Messages
3,485
  • Ehh what are the point of these?
    • Set SH_CurrentIndex = 0
    • Set SH_PickedUnit = No unit
  • This should not be hardcoded:
    • Custom script: call IssueTargetOrder( u , "chainlightning" , udg_SH_PickedUnit
    A user might decide to change the ability

Everyting else looks good! I actually really enjoyed this spell concept, and it's not overloaded with insane special effects like your other uploads.


Approved
 
Level 20
Joined
Aug 13, 2013
Messages
1,696
* They are for importing purposes. The integer current index is critical, it must be declared onInit with initial value of 0. ( When Im importing especially a spell that uses dynamic indexing, the integer variable that uses in the loops are bugged when you clicked it will show you no type of variable and of course I will make it integer type manually that causes the whole spell to be broken xD. )
 
Top