• Check out the results of the Techtree Contest #19!
  • 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.
  • Create a void inspired texture for Warcraft 3 and enter Hive's 34th Texturing Contest: Void! Click here to enter!
  • The Hive's 22nd Icon Contest: Creep Abilities is now concluded, time to vote for your favourite set of icons! Click here to vote!

[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: 42
Last edited:
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.
 
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 ;)
 
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
 
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:
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:
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
 
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
 
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 !
 
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.
Back
Top