- Joined
- Jun 20, 2017
- Messages
- 380
Could someone remove the Knockback system? and the problem is when I cast the spell it make delay.
Storming Hammers v1.0 - GUI
Also lag
And, how to make the hook to able to destroy the trees? (deal 750 damage/1500 distance).
Power Hook v1.3
Storming Hammers v1.0 - GUI
-
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 Ability_StormingHammers = Storming Hammers [Golem]
-


-------- The chain lightning dummy ability used in the triggers. ( Import the Storming Hammers Dummy Ability ) --------
-


Set Ability_StormingHammersDummy = Storming Hammers
-


-------- The dummy unit type used in the triggers. ( Import the Storming Hammers Dummy Unit ) --------
-


Set UnitType_SHDummy = Storming Hammers
-


-------- - --------
-


-------- --------
-


-------- 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 Integer_SHAbilityMaxLevel = 1
-


-------- - --------
-


-------- The maximum radius or the area of effect of the spell or ability. --------
-


Set Reals_SHRadius[1] = 400.00
-


-------- - --------
-


-------- The activation delay of the storm cloud to start producing multiple hammers --------
-


Set Reals_SHActivationDelay[1] = 1.00
-


-------- - --------
-


-------- The duration of the spell or ability , starts ticking after the activation delay ( SH_ActivationDelay ). --------
-


Set Reals_SHDuration[1] = 5.00
-


-------- - --------
-


-------- Destroy Trees? True = Yes , False = No --------
-


Set Boolean_SHDestroyTrees = False
-


-------- - --------
-


-------- The attack type and damage type of the source. ( Caster ) --------
-


Set AttackType_StormingHammers = Spells
-


Set DamageType_SH = Normal
-


-------- - --------
-


-------- An artificial floor height where hammer units are detected. The value is recommended. --------
-


Set Real_SHFloorHeight = 25.00
-


-------- - --------
-


-------- The interval of the looping trigger. Recommended Value: 0.03125000 = 1 second / 32 Iterations/Frames --------
-


Set Real_SHLoopInterval = 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 Strings_SHEffect[1] = Abilities\Spells\Human\CloudOfFog\CloudOfFog.mdl
-


-------- An effect occurs when the cloud activates. --------
-


Set Strings_SHEffect[7] = Abilities\Spells\Orc\Purge\PurgeBuffTarget.mdl
-


-------- - --------
-


-------- The size of the cloud. --------
-


Set Reals_SHCloudSize[1] = 2.25
-


-------- - --------
-


-------- The creation height of the cloud. --------
-


Set Reals_SHCloudHeight[1] = 500.00
-


-------- - --------
-


-------- The art model used and trail effect to attach in the hammers. --------
-


Set Strings_SHEffect[2] = Abilities\Spells\Human\StormBolt\StormBoltMissile.mdl
-


Set Strings_SHEffect[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 Real_SHPitch = -90.00
-


-------- ^ Recommended Value --------
-


-------- - --------
-


-------- Apply Player Colors To Hammers? True = Yes , False = No ( Default: PLAYER_NEUTRAL_PASSIVE COLOR ) --------
-


Set Boolean_SHHammerPlayerColor = False
-


-------- - --------
-


-------- The amount or number of hammers created. Value != 0 --------
-


Set Integers_SHHammerAmount[1] = 5
-


-------- - --------
-


-------- The size of the hammers. --------
-


Set Reals_SHHammerSize[1] = 1.50
-


-------- - --------
-


-------- The minimum and maximum fall time of the hammers. --------
-


Set Reals_SHHammerFallMinTime[1] = 0.50
-


Set Reals_SHHammerFallMaxTime[1] = 1.00
-


-------- - --------
-


-------- The collision radius of the hammers. --------
-


Set Reals_SHHammerCollision[1] = 150.00
-


-------- - --------
-


-------- The damage of the hammers in collision radius. --------
-


Set Reals_SHHammerDamage[1] = 20.00
-


-------- - --------
-


-------- The interval of creating multiple hammers. --------
-


Set Reals_SHHammerSpawnInterval[1] = 0.50
-


-------- - --------
-


-------- An effect occurs when the hammers landed on the ground. --------
-


Set Strings_SHEffect[4] = Abilities\Weapons\Bolt\BoltImpact.mdl
-


-------- - --------
-


-------- An effect occurs at the enemy units when damaged by the hammers. --------
-


Set Strings_SHEffect[5] = Abilities\Weapons\FarseerMissile\FarseerMissile.mdl
-


-------- - --------
-


-------- The attachment point of all art models created in dummy units. ( Default: origin ) --------
-


Set String_SHEffectAttach = origin
-


-------- - --------
-


-------- * OPTIONAL * --------
-


-------- Hammers Chain Lightning? True = Yes , False = No --------
-


Set Boolean_SHHammerChainLightning = 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 Boolean_SHHammerKB = False
-


-------- ^ 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 Strings_SHEffect[6] = Abilities\Spells\Human\FlakCannons\FlakTarget.mdl
-


-------- - --------
-


-------- The range of the knockback. --------
-


Set Reals_SHKBRange[1] = 120.00
-


-------- - --------
-


-------- The speed of the knockback. ( Distance Per Second ) --------
-


Set Reals_SHKBSpeed[1] = 300.00
-


-------- - --------
-


-------- The acceleration of the knockback. ( Only NEGATIVE Values ) --------
-


Set Reals_SHKBAcceleration[1] = -100.00
-


-------- - --------
-


-------- The maximum height of the knockback. --------
-


Set Reals_SHKBMaxHeight[1] = 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 Real_SHLoopInterval seconds of game time)
-


-------- ............................................................................................................... --------
-


-------- Tree Checker Setup --------
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




Boolean_SHDestroyTrees Equal to False
-
-



Then - Actions
-




Custom script: set udg_Unit_SHTreeChecker = CreateUnit( Player( 15 ) , udg_UnitType_SHDummy , 0 , 0 , 0 )
-




Custom script: call UnitAddAbility( udg_Unit_SHTreeChecker , 'Ahar' ) // Harvest Ability
-




-------- single location reference --------
-




Set Point_SHCustom = (Point(0.00, 0.00))
-
-



Else - Actions
-
-


-------- ............................................................................................................... --------
-


-------- Preload Objects --------
-


-------- Abilities and Units: --------
-


Custom script: set udg_Unit_SHPicked = CreateUnit( Player( 15 ) , udg_UnitType_SHDummy , 0 , 0 , 0 )
-


Custom script: call UnitAddAbility( udg_Unit_SHPicked , udg_Ability_StormingHammers )
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




Boolean_SHHammerChainLightning Equal to True
-
-



Then - Actions
-




Custom script: call UnitAddAbility( udg_Unit_SHPicked , udg_Ability_StormingHammersDummy )
-
-



Else - Actions
-
-


Custom script: call RemoveUnit( udg_Unit_SHPicked )
-


-------- Effects: --------
-


Set Integer_SHEffectAmount = 7
-


For each (Integer Integer_SHCustomInteger) from 1 to Integer_SHEffectAmount, do (Actions)
-



Loop - Actions
-




Custom script: call Preload(udg_Strings_SHEffect[udg_Integer_SHCustomInteger])
-
-
-


-------- ............................................................................................................... --------
-


-------- Initialize Calculations --------
-


For each (Integer Integer_SHCustomInteger) from 1 to Integer_SHAbilityMaxLevel, do (Actions)
-



Loop - Actions
-




Set Reals_SHCustom[Integer_SHCustomInteger] = (Reals_SHCloudHeight[Integer_SHCustomInteger] x 2.00)
-
-
-


-------- ............................................................................................................... --------
-


-------- index reference --------
-


Set Integer_SHCurrentIndex = 0
-


-------- ............................................................................................................... --------
-


-------- for global variable declaration and nulling --------
-


Set Unit_SHPicked = 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 Ability_StormingHammers
-
-

Actions
-


-------- --------
-


-------- OnCast --------
-


-------- --------
-


-------- no locals declared --------
-


-------- --------
-


-------- instance storage --------
-


Set Integer_SHMaxIndex = (Integer_SHMaxIndex + 1)
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




Integer_SHMaxIndex Equal to 1
-
-



Then - Actions
-




Trigger - Turn on Storming Hammers Loop <gen>
-
-



Else - Actions
-
-


-------- --------
-


-------- allocations --------
-


Set Units_SHCaster[Integer_SHMaxIndex] = (Triggering unit)
-


Set Players_SHCaster[Integer_SHMaxIndex] = (Owner of Units_SHCaster[Integer_SHMaxIndex])
-


Set Integers_SHLevel[Integer_SHMaxIndex] = (Level of Ability_StormingHammers for Units_SHCaster[Integer_SHMaxIndex])
-


Custom script: set udg_Reals_SHX[udg_Integer_SHMaxIndex] = GetSpellTargetX( )
-


Custom script: set udg_Reals_SHY[udg_Integer_SHMaxIndex] = GetSpellTargetY( )
-


Custom script: set udg_Units_SH[udg_Integer_SHMaxIndex] = CreateUnit( udg_Players_SHCaster[udg_Integer_SHMaxIndex] , udg_UnitType_SHDummy , udg_Reals_SHX[udg_Integer_SHMaxIndex] , udg_Reals_SHY[udg_Integer_SHMaxIndex] , GetRandomReal( 0 , 360 ) )
-


Custom script: set udg_SEs_SHCloudModelHandler[udg_Integer_SHMaxIndex] = AddSpecialEffectTarget( udg_Strings_SHEffect[ 1 ] , udg_Units_SH[udg_Integer_SHMaxIndex ] , udg_String_SHEffectAttach)
-


Custom script: call SetUnitScale( udg_Units_SH[udg_Integer_SHMaxIndex] , udg_Reals_SHCloudSize[ udg_Integers_SHLevel[udg_Integer_SHMaxIndex] ] , 0 , 0 )
-


Custom script: call SetUnitFlyHeight(udg_Units_SH[udg_Integer_SHMaxIndex] , udg_Reals_SHCloudHeight[ udg_Integers_SHLevel[udg_Integer_SHMaxIndex] ] , 0 )
-


-------- --------
-


-------- counters --------
-


Set SH_HammerSpawnIntervalCounter[Integer_SHMaxIndex] = 0.00
-


Set Reals_SHActivationDelayCounter[Integer_SHMaxIndex] = 0.00
-


Set Reals_SHDurationCounter[Integer_SHMaxIndex] = 0.00
-


Set Booleans_SHCustom[Integer_SHMaxIndex] = False
-


-------- --------
-


-------- phase one insert cloud --------
-


Set Integers_SHPhase[Integer_SHMaxIndex] = 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 Integer_SHCurrentIndex) from 1 to Integer_SHMaxIndex, do (Actions)
-



Loop - Actions
-




-------- --------
-




-------- phase one cloud --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Integers_SHPhase[Integer_SHCurrentIndex] Equal to 1
-
-





Then - Actions
-






-------- --------
-






-------- cloud activation --------
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








Reals_SHActivationDelayCounter[Integer_SHCurrentIndex] Greater than or equal to Reals_SHActivationDelay[Integers_SHLevel[Integer_SHCurrentIndex]]
-
-







Then - Actions
-








-------- --------
-








-------- cloud activation effect --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










Booleans_SHCustom[Integer_SHCurrentIndex] Equal to False
-
-









Then - Actions
-










Custom script: set udg_SEs_SHCloudModelHandler2[udg_Integer_SHCurrentIndex] = AddSpecialEffectTarget( udg_Strings_SHEffect[ 7 ] , udg_Units_SH[udg_Integer_SHCurrentIndex] , udg_String_SHEffectAttach)
-










Set Booleans_SHCustom[Integer_SHCurrentIndex] = True
-
-









Else - Actions
-
-








-------- --------
-








-------- hammers produce time --------
-








Set SH_HammerSpawnIntervalCounter[Integer_SHCurrentIndex] = (SH_HammerSpawnIntervalCounter[Integer_SHCurrentIndex] + Real_SHLoopInterval)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










SH_HammerSpawnIntervalCounter[Integer_SHCurrentIndex] Greater than or equal to Reals_SHHammerSpawnInterval[Integers_SHLevel[Integer_SHCurrentIndex]]
-
-









Then - Actions
-










-------- --------
-










For each (Integer Integer_SHCustomInteger) from 1 to Integers_SHHammerAmount[Integers_SHLevel[Integer_SHCurrentIndex]], do (Actions)
-











Loop - Actions
-












-------- --------
-












-------- spawn offset --------
-












Custom script: set x = udg_Reals_SHX[ udg_Integer_SHCurrentIndex] + GetRandomReal( 0 , udg_Reals_SHRadius[ udg_Integers_SHLevel[ udg_Integer_SHCurrentIndex] ] ) * Cos( GetRandomReal( -bj_PI , bj_PI ) )
-












Custom script: set y = udg_Reals_SHY[ udg_Integer_SHCurrentIndex] + GetRandomReal( 0 , udg_Reals_SHRadius[ udg_Integers_SHLevel[ udg_Integer_SHCurrentIndex] ] ) * Sin( GetRandomReal( -bj_PI , bj_PI ) )
-












-------- --------
-












-------- hammers creation --------
-












Set Integer_SHMaxIndex = (Integer_SHMaxIndex + 1)
-












Custom script: set udg_Units_SHCustom[ udg_Integer_SHMaxIndex] = CreateUnit( udg_Players_SHCaster[udg_Integer_SHCurrentIndex] , udg_UnitType_SHDummy , x , y , GetRandomReal( 0 , 360 ) )
-












Custom script: set udg_SEs_SHHammerModelHandler[ udg_Integer_SHMaxIndex] = AddSpecialEffectTarget( udg_Strings_SHEffect[ 2 ] , udg_Units_SHCustom[ udg_Integer_SHMaxIndex] , udg_String_SHEffectAttach)
-












Custom script: set udg_SEs_SHTrailModelHandler[ udg_Integer_SHMaxIndex] = AddSpecialEffectTarget( udg_Strings_SHEffect[ 3 ] , udg_Units_SHCustom[ udg_Integer_SHMaxIndex] , udg_String_SHEffectAttach)
-












Custom script: call SetUnitScale( udg_Units_SHCustom[ udg_Integer_SHMaxIndex] , udg_Reals_SHHammerSize[ udg_Integers_SHLevel[ udg_Integer_SHCurrentIndex] ] , 0 , 0 )
-












Custom script: call SetUnitFlyHeight( udg_Units_SHCustom[ udg_Integer_SHMaxIndex] , udg_Reals_SHCustom[ udg_Integers_SHLevel[ udg_Integer_SHCurrentIndex] ] , 0 )
-












Custom script: call SH_SetPitch( udg_Units_SHCustom[ udg_Integer_SHMaxIndex] , udg_Real_SHPitch)
-












-------- --------
-












-------- hammers player color boolean --------
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














Boolean_SHHammerPlayerColor Equal to True
-
-













Then - Actions
-














Unit - Change color of Units_SHCustom[Integer_SHMaxIndex] to (Color of Players_SHCaster[Integer_SHCurrentIndex])
-
-













Else - Actions
-














Unit - Change color of Units_SHCustom[Integer_SHMaxIndex] to (Color of Neutral Passive)
-
-
-












-------- --------
-












Set Units_SHCaster[Integer_SHMaxIndex] = Units_SHCaster[Integer_SHCurrentIndex]
-












Set Players_SHCaster[Integer_SHMaxIndex] = Players_SHCaster[Integer_SHCurrentIndex]
-












Set Integers_SHLevel[Integer_SHMaxIndex] = Integers_SHLevel[Integer_SHCurrentIndex]
-












Set Units_SH[Integer_SHMaxIndex] = Units_SH[Integer_SHCurrentIndex]
-












Set Reals_SHHammerCurrentHeight[Integer_SHMaxIndex] = (Current flying height of Units_SHCustom[Integer_SHMaxIndex])
-












Set SH_HammerFallTimeCalculation[Integer_SHMaxIndex] = (Reals_SHHammerCurrentHeight[Integer_SHMaxIndex] / ((Random real number between Reals_SHHammerFallMinTime[Integers_SHLevel[Integer_SHMaxIndex]] and Reals_SHHammerFallMaxTime[Integers_SHLevel[Integer_SHMaxIndex]]) / Real_SHLoopInterval))
-












-------- --------
-












-------- phase two insert hammer --------
-












Set Integers_SHPhase[Integer_SHMaxIndex] = 2
-












-------- --------
-
-
-










-------- --------
-










-------- reset --------
-










Set SH_HammerSpawnIntervalCounter[Integer_SHCurrentIndex] = 0.00
-










-------- --------
-
-









Else - Actions
-
-








-------- --------
-








Set Reals_SHDurationCounter[Integer_SHCurrentIndex] = (Reals_SHDurationCounter[Integer_SHCurrentIndex] + Real_SHLoopInterval)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










Reals_SHDurationCounter[Integer_SHCurrentIndex] Greater than or equal to Reals_SHDuration[Integers_SHLevel[Integer_SHCurrentIndex]]
-
-









Then - Actions
-










-------- --------
-










-------- !CloudDestroy! --------
-










Special Effect - Destroy SEs_SHCloudModelHandler[Integer_SHCurrentIndex]
-










Special Effect - Destroy SEs_SHCloudModelHandler2[Integer_SHCurrentIndex]
-










Unit - Kill Units_SH[Integer_SHCurrentIndex]
-










Set Integers_SHPhase[Integer_SHCurrentIndex] = 3
-










-------- --------
-
-









Else - Actions
-
-








-------- --------
-
-







Else - Actions
-








-------- --------
-








Set Reals_SHActivationDelayCounter[Integer_SHCurrentIndex] = (Reals_SHActivationDelayCounter[Integer_SHCurrentIndex] + Real_SHLoopInterval)
-








-------- --------
-
-
-
-





Else - Actions
-
-




-------- --------
-




-------- phase two hammers --------
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Integers_SHPhase[Integer_SHCurrentIndex] Equal to 2
-
-





Then - Actions
-






-------- --------
-






Set Reals_SHHammerCurrentHeight[Integer_SHCurrentIndex] = (Reals_SHHammerCurrentHeight[Integer_SHCurrentIndex] - SH_HammerFallTimeCalculation[Integer_SHCurrentIndex])
-






Custom script: call SetUnitFlyHeight( udg_Units_SHCustom[ udg_Integer_SHCurrentIndex] , udg_Reals_SHHammerCurrentHeight[ udg_Integer_SHCurrentIndex] , 0 )
-






-------- --------
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








Reals_SHHammerCurrentHeight[Integer_SHCurrentIndex] Less than or equal to Real_SHFloorHeight
-
-







Then - Actions
-








-------- --------
-








Custom script: set x = GetUnitX( udg_Units_SHCustom[ udg_Integer_SHCurrentIndex] )
-








Custom script: set y = GetUnitY( udg_Units_SHCustom[ udg_Integer_SHCurrentIndex] )
-








Custom script: call DestroyEffect( AddSpecialEffect( udg_Strings_SHEffect[ 4 ] , x , y ) )
-








-------- --------
-








-------- single dummy caster creation --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










Boolean_SHHammerChainLightning Equal to True
-
-









Then - Actions
-










Custom script: set u = CreateUnit( udg_Players_SHCaster[ udg_Integer_SHCurrentIndex] , udg_UnitType_SHDummy , x , y , GetRandomReal( 0 , 360 ) )
-










Custom script: call UnitAddAbility( u , udg_Ability_StormingHammersDummy)
-










Custom script: call UnitApplyTimedLife( u , 'BTLF' , 1 )
-
-









Else - Actions
-
-








-------- --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










Boolean_SHDestroyTrees Equal to True
-
-









Then - Actions
-










-------- --------
-










Custom script: call MoveLocation( udg_Point_SHCustom , x , y )
-










Destructible - Pick every destructible within Reals_SHHammerCollision[Integers_SHLevel[Integer_SHCurrentIndex]] of Point_SHCustom and do (Actions)
-











Loop - Actions
-












Set Destructible_SHTree = (Picked destructible)
-












Unit - Order Unit_SHTreeChecker to Harvest Destructible_SHTree
-












If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-













If - Conditions
-














(Current order of Unit_SHTreeChecker) Equal to (Order(harvest))
-
-













Then - Actions
-














Destructible - Kill Destructible_SHTree
-
-













Else - Actions
-
-












Unit - Order Unit_SHTreeChecker to Stop
-
-
-










-------- --------
-
-









Else - Actions
-
-








-------- --------
-








-------- * KB3D SYSTEM * --------
-








-------- --------
-








Custom script: call GroupEnumUnitsInRange( bj_lastCreatedGroup , x , y , udg_Reals_SHHammerCollision[ udg_Integers_SHLevel[ udg_Integer_SHCurrentIndex] ] , null )
-








Custom script: loop
-








Custom script: set udg_Unit_SHPicked = FirstOfGroup( bj_lastCreatedGroup )
-








Custom script: exitwhen udg_Unit_SHPicked == null
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










(Unit_SHPicked is dead) Equal to False
-










(Unit_SHPicked is Magic Immune) Equal to False
-










(Unit_SHPicked is A flying unit) Equal to False
-










(Unit_SHPicked belongs to an enemy of Players_SHCaster[Integer_SHCurrentIndex]) Equal to True
-
-









Then - Actions
-










-------- --------
-










-------- normal damage effect --------
-










Custom script: call DestroyEffect( AddSpecialEffectTarget( udg_Strings_SHEffect[ 5 ] , udg_Unit_SHPicked , udg_String_SHEffectAttach) )
-










Unit - Cause Units_SHCaster[Integer_SHCurrentIndex] to damage Unit_SHPicked, dealing Reals_SHHammerDamage[Integers_SHLevel[Integer_SHCurrentIndex]] damage of attack type AttackType_StormingHammers and damage type DamageType_SH
-










-------- --------
-










-------- chain lightning boolean --------
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












Boolean_SHHammerChainLightning Equal to True
-
-











Then - Actions
-












-------- --------
-












-------- dummy caster single chain lightning --------
-












Custom script: call IssueTargetOrder( u , "chainlightning" , udg_Unit_SHPicked)
-












-------- --------
-
-











Else - Actions
-
-










-------- --------
-










-------- knockback boolean --------
-










If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-











If - Conditions
-












(Unit_SHPicked is A structure) Equal to False
-












Boolean_SHHammerKB Equal to True
-
-











Then - Actions
-












-------- --------
-












Custom script: set i = GetHandleId( udg_Unit_SHPicked)
-












Custom script: set x2 = GetUnitX( udg_Unit_SHPicked)
-












Custom script: set y2 = GetUnitY( udg_Unit_SHPicked)
-












-------- --------
-












Custom script: if not LoadBoolean( udg_KB3D_HA , i , i ) then
-












Set KB3D_Unit = Unit_SHPicked
-












Set KB3D_Range = Reals_SHKBRange[Integers_SHLevel[Integer_SHCurrentIndex]]
-












Set KB3D_Speed = Reals_SHKBSpeed[Integers_SHLevel[Integer_SHCurrentIndex]]
-












Custom script: set udg_KB3D_Angle = Atan2( y2 - y , x2 - x ) * bj_RADTODEG
-












Set KB3D_Accel = Reals_SHKBAcceleration[Integers_SHLevel[Integer_SHCurrentIndex]]
-












Set KB3D_AttackType = AttackType_StormingHammers
-












Set KB3D_DamageType = DamageType_SH
-












Set KB3D_Damager = Units_SHCaster[Integer_SHCurrentIndex]
-












Set KB3D_DestroyTree = Boolean_SHDestroyTrees
-












Set KB3D_FaceAngle = False
-












Set KB3D_Fx = Strings_SHEffect[6]
-












Set KB3D_Attach = String_SHEffectAttach
-












Set KB3D_iKB = True
-












Set KB3D_UnpathableStop = True
-












Set KB3D_Zoffset = Reals_SHKBMaxHeight[Integers_SHLevel[Integer_SHCurrentIndex]]
-












-------- --------
-












-------- 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_Unit_SHPicked)
-








Custom script: endloop
-








-------- --------
-








-------- !HammerDestroy! --------
-








Special Effect - Destroy SEs_SHHammerModelHandler[Integer_SHCurrentIndex]
-








Special Effect - Destroy SEs_SHTrailModelHandler[Integer_SHCurrentIndex]
-








Unit - Kill Units_SHCustom[Integer_SHCurrentIndex]
-








Set Integers_SHPhase[Integer_SHCurrentIndex] = 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
-






Integers_SHPhase[Integer_SHCurrentIndex] Equal to 3
-
-





Then - Actions
-






-------- --------
-






-------- recycling indexes --------
-






Set Units_SHCaster[Integer_SHCurrentIndex] = Units_SHCaster[Integer_SHMaxIndex]
-






Set Players_SHCaster[Integer_SHCurrentIndex] = Players_SHCaster[Integer_SHMaxIndex]
-






Set Integers_SHLevel[Integer_SHCurrentIndex] = Integers_SHLevel[Integer_SHMaxIndex]
-






Set Units_SH[Integer_SHCurrentIndex] = Units_SH[Integer_SHMaxIndex]
-






Set Units_SHCustom[Integer_SHCurrentIndex] = Units_SHCustom[Integer_SHMaxIndex]
-






Set SEs_SHCloudModelHandler[Integer_SHCurrentIndex] = SEs_SHCloudModelHandler[Integer_SHMaxIndex]
-






Set SEs_SHCloudModelHandler2[Integer_SHCurrentIndex] = SEs_SHCloudModelHandler2[Integer_SHMaxIndex]
-






Set SEs_SHHammerModelHandler[Integer_SHCurrentIndex] = SEs_SHHammerModelHandler[Integer_SHMaxIndex]
-






Set SEs_SHTrailModelHandler[Integer_SHCurrentIndex] = SEs_SHTrailModelHandler[Integer_SHMaxIndex]
-






Set Reals_SHDurationCounter[Integer_SHCurrentIndex] = Reals_SHDurationCounter[Integer_SHMaxIndex]
-






Set Reals_SHActivationDelayCounter[Integer_SHCurrentIndex] = Reals_SHActivationDelayCounter[Integer_SHMaxIndex]
-






Set SH_HammerSpawnIntervalCounter[Integer_SHCurrentIndex] = SH_HammerSpawnIntervalCounter[Integer_SHMaxIndex]
-






Set Booleans_SHCustom[Integer_SHCurrentIndex] = Booleans_SHCustom[Integer_SHMaxIndex]
-






Set Reals_SHX[Integer_SHCurrentIndex] = Reals_SHX[Integer_SHMaxIndex]
-






Set Reals_SHY[Integer_SHCurrentIndex] = Reals_SHY[Integer_SHMaxIndex]
-






Set Reals_SHHammerCurrentHeight[Integer_SHCurrentIndex] = Reals_SHHammerCurrentHeight[Integer_SHMaxIndex]
-






Set SH_HammerFallTimeCalculation[Integer_SHCurrentIndex] = SH_HammerFallTimeCalculation[Integer_SHMaxIndex]
-






Set Integers_SHPhase[Integer_SHCurrentIndex] = Integers_SHPhase[Integer_SHMaxIndex]
-






-------- --------
-






-------- eliminate instance on storage --------
-






Set Integer_SHCurrentIndex = (Integer_SHCurrentIndex - 1)
-






Set Integer_SHMaxIndex = (Integer_SHMaxIndex - 1)
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








Integer_SHMaxIndex Equal to 0
-
-







Then - Actions
-








Trigger - Turn off (This trigger)
-
-







Else - Actions
-
-






-------- --------
-
-





Else - Actions
-
-




-------- --------
-
-
-
-
-
Elune Arrow
-

Events
-


Unit - A unit Starts the effect of an ability
-
-

Conditions
-


(Ability being cast) Equal to Elune's Arrow [Golem]
-
-

Actions
-


Set Integer_ArrowCounts = (Integer_ArrowCounts + 1)
-


Set Integer_ArrowCountMaxSize = 8191
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




Integer_ArrowCounts Greater than Integer_ArrowCountMaxSize
-
-



Then - Actions
-




Set Integer_ArrowCounts = 1
-
-



Else - Actions
-
-


Set Units_ArrowCaster[Integer_ArrowCounts] = (Casting unit)
-


Set Point_ArrowCaster = (Position of Units_ArrowCaster[Integer_ArrowCounts])
-


Set Point_ArrowTarget = (Target point of ability being cast)
-


Set Real_ArrowAngle = (Angle from Point_ArrowCaster to Point_ArrowTarget)
-


Unit - Create 1 Elune's Arrow for (Owner of Units_ArrowCaster[Integer_ArrowCounts]) at Point_ArrowCaster facing Real_ArrowAngle degrees
-


Unit - Set the custom value of (Last created unit) to Integer_ArrowCounts
-


Unit Group - Add (Last created unit) to UnitGroup_ArrowStart
-


Set Reals_ArrowDistance[Integer_ArrowCounts] = 3000.00
-


Set Reals_ArrowDistanceTravel[Integer_ArrowCounts] = 0.00
-


Set Integers_ArrowStunDuration[Integer_ArrowCounts] = 1
-


Set Reals_ArrowDistanceCount[Integer_ArrowCounts] = 0.00
-


Trigger - Turn on Elune Arrow Move <gen>
-


Custom script: call RemoveLocation (udg_Point_ArrowCaster)
-


Custom script: call RemoveLocation (udg_Point_ArrowTarget)
-
-
-
Elune Arrow Move
-

Events
-


Time - Every 0.02 seconds of game time
-
-

Conditions
-

Actions
-


Unit Group - Pick every unit in UnitGroup_ArrowStart and do (Actions)
-



Loop - Actions
-




Set Integer_ArrowCusValue = (Custom value of (Picked unit))
-




Set Point_ArrowDummy = (Position of (Picked unit))
-




Set Point_ArrowMovement = (Point_ArrowDummy offset by 20.00 towards (Facing of (Picked unit)) degrees)
-




Unit - Move (Picked unit) instantly to Point_ArrowMovement
-




Set Reals_ArrowDistanceTravel[Integer_ArrowCusValue] = (Reals_ArrowDistanceTravel[Integer_ArrowCusValue] + 18.00)
-




Set Reals_ArrowDistanceCount[Integer_ArrowCusValue] = (Reals_ArrowDistanceCount[Integer_ArrowCusValue] + 18.00)
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Reals_ArrowDistanceCount[Integer_ArrowCusValue] Greater than or equal to 225.00
-
-





Then - Actions
-






Set Integers_ArrowStunDuration[Integer_ArrowCusValue] = (Integers_ArrowStunDuration[Integer_ArrowCusValue] + 1)
-






Set Reals_ArrowDistanceCount[Integer_ArrowCusValue] = 0.00
-
-





Else - Actions
-
-




Set UnitGroup_Arrow = (Units within 150.00 of Point_ArrowMovement matching ((((Matching unit) is A structure) Not equal to True) and ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of Units_ArrowCaster[Integer_ArrowCusValue])) Equal
-




Set UnitGroup_ArrowRandomUnit = (Random 1 units from UnitGroup_Arrow)
-




Unit Group - Pick every unit in UnitGroup_ArrowRandomUnit and do (Actions)
-





Loop - Actions
-






Unit - Cause Units_ArrowCaster[Integer_ArrowCusValue] to damage (Picked unit), dealing 750.00 damage of attack type Spells and damage type Universal
-






Unit - Create 1 Hidden [Dummy] for (Owner of Units_ArrowCaster[Integer_ArrowCusValue]) at Point_ArrowMovement facing Default building facing degrees
-






Unit - Add Elune's Arrow Stun to (Last created unit)
-






Unit - Set level of Elune's Arrow Stun for (Last created unit) to Integers_ArrowStunDuration[Integer_ArrowCusValue]
-






Unit - Order (Last created unit) to Human Mountain King - Storm Bolt (Picked unit)
-






Unit - Add a 1.50 second Generic expiration timer to (Last created unit)
-
-
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






Or - Any (Conditions) are true
-







Conditions
-








Reals_ArrowDistanceTravel[Integer_ArrowCusValue] Greater than or equal to Reals_ArrowDistance[Integer_ArrowCusValue]
-








(Number of units in UnitGroup_Arrow) Greater than 0
-
-
-
-





Then - Actions
-






Unit - Kill (Picked unit)
-






Unit Group - Remove (Picked unit) from UnitGroup_ArrowStart
-
-





Else - Actions
-
-




Custom script: call RemoveLocation (udg_Point_ArrowDummy)
-




Custom script: call RemoveLocation (udg_Point_ArrowMovement)
-




Custom script: call DestroyGroup (udg_UnitGroup_Arrow)
-




Custom script: call DestroyGroup (udg_UnitGroup_ArrowRandomUnit)
-
-
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




(Number of units in UnitGroup_ArrowStart) Equal to 0
-
-



Then - Actions
-




Trigger - Turn off (This trigger)
-
-



Else - Actions
-
-
-
Power Hook v1.3
-
Hook
-

Events
-


Unit - A unit Starts the effect of an ability
-
-

Conditions
-


(Ability being cast) Equal to Hook [Golem]
-
-

Actions
-


-------- ----------------------- --------
-


-------- Index System --------
-


-------- ----------------------- --------
-


If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-



If - Conditions
-




PH_Index[1] Equal to 0
-
-



Then - Actions
-




Trigger - Turn on Hook Loop <gen>
-
-



Else - Actions
-
-


Set PH_Index[1] = (PH_Index[1] + 1)
-


Set PH_Index[2] = (PH_Index[2] + 1)
-


-------- ----------------------- --------
-


-------- Spell Settings --------
-


-------- ----------------------- --------
-


Set PH_Counter[PH_Index[2]] = 0
-


-------- ----------------------- --------
-


-------- Points for angle --------
-


Set PH_Cast_Point = (Position of (Triggering unit))
-


Set PH_Target_Point = (Target point of ability being cast)
-


-------- ----------------------- --------
-


-------- Caster --------
-


Set PH_Caster[PH_Index[2]] = (Triggering unit)
-


Unit - Pause PH_Caster[PH_Index[2]]
-


Animation - Play PH_Caster[PH_Index[2]]'s attack animation
-


-------- ----------------------- --------
-


-------- Angle for hook --------
-


Set PH_Hook_Angle[PH_Index[2]] = (Angle from PH_Cast_Point to PH_Target_Point)
-


-------- ----------------------- --------
-


-------- Hook (Dummy) --------
-


Set PH_Near_Point = (PH_Cast_Point offset by 100.00 towards PH_Hook_Angle[PH_Index[2]] degrees)
-


Unit - Create 1 Hook for (Owner of PH_Caster[PH_Index[2]]) at PH_Near_Point facing Default building facing degrees
-


Set PH_Dummy[PH_Index[2]] = (Last created unit)
-


-------- ----------------------- --------
-


-------- Things needed for spell to work fine --------
-


Set PH_Hooked_Is[PH_Index[2]] = False
-


Set PH_Hooked_Unit[PH_Index[2]] = No unit
-


-------- ----------------------- --------
-


-------- Removing leaks --------
-


Custom script: call RemoveLocation(udg_PH_Near_Point)
-


Custom script: call RemoveLocation(udg_PH_Cast_Point)
-


Custom script: call RemoveLocation(udg_PH_Target_Point)
-


-------- ----------------------- --------
-


-------- Adjustable settings --------
-


-------- ----------------------- --------
-


-------- Damage and Hook Distance --------
-


Set PH_Damage = (750 x (Level of (Ability being cast) for PH_Caster[PH_Index[2]]))
-


Set PH_Distance = (15 + (5 x (Level of (Ability being cast) for PH_Caster[PH_Index[2]])))
-


-------- ----------------------- --------
-


-------- ----------------------- --------
-
-
-
Hook Loop
-

Events
-


Time - Every 0.02 seconds of game time
-
-

Conditions
-

Actions
-


For each (Integer PH_Index[3]) from 1 to PH_Index[2], do (Actions)
-



Loop - Actions
-




If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-





If - Conditions
-






PH_Counter[PH_Index[3]] Less than PH_Distance
-
-





Then - Actions
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








PH_Hooked_Is[PH_Index[3]] Equal to False
-
-







Then - Actions
-








-------- ----------------------- --------
-








-------- Moving hook and creating effects --------
-








-------- ----------------------- --------
-








-------- Counter incrasing --------
-








Set PH_Counter[PH_Index[3]] = (PH_Counter[PH_Index[3]] + 1)
-








-------- ----------------------- --------
-








-------- Set Locations and move Hook dummy --------
-








Set PH_Dummy_Point[PH_Index[3]] = (Position of PH_Dummy[PH_Index[3]])
-








Set PH_Hook_Point[PH_Index[3]] = (PH_Dummy_Point[PH_Index[3]] offset by 30.00 towards PH_Hook_Angle[PH_Index[3]] degrees)
-








-------- ----------------------- --------
-








Unit - Move PH_Dummy[PH_Index[3]] instantly to PH_Hook_Point[PH_Index[3]]
-








Unit - Create 1 Hook Effect for (Owner of PH_Caster[PH_Index[3]]) at PH_Dummy_Point[PH_Index[3]] facing PH_Hook_Angle[PH_Index[3]] degrees
-








Unit - Turn collision for (Last created unit) Off
-








Hashtable - Save Handle Of(Last created unit) as PH_Counter[PH_Index[3]] of PH_Index[3] in PH_Table
-








-------- ----------------------- --------
-








-------- Hooking enemy unit --------
-








-------- ----------------------- --------
-








Custom script: set bj_wantDestroyGroup = true
-








Unit Group - Pick every unit in (Units within 64.00 of PH_Hook_Point[PH_Index[3]] matching ((((Matching unit) is alive) Equal to True) and (((Matching unit) belongs to an enemy of (Owner of PH_Caster[PH_Index[3]])) 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 Magic Immune) Equal to False
-












PH_Hooked_Is[PH_Index[3]] Equal to False
-
-











Then - Actions
-












Set PH_Hooked_Unit[PH_Index[3]] = (Picked unit)
-












Set PH_Hooked_Is[PH_Index[3]] = True
-












Unit - Pause (Picked unit)
-












Unit - Turn collision for (Picked unit) Off
-












-------- ----------------------- --------
-












-------- Deal damage --------
-












Unit - Cause PH_Caster[PH_Index[3]] to damage (Picked unit), dealing (Real(PH_Damage)) damage of attack type Spells and damage type Lightning
-












-------- ----------------------- --------
-
-











Else - Actions
-
-
-
-








Custom script: call RemoveLocation(udg_PH_Dummy_Point[udg_PH_Index[3]])
-








Custom script: call RemoveLocation(udg_PH_Hook_Point[udg_PH_Index[3]])
-








-------- Leaks Removed --------
-








-------- ----------------------- --------
-








-------- ----------------------- --------
-








-------- No unit hooked? --------
-








-------- ----------------------- --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










PH_Counter[PH_Index[3]] Equal to PH_Distance
-
-









Then - Actions
-










Set PH_Hooked_Is[PH_Index[3]] = True
-










Unit - Unpause PH_Caster[PH_Index[3]]
-
-









Else - Actions
-
-








-------- ----------------------- --------
-








-------- ----------------------- --------
-








-------- ----------------------- --------
-
-







Else - Actions
-
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








PH_Hooked_Is[PH_Index[3]] Equal to True
-
-







Then - Actions
-








-------- ----------------------- --------
-








-------- Moving Hook back --------
-








-------- ----------------------- --------
-








-------- Counter decrasing --------
-








Set PH_Counter[PH_Index[3]] = (PH_Counter[PH_Index[3]] - 1)
-








-------- ----------------------- --------
-








-------- Setting locations to move Hook dummy and hooked unit --------
-








Set PH_Dummy_Point[PH_Index[3]] = (Position of PH_Dummy[PH_Index[3]])
-








Set PH_Hook_Point[PH_Index[3]] = (PH_Dummy_Point[PH_Index[3]] offset by 30.00 towards (PH_Hook_Angle[PH_Index[3]] - 180.00) degrees)
-








-------- ----------------------- --------
-








-------- Destroy effect of hook --------
-








Set PH_Effect = (Load (PH_Counter[PH_Index[3]] + 1) of PH_Index[3] in PH_Table)
-








Unit - Kill PH_Effect
-








Unit - Remove PH_Effect from the game
-








-------- ----------------------- --------
-








-------- ----------------------- --------
-








Unit - Move PH_Dummy[PH_Index[3]] instantly to PH_Hook_Point[PH_Index[3]]
-








-------- ----------------------- --------
-








-------- Moving hooked unit --------
-








-------- ----------------------- --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










PH_Hooked_Unit[PH_Index[3]] Not equal to No unit
-
-









Then - Actions
-










Unit - Move PH_Hooked_Unit[PH_Index[3]] instantly to PH_Dummy_Point[PH_Index[3]]
-
-









Else - Actions
-
-








Custom script: call RemoveLocation(udg_PH_Dummy_Point[udg_PH_Index[3]])
-








Custom script: call RemoveLocation(udg_PH_Hook_Point[udg_PH_Index[3]])
-








-------- ----------------------- --------
-








-------- Leaks Removed --------
-








-------- ----------------------- --------
-
-







Else - Actions
-
-






If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-







If - Conditions
-








PH_Counter[PH_Index[3]] Equal to 0
-
-







Then - Actions
-








-------- ----------------------- --------
-








-------- Removing hook and unpause caster --------
-








-------- ----------------------- --------
-








Unit - Kill PH_Dummy[PH_Index[3]]
-








Unit - Remove PH_Dummy[PH_Index[3]] from the game
-








Unit - Unpause PH_Caster[PH_Index[3]]
-








Animation - Reset PH_Caster[PH_Index[3]]'s animation
-








-------- ----------------------- --------
-








-------- Unpause Hooked unit --------
-








-------- ----------------------- --------
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










PH_Hooked_Unit[PH_Index[3]] Not equal to No unit
-
-









Then - Actions
-










Unit - Unpause PH_Hooked_Unit[PH_Index[3]]
-










Unit - Turn collision for PH_Hooked_Unit[PH_Index[3]] On
-
-









Else - Actions
-
-








-------- ----------------------- --------
-








-------- Spell Ending --------
-








-------- ----------------------- --------
-








Set PH_Index[1] = (PH_Index[1] - 1)
-








If (All Conditions are True) then do (Then Actions) else do (Else Actions)
-









If - Conditions
-










PH_Index[1] Equal to 0
-
-









Then - Actions
-










Set PH_Index[2] = 0
-










Trigger - Turn off (This trigger)
-
-









Else - Actions
-
-
-







Else - Actions
-
-
-





Else - Actions
-
-
-
-
-
Attachments
Last edited:
