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

Piercer of Heaven 4.5

This bundle is marked as useful / simple. Simplicity is bliss, low effort and/or may contain minor bugs.
  • Like
Reactions: Daffa
Description
Sends out a powerful wave of spiritual energy in the shape of a crescent moon. When the wave collides with an enemy unit, it pulls the unit along with it.

Level 1 - 75 damage on impact, 15 damage per second as wave pulls
Level 2 - 150 damage on impact, 30 damage per second as wave pulls
Level 3 - 225 damage on impact, 45 damage per second as wave pulls
Triggers
  • GT Config
    • Events
      • Map initialization
    • Conditions
    • Actions
      • -------- Change anything here with caution --------
      • -------- -------------------- --------
      • -------- -------------------- --------
      • -------- Determines the activating spell --------
      • -------- -------------------- --------
      • Set GT_Ability = Getsuga Tensho
      • -------- -------------------- --------
      • -------- Determines the dummy unit for spell --------
      • -------- -------------------- --------
      • Set GT_Dummy = Dummy (Vexorian, Anitarf, Infrane)
      • -------- -------------------- --------
      • -------- Determines the area in which enemy units may be targets of the spell --------
      • -------- -------------------- --------
      • Set GT_AOE = 100.00
      • -------- -------------------- --------
      • -------- Determines the initial height of the missile --------
      • -------- This is an addition to the caster's current flying height --------
      • -------- -------------------- --------
      • Set GT_FlyHeight = 100.00
      • -------- -------------------- --------
      • -------- Determines the attacktype of the damage dealt on targets --------
      • -------- -------------------- --------
      • Set GT_AttackType = Chaos
      • -------- -------------------- --------
      • -------- Determines the damagetype of the damage dealt on targets --------
      • -------- Set this only to Universal(100% damage, ignores armor) or Normal (Reduction) --------
      • -------- Unless a Damage Detection System is available --------
      • -------- As the other types have no effect --------
      • -------- -------------------- --------
      • Set GT_DamageType = Universal
      • -------- -------------------- --------
      • -------- Determines the size of the missile --------
      • -------- Works the same as in object editor --------
      • -------- -------------------- --------
      • Set GT_InitialSize = 1.25
      • -------- -------------------- --------
      • -------- Ability level influences the following variables --------
      • -------- -------------------- -------------------- -------------------- --------
      • -------- Determines the inital impact damage of the missile --------
      • -------- -------------------- --------
      • Set GT_InitialDamage = 75.00
      • -------- -------------------- --------
      • -------- Determines the inital speed of the missile --------
      • -------- -------------------- --------
      • Set GT_InitialSpeed = 18.00
      • -------- -------------------- -------------------- --------
      • -------- Determines how often missile increases in impact damage and speed --------
      • -------- -------------------- --------
      • Set GT_Interval = 1.00
      • -------- -------------------- -------------------- --------
      • -------- GT_Interval affects the following two variables --------
      • -------- -------------------- --------
      • -------- Determines how fast impact damage increases over time --------
      • -------- -------------------- --------
      • Set GT_DamageInc = 10.00
      • -------- -------------------- --------
      • -------- Determines how fast the speed of the missile increases over time --------
      • -------- -------------------- --------
      • Set GT_SpeedInc = 1.50
      • -------- -------------------- -------------------- -------------------- --------
      • -------- Determines the periodic time for the loop --------
      • -------- -------------------- --------
      • Custom script: set udg_GT_LoopTime = 0.031250000
      • -------- -------------------- --------
      • -------- Determines the damage targets take as they are pulled by the missile --------
      • -------- Damages target per LoopTime --------
      • -------- -------------------- --------
      • Set GT_KB_Dmg = 15.00
      • -------- -------------------- --------
      • -------- Determines the model of the missile in game --------
      • -------- -------------------- --------
      • Set GT_Model = war3mapImported\Moon Missile.mdl
      • -------- -------------------- --------
      • -------- Determines the special effect that occurs when missile drags targets --------
      • -------- -------------------- --------
      • Set GT_KB_Effect = Objects\Spawnmodels\Undead\ImpaleTargetDust\ImpaleTargetDust.mdl
      • -------- -------------------- --------
      • -------- Determines whether the missile will destroy trees or not --------
      • -------- -------------------- --------
      • Set GT_DestroyTrees = True
      • -------- -------------------- --------
      • -------- Determines the special effect when missile collides with an enemy unit --------
      • -------- -------------------- --------
      • Set GT_ImpactFX = Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
      • -------- -------------------- --------
      • -------- Determines the special effect when missile collides with an enemy unit --------
      • -------- When enemy unit is in water --------
      • -------- -------------------- --------
      • Set GT_ImpactFX_Water = Objects\Spawnmodels\Naga\NagaDeath\NagaDeath.mdl
      • -------- -------------------- --------
      • -------- Determines how far missile travels --------
      • -------- -------------------- --------
      • Set GT_Distance = 4000.00
      • -------- -------------------- --------
  • GT Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to GT_Ability
    • Actions
      • -------- Calculate angle for missile movement --------
      • Custom script: local unit u = GetTriggerUnit()
      • Custom script: local real x = GetUnitX(u)
      • Custom script: local real y = GetUnitY(u)
      • Custom script: local real a = Atan2(GetSpellTargetY() - y, GetSpellTargetX() - x)
      • -------- Create a dummy unit --------
      • Custom script: set udg_GT_Missile = CreateUnit(GetTriggerPlayer(),udg_GT_Dummy,x,y,bj_RADTODEG *a)
      • -------- Give missile an index --------
      • Set GT_ID = (Custom value of GT_Missile)
      • -------- Attach a model to missile --------
      • Special Effect - Create a special effect attached to the chest of GT_Missile using GT_Model
      • Set GT_DummyModel[GT_ID] = (Last created special effect)
      • -------- Calculate missile speed --------
      • Custom script: set udg_GT_Cos[udg_GT_ID] = Cos(a)
      • Custom script: set udg_GT_Sin[udg_GT_ID] = Sin(a)
      • -------- Setup missile owner --------
      • Custom script: set udg_GT_Caster[udg_GT_ID] = u
      • Set GT_Owner[GT_ID] = (Triggering player)
      • -------- Setup other components of missile --------
      • Animation - Change GT_Missile's size to ((GT_InitialSize x 100.00)%, 0.00%, 0.00%) of its original size
      • Animation - Change GT_Missile flying height to ((Current flying height of GT_Caster[GT_ID]) + GT_FlyHeight) at 0.00
      • Set GT_Damage[GT_ID] = GT_InitialDamage
      • Set GT_Speed[GT_ID] = GT_InitialSpeed
      • Custom script: set udg_GT_AbilityLevel[udg_GT_ID] = GetUnitAbilityLevel(u, udg_GT_Ability)
      • Custom script: set udg_GT_Damage[udg_GT_ID] = udg_GT_InitialDamage*udg_GT_AbilityLevel[udg_GT_ID]
      • Set GT_Duration[GT_ID] = GT_Distance
      • -------- Represents GT_Interval --------
      • Set GT_Period[GT_ID] = 0.00
      • -------- Create group to collect potential targets --------
      • Custom script: set udg_GT_KB_Group[udg_GT_ID] = CreateGroup()
      • -------- Keep track of spell instances --------
      • Set GT_Index = (GT_Index + 1)
      • -------- Start looping trigger --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • GT_Index Equal to 1
        • Then - Actions
          • Countdown Timer - Start GT_Timer as a Repeating timer that will expire in GT_LoopTime seconds
        • Else - Actions
      • Unit Group - Add GT_Missile to GT_MissileGroup
      • -------- Clean reference leaks --------
      • Custom script: set u = null
  • GT Loop
    • Events
      • Time - GT_Timer expires
    • Conditions
    • Actions
      • -------- Missile Movement --------
      • Unit Group - Pick every unit in GT_MissileGroup and do (Actions)
        • Loop - Actions
          • Set GT_Missile = (Picked unit)
          • -------- Get index of missile --------
          • Set GT_ID = (Custom value of GT_Missile)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • GT_Duration[GT_ID] Greater than 0.00
              • (GT_Caster[GT_ID] is dead) Equal to False
            • Then - Actions
              • Set GT_Duration[GT_ID] = (GT_Duration[GT_ID] - GT_Speed[GT_ID])
              • -------- Setup coordinates for missile movement --------
              • Custom script: set udg_GT_MissileX = GetUnitX(udg_GT_Missile) + udg_GT_Speed[udg_GT_ID]*udg_GT_Cos[udg_GT_ID]
              • Custom script: set udg_GT_MissileY = GetUnitY(udg_GT_Missile) + udg_GT_Speed[udg_GT_ID]*udg_GT_Sin[udg_GT_ID]
              • -------- Are coordinates within map boundaries --------
              • Custom script: if IsPointInMap(udg_GT_MissileX,udg_GT_MissileY) then
              • Custom script: call SetUnitX(udg_GT_Missile, udg_GT_MissileX)
              • Custom script: call SetUnitY(udg_GT_Missile, udg_GT_MissileY)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • GT_Period[GT_ID] Less than or equal to 0.00
                • Then - Actions
                  • Custom script: set udg_GT_Damage[udg_GT_ID] = udg_GT_Damage[udg_GT_ID] + udg_GT_DamageInc*udg_GT_AbilityLevel[udg_GT_ID]
                  • Custom script: set udg_GT_Speed[udg_GT_ID] = udg_GT_Speed[udg_GT_ID] + udg_GT_SpeedInc*udg_GT_AbilityLevel[udg_GT_ID]
                  • Set GT_Period[GT_ID] = GT_Interval
                • Else - Actions
                  • Set GT_Period[GT_ID] = (GT_Period[GT_ID] - GT_LoopTime)
              • -------- Destroy trees if enabled --------
              • Set GT_TargetPoint = (Point(GT_MissileX, GT_MissileY))
              • Destructible - Pick every destructible within GT_AOE of GT_TargetPoint and do (Actions)
                • Loop - Actions
                  • Set Dest = (Picked destructible)
                  • Set TreeKill = GT_DestroyTrees
                  • Trigger - Run TreeKiller GUI <gen> (ignoring conditions)
              • -------- Pick out potential targets --------
              • Custom script: set bj_wantDestroyGroup = true
              • Unit Group - Pick every unit in (Units within GT_AOE of GT_TargetPoint) and do (Actions)
                • Loop - Actions
                  • Set GT_Target = (Picked unit)
                  • Set GT_TempLoc = (Position of GT_Target)
                  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                    • If - Conditions
                      • (GT_Target belongs to an enemy of GT_Owner[GT_ID]) Equal to True
                      • (GT_Target is dead) Equal to False
                      • (GT_Target is A structure) Equal to False
                      • (GT_Target is A flying unit) Equal to False
                      • (Distance between GT_TargetPoint and GT_TempLoc) Less than or equal to 100.00
                    • Then - Actions
                      • -------- Stun Target --------
                      • Set STE_TARGET = GT_Target
                      • Set STE_DURATION = GT_LoopTime
                      • Set STE_ADD_STUN = True
                      • Custom script: call TriggerEvaluate(udg_STE_TRIGGER)
                      • -------- Handles everything related to knockback --------
                      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                        • If - Conditions
                          • (GT_Target is in GT_KB_Group[GT_ID]) Equal to False
                        • Then - Actions
                          • -------- Create Sfx on impact --------
                          • Custom script: set udg_GT_MissileX = GetUnitX(udg_GT_Target)
                          • Custom script: set udg_GT_MissileY = GetUnitY(udg_GT_Target)
                          • Custom script: if not IsTerrainPathable(GetUnitX(udg_GT_Target), GetUnitY(udg_GT_Target), PATHING_TYPE_FLOATABILITY) then
                          • Custom script: call DestroyEffect(AddSpecialEffect(udg_GT_ImpactFX_Water, udg_GT_MissileX, udg_GT_MissileY))
                          • Custom script: else
                          • Custom script: call DestroyEffect(AddSpecialEffect(udg_GT_ImpactFX, udg_GT_MissileX, udg_GT_MissileY))
                          • Custom script: endif
                          • -------- Damage target on impact --------
                          • Unit - Cause GT_Caster[GT_ID] to damage GT_Target, dealing GT_Damage[GT_ID] damage of attack type GT_AttackType and damage type GT_DamageType
                          • -------- Prevent damaging target twice on impact --------
                          • Unit Group - Add GT_Target to GT_KB_Group[GT_ID]
                        • Else - Actions
                          • -------- 33% chance to damage target while dragging it --------
                          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                            • If - Conditions
                              • (Random integer number between 0 and 2) Equal to 0
                            • Then - Actions
                              • Custom script: call UnitDamageTarget(udg_GT_Caster[udg_GT_ID], udg_GT_Target, udg_GT_KB_Dmg*udg_GT_AbilityLevel[udg_GT_ID], false, false, udg_GT_AttackType, udg_GT_DamageType, null)
                              • Special Effect - Create a special effect attached to the origin of GT_Target using GT_KB_Effect
                              • Special Effect - Destroy (Last created special effect)
                            • Else - Actions
                          • -------- Drag Target --------
                          • Custom script: call SetUnitX(udg_GT_Target, udg_GT_MissileX)
                          • Custom script: call SetUnitY(udg_GT_Target, udg_GT_MissileY)
                    • Else - Actions
                  • Custom script: call RemoveLocation(udg_GT_TempLoc)
              • Custom script: call RemoveLocation(udg_GT_TargetPoint)
              • Custom script: else
              • Set GT_Duration[GT_ID] = 0.00
              • Custom script: endif
            • Else - Actions
              • -------- Deindex spell instance --------
              • Custom script: call DestroyGroup(udg_GT_KB_Group[udg_GT_ID])
              • Special Effect - Destroy GT_DummyModel[GT_ID]
              • Unit Group - Remove GT_Missile from GT_MissileGroup
              • Unit - Remove GT_Missile from the game
              • Set GT_Index = (GT_Index - 1)
              • -------- Turn off looping trigger if number of spell instances equal 0 --------
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • GT_Index Equal to 0
                • Then - Actions
                  • Countdown Timer - Pause GT_Timer
                • Else - Actions
Credits
emjlr3 - Test Map
Alima - World Bounds
Daffa the Mage - TreeKiller
BPower - Stun Engine
MoCo - FieldOfView
Bribe - Unit Indexer
Judash - Moon Missile
Changelog
2.0
1. Hopefully fixed all issues related to knockback group
2. Removed update size feature
3. Changed how damage impact increases
4. Implemented suggestions from the first three posts. Thanks to those who gave suggestions.
5. Updated spell tooltip

2.5 - 3.0
1. Reverted how damage impact increases
2. Changed duration to depend on time. Time is easier to use than distance and will aid with implementing a new feature. Readded distance as a limit. Time is now a function of distance and speed. More on the new feature later.
3. Changed spell icon.
4. Fixed issues with knockback group.
5. Added more configurables.
6. Implemented other suggestions. Thanks to all who commented.

4.0 - 4.5
1. Restructured code as per IcemanBo's requests.
2. Removed time as a configurable.

1. Some minor changes here and there.
2. Reworked test map.
3. Redid config documentation.
4. Removed an unnecessary configurable.
5. Fixed the group array leak.
6. Added a distance check so that changing AOE would not make visuals fugly.





Keywords:
Wave, Moon, Target Point, Knockback, Drag, Anime
Contents

Piercer of Heaven (Map)

Reviews
Piercer of Heaven 4.5 | Reviewed by BPower | 13.06.2015 Concept[/COLOR]] Shoots a missle towards the target cast point. Damaged units will get stunned and dragged along with the missile. Damage and speed increases over the fly duration. It's...

Moderator

M

Moderator


Piercer of Heaven 4.5 | Reviewed by BPower | 13.06.2015

[COLOR="gray"

[COLOR="gray"

[COLOR="gray"

[COLOR="gray"

[COLOR="gray"

Concept[/COLOR]]
126248-albums6177-picture66521.png
Shoots a missle towards the target cast point.
Damaged units will get stunned and dragged along with the missile.
Damage and speed increases over the fly duration.
126248-albums6177-picture66523.png
It's a missile flying from A to B.
Stun, dragging and optional tree destruction spice up the spell.
Overall sufficient concept for a spell submission.
Code[/COLOR]]
126248-albums6177-picture66521.png
  • The spell is MUI and leakless. ( except 1/2 group handles )
  • Once critical issues are solved, this spell can be approved.
126248-albums6177-picture66523.png
  • Destroying trees is optional, but you always do it within the loop.
  • In the loop you have an hardcoded distance check of <= 100. Why is it not configurable?
  • I would be suprised if group == null is not working ( I have to test this myself )
  • Overall code is good.
Objects[/COLOR]]
126248-albums6177-picture66523.png
  • Object data looks ok.
  • The aoe indicator is a bit confusing, as it is no AOE spell.
Effects[/COLOR]]
126248-albums6177-picture66521.png
  • Beside the missile model, there are no extra effects.
  • There is no death animation display of the missile, which looks a bit abrupt to me.
    You could simply destroy a special effect on the missiles x/y, once it is removed.
Rating[/COLOR]]
CONCEPTCODEOBJECTSEFFECTSRATINGSTATUS
3/5
4/5
4/5
3/5
3.5/5
NEED FIX
 
You should delete this line :
  • Game - Display to (All players) the text: KBInstances: 0
Since it's not related to the spell directly and users don't want their screen filled with this.

Only one of these can be applied :
  • Set GT_LoopTime = 0.03
  • Custom script: set udg_GT_LoopTime = 0.03
I suggest delete the first one and set the below one to 0.03125, nothing much except 1.33 operation difference, which is not a big deal. But you really need to choose only one, as the second always override the first one.

Great spell, and I see the name is taken from Bleach Anime (Getsuga Tenshou aka Heaven's Piercer/Piercer of Heaven).

Also, I really appreciate that you used my TreeKiller ^^ thanks :)
 
There is a corrupted custom script in loop. (at least for me)
I can't compile the code correctly. I would appreciate if someone else tests it to compile.

You don't index properly. Increase the counter in begining, not in the end.
In case of a deindex it might mix up at the moment.
-> not MUI.


Why do you count knock back instances? Also, when one instance ends you remove
all units from knock back group and decrease counter. That's illogical.
-> not MUI.

Your "Some functions" library provides two functions witha common name.
They may get in conflict with functions by user. It needs to be changed.

Please use constant bjs intsead of RADTODEG real value... much more readable and easier to understand.
 
Last edited:
If dummy is out of bounds no further actions should be executed.
The only next thing to happen is deindexing.

Using a global knockback group for all instances is no best solution.
You remove all units in range at deindexing from the knockback group
-> if unit is affected by 2 knock backs it will bug.

Why you don't stun if you detect that picked unit is not in knockback group yet?

  • Custom script: set udg_GT_TempUnit = CreateUnit(GetTriggerPlayer(),'n003',x,y,bj_RADTODEG *a)
^Do not hardcode. Put the unit type into a configurable variable.
Flying height should be configurable.

If caster is not in game anymore spell should end on next interval, as the caster is the unit that will deal damage.

I recommend you to put a distance limitation over the time limitation.
If you won't anyway you could make it depending on level of ability.

Describe in comments for variables that will be influenced by ability level that they are influenced by ability level.
User can't know this by himself.

Change dummy's death type to "can't raise, can't decay".
 
Level 13
Joined
Jul 16, 2012
Messages
679
Suggestion

  • Custom script: local real x = GetUnitX(GetTriggerUnit())
  • Custom script: local real y = GetUnitY(GetTriggerUnit())
Its better to save the GetTriggerUnit in a variable so become like this

  • Set TempUnit = Triggering Unit
  • Custom script: local real x = GetUnitX(TempUnit)
  • Custom script: local real y = GetUnitY(TempUnit)
 
"Skip remaining actions" is not a good action to use in loops, because it will ignore all further instances.
Could be completly avoided with structering with help of then/else of an if-statement.

Directly check with the duration if caster is dead/alive. And then you can directly deindex.
So you would not need an extra if-statement in your "Then" action part.

  • Set GT_Time = (GT_Distance / GT_InitialSpeed)
^This calculation is not correct, because your speed increases. It isn't constant.
Also the speed and inc_speed is level depending, so you would need to re-calculate it anyways.

The knockback doesn't work. Following check is faulty, when you pick units in range:
  • (GT_Target is in GT_KB_Group[GT_ID]) == True
If you want to stun only units that are in range then only stun consequently units in range for next period. Don't stun over whole spell duration:
  • Set STE_DURATION = (GT_Duration[GT_ID] + 10.00)
Why even +10?
Also if you only would stun until next period, then you don't need to "unstun" all units on deindex.
"unstun" all units on deindex is wrong, as it you don't know what happened. Just no new stun should be applied.
So you should stun units when they comes in range first time with missle, but also continiosly when knocking back. But only until next period.
 
Level 18
Joined
Oct 17, 2012
Messages
820
@IcemanBo: I will address all your points except
  • Set GT_Time = (GT_Distance / GT_InitialSpeed)
^This calculation is not correct, because your speed increases. It isn't constant.
Also the speed and inc_speed is level depending, so you would need to re-calculate it anyways.

I have already resolved this with the following line in the loop.
  • Set GT_Duration[GT_ID] = (GT_Duration[GT_ID] / GT_Speed[GT_ID])
I plan to either remove that time variable and calculate the time at cast or keep it to allow users to choose between time only or both.

Edit: Never mind. I see now an issue with the formula. I will fix it as well.
 
Last edited:
  • Set GT_UpdateMissile = True
^I personaly don't see much sense having this in config.
But you can let it, if you think it's senseful.

Groups with index 0 and 1 already exist in a GUI group array.
You leak them onInit when you create a new group and overwrite the variable.

Please note if values are depending onInterval. (config)

TestMap works not very fluent for me because you overloaded the demo with heroes that cast.
Sometimes less is more. :p
 
Level 18
Joined
Oct 17, 2012
Messages
820
Having that option really is senseless, since I have two other variables that would become fodder if that boolean was set to false.

If I were to check whether groups are null, the spell refuses to work properly, i.e. targets are hit multiple times and become immune to knockback.
 
Last edited:
Having that option really is senseless
What do you mean?

If I were to check whether groups are null, the spell refuses to work properly, i.e. targets are hit multiple times and become immune to knockback.
You had a solution, but you created unit groups before so you leaked again. Does it work now correctly though?
 
Level 18
Joined
Oct 17, 2012
Messages
820
What do you mean?


You had a solution, but you created unit groups before so you leaked again. Does it work now correctly though?

I was referring to your comment on GT_UpdateMissile.

Yes, the spell works correctly as long as I do not check whether groups are null.
Don't worry about the unit group leaks as I seldom get 1 assigned to the custom value of a missile in my tests.

How would separating the knockback movement into its own loop sound?
 
Last edited:
The spell is based on an AoE spell, but should be based on an other spell like shockwave for example,
as it's effect does't affect units in an area, but makes a straight shot in wanted direction.

Don't worry about the unit group leaks as I seldom get 1 assigned to the custom value of a missile in my tests.
It's just good practice if we exclude memory leaks in our approved submissions,
even it won't happen too often or is not really critical.

How would separating the knockback movement into its own loop sound?
You have problems with it atm?
 
Seeing the critical issue is pointed at the flaw of my system, I decided to shed some help :
Instead of running the pick in each loop, insert an ITE and place the destructable loop in the THEN block, then add if GT_DestroyTrees == true on the condition. This effectively eliminates the loop of destructable.

My deepest apologies for the very slow recommendation.
 
Seeing this having nothing happening after 5 years, it felt like I am at fault for the whole reason it is not approved yet.

The solution related to the requirement given by @BPower 5 years ago... now that I re-read it:
  • -------- Destroy trees if enabled --------
  • Set GT_TargetPoint = (Point(GT_MissileX, GT_MissileY))
  • Destructible - Pick every destructible within GT_AOE of GT_TargetPoint and do (Actions)
    • Loop - Actions
      • Set Dest = (Picked destructible)
      • Set TreeKill = GT_DestroyTrees
      • Trigger - Run TreeKiller GUI <gen> (ignoring conditions)
To fix the issue, the solution is to pass the GT check for trees before the destructible loop:
  • -------- Destroy trees if enabled --------
  • Set GT_TargetPoint = (Point(GT_MissileX, GT_MissileY))
  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • GT_DestroyTrees Equal to True
    • Then - Actions
      • Destructible - Pick every destructible within GT_AOE of GT_TargetPoint and do (Actions)
        • Loop - Actions
          • Set Dest = (Picked destructible)
          • Set TreeKill = GT_DestroyTrees
          • Trigger - Run TreeKiller GUI <gen> (ignoring conditions)
    • Else - Actions
Actually, even without this fix, the spell is working correctly, and TreeKiller won't destroy trees if GT_DestroyTrees is set to false (and if it does, that is my systems' problem, and should be held accountable to me as the provider). Indeed the loop will run, but the checker will block the tree-killing from taking effect in situations it is set to False.
@KILLCIDE @PurgeandFire @MyPad
 
Top