- 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: