• Listen to a special audio message from Bill Roper to the Hive Workshop community (Bill is a former Vice President of Blizzard Entertainment, Producer, Designer, Musician, Voice Actor) 🔗Click here to hear his message!
  • Read Evilhog's interview with Gregory Alper, the original composer of the music for WarCraft: Orcs & Humans 🔗Click here to read the full interview.

[Trigger] AOE DOT spell that affects Invulnerable

Status
Not open for further replies.
Level 4
Joined
Apr 22, 2020
Messages
53
Hi,

I'm trying to make a trigger spell with AOE and DOT.

It's a fire area you can get out of to avoid more damage.

Important point, it has to affect some units who are Invulnerable and has not to affect a type of unit, so I need to keep conditions I've set..

I tried to make this but I have several issues :

1- The buff doesn't disapear.
2- Units inside the spell at beginning take damage, and don't when they leave the area as expected BUT if a unit not inside the spell at the beginning goes in the area, it will not take any damage...

  • Ignite2 Unit
    • Evenements
      • Unit - A unit Initie l'effet d'une competence
    • Conditions
      • (Ability being cast) Egal to Ignite 2
      • ((Owner of (Triggering unit)) Or actuel) Superieur ou egal to 10
    • Actions
      • Custom script: local effect udg_Ignite2_SpellEffect
      • Joueur - Add -10 to (Owner of (Triggering unit)) Or actuel
      • Set Ignite2_Point = (Target point of ability being cast)
      • Effet special - Create a special effect at Ignite2_Point using Abilities\Spells\Other\ImmolationRed\ImmolationRedTarget.mdl
      • Set Ignite2_SpellEffect = (Last created special effect)
      • Custom script: set bj_wantDestroyGroup = true
      • Groupe unit - Pick every unit in (Units within 90.00 of Ignite2_Point) and do (Actions)
        • Boucle - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • (Unit-type of (Picked unit)) Different de Dragon
              • ((Picked unit) is alive) Egal to TRUE
            • Alors - Actions
              • Unit - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
            • Sinon - Actions
      • Effet special - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • Effet special - Destroy (Last created special effect)
      • Wait 2.00 seconds
      • Custom script: set bj_wantDestroyGroup = true
      • Groupe unit - Pick every unit in (Units within 90.00 of Ignite2_Point) and do (Actions)
        • Boucle - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • (Unit-type of (Picked unit)) Different de Dragon
              • ((Picked unit) is alive) Egal to TRUE
            • Alors - Actions
              • Unit - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
            • Sinon - Actions
      • Effet special - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • Effet special - Destroy (Last created special effect)
      • Wait 2.00 seconds
      • Custom script: set bj_wantDestroyGroup = true
      • Groupe unit - Pick every unit in (Units within 90.00 of Ignite2_Point) and do (Actions)
        • Boucle - Actions
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • (Unit-type of (Picked unit)) Different de Dragon
              • ((Picked unit) is alive) Egal to TRUE
            • Alors - Actions
              • Unit - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
            • Sinon - Actions
      • Effet special - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
      • Effet special - Destroy (Last created special effect)
      • Effet special - Destroy Ignite2_SpellEffect
      • Custom script: call RemoveLocation (udg_Ignite2_Point)
      • Custom script: set udg_Ignite2_SpellEffect = null
 

Attachments

  • upload_2020-4-29_21-58-33.png
    upload_2020-4-29_21-58-33.png
    11.2 MB · Views: 13
Last edited:
Level 15
Joined
Feb 7, 2020
Messages
397
1) How is the buff being added? The allowed target tags needs to include "vulnerable" and "invulnerable" for a dummy spell to apply a buff.

2) Is another unit or copy of the spell being cast between the wait steps? Wait steps don't preserve most data (e.g. the variable being set could change so it's a new location after 2 sec pass).

2b) You should probably look into converting this into a periodic timer spell. Initialize the spell on cast with one trigger, then turn on a 2 second periodic timer trigger that does the unit group effects at the point. Increment an integer variable with each timer completion and turn the trigger off via an if/then/else block when it reaches 2 or 3 or whatever your desired spell duration (in seconds) is. You seem advanced enough to play around with it to get it to work :)

3) Can you post triggers as text versus screenshots? It lets us copy and paste etc.
 
Level 4
Joined
Apr 22, 2020
Messages
53
1) The "Buff" is how I named special effect "LargeBuildingFire". I would like it to affect the target unit of ability being cast every times spell does damage. You mean I should try this with a dummy ? I already tried and I failed lol... Unfortunatly, I deleted all my work around the dummy, so I can't show you what I've done, maybe you will be able to correct me :(

2) Yes, it could be cast by all unit-type "Dragon" on the map.

2b) I see what you mean, I saw a lot of triggers in this type where you set some variables before and make two other triggers. I saw them, but I never really understand them completely. But I will try it (again lol) and I come back here if I need help :)

3) first post edited ;)
 
Level 15
Joined
Feb 7, 2020
Messages
397
Per 2), you are running into a multiple instance issue most likely. The point being search for has moved if another unit used the same ability and caused this trigger to run.

Also, I just noticed this is outside of the unit group. Picked unit won't do anything here:

  • Effet special - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
 
Level 4
Joined
Apr 22, 2020
Messages
53
Ok !

I did it (proud :p) but I still need help on special effect :


  • Ignite
    • Evenements
      • Unit - A unit Initie l'effet d'une ability
    • Conditions
      • (Ability being cast) Egal to Ignite 2
      • ((Owner of (Triggering unit)) Or actuel) Superieur ou egal to 10
    • Actions
      • Joueur - Add -10 to (Owner of (Triggering unit)) Or actuel
      • Set Ignite_Index = (Ignite_Index + 1)
      • Set Ignite_Point[Ignite_Index] = (Target point of ability being cast)
      • Set Ignite_Counter[Ignite_Index] = 0.00
      • Unit - Create 1 Fire for Joueur 1 (Rouge) at Ignite_Point[Ignite_Index] facing (Position of (Triggering unit))
      • Unit - Add a 6.00 second Generique expiration timer to (Last created unit)
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • Si - Conditions
          • Ignite_Index Egal to 1
        • Alors - Actions
          • Trigger - Turn on Ignite Loop <gen>
        • Sinon - Actions

  • Ignite Loop
    • Evenements
      • Temps - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Ignite_LoopInteger) from 1 to Ignite_Index, do (Actions)
        • Boucle - Actions
          • Custom script: set bj_wantDestroyGroup = true
          • Groupe unit - Pick every unit in (Units within 90.00 of Ignite_Point[Ignite_LoopInteger]) and do (Actions)
            • Boucle - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • (Unit-type of (Picked unit)) Different de Dragon
                  • ((Picked unit) is alive) Egal to TRUE
                • Alors - Actions
                  • Unit - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
                  • Effet special - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
                  • Effet special - Destroy (Last created special effect)
                • Sinon - Actions
          • Set Ignite_Counter[Ignite_LoopInteger] = (Ignite_Counter[Ignite_LoopInteger] + 2.00)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • Ignite_Counter[Ignite_LoopInteger] Superieur ou egal to 6.00
            • Alors - Actions
              • Set Ignite_Point[Ignite_LoopInteger] = Ignite_Point[Ignite_Index]
              • Set Ignite_Counter[Ignite_LoopInteger] = Ignite_Counter[Ignite_Index]
              • Set Ignite_Index = (Ignite_Index - 1)
              • Set Ignite_LoopInteger = (Ignite_LoopInteger - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • Ignite_Index Egal à 0
                • Alors - Actions
                  • Trigger - Turn off (This trigger)
                • Sinon - Actions
            • Sinon - Actions

I want to set a special effect that last 6 seconds on the ground and I really know how to do it...
 
Last edited:

Uncle

Warcraft Moderator
Level 70
Joined
Aug 10, 2018
Messages
7,391
Depending on the Special Effect's animations you can run into problems. This means that the Create/Destroy method doesn't always work (I believe this is the case when the special effect has a Death animation as it plays that instead) and a lot of special effects can't work properly as Buffs since they don't loop their animations.

Anyway, you have a timer that runs every 2.00 seconds and you have access to the Ignite_Point, so you can easily re-create the fire effect at that Point every loop. Or you could even play the Fire dummy's stand/birth (whichever one it uses) animation again every 2.00 seconds. You'll have to store the Dummy as a Unit variable of course.

And you can't really do much with Buffs in the Object Editor besides adjust their names/art fields. For instance, changing Storm Bolt's Stunned (Pause) buff to Banish doesn't apply the effects of Banish. It gives the enemy the Banish buff (name/icon/description/art) but that's it, it will still apply the Stunned effect. And removing a buff as far as I know just applies the default buff instead.

I'm not sure what your goal is with that ability, but if you don't want Flame Strike to apply a buff then set it's Targets Allowed to None. You can trigger everything in the Loop anyway.
 
Last edited:
Level 4
Joined
Apr 22, 2020
Messages
53
I change Flame Strike to Silence, so this problem is solved :)

For the first one, I tried this :

  • Ignite Loop
    • Evénements
      • Temps - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Ignite_LoopInteger) from 1 to Ignite_Index, do (Actions)
        • Boucle - Actions
          • Effet spécial - Create a special effect at Ignite_Point[Ignite_LoopInteger] using Abilities\Spells\Orc\LiquidFire\Liquidfire.mdl
          • Set Ignite_Effects[Ignite_LoopInteger] = (Last created special effect)
          • Custom script: set bj_wantDestroyGroup = true
          • Groupe unité - Pick every unit in (Units within 90.00 of Ignite_Point[Ignite_LoopInteger]) and do (Actions)
            • Boucle - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • (Unit-type of (Picked unit)) Différent de Dragon
                  • ((Picked unit) is alive) Egal à TRUE
                • Alors - Actions
                  • Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
                  • Effet spécial - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
                  • Effet spécial - Destroy (Last created special effect)
                • Sinon - Actions
          • Set Ignite_Counter[Ignite_LoopInteger] = (Ignite_Counter[Ignite_LoopInteger] + 2.00)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • Ignite_Counter[Ignite_LoopInteger] Supérieur ou égal à 6.00
            • Alors - Actions
              • Effet spécial - Destroy Ignite_Effects[Ignite_LoopInteger]
              • Custom script: call RemoveLocation( udg_Ignite_Point[udg_Ignite_LoopInteger])
              • Set Ignite_Point[Ignite_LoopInteger] = Ignite_Point[Ignite_Index]
              • Set Ignite_Counter[Ignite_LoopInteger] = Ignite_Counter[Ignite_Index]
              • Set Ignite_Index = (Ignite_Index - 1)
              • Set Ignite_LoopInteger = (Ignite_LoopInteger - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • Ignite_Index Egal à 0
                • Alors - Actions
                  • Déclencheur - Turn off (This trigger)
                • Sinon - Actions
            • Sinon - Actions

But the "Liquid Fire" effect is not removed... I've tested it without all those conditions, and the effect is removed correctly, so I've make a mistake somewhere, but I don't get which one is it... I will try your dummy solution, but even if it works, I would like to understand where is my mistake
 
Level 4
Joined
Apr 22, 2020
Messages
53
It worked but when I use several times my spell, it doesnt work well, it doesnt desappear or doesnt appear at all :

  • Ignite
    • Evénements
      • Unité - A unit Initie l'effet d'une compétence
    • Conditions
      • (Ability being cast) Egal à Ignite
      • ((Owner of (Triggering unit)) Or actuel) Supérieur ou égal à 10
    • Actions
      • Joueur - Add -10 to (Owner of (Triggering unit)) Or actuel
      • Set Ignite_Index = (Ignite_Index + 1)
      • Set Ignite_Point[Ignite_Index] = (Target point of ability being cast)
      • Effet spécial - Create a special effect at Ignite_Point[Ignite_Index] using Abilities\Spells\Orc\LiquidFire\Liquidfire.mdl
      • Set Ignite_Effects[Ignite_Index] = (Last created special effect)
      • Unité - Create 1 Fire for (Owner of (Triggering unit)) at Ignite_Point[Ignite_Index] facing Ignite_Point[Ignite_Index]
      • Set Ignite_Dummy[Ignite_Index] = (Last created unit)
      • Set Ignite_Counter[Ignite_Index] = 0.00
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • Si - Conditions
          • Ignite_Index Egal à 1
        • Alors - Actions
          • Déclencheur - Turn on Ignite Loop <gen>
        • Sinon - Actions


  • Ignite Loop
    • Evénements
      • Temps - Every 2.00 seconds of game time
    • Conditions
    • Actions
      • For each (Integer Ignite_LoopInteger) from 1 to Ignite_Index, do (Actions)
        • Boucle - Actions
          • Custom script: set bj_wantDestroyGroup = true
          • Groupe unité - Pick every unit in (Units within 90.00 of Ignite_Point[Ignite_LoopInteger]) and do (Actions)
            • Boucle - Actions
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • (Unit-type of (Picked unit)) Différent de Dragon
                  • ((Picked unit) is alive) Egal à TRUE
                • Alors - Actions
                  • Unité - Set life of (Picked unit) to ((Vie of (Picked unit)) - 2.00)
                  • Effet spécial - Create a special effect attached to the chest of (Picked unit) using Environment\LargeBuildingFire\LargeBuildingFire2.mdl
                  • Effet spécial - Destroy (Last created special effect)
                • Sinon - Actions
          • Set Ignite_Counter[Ignite_LoopInteger] = (Ignite_Counter[Ignite_LoopInteger] + 2.00)
          • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
            • Si - Conditions
              • Ignite_Counter[Ignite_LoopInteger] Supérieur ou égal à 6.00
            • Alors - Actions
              • Effet spécial - Destroy Ignite_Effects[Ignite_LoopInteger]
              • Custom script: call RemoveLocation( udg_Ignite_Point[udg_Ignite_LoopInteger])
              • Set Ignite_Point[Ignite_LoopInteger] = Ignite_Point[Ignite_Index]
              • Set Ignite_Counter[Ignite_LoopInteger] = Ignite_Counter[Ignite_Index]
              • Set Ignite_Index = (Ignite_Index - 1)
              • Set Ignite_LoopInteger = (Ignite_LoopInteger - 1)
              • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
                • Si - Conditions
                  • Ignite_Index Egal à 0
                • Alors - Actions
                  • Déclencheur - Turn off (This trigger)
                • Sinon - Actions
            • Sinon - Actions
 
Level 4
Joined
Apr 22, 2020
Messages
53
Ok I was STUPID ! The dummy solution worked fine with a generic timer. I just forgot my dummy has 1 healthpoint....................... So yes, it just kept dying at start.....

Anyway, all is working fine now. Thanks !
 

Uncle

Warcraft Moderator
Level 70
Joined
Aug 10, 2018
Messages
7,391
Nice, and the Liquid Fire never disappeared because you never destroyed it. You needed to treat it the same way you treated "Ignite_Effects". You also never adjust Ignite_Effects in your Loop, it needs to have it's Index adjusted like you do with the other variables. Like "Set Ignite_Effects[Ignite_LoopInteger] = Ignite_Effects[Ignite_Index]"
 
Last edited:
Status
Not open for further replies.
Top