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

[Spell] Help! Negative regen didn't give the kill credit + How to make an aura that decreases armor by percentage

Status
Not open for further replies.
Level 6
Joined
Feb 22, 2009
Messages
212
I use Negative value Unholy Aura because unlike Permanent Immolation, Aura stacks with each other as long as the buffs are different.

I can have Aura 1 reduces enemy's hit points along with Aura 2.

The problem is negative regen is not classified as damage so units that applied the aura or the spell is not credited which is a serious issue since players can't gain gold.

Would anyone have solution for this? I just want to give credit to the player so they can get gold?

Similarly, a solution for active spell of negative regen would be nice. Currently, I am using Howl of Terror to apply negative regen and it too doesn't give credit to the player of the applying unit.

In short, Request 1: Aura that deals damage every second to enemies around the unit. Aura 1 stacks with Aura 2. For example, Inferno has Aura 1 that deals 300 damage, and Greater Inferno has Aura 2 that does 600 damage. When Inferno and Greater Inferno stand near an enemy, that enemy received 900 damage. The player that owns the inferno get the kill credit and receive gold. All players can get both Infernos so a simple checking for buff won't work. If all else failed, I just need an aura that reduce hit point down to 1 instead of being fatal.


For the Armor aura, I was looking for a way to increase or decrease an unit's armor by percentage like 25% or 50% of the armor (only the base armor + the armor from agility).

In my map, you can see armor as 3 categories.
Total armor = Base armor + Extra armor from Agility + Bonus armor from other source (like items, passive, and aura)
I am in need of an aura that increase/decrease the base armor + the armor from agility.
Devotion Aura only affect base armor so it's a no-go for me.

Request 2: Armor reduction or increment by percentage.

EDIT: Sorry for the carelessness. I forgot to mention i am using patch 1.30.4
 
Last edited:

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
For the immolation stacking you'd need to trigger your own aura system that uses Unit Groups and Periodic Intervals. When an Inferno comes into play you add it to the InfernoSource group. Then you turn on a trigger that periodically searches for units near each Inferno and links the target and the Inferno together while also adding them to the InfernoDamage group. Then have a Periodic Interval that picks every unit in in the InfernoDamage group, checks if they still have the buff (if not remove them) and then causes their linked Inferno to damage them. This linking of data can be done with Unit Indexing/Hashtables.

Here's an example of a custom aura I made: How do i make an aura that affects a specific unit type/s?

For the armor aura I would use my custom aura but modify it to use an Armor item ability. Calculate and update the item abilities Armor bonus by getting a fraction of the target's Base Armor. There are functions to get base armor/modify abilities in version 1.31+.
 
Level 6
Joined
Feb 22, 2009
Messages
212
For the immolation stacking you'd need to trigger your own aura system that uses Unit Groups and Periodic Intervals. When an Inferno comes into play you add it to the InfernoSource group. Then you turn on a trigger that periodically searches for units near each Inferno and links the target and the Inferno together while also adding them to the InfernoDamage group. Then have a Periodic Interval that picks every unit in in the InfernoDamage group, checks if they still have the buff (if not remove them) and then causes their linked Inferno to damage them. This linking of data can be done with Unit Indexing/Hashtables.

Here's an example of a custom aura I made: How do i make an aura that affects a specific unit type/s?

For the armor aura I would use my custom aura but modify it to use an Armor item ability. Calculate and update the item abilities Armor bonus by getting a fraction of the target's Base Armor. There are functions to get base armor/modify abilities in version 1.31+.
I got a question about the Inferno aura stuff.

How the system would decide which player got the kill if multiple infernos of multiple players surround the enemies?

For the aura thing, sorry to mention but i am only using 1.30.4
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
You would need to determine how you want it to work. In my Celerity Aura ability the highest level aura takes precedence. If I remember correctly when there's two auras of the same level it's whoever first applied the aura that remains as the aura Source. You can look at the aura triggers to figure out how I did this, my memory is a bit foggy.

I'm not sure if there's a solution in 1.30 for getting base armor.
 
Level 6
Joined
Feb 22, 2009
Messages
212
You would need to determine how you want it to work. In my Celerity Aura ability the highest level aura takes precedence. If I remember correctly when there's two auras of the same level it's whoever first applied the aura that remains as the aura Source. You can look at the aura triggers to figure out how I did this, my memory is a bit foggy.


I would like it to operate as normal spell would do which mean whoever's instance of damage deal the finishing blow get the bounty. However, Aura does not have an instance of damage. The "when" of when an immolation started is also not systematically laid out as "the 1st 0.5s", "the 2nd 0.5s", "the 3rd 0.5s" etc. either.

Using a trigger that deals damage over time by checking it every 0.5 second will cause problem as they do not know which dealt the finishing blow.

My visualization of the aura I need would be.

At 10.02s, Inferno 1 belong to Red get close to enemy and enemy receive the initial 300 damage.
At 10.34a, Great Inferno 2 belong to Green get into range of said enemy and it receive 600 damage.
At 11.02s,
Inferno 1's aura deals another 300.
At 11.09s,
Lesser Inferno 3 belong to Orange get into range of enemy and dealt the finishing blow of 150 damage. Orange get the credit + bounty.

I don't really need the aura to stack with itself but I would really need it to stack it other auras of the same family (Lesser Immolation, Immolation, and Greater Immolation). The current Immolation spell and its passive relative (Permanent Immolation) seems to work great at keeping check of the interval + the initialization of the damage process but it does not stacks with other Immolation.

Regarding armor as percent, isn't devotion aura possible to use? Or did the flag "as percentage" show up in 1.31?
As I have already explained in the opening post, Devotion Aura only affects the Base armor. It does not affect the armor given by Agility.

Total armor = Base armor + Extra armor from Agility + Bonus armor from other source (like items, passive, and aura)
I am in need of an aura that increase/decrease the base armor + the armor from agility.
Devotion Aura only affect base armor so it's a no-go for me.
 
Last edited:

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
I would like it to operate as normal spell would do which mean whoever's instance of damage deal the finishing blow get the bounty. However, Aura does not have an instance of damage. The "when" of when an immolation started is also not systematically laid out as "the 1st 0.5s", "the 2nd 0.5s", "the 3rd 0.5s" etc. either.

Using a trigger that deals damage over time by checking it every 0.5 second will cause problem as they do not know which dealt the finishing blow.

My visualization of the aura I need would be.

At 10.02s, Inferno 1 belong to Red get close to enemy and enemy receive the initial 300 damage.
At 10.34a, Great Inferno 2 belong to Green get into range of said enemy and it receive 600 damage.
At 11.02s,
Inferno 1's aura deals another 300.
At 11.09s,
Lesser Inferno 3 belong to Orange get into range of enemy and dealt the finishing blow of 150 damage. Orange get the credit + bounty.

I don't really need the aura to stack with itself but I would really need it to stack it other auras of the same family (Lesser Immolation, Immolation, and Greater Immolation). The current Immolation spell and its passive relative (Permanent Immolation) seems to work great at keeping check of the interval + the initialization of the damage process but it does not stacks with other Immolation.
This is what I suggested to do. You would have Unit Groups for Lesser Inferno, Inferno, and Greater Inferno, each with their own 1 second Periodic Interval that damages the units in these groups. The source of the damage is known using a Unit Indexer/Hashtable which saves the units in the Unit Groups to the unit that put them in said Unit Group. In other words, when an Infernal comes into range of a unit and adds it to the Inferno group it also gets saved to that unit. Then when it comes time to deal damage you can load the Infernal from the damaged unit and set it as the damage dealer.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
This is what I suggested to do. You would have Unit Groups for Lesser Inferno, Inferno, and Greater Inferno, each with their own 1 second Periodic Interval that damages the units in these groups. The source of the damage is known using a Unit Indexer/Hashtable which links the units in the Unit Groups to the unit that put them in said Unit Group. In other words, when an Infernal comes into range of a unit and adds it to the Inferno group it also gets linked to that added unit so when it comes time to deal damage you can reference the Infernal as the damage dealer.


Can you help me catching up with the process a little bit?

So first of all, I create an unit group that is meant to contain only units that have the intended Immolation aura.

Whenever an unit is created (the only mean for inferno in my map to be created and they come with immolation as initial ability without need for an upgrade to activate), if it is said "inferno", add that unit into the Unit group and then check if the loop is activated. If it isn't turn on the loop otherwise do nothing.

The loop will happen ever period of time.
It will first select all units that are currently within the 300 range (immolation radius) of each of the unit in the Immolation group and add those units into the Affected Unit Group. After that, my brain short-circuited because it doesn't know how to make what unit to do the damage to what unit.
 
I have such a trigger in my map, here it's how I did it.
If you ignore special effects part and adjust numbers to your needs.

Note that I prefer using custom script for math because GUI's arithmetic is so cumbersome!
Also note that "DestroyLastCreatedEffectLater" does not exist be default, I can post triggers for it if you're interested.

  • AmuletOfProtectiveFlamesPeriodic
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Set Variable Set temp_unit_group2 = (Load (Key Amulet of Protective Flames wearers.) of 0 in item_hash.)
      • Unit Group - Pick every unit in temp_unit_group2 and do (Actions)
        • Loop - Actions
          • Set Variable Set temp_unit = (Picked unit)
          • Set Variable Set temp_point = (Position of temp_unit)
          • Set Variable Set temp_unit_group = (Units within 200.00 of temp_point.)
          • Custom script: call RemoveLocation(udg_temp_point)
          • Custom script: set udg_temp_real1 = 7 + 0.5 * GetHeroLevel(udg_temp_unit)
          • Unit Group - Pick every unit in temp_unit_group and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) belongs to an enemy of (Owner of temp_unit).) Equal to True
                  • ((Picked unit) is selectable) Equal to True
                • Then - Actions
                  • Unit - Cause temp_unit to damage (Picked unit) , dealing temp_real1 damage of attack type Spells and damage type Fire
                  • Set Variable Set temp_point = (Position of (Picked unit))
                  • Special Effect - Create a special effect at temp_point using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
                  • Special Effect - Set Scale of (Last created special effect) to 0.50
                  • Special Effect - Set Height of (Last created special effect) to: 80.00
                  • Special Effect - Play Special Effect: (Last created special effect) , Animation: Stand
                  • Custom script: call DestroyLastCreatedEffectLater(0.5)
                  • Custom script: call RemoveLocation(udg_temp_point)
                • Else - Actions
          • Custom script: call DestroyGroup (udg_temp_unit_group)
Also, sorry about the armor devotion aura. I had a meeting that I had to join and posted whatever I though of in haste.
It might be possible, but it's at least very hard to do armor% that include agility. It's impossible if you want to include other bonuses such as items, abilities, etc. unless you do something "very complex" (use a system to manage everything).
 
Level 6
Joined
Feb 22, 2009
Messages
212
I have such a trigger in my map, here it's how I did it.
If you ignore special effects part and adjust numbers to your needs.

Note that I prefer using custom script for math because GUI's arithmetic is so cumbersome!
Also note that "DestroyLastCreatedEffectLater" does not exist be default, I can post triggers for it if you're interested.

  • AmuletOfProtectiveFlamesPeriodic
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Set Variable Set temp_unit_group2 = (Load (Key Amulet of Protective Flames wearers.) of 0 in item_hash.)
      • Unit Group - Pick every unit in temp_unit_group2 and do (Actions)
        • Loop - Actions
          • Set Variable Set temp_unit = (Picked unit)
          • Set Variable Set temp_point = (Position of temp_unit)
          • Set Variable Set temp_unit_group = (Units within 200.00 of temp_point.)
          • Custom script: call RemoveLocation(udg_temp_point)
          • Custom script: set udg_temp_real1 = 7 + 0.5 * GetHeroLevel(udg_temp_unit)
          • Unit Group - Pick every unit in temp_unit_group and do (Actions)
            • Loop - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • ((Picked unit) belongs to an enemy of (Owner of temp_unit).) Equal to True
                  • ((Picked unit) is selectable) Equal to True
                • Then - Actions
                  • Unit - Cause temp_unit to damage (Picked unit) , dealing temp_real1 damage of attack type Spells and damage type Fire
                  • Set Variable Set temp_point = (Position of (Picked unit))
                  • Special Effect - Create a special effect at temp_point using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
                  • Special Effect - Set Scale of (Last created special effect) to 0.50
                  • Special Effect - Set Height of (Last created special effect) to: 80.00
                  • Special Effect - Play Special Effect: (Last created special effect) , Animation: Stand
                  • Custom script: call DestroyLastCreatedEffectLater(0.5)
                  • Custom script: call RemoveLocation(udg_temp_point)
                • Else - Actions
          • Custom script: call DestroyGroup (udg_temp_unit_group)
Also, sorry about the armor devotion aura. I had a meeting that I had to join and posted whatever I though of in haste.
It might be possible, but it's at least very hard to do armor% that include agility. It's impossible if you want to include other bonuses such as items, abilities, etc. unless you do something "very complex" (use a system to manage everything).

The only thing I am worried is the order of which the "Unit Group - Pick every unit" will choose. If they select units belong to player 1 first before other unit, it may result in player 1 get all the kill when there are inferno of other players within range; Or it may put Player 1 into disadvantage if they are the one who deals the almost killing blow and other around him get the kill instead.

Anyway, I don't know the distribution so just forget what I babbled about. I think this may be sufficient for the stackable damage aura. Making it unstackable for the same aura may be too complicated for me.


For the armor percentage, just the base armor + the bonus from agility is what I need. It would be extremely bad when armor get reduced without discrimination and devalue some of the armor boost item.
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
EDIT: Made a mistake with TempGroup. Updated it.

So it changed slightly from my original explanation. Here's how to do it with a Unit Indexer:
  • Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to Inf_InfernalGroup
      • Trigger - Turn on Infernal Aura Search <gen>
  • Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in Inf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet Inf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet Inf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to Inf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in Inf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Inf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause Inf_Source[Inf_CV] to damage Inf_Target, dealing 20.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\NightElf\Immolation\ImmolationDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from Inf_DamageGroup.
          • -------- --------
          • Set VariableSet Inf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Inf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from Inf_InfernalGroup.

Greater Infernal uses the same logic but has it's own Unit Groups/IsAffected/Source variables:
  • Greater Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to GInf_InfernalGroup
      • Trigger - Turn on Greater Infernal Aura Search <gen>
  • Greater Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in GInf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet GInf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet GInf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to GInf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in GInf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • GInf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause GInf_Source[Inf_CV] to damage Inf_Target, dealing 40.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from GInf_DamageGroup.
          • -------- --------
          • Set VariableSet GInf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in GInf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Greater Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from GInf_DamageGroup.
Infernal and Greater Infernal's auras stack with one another resulting in up to 60.00 damage (20 + 40) per second. However, a unit can only be affected by one source from each Infernal type at a time. I believe this is what you wanted.

You can't open the map but I'll attach it anyway.
 

Attachments

  • Infernal Aura.w3m
    23.1 KB · Views: 7
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
EDIT: Made a mistake with TempGroup. Updated it.

So it changed slightly from my original explanation. Here's how to do it with a Unit Indexer:
  • Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to Inf_InfernalGroup
      • Trigger - Turn on Infernal Aura Search <gen>
  • Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in Inf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet Inf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet Inf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to Inf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in Inf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Inf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause Inf_Source[Inf_CV] to damage Inf_Target, dealing 20.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\NightElf\Immolation\ImmolationDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from Inf_DamageGroup.
          • -------- --------
          • Set VariableSet Inf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Inf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from Inf_InfernalGroup.

Greater Infernal uses the same logic but has it's own Unit Groups/IsAffected/Source variables:
  • Greater Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to GInf_InfernalGroup
      • Trigger - Turn on Greater Infernal Aura Search <gen>
  • Greater Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in GInf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet GInf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet GInf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to GInf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in GInf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • GInf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause GInf_Source[Inf_CV] to damage Inf_Target, dealing 40.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from GInf_DamageGroup.
          • -------- --------
          • Set VariableSet GInf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in GInf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Greater Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from GInf_DamageGroup.
Infernal and Greater Infernal's auras stack with one another resulting in up to 60.00 damage (20 + 40) per second. However, a unit can only be affected by one source from each Infernal type at a time. I believe this is what you wanted.

You can't open the map but I'll attach it anyway.

Excuse me, if the targets for the Inferno damage die, do i need to make an action to remove it from the unit group?




======================================
This part is for people who would later read this thread.

Unit Group - Pick every unit in Group and do (Actions)
For those who concerned about the order of unit group - pick every unit
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
Nope, everything should work just fine without having to worry about issues like that.

This is because Dead Units aren't added to the Damage Group. But if a unit dies while already IN the Damage Group then the next time the trigger runs that dead unit will NOT be added to the Damage Group again. This is important because units that don't get added to the group again are deemed "Unaffected" by any Immolation Auras and are removed from the Damage Group. In other words, dead units will be removed from the Damage Group during the next cycle of the Periodic trigger.

Make sure you use my updated version if you copy the triggers. I made a small change a few minutes ago.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
Nope, everything should work just fine without having to worry about issues like that.

This is because Dead Units aren't added to the Damage Group. But if a unit dies while already IN the Damage Group then the next time the trigger runs that dead unit will NOT be added to the Damage Group again. This is important because units that don't get added to the group again are deemed "Unaffected" by any Immolation Auras and are removed from the Damage Group. In other words, dead units will be removed from the Damage Group during the next cycle of the Periodic trigger.

Make sure you use my updated version if you copy the triggers. I made a small change a few minutes ago.
Thank you.

Also with the same principle, can I apply it to an active spell?

Like making units affected by Howl of Terror receive damage over time as long as the buff is not purged or expires?

If multiple Howls of Terror are made, the latest Howl will refresh the buff but the unit that deals damage will be the latest Pit Lord. Can use the same add unit into group function and remove them if the buff is removed?
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
It sounds like you have the right idea. It's even easier for a spell like that though.

A unit casts Howl -> Pick every unit within X range of caster -> Link picked units to the caster using the Unit Indexer (how I used the Inf_Source[cv] variable)
-> Add them to Unit Group -> Turn on Periodic trigger.

Then in the periodic trigger -> Every 1 second -> Pick every unit in your Unit Group -> If picked unit has buff Howl then cause Inf_Source[cv] to damage picked unit ELSE removed picked unit from group.

Then at the end of the trigger turn it off if the group is empty.

Here's the Unit Indexer I recommend using: GUI Unit Indexer 1.4.0.0
Make sure you don't use Custom Value in your map for things other than Unit Indexing. The Unit Indexer will change each unit's Custom Value automatically.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
EDIT: Made a mistake with TempGroup. Updated it.

So it changed slightly from my original explanation. Here's how to do it with a Unit Indexer:
  • Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to Inf_InfernalGroup
      • Trigger - Turn on Infernal Aura Search <gen>
  • Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in Inf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet Inf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet Inf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to Inf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in Inf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Inf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause Inf_Source[Inf_CV] to damage Inf_Target, dealing 20.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\NightElf\Immolation\ImmolationDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from Inf_DamageGroup.
          • -------- --------
          • Set VariableSet Inf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Inf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from Inf_InfernalGroup.

Greater Infernal uses the same logic but has it's own Unit Groups/IsAffected/Source variables:
  • Greater Infernal Aura Add
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to GInf_InfernalGroup
      • Trigger - Turn on Greater Infernal Aura Search <gen>
  • Greater Infernal Aura Search
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • -------- Group nearby enemies: --------
      • Unit Group - Pick every unit in GInf_InfernalGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Infernal = (Picked unit)
          • Set VariableSet Inf_Point = (Position of Inf_Infernal)
          • Set VariableSet Inf_TempGroup = (Units within 300.00 of Inf_Point.)
          • -------- --------
          • -------- Add found enemies to damage group: --------
          • Unit Group - Pick every unit in Inf_TempGroup and do (Actions)
            • Loop - Actions
              • Set VariableSet Inf_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Inf_Target is alive) Equal to True
                  • (Inf_Target belongs to an enemy of (Owner of Inf_Infernal).) Equal to True
                  • (Inf_Target is A structure) Equal to False
                  • (Inf_Target is Mechanical) Equal to False
                  • (Inf_Target is A flying unit) Equal to False
                  • (Inf_Target is invulnerable) Equal to False
                • Then - Actions
                  • -------- Link the Infernal and the enemy together: --------
                  • Set VariableSet Inf_CV = (Custom value of Inf_Target)
                  • Set VariableSet GInf_Source[Inf_CV] = Inf_Infernal
                  • Set VariableSet GInf_IsAffected[Inf_CV] = True
                  • Unit Group - Add Inf_Target to GInf_DamageGroup
                • Else - Actions
          • -------- --------
          • Custom script: call DestroyGroup (udg_Inf_TempGroup)
          • Custom script: call RemoveLocation (udg_Inf_Point)
      • -------- --------
      • -------- Damage grouped enemies: --------
      • Unit Group - Pick every unit in GInf_DamageGroup and do (Actions)
        • Loop - Actions
          • Set VariableSet Inf_Target = (Picked unit)
          • Set VariableSet Inf_CV = (Custom value of Inf_Target)
          • -------- --------
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • GInf_IsAffected[Inf_CV] Equal to True
            • Then - Actions
              • Unit - Cause GInf_Source[Inf_CV] to damage Inf_Target, dealing 40.00 damage of attack type Spells and damage type Normal
              • Special Effect - Create a special effect attached to the overhead of Inf_Target using Abilities\Spells\Other\ImmolationRed\ImmolationRedDamage.mdl
              • Special Effect - Destroy (Last created special effect)
            • Else - Actions
              • Unit Group - Remove Inf_Target from GInf_DamageGroup.
          • -------- --------
          • Set VariableSet GInf_IsAffected[Inf_CV] = False
      • -------- --------
      • -------- Turn off trigger: --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in GInf_InfernalGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
  • Greater Infernal Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from GInf_DamageGroup.
Infernal and Greater Infernal's auras stack with one another resulting in up to 60.00 damage (20 + 40) per second. However, a unit can only be affected by one source from each Infernal type at a time. I believe this is what you wanted.

You can't open the map but I'll attach it anyway.
Excuse me for disturbing you again.

When I was doing the trigger as below, I didn't know what is the amount of array for the custom value of lesser_source and lesser_Affected. Currently, I set it at 1000 for the custom value.
Also do I need to check for Magic immunity or Invulnerable check will be sufficient?


  • Lesser Inferno
    • Events
      • Unit - A unit Spawns a summoned unit
    • Conditions
      • (Unit-type of (Summoned unit)) Equal to Lesser Infernal
    • Actions
      • Unit Group - Add (Summoned unit) to LesserInf_Group
      • Trigger - Turn on Lesser Immolation <gen>

  • Lesser Immolation
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in LesserInf_Group and do (Actions)
        • Loop - Actions
          • Set LesserInfernal = (Picked unit)
          • Set LesserImmolationPosition = (Position of LesserInfernal)
          • Set UnitgroupforSpell = (Units within 300.00 of LesserImmolationPosition)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set Lesser_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Lesser_Target is alive) Equal to True
                  • (Lesser_Target belongs to an enemy of (Owner of LesserInfernal)) Equal to True
                  • (Lesser_Target is A structure) Equal to False
                  • (Lesser_Target is Magic Immune) Equal to False
                  • (Lesser_Target is invulnerable) Equal to False
                • Then - Actions
                  • Set Lesser_CustomValue = (Custom value of Lesser_Target)
                  • Set Lesser_Scource[Lesser_CustomValue] = LesserInfernal
                  • Set Lesser_Affected[Lesser_CustomValue] = True
                  • Unit Group - Add Lesser_Target to Lesser_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_LesserImmolationPosition)
      • -------- Damage --------
      • Unit Group - Pick every unit in Lesser_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Lesser_Target = (Picked unit)
          • Set Lesser_CustomValue = (Custom value of Lesser_Target)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Lesser_Affected[Lesser_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause LesserInfernal to damage Lesser_Target, dealing 600.00 damage of attack type Spells and damage type Normal
              • Set Lesser_Affected[Lesser_CustomValue] = False
            • Else - Actions
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in LesserInf_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Lesser Inferno Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Lesser Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from LesserInf_Group
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
These are the only variable types that need to have their Array Sizes set manually: Timers, Unit Groups, Player Groups

That being said, you can leave the Array Size at 1 and manually create them yourself:
  • Custom script: set udg_SomeUGVariable[x] = CreateGroup()
  • Custom script: set udg_SomeTimerVariable[x] = CreateTimer()
  • Custom script: set udg_SomePGVariable[x] = CreateForce()

So don't worry about setting the Array Size for anything other than these 3 variable types. Leave the others at the default size of 1.

About the Magic Immunity, I think Invulnerable may be sufficient enough but I'm not 100% sure. You can always test it out yourself.

All of that aside, your Lesser Immolation trigger is a lot different than my own. In it's current state it will stack with any number of Lesser Infernals, meaning if you had 2 Lesser Infernals next to an enemy unit it would receive 2*600 damage every interval. If this is intentional then you can simplify the trigger by using a single Pick Every Unit function and removing the Lesser_Affected variable entirely since you don't need it. The sole purpose of Lesser_Affected is to prevent multiple Lesser Infernals from damaging the same target every interval.

The goal of my triggers was to recreate the mechanics of Permanent Immolation. This means that only a single instance of the ability can affect a unit at a time, with the exception being other abilities of the same type (Lesser Infernal and Greater Infernal stack but two Lesser Infernals do not).

^If what I just described is actually how you want your ability to function then you'll need to update your trigger to function exactly like mine.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
25/10/2021

Hello. It's me again.


+++

This one is also one with the same trigger but for another unit type that use a different immolation (Abyssal this time). Can you spare a pair of eyes to check if it would work like Permanent Immolation (The same target won't receive damage from 2 Abyssal) like we discussed?


  • Abyssal
    • Events
      • Unit - A unit Spawns a summoned unit
    • Conditions
      • (Unit-type of (Summoned unit)) Equal to Abyssal
    • Actions
      • Unit Group - Add (Summoned unit) to Abyssal_Group
      • Trigger - Turn on Abyssal Flame <gen>


  • Abyssal Flame
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Abyssal_Group and do (Actions)
        • Loop - Actions
          • Set Abyssal = (Picked unit)
          • Set AbyssalPosition = (Position of Abyssal)
          • Set UnitgroupforSpell = (Units within 232.00 of AbyssalPosition)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set Abyssal_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Abyssal_Target is alive) Equal to True
                  • (Abyssal_Target belongs to an enemy of (Owner of Abyssal)) Equal to True
                  • (Abyssal_Target is A structure) Equal to False
                  • (Abyssal_Target is Magic Immune) Equal to False
                  • (Abyssal_Target is invulnerable) Equal to False
                • Then - Actions
                  • Set Abyssal_CustomValue = (Custom value of Abyssal_Target)
                  • Set Abyssal_Scource[Abyssal_CustomValue] = Abyssal
                  • Set Abyssal_Affected[Abyssal_CustomValue] = True
                  • Unit Group - Add Abyssal_Target to Abyssal_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_AbyssalPosition)
      • -------- Damage --------
      • Unit Group - Pick every unit in Greater_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Abyssal_Target = (Picked unit)
          • Set Abyssal_CustomValue = (Custom value of Abyssal_Target)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Abyssal_Affected[Abyssal_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Abyssal_Scource[Abyssal_CustomValue] to damage Abyssal_Target, dealing 1000.00 damage of attack type Spells and damage type Normal
              • Set Abyssal_Affected[Abyssal_CustomValue] = False
            • Else - Actions
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Abyssal_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Abyssal dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Abyssal
    • Actions
      • Unit Group - Remove (Triggering unit) from GreaterInf_Group


+++

On the same topic, I have been thinking. Instead of a loop of "1 second", would a loop of "every 2 second" be more computer friendly? Like would a loop of "every 2 seconds" consume less computing resource in comparison to a loop of "every 1 second"? I understand that a loop of "every 2 seconds" would affect the usefulness of the ability itself and limiting the potential kill for the player but it's a sacrifice I think is acceptable if it means lessening the stress on the engine.


+++

About the Howl of Terror thing I mentioned to you last week, I was unsure how to make it correctly. The main difficulty i found is that unlike the Immolation aura, my Howl of Terror deals damage depend on the level of the abilities
Like level 1 deals 18 per sec
level 2 deals 27 per sec
level 3 deals 45 per sec
So I have been thinking of linking the level of the Howl of Terror to the pitlord that "finishes casting the Ability". Is this possible?







24/10/2021

These are the only variable types that need to have their Array Sizes set manually: Timers, Unit Groups, Player Groups

That being said, you can leave the Array Size at 1 and manually create them yourself:
  • Custom script: set udg_SomeUGVariable[x] = CreateGroup()
  • Custom script: set udg_SomeTimerVariable[x] = CreateTimer()
  • Custom script: set udg_SomePGVariable[x] = CreateForce()

So don't worry about setting the Array Size for anything other than these 3 variable types. Leave the others at the default size of 1.

About the Magic Immunity, I think Invulnerable may be sufficient enough but I'm not 100% sure. You can always test it out yourself.

All of that aside, your Lesser Immolation trigger is a lot different than my own. In it's current state it will stack with any number of Lesser Infernals, meaning if you had 2 Lesser Infernals next to an enemy unit it would receive 2*600 damage every interval. If this is intentional then you can simplify the trigger by using a single Pick Every Unit function and removing the Lesser_Affected variable entirely since you don't need it. The sole purpose of Lesser_Affected is to prevent multiple Lesser Infernals from damaging the same target every interval.

The goal of my triggers was to recreate the mechanics of Permanent Immolation. This means that only a single instance of the ability can affect a unit at a time, with the exception being other abilities of the same type (Lesser Infernal and Greater Infernal stack but two Lesser Infernals do not).

If what I described is actually how you want your ability to function then you'll need to update your trigger to function exactly like mine.

Oh, damn.

I just realised that my damage trigger didn’t have the array variable attached to it.

Thanks for pointing it out.
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
Your trigger isn't correct like I stated before. Your IsAffected variable serves no purpose in it's current state as you are missing important Actions that put it to use. Look closely and compare the two, you can see a few places where you're either missing an Action, have an unnecessary action, or using the wrong action/variable.

Also, you can reuse some of the variables so there's no need to make a new version of every single variable. Target, CustomValue, etc. can all be reused.

The only unique variables needed per unit-type: Source, IsAffected, DamageGroup
Edit: Sorry, forgot one: InfernalGroup

You can use the Unit Indexer to save anything you want to a unit.
So regarding Howl of Terror, make a Real variable array called HowlDamageLevel which keeps track of the damage per level:
  • Events
  • Map initialization
  • Conditions
  • Actions
  • Set Variable HowlDamageLevel[1] = 18.00
  • Set Variable HowlDamageLevel[2] = 27.00
  • Set Variable HowlDamageLevel[3] = 45.00

Then upon casting the ability, save the damage to the nearby enemy units using a Real variable array called HowlDamage:
  • Events
  • Unit - A unit starts the effect of an ability
  • Conditions
  • Actions
  • Set Variable HowlLevel = Level of ability being cast for Triggering unit
  • Unit Group - Pick every nearby enemy unit and do...
  • Set Variable HowlDamage[Custom value of picked unit] = HowlDamageLevel[HowlLevel]

You can then reference HowlDamage[Custom value of picked unit] in your Periodic trigger whenever you deal damage to a unit.

I wrote these triggers from memory so they will look a little weird. Understand that in the actual trigger editor some things such as the Pick every unit function will look different.

Edit: Increasing the Interval will help with performance but a 1.00 second interval isn't really a problem. It's usually smaller intervals like < 0.10 that cause performance issues but that also depends on what you're doing in the trigger. Creating a lot of units/special effects will definitely hurt performance at small intervals but doing simple Arithmetic like 1 + 1 will be rather easy for the computer to handle. I would stick with the 1.00 second interval and worry about it later down the line if it's actually an issue.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
Your trigger isn't correct like I stated before. Your IsAffected variable serves no purpose in it's current state as you are missing important Actions that put it to use. Look closely and compare the two, you can see a few places where you're either missing an Action, have an unnecessary action, or using the wrong action/variable.

Also, you can reuse some of the variables so there's no need to make a new version of every single variable. Target, CustomValue, etc. can all be reused.

The only unique variables needed per unit-type: Source, IsAffected, DamageGroup


You can use the Unit Indexer to save anything you want to a unit.
So regarding Howl of Terror, make a Real variable array called HowlDamageLevel which keeps track of the damage per level:
  • Events
  • Map initialization
  • Conditions
  • Actions
  • Set Variable HowlDamageLevel[1] = 18.00
  • Set Variable HowlDamageLevel[2] = 27.00
  • Set Variable HowlDamageLevel[3] = 45.00

Then upon casting the ability, save the damage to the nearby enemy units using a Real variable array called HowlDamage:
  • Events
  • Unit - A unit starts the effect of an ability
  • Conditions
  • Actions
  • Set Variable HowlLevel = Level of ability being cast for Triggering unit
  • Unit Group - Pick every nearby enemy unit and do...
  • Set Variable HowlDamage[Custom value of picked unit] = HowlDamageLevel[HowlLevel]

You can then reference HowlDamage[Custom value of picked unit] in your Periodic trigger whenever you deal damage to a unit.

I wrote these triggers from memory so they will look a little weird. Understand that in the actual trigger editor some things such as the Pick every unit function will look different.

Edit: Increasing the Interval will help with performance but a 1.00 second interval isn't really a problem. It's usually smaller intervals like < 0.10 that cause performance issues but that also depends on what you're doing in the trigger. Creating a lot of units/special effects will definitely hurt performance at small intervals but doing simple Arithmetic like 1 + 1 will be rather easy for the computer to handle. I would stick with the 1.00 second interval and worry about it later down the line if it's actually an issue.

Sorry for the late response. Took me a while to realise that I put the
  • Set Greater_Affected[Unit_CustomValue] = False
at the wrong place

and i didn't have the
  • Unit Group - Remove Greater_Target from Greater_DamageGroup
It should look better now.
  • Greater Inferno
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to GreaterInf_Group
      • Trigger - Turn on Greater Immolation <gen>

  • Greater Immolation
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in GreaterInf_Group and do (Actions)
        • Loop - Actions
          • Set GreaterInfernal = (Picked unit)
          • Set GreaterImmolationPosition = (Position of GreaterInfernal)
          • Set UnitgroupforSpell = (Units within 340.00 of GreaterImmolationPosition)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set Greater_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Greater_Target is alive) Equal to True
                  • (Greater_Target belongs to an enemy of (Owner of GreaterInfernal)) Equal to True
                  • (Greater_Target is A structure) Equal to False
                  • (Greater_Target is Magic Immune) Equal to False
                  • (Greater_Target is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of Greater_Target)
                  • Set Greater_Scource[Unit_CustomValue] = GreaterInfernal
                  • Set Greater_Affected[Unit_CustomValue] = True
                  • Unit Group - Add Greater_Target to Greater_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_GreaterImmolationPosition)
      • -------- Damage --------
      • Unit Group - Pick every unit in Greater_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Greater_Target = (Picked unit)
          • Set Unit_CustomValue = (Custom value of Greater_Target)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Greater_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Greater_Scource[Unit_CustomValue] to damage Greater_Target, dealing 1200.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove Greater_Target from Greater_DamageGroup
          • Set Greater_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in GreaterInf_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Greater Inferno Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Greater Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from GreaterInf_Group



  • Lesser Inferno
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Lesser Infernal
    • Actions
      • Unit Group - Add (Triggering unit) to LesserInf_Group
      • Trigger - Turn on Lesser Immolation <gen>

  • Lesser Immolation
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in LesserInf_Group and do (Actions)
        • Loop - Actions
          • Set LesserInfernal = (Picked unit)
          • Set LesserImmolationPosition = (Position of LesserInfernal)
          • Set UnitgroupforSpell = (Units within 232.00 of LesserImmolationPosition)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set Lesser_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Lesser_Target is alive) Equal to True
                  • (Lesser_Target belongs to an enemy of (Owner of LesserInfernal)) Equal to True
                  • (Lesser_Target is A structure) Equal to False
                  • (Lesser_Target is Magic Immune) Equal to False
                  • (Lesser_Target is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of Lesser_Target)
                  • Set Lesser_Scource[Unit_CustomValue] = LesserInfernal
                  • Set Lesser_Affected[Unit_CustomValue] = True
                  • Unit Group - Add Lesser_Target to Lesser_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_LesserImmolationPosition)
      • -------- Damage --------
      • Unit Group - Pick every unit in Lesser_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Lesser_Target = (Picked unit)
          • Set Unit_CustomValue = (Custom value of Lesser_Target)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Lesser_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Lesser_Scource[Unit_CustomValue] to damage Lesser_Target, dealing 600.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove Lesser_Target from Lesser_DamageGroup
          • Set Lesser_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in LesserInf_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Lesser Inferno Dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Lesser Infernal
    • Actions
      • Unit Group - Remove (Triggering unit) from LesserInf_Group



  • Abyssal
    • Events
      • Unit - A unit enters (Playable map area)
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Abyssal
    • Actions
      • Unit Group - Add (Triggering unit) to Abyssal_Group
      • Trigger - Turn on Abyssal Flame <gen>

  • Abyssal Flame
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Abyssal_Group and do (Actions)
        • Loop - Actions
          • Set Abyssal = (Picked unit)
          • Set AbyssalPosition = (Position of Abyssal)
          • Set UnitgroupforSpell = (Units within 232.00 of AbyssalPosition)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set Abyssal_Target = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (Abyssal_Target is alive) Equal to True
                  • (Abyssal_Target belongs to an enemy of (Owner of Abyssal)) Equal to True
                  • (Abyssal_Target is A structure) Equal to False
                  • (Abyssal_Target is Magic Immune) Equal to False
                  • (Abyssal_Target is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of Abyssal_Target)
                  • Set Abyssal_Scource[Unit_CustomValue] = Abyssal
                  • Set Abyssal_Affected[Unit_CustomValue] = True
                  • Unit Group - Add Abyssal_Target to Abyssal_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_AbyssalPosition)
      • -------- Damage --------
      • Unit Group - Pick every unit in Greater_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Abyssal_Target = (Picked unit)
          • Set Unit_CustomValue = (Custom value of Abyssal_Target)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Abyssal_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Abyssal_Scource[Unit_CustomValue] to damage Abyssal_Target, dealing 1000.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove Abyssal_Target from Abyssal_DamageGroup
          • Set Abyssal_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Abyssal_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • Abyssal dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Abyssal
    • Actions
      • Unit Group - Remove (Triggering unit) from Abyssal_Group




This is my first attempt at making the Damage Over Time spell
  • PitlordSkill Var
    • Events
      • Map initialization
    • Conditions
    • Actions
      • Set PitlordSkillVar[1] = 18.00
      • Set PitlordSkillVar[2] = 30.00
      • Set PitlordSkillVar[3] = 60.00
      • Set PitlordSkillVar[4] = 94.00
      • Set PitlordSkillVar[5] = 150.00
      • Set PitlordSkillVar[6] = 220.00
      • Set PitlordSkillVar[7] = 300.00
      • Set PitlordSkillVar[8] = 400.00

  • Howl of Terror
    • Events
      • Unit - A unit Finishes casting an ability
    • Conditions
      • (Unit-type of (Triggering unit)) Equal to Pit Lord (sogat)
      • (Ability being cast) Equal to Howl of Terror (Common)
    • Actions
      • Set HowlLevel = (Level of Howl of Terror (Common) for (Triggering unit))
      • Set CasterPoint = (Position of (Triggering unit))
      • Set UnitgroupforSpell = (Units within 524.00 of CasterPoint)
      • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
        • Loop - Actions
          • Set AbilityTarget = (Picked unit)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • (AbilityTarget belongs to an enemy of (Owner of (Triggering unit))) Equal to True
              • (AbilityTarget is A structure) Equal to False
              • (AbilityTarget is Magic Immune) Equal to False
              • (AbilityTarget is invulnerable) Equal to False
            • Then - Actions
              • Set Unit_CustomValue = (Custom value of AbilityTarget)
              • Set HowlDMG[Unit_CustomValue] = PitlordSkillVar[HowlLevel]
              • Set HowlSource[Unit_CustomValue] = (Triggering unit)
              • Unit Group - Add (Picked unit) to Howl_TargetGroup
            • Else - Actions
      • Trigger - Turn on Howl DOT <gen>
      • Custom script: call DestroyGroup (udg_UnitgroupforSpell)

  • Howl DOT
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Howl_TargetGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • And - All (Conditions) are true
                • Conditions
                  • ((Picked unit) has buff Fear Incarnation ) Equal to True
                  • ((Picked unit) is alive) Equal to True
            • Then - Actions
              • Unit Group - Add (Picked unit) to Howl_DMGGroup
            • Else - Actions
              • Unit Group - Remove (Picked unit) from Howl_TargetGroup
      • -------- - --------
      • -------- - --------
      • -------- Damage --------
      • Unit Group - Pick every unit in Howl_DMGGroup and do (Actions)
        • Loop - Actions
          • Unit - Cause HowlSource[Unit_CustomValue] to damage (Picked unit), dealing HowlDMG[Unit_CustomValue] damage of attack type Spells and damage type Normal
      • -------- - --------
      • -------- - --------
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Howl_TargetGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions

  • HowlDMGGroup unit dies
    • Events
      • Unit - A unit Dies
    • Conditions
      • ((Triggering unit) is in Howl_DMGGroup) Equal to True
    • Actions
      • Unit Group - Remove (Triggering unit) from Howl_DMGGroup
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
Infernals look good as far as I can tell. You could clean it up by reusing some of the variables and Scource should be spelled Source.

Howl is close but you're making a few mistakes.

1: Delete the HowlDmgGroup unit dies trigger. This is inefficient and overkill. The unit will be removed from Howl_TargetGroup in the Periodic trigger. You can even remove the Is Alive Condition because Dead units won't have the Buff.

2: You only need a single Pick every unit function in the Periodic trigger. Delete Howl_DMGGroup and deal the damage where you were Adding the Picked unit to Howl_DMGGroup.

3: "And - All (Conditions) are true" is unnecessary. Conditions by default need to all be true.

4: Change the cast Event to "A unit Starts the effect of an ability". This is the cast Event you'll want to be using majority of the time.

5: You're referencing Unit_CustomValue without ever setting it. This could be equal to any random unit's custom value at this point.
 
Last edited:
Level 6
Joined
Feb 22, 2009
Messages
212
Infernals look good as far as I can tell. You could clean it up by reusing some of the variables and Scource should be spelled Source.

Howl is close but you're making a few mistakes.

1: Delete the HowlDmgGroup unit dies trigger. This is inefficient and overkill. The unit will be removed from Howl_TargetGroup in the Periodic trigger.

2: You only need a single Pick every unit function in the Periodic trigger. You don't need Howl_DMGGroup, simply deal the damage where you're Adding the Picked unit to Howl_DMGGroup.

3: And - All (Conditions) are true is unnecessary. Conditions by default need to all be true.

You mean turning the loop trigger and the Inferno triggers into these?


  • Abyssal Flame
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Abyssal_Group and do (Actions)
        • Loop - Actions
          • Set CastingUnit = (Picked unit)
          • Set CasterPoint = (Position of CastingUnit)
          • Set UnitgroupforSpell = (Units within 232.00 of CasterPoint)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set AbilityTarget = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (AbilityTarget is alive) Equal to True
                  • (AbilityTarget belongs to an enemy of (Owner of CastingUnit)) Equal to True
                  • (AbilityTarget is A structure) Equal to False
                  • (AbilityTarget is Magic Immune) Equal to False
                  • (AbilityTarget is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of AbilityTarget)
                  • Set Abyssal_Source[Unit_CustomValue] = CastingUnit
                  • Set Abyssal_Affected[Unit_CustomValue] = True
                  • Unit Group - Add AbilityTarget to Abyssal_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_CasterPoint)
      • -------- Damage --------
      • Unit Group - Pick every unit in Greater_DamageGroup and do (Actions)
        • Loop - Actions
          • Set Unit_CustomValue = (Custom value of AbilityTarget)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Abyssal_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Abyssal_Source[Unit_CustomValue] to damage AbilityTarget, dealing 1000.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove AbilityTarget from Abyssal_DamageGroup
          • Set Abyssal_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Abyssal_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Greater Immolation
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in GreaterInf_Group and do (Actions)
        • Loop - Actions
          • Set CastingUnit = (Picked unit)
          • Set CasterPoint = (Position of CastingUnit)
          • Set UnitgroupforSpell = (Units within 340.00 of CasterPoint)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set AbilityTarget = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (AbilityTarget is alive) Equal to True
                  • (AbilityTarget belongs to an enemy of (Owner of CastingUnit)) Equal to True
                  • (AbilityTarget is A structure) Equal to False
                  • (AbilityTarget is Magic Immune) Equal to False
                  • (AbilityTarget is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of AbilityTarget)
                  • Set Greater_Source[Unit_CustomValue] = CastingUnit
                  • Set Greater_Affected[Unit_CustomValue] = True
                  • Unit Group - Add AbilityTarget to Greater_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_CasterPoint)
      • -------- Damage --------
      • Unit Group - Pick every unit in Greater_DamageGroup and do (Actions)
        • Loop - Actions
          • Set AbilityTarget = (Picked unit)
          • Set Unit_CustomValue = (Custom value of AbilityTarget)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Greater_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Greater_Source[Unit_CustomValue] to damage AbilityTarget, dealing 1200.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove AbilityTarget from Greater_DamageGroup
          • Set Greater_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in GreaterInf_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions


  • Lesser Immolation
    • Events
      • Time - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in LesserInf_Group and do (Actions)
        • Loop - Actions
          • Set CastingUnit = (Picked unit)
          • Set CasterPoint = (Position of CastingUnit)
          • Set UnitgroupforSpell = (Units within 232.00 of CasterPoint)
          • Unit Group - Pick every unit in UnitgroupforSpell and do (Actions)
            • Loop - Actions
              • Set AbilityTarget = (Picked unit)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • If - Conditions
                  • (AbilityTarget is alive) Equal to True
                  • (AbilityTarget belongs to an enemy of (Owner of CastingUnit)) Equal to True
                  • (AbilityTarget is A structure) Equal to False
                  • (AbilityTarget is Magic Immune) Equal to False
                  • (AbilityTarget is invulnerable) Equal to False
                • Then - Actions
                  • Set Unit_CustomValue = (Custom value of AbilityTarget)
                  • Set Lesser_Source[Unit_CustomValue] = CastingUnit
                  • Set Lesser_Affected[Unit_CustomValue] = True
                  • Unit Group - Add AbilityTarget to Lesser_DamageGroup
                • Else - Actions
          • Custom script: call DestroyGroup (udg_UnitgroupforSpell)
          • Custom script: call RemoveLocation (udg_CasterPoint)
      • -------- Damage --------
      • Unit Group - Pick every unit in Lesser_DamageGroup and do (Actions)
        • Loop - Actions
          • Set AbilityTarget = (Picked unit)
          • Set Unit_CustomValue = (Custom value of AbilityTarget)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • Lesser_Affected[Unit_CustomValue] Equal to True
            • Then - Actions
              • Unit - Cause Lesser_Source[Unit_CustomValue] to damage AbilityTarget, dealing 600.00 damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove AbilityTarget from Lesser_DamageGroup
          • Set Lesser_Affected[Unit_CustomValue] = False
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in LesserInf_Group) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions




  • Howl DOT
    • Events
      • Time - Every 1.00 seconds of game time
    • Conditions
    • Actions
      • Unit Group - Pick every unit in Howl_TargetGroup and do (Actions)
        • Loop - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • If - Conditions
              • ((Picked unit) has buff Fear Incarnation ) Equal to True
              • ((Picked unit) is alive) Equal to True
            • Then - Actions
              • Unit - Cause HowlSource[Unit_CustomValue] to damage (Picked unit), dealing HowlDMG[Unit_CustomValue] damage of attack type Spells and damage type Normal
            • Else - Actions
              • Unit Group - Remove (Picked unit) from Howl_TargetGroup
      • -------- - --------
      • -------- - --------
      • -------- Turn off --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Number of units in Howl_TargetGroup) Equal to 0
        • Then - Actions
          • Trigger - Turn off (This trigger)
        • Else - Actions
 

Uncle

Warcraft Moderator
Level 64
Joined
Aug 10, 2018
Messages
6,539
For Howl DOT you can delete the Is Alive Condition and you're still forgetting to Set Unit_CustomValue. If that variable isn't Set to the picked unit's Custom value then it'll be referencing whatever it was last Set to, which will definitely not be the picked unit's custom value.

You did good with reusing the Variables in your Infernal triggers but you still have a few wrong variables here and there. For example, you're referencing Greater_DamageGroup in your Abyssal Infernal trigger when you should be referencing Abyssal_DamageGroup.

To reiterate, the only new Variables you need to create for a new Infernal are: Affected, Source, DamageGroup, TargetGroup (the one that contains the Infernals)
(I think you did this correctly)

The rest of the Variables can be shared between the different Infernal triggers. Just make sure you double check and read things from top to bottom slowly and methodically. If you fix those cases of wrong references and fix Howl DOT by making those 2 changes you should be all set.
 
Status
Not open for further replies.
Top