[Spell] Multiple Impale and Ravage hits on the same targets

Level 13
Joined
Sep 11, 2013
Messages
467
Greetings!
Few months ago I've made a post <here> and I asked: if is possible to make Impale spell to hit the same targets multiple times during the stun duration. (MUI and/or with refresher).
At that time @Uncle saved the day and helped me a lot by created a full custom impale trigger. (All my respect for that as always)

Right Now I've got a new idea and I want to create an Infernal Hero for my new map that has Impale and Ravage but it's impossible for me to create such dificult spell.

What are the problems:
1. I wish to create that Ravage spell that is able to hit the same targets multiple time while they are stuned by impale/ravage just like how Impale trigger work right now, but with few differences as you can see in the video below.
I. Ravage - The total distance covered by a wave must be a little bigger than impale (see video)
II.Ravage - Air_Height must be higher than on Impale spell (see video)

Should I copy the entire triggers from custom impale and all variable twice to achieve this result with a little variation? Is there a better way? (please check the map)

I've made a Ravage in the map below but is bad.. because I can't use it to hit the same targets more than once while they're stunned.


2. In the Custom Impale trigger I think there is something that reset the fist animation on the Infernal way too fast. It is possible to make the animation work normal like a default impale? (see video below)

The help will be appreaciated! :peasant-bowing: :peasant-bowing: :peasant-bowing:
 

Attachments

  • Triggers for Impale and Ravage.w3m
    113.5 KB · Views: 6
Level 13
Joined
Sep 11, 2013
Messages
467
Bump - Hi again!:peasant-waving:
I found a new problem in the custom impale trigger and if someone will help me at least with this problem will be great!

1. If I cast custom Impale(E) and then very fast Ravage(R), a second Impale will be casted on the ground and I don't know why.. (see video below)


2.The main problem in this thread is better seen in the video below. The second Ravage don't work on stunned targets. (see video below)

The map with those problems is attached in the first post if someone can/wants to help me:peasant-work-work:

The help will be appreciated! :peasant-bowing: :peasant-bowing: :peasant-bowing:
 
Level 24
Joined
Feb 27, 2019
Messages
833
1. If I cast custom Impale(E) and then very fast Ravage(R), a second Impale will be casted on the ground and I don't know why.. (see video below)

2.The main problem in this thread is better seen in the video below. The second Ravage don't work on stunned targets. (see video below)
1. If the cooldown is less than the time it takes for the custom Impale to execute its a problem, if not then dont worry about it. Add a cooldown and call it a day. F.e. the current set up takes ~0.30 seconds to execute but if your intent is to have 0 seconds cooldown thats another story.

The issue seems to be that the ability re-casts if not specifically interrupted. Kinda like if you issue to cast Storm bolt on a unit and cast Thunder clap. Thunder clap wont interrupt the Storm bolt order, but that doesnt happen if the Storm bolt has started casting. Its like if youd Drain life a unit, cast Thunder clap and itd automatically start Drain life again. For me its pretty weird with the Channel ability, the follow through time seems to behave a bit different.

2. Thats the default Impale and its hard coded that way. This custom Impale doesnt behave that way. The impale triggers appear to have some elements that require a specific ability and are set to specific values. The Impale triggers could be modified to allow different Impale abilities and the dummies could cast an Impale using same system.
 
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
1. If the cooldown is less than the time it takes for the custom Impale to execute its a problem, if not then dont worry about it. Add a cooldown and call it a day. F.e. the current set up takes ~0.30 seconds to execute but if your intent is to have 0 seconds cooldown thats another story.

The issue seems to be that the ability re-casts if not specifically interrupted. Kinda like if you issue to cast Storm bolt on a unit and cast Thunder clap. Thunder clap wont interrupt the Storm bolt order, but that doesnt happen if the Storm bolt has started casting. Its like if youd Drain life a unit, cast Thunder clap and itd automatically start Drain life again. For me its pretty weird with the Channel ability, the follow through time seems to behave a bit different.
Oh. You're right. With a cooldown on custom impale, the bug dissapear even with refresh item. (I tried life drain and cast thunder clap, but did not start the life drain again (anyway doesn't matter)).
2. Thats the default Impale and its hard coded that way. This custom Impale doesnt behave that way. The impale triggers appear to have some elements that require a specific ability and are set to specific values. The Impale triggers could be modified to allow different Impale abilities and the dummies could cast an Impale using same system.
Yeah.. well I think this is what I need to create Ravage ultimate, but I don't know how to do that alone that's why I ask for help here. The trigger is way too complex for my skill and the language english in programming it's a big barrier for me.
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
1) When using the Channel ability you need to define which Order it uses with the Base Order Id field. This field exists so that you can avoid Order conflicts (give a unit two of the same Abilities that lack this Base Order Id field and you'll see what I mean).

2) The Channel ability I was using had the Base Order Id of "shockwave" but you were issuing an "impale" order to the Dummy units in your trigger. Since they didn't have any ability with that Order Id they simply ignored the Order and nothing happened.

3) Furthermore, this Impale trigger I made is designed to end early if you stop casting. In other words, it's channeled. So when you gave your Dummy units a 1.00 second Expiration Timer you were essentially saying "Stop casting after 1 second" since a Dead unit obviously cannot keep channeling an ability.

^ With that in mind, Channel's Follow Through Time and the Dummy's Expiration Timer are meant to match, and the Expiration can even be slightly longer for good measure. To clarify, Follow Through Time is how long it's channeled for.

4) Lastly, I recommend using my Dummy unit, it's setup properly and can be reused in most if not all of your triggers. You may want to tweak it's Art settings though, but everything else is setup to cast spells instantly. There's a custom Dummy model on Hive that's nice, it's "hidden" from sight and has Attachment points which work nicely with some abilities. You may also want to mess with various Art settings related to positioning/rotation.
 

Attachments

  • Impale Fixes.w3m
    111.8 KB · Views: 2
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
Hi Uncle!

Thank you very much for your help! :peasant-thumbs-up:

1) When using the Channel ability you need to define which Order it uses with the Base Order Id field. This field exists so that you can avoid Order conflicts (give a unit two of the same Abilities that lack this Base Order Id field and you'll see what I mean).
1) I am very aware of that. :peasant-ok-hand:


2) The Channel ability I was using had the Base Order Id of "shockwave" but you were issuing an "impale" order to the Dummy units in your trigger. Since they didn't have any ability with that Order Id they simply ignored the Order and nothing happened.
2) It seems there was a misunderstanding somewhere because in the attached map I left in the first post, I set the "Useless Ravage trigger" to put a default impale with impale order on the dummy and the spell worked, but with that stun limitation. The custom impale had shockwave order and Useless Ravage ability had thunderclap order so there was not a order problem in theory.

Indeed, If i press custom impale and then very fast Useless Ravage ability, the custom impale start to cast again, but this problem exist even in the new version posted. Luckily If we put a cooldown on those spells, this bug disappear as Duckfarter said above.


Now the big problems begin..:(

I. I wish that Impale and Ravage spells to have 2 different custom impales at base. for example:
1.Impale - 4 levels of stun + 4 levels of damage + 4 levels of cooldown + 4 levels of mana


1.Ravage - 3 levels of stun + 3 levels of damage + 3 levels of cooldown + 3 levels of mana
2.Ravage - The total distance covered by Ravage must be a little bigger than impale ~150 range bonus (see video)
3.Ravage - Air Height Impale from Ravage must be higher than on Impale spell (see video)


Should I copy the entire triggers from custom impale and all variable twice to achieve this result with a little variation? Is there a better way?

II. In the Custom Impale trigger I think there is something that reset the fist animation on the Infernal way too fast. It is possible to make the animation work normal like a default impale? (see video below)


The help for this hard work is strongly appreciated!
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
First, look at how the variables in the Impale "Setup" trigger define the stats in Arrays. Then look at how the "Cast" trigger references these Arrays to define the current instance's stats. Note: An instance = index, a separate set of data for each active usage of the spell.

Second, look at how the Impale "Cast" trigger runs. All it checks for is that you cast a specific ability. If you want it to run for multiple Abilities then adjust the Conditions to allow for that.

Third, after understanding how the Cast trigger runs and how it defines it's stats, it shouldn't be too difficult to split the trigger to define stats differently based on the ability used. You could split the "Cast" trigger into multiple Cast triggers, one for each ability, or you could do the splitting within one big Cast trigger that uses If Then Else statements to separate the logic. I'd use the the multiple Cast triggers solution.


Also, the Channel ability has built-in animation cancelling which skips the casters Art - Backswing. Maybe that's related to your animation complaint. There is no solution to this besides playing your own animations via triggers or trying a different channeled ability (ie: Death and Decay with 0 AoE). Although, I assume all channeled abilities skip the backswing. You can also remove the channeling aspect of it entirely, I mention how to do that in the original post but it should be pretty obvious.
 
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
First, look at how the variables in the Impale "Setup" trigger define the stats in Arrays. Then look at how the "Cast" trigger references these Arrays to define that current instance's stats (an instance = index, a separate set of data for each active usage of the spell).

Second, look at how the Impale "Cast" trigger runs. All it checks for is that you cast a specific ability. If you want it to run for multiple Abilities then adjust the Conditions to allow for that.

Third, after understanding how the Cast trigger runs and how it defines it's stats, it shouldn't be too difficult to split the trigger to define stats differently based on the ability used. You could split the "Cast" trigger into multiple Cast triggers, one for each ability, or you could do the splitting within one big Cast trigger that uses If Then Else statements to separate the logic. I'd use the the multiple Cast triggers solution.


Also, the Channel ability has built-in animation cancelling which skips the casters Art - Backswing. Maybe that's related to your animation complaint. There is no solution to this besides playing your own animations via triggers or trying a different channeled ability (ie: Death and Decay with 0 AoE). Although, I assume all channeled abilities skip the backswing. You can also remove the channeling aspect of it entirely, I mention how to do that in the original post but it should be pretty obvious.
I tried 5 hours with my friend to solve those problems but there is no way out for us.
Please check the map attached and maybe you can give us some more help because we have no idea what are we doing here. :peasant-work-work:

Right now the spells work very weird, but they work somehow.

The help is appreciated!
 

Attachments

  • Triggers for Impale and Ravage TRY 7.w3m
    121.7 KB · Views: 2

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
It was a little more complicated than anticipated, mostly because the whole thing is designed to be channeled. So Ravage is creating ~20 Dummy units, which all Channel the ability, creating 20 more of their own Dummy units (the Stun casters), pretty inefficient. Anyway, it seems to work now.

It shouldn't be too difficult to create new Impales now. You just need to make sure that you add it to the Conditions -> (Ability being cast). Look through each Trigger to see if it references a specific Ability and Add your new one following the same pattern.
 

Attachments

  • Impale Fix 1.w3m
    114.9 KB · Views: 4
Level 13
Joined
Sep 11, 2013
Messages
467
It was a little more complicated than anticipated, mostly because the whole thing is designed to be channeled. So Ravage is creating ~20 Dummy units, which all Channel the ability, creating 20 more of their own Dummy units (the Stun casters), pretty inefficient. Anyway, it seems to work now.

It shouldn't be too difficult to create new Impales now. You just need to make sure that you add it to the Conditions -> (Ability being cast). Look through each Trigger to see if it references a specific Ability and Add your new one following the same pattern.
Awesome work. Now I understand a little bit more and I even succeeded to put custom Ravage _Air Height variable in Impale Setup trigger and then in Impale Set Stats Ravage trigger and works! It was very intuitive based on the damage and wave distance examples created by you. :peasant-ok-hand:

Problems..

Sadly my ocd hit again and I just found 2 new problems and 1 observation.
I have no idea how to fix them so here I am.:peasant-bowing:

1. As you can see in the video below, the Ravage Damage is 100, but the damage inflicted on human is variable. Sometimes is 100, 200 or even 300 damage. (I think based on distance). Also, In default Impale, the full damage is dealt only after the units hit ground and I wish our spell to work like that. Here, Ravage is bugged and create a part of the damage first and the rest of the damage only after human hit the ground.
(See Video for example)

- - - - - - - -
2. In the second problem we can see Impale = 1000 damage and Ravage = 100 damage and If we use Impale first and then very fast Ravage(while the human is in the air), the human will take just 100 damage instead of 1100. The seme problem happen in reverse If you hit the Ravage First and then very fast Impale, The human will take 1000 damage instead of 1100. (Sometimes will take even more (2000) because of the first problem/bug).

(See Video for example)


- - - - - - - -

Observation..
Also, the Channel ability has built-in animation cancelling which skips the casters Art - Backswing. Maybe that's related to your animation complaint. There is no solution to this besides playing your own animations via triggers or trying a different channeled ability (ie: Death and Decay with 0 AoE). Although, I assume all channeled abilities skip the backswing. You can also remove the channeling aspect of it entirely, I mention how to do that in the original post but it should be pretty obvious.
I don't know what exactly is Backswing, but I did a test with the same Impale Channel (Copy - Paste) but this channel has no triggers and the Infernal don't have this insta reset animation like the impale triggered spell. So I think the reset animation is coused by triggers maybe?

(See Video for example)


- - - - - - - -

Thank you so much again for your outstanding work. I am waiting patiently for your new antidote.:peasant-grin:


 

Attachments

  • Triggers for Impale and Ravage TRY 8.w3m
    115.3 KB · Views: 1

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
The unit is getting hit by multiple Impales, so it's going to take multiple instances of damage. Remember, each Dummy unit casts it's own Impale, as if they were their own Hero casting their own Impale. The triggers are designed to allow the Impales to stack on the same target, just like if you casted 5 different Shockwaves they would all deal their own instance of damage to a target. Furthermore, the Stun + Air Height stuff gets overwritten whenever a unit is impaled. So in cases where a unit gets hit while it's already in the air I immediately deal the damage of the previous Impale instance so it doesn't get lost. The end result is that every single Impale deals damage and only one "air time" effect is active at a time. Without this fix the units would only ever get damaged by the last Impale they received and the "air time" effects would stack, creating a very weird result (units bounce up and down erratically).

The easiest solution is to make a unit immune to all Impale related damage while it has the Stun buff. Use a custom Impale-only Stun buff for this.
  • If - Conditions
    • Impale_Target has buff Stunned (Impale) Equal to False
    • ...
Now it can only be affected by one Impale at a time.

The harder solution is to make the Dummy units all use the same Impale_Hit_Group, which is what filters out "already hit" targets. This could be done by setting the Custom Values of the Dummy units created in your For Loop to the Custom Value of the very first Dummy unit it created - although it's probably not that simple.

The hardest but best solution is to use Dynamic Indexing and For Loops to manage Ravage separately from the standard Impale. They should be two separate spells. Also, you should design them with your actual desired mechanics, for example, Ravage doesn't care about channeling, the impales always go their full distance and the caster can move freely after casting. The Stop casting triggers and Follow Through Time are all irrelevant. The normal Impale, assuming you want the original skill's mechanics, can be interrupted early which is why I made it channeled and why it can be Stopped early.
 
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
The triggers are designed to allow the Impales to stack on the same target, just like if you casted 5 different Shockwaves they would all deal their own instance of damage to a target.
Ohhh. So is not a bug. Now that's make sense to me. Good to know. I'll take that as fancy feature of the spell. :peasant-ok-hand:
- - - - - - - - - - - - - -

So here will remain only this problem.. "Damage Problem"

So in cases where a unit gets hit while it's already in the air I immediately deal the damage of the previous Impale instance so it doesn't get lost.
Yes, but if the previous impale(impale) is 1000 damage and the curent impale(ravage) is just 100 damage, the damage will be right now 100 + 100 , not 1000 + 100 and this is an annyoing bug :(

I think the same bug appear if 2 different impale(impale) or 2 different impale(ravage) with different levels/damage will hit the same target in the same time.


Is there an easy solution for this problem?
- - - - - - - - - - - - - -

The easiest solution is to make a unit immune to all Impale related damage while it has the Stun buff. Use a custom Impale-only Stun buff for this.
I think that defeat the purpose of the entire thread.:peasant-shocked: so it's a big no no.

- - - - - - - - - - - - - -
The normal Impale, assuming you want the original skill's mechanics, can be interrupted early which is why I made it channeled and why it can be Stopped early.
Yeah, I like that detail very much.:peasant-thumbs-up:
- - - - - - - - - - - - - -

The harder and the hardest solution it's way way way too impossible for me.:peasant-sad:

It's like you put an ant to move a mountain.. this probably will never happen in a life of an ant..

If you can help me to fix just the "Damage Problem" , I think the spell will be ready for import.

You have all the appreciation for the work you have done!:peasant-waving:
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
Yes, but if the previous impale(impale) is 1000 damage and the curent impale(ravage) is just 100 damage, the damage will be right now 100 + 100 , not 1000 + 100 and this is an annyoing bug
It's likely referencing the wrong Impale_Damage variable in the "Early damage" section.

Check out the Deal Damage action in the Air Time trigger and make sure that it does this for the Damage value:
  • Impale_Damage[(Custom value of Impale_Linked_Caster[Impale_TCV])]
The Linked Caster should be the LAST caster to damage it.

I can't promise this works on Ravage since that has so many Casters and is sort of broken with the way we're trying to use it.
 
Level 13
Joined
Sep 11, 2013
Messages
467
It's likely referencing the wrong Impale_Damage variable in the "Early damage" section.

Check out the Deal Damage action in the Air Time trigger and make sure that it does this for the Damage value:
  • Impale_Damage[(Custom value of Impale_Linked_Caster[Impale_TCV])]
The Linked Caster should be the LAST caster to damage it.

I can't promise this works on Ravage since that has so many Casters and is sort of broken with the way we're trying to use it.

I've made few simple tests after I put your new antidote there and now both spells seems to work flawlessly!

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • Impale_Caster_Linked[Impale_TCV] Not equal to No unit
    • Then - Actions
      • Unit - Cause Impale_Caster_Linked[Impale_TCV] to damage Impale_Target, dealing Impale_Damage[(Custom value of Impale_Caster_Linked[Impale_TCV])] damage of attack type Spells and damage type Normal
    • Else - Actions
Thank you so much Uncle!:peasant-cheers::peasant-victory:
 
Last edited:

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
I've made few simple tests after I put your new atidote there and now both spells seems to work flawlessly!

  • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
    • If - Conditions
      • Impale_Caster_Linked[Impale_TCV] Not equal to No unit
    • Then - Actions
      • Unit - Cause Impale_Caster_Linked[Impale_TCV] to damage Impale_Target, dealing Impale_Damage[(Custom value of Impale_Caster_Linked[Impale_TCV])] damage of attack type Spells and damage type Normal
    • Else - Actions
Thank you so much Uncle!:peasant-cheers::peasant-victory:
No problem, and here's a standalone Ravage spell that seems to be working. It's no longer casting 16 "dummy" Impales but instead 1 Ravage.

The only issues (that I know of):

- The Ravage_Immunity[] variable makes a unit that was just impaled by this ability immune to other Ravages for an extremely short time. I needed this to fix a weird bug where the unit was getting hit by the same Ravage multiple times even though I was checking if it was in that Ravage's "Hit Group". I think the Unit Group "Add" function must have some kind of frame delay. Anyway, it's so short that I doubt it'll ever cause issues.

- It's not actually using Dynamic Indexing because halfway through making it I realized that would cause problems. So I came up with a sort of janky solution to manage multiple instances at once. Basically, it's not as efficient as it could be but it's probably not worth worrying about. The real performance hit is going to come from 50+ Impale special effects nuking the screen.
 

Attachments

  • Ravage 1.w3m
    109.5 KB · Views: 2
Level 13
Joined
Sep 11, 2013
Messages
467
Greetings Uncle! :peasant-waving:

After few days of thinking, I decided that is better (for gameplay) to change the Custom Impale spell in such way to be casted like Ravage for 2 reasons.

1.In the actual game, there is no reason to cancel Impale while is already started (and sometimes that early interrupted is a problem for players). (Even if I like that detail). So I wish to delete that part where the Impale can be interrupted early after start.

2.As you can see in the video below, The Ravage has backswing, but the Impale spell does not and I want backswing even for Impale.

- - - - - - - -

I am not able to comprehend how to do all of that changes/optimization of the triggers correctly because your triggers are too complex for me..:peasant-sad:


I think I have to cast the custom Impale maybe with a dummy like Ravage? I am not sure about that..
I saw that Ravage order Id is thunderclap, but I don't know what should I use for impale for backswing to appear because I can't use the same order as Ravage (thunderclap)..


I have attached here the latest version of the map I am working with.

- - - - - - - -

Off-topic Qustion..

When I use Remove location script, is there a differece between for example: call RemoveLocation( udg_X ) and call RemoveLocation(udg_X) without spaces? I saw you put spaces and I didn't do that in the past.

The help will always be appreciated!:peasant-bowing:
 

Attachments

  • Triggers Impale and Ravage TRY 9.w3m
    114.3 KB · Views: 2

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
Channel is what skips Backswing. Replace it with a standard ability like Shockwave. Then delete the "Stop Casting" trigger since you no longer end the spell when it stops casting. But before doing that, see what "Stop Casting" does and how it "ends" the effects of Impale early. Then make sure that you're using that same logic in the "Loop" trigger when it finishes the final wave. I believe I explained how to do this in one of first few post that I made regarding this spell.

Spaces in Custom Script is fine as long as y o u d o n ' t d o t h i s. I use it in the parenthesis for better readability. If you want to be extra safe, don't do this, but obviously it works fine or you'd get a syntax error.
 
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
Channel is what skips Backswing. Replace it with a standard ability like Shockwave. Then delete the "Stop Casting" trigger since you no longer end the spell when it stops casting. But before doing that, see what "Stop Casting" does and how it "ends" the effects of Impale early. Then make sure that you're using that same logic in the "Loop" trigger when it finishes the final wave. I believe I explained how to do this in the very first post of this spell that I made.

Spaces in Custom Script is fine as long as y o u d o n ' t d o t h i s.
So.. in the "Stop Casting" trigger there is this line..
  • (Ability being cast) Equal to Impale (Dummy - Ravage)
and I need to keep this stop trigger for ravage.
So I think I should let the trigger alone and maybe just delete this line..
  • (Ability being cast) Equal to Impale (Hero)
I don't know if that will fully optimize the trigger..


  • Impale Stop Cast
    • Events
      • Unit - A unit Stops casting an ability
    • Conditions
      • Or - Any (Conditions) are true
        • Conditions
          • (Ability being cast) Equal to Impale (Hero)
          • (Ability being cast) Equal to Impale (Dummy - Ravage)
    • Actions
      • Set VariableSet Impale_Stop_Caster = (Triggering unit)
      • -------- --------
      • If (All Conditions are True) then do (Then Actions) else do (Else Actions)
        • If - Conditions
          • (Impale_Stop_Caster is in Impale_Caster_Group.) Equal to True
        • Then - Actions
          • Set VariableSet Impale_Is_Active = (Impale_Is_Active - 1)
          • -------- --------
          • Custom script: call DestroyGroup( udg_Impale_Hit_Group[GetUnitUserData(udg_Impale_Stop_Caster)] )
          • Unit Group - Remove Impale_Stop_Caster from Impale_Caster_Group.
          • Unit - Remove Impale_Dummy[(Custom value of Impale_Stop_Caster)] from the game
        • Else - Actions
I don't understand how to use shockwave as a base ability. I put everything to 0 on shockwave except cast range witch is 99999 and I changed that Trigger "Impale Start Cast" with
  • (Ability being cast) Equal to Shockwave
but the game freak out when i cast shockwave and a lot of impales has appeared and has stuck in my hero and a lot of lag.
I think I need some help here because I don't understand. I read your posts and your first post but I still don't understand. how to optimize and fix this new problem :peasant-sad:
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
Here's the fix. I deleted the Stop Casting trigger and moved it's "end" logic to the Loop trigger when the final wave is finished. Shockwave works fine when the triggers are setup properly.

Now keep in mind, this will break in certain ways if the caster uses the ability again while their previous cast is still active. To fix this, you can add a Dummy unit and use it's Custom Value instead. Just go into Impale Start Cast and create a new Dummy unit and make sure that almost everything references that Unit instead of the Hero (Impale_Caster). Note that things like Ability Level should still be based on the Hero's ability.
 

Attachments

  • Impale Non Channeling.w3m
    109.1 KB · Views: 2
Last edited:
Level 13
Joined
Sep 11, 2013
Messages
467
Here's the fix. I deleted the Stop Casting trigger and moved it's "end" logic to the Loop trigger when the final wave is finished. Shockwave works fine when the triggers are setup properly.

Now keep in mind, this will break if the caster uses the ability again while their previous cast is still active. To fix this, you can add a Dummy unit, just go into Impale Start Cast and create a new Dummy unit and make sure everything references that instead of the Hero (Impale_Caster).
Thank you very much, but I have to ask..
Why you deleted ravage from this map? :peasant-sad:
I mean yes, you did an awesome work by create a separate ravage spell, but you said there is an issue with that new ravage spell and that previous ravage was without issues as far as i know.. So I don't understand.. Why you not recommend me to use the previous one?
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
Thank you very much, but I have to ask..
Why you deleted ravage from this map? :peasant-sad:
I mean yes, you did an awesome work by create a separate ravage spell, but you said there is an issue with that new ravage spell and that previous ravage was without issues as far as i know.. So I don't understand.. Why you not recommend me to use the previous one?
The new Ravage is the one you should use, why would I go through the trouble of creating it otherwise.

I listed some issues it has but I also explained how they're not very important. EVERYTHING has issues, there's always edge cases.
 
Level 13
Joined
Sep 11, 2013
Messages
467
The new Ravage is the one you should use, why would I go through the trouble of creating it otherwise.
I honestly don't know:peasant-confused:

All I know is..
1. Previous ravage was without problems as far as i know
2. Actual standalone Ravage has a small problem with Ravage_Immunity
I listed some issues it has but I also explained how they're not very important. EVERYTHING has issues, there's always edge cases.
Edit: I will try to use that new Ravage if you recommend me that. :peasant-thumbs-up-cheers:
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
I honestly don't know:peasant-confused:

All I know is..
1. Previous ravage was without problems as far as i know
2. Actual standalone Ravage has a small problem with Ravage_Immunity
I explained the problem and how you'll probably never experience it. You could probably fix it yourself if you cared but I doubt you'll ever notice any difference. Not worth the effort in my opinion.
 
Level 13
Joined
Sep 11, 2013
Messages
467
Awesome and Thank you very much for your dedication! This is great and I'am sorry if i botter you one more time, but right now I have another problem with that new ravage..
I just open the new ravaged map and I found out there is no ravage setup per levels like impale like before.
  • Ravage Cast
    • Events
      • Unit - A unit Starts the effect of an ability
    • Conditions
      • (Ability being cast) Equal to Ravage (Hero)
    • Actions
      • Set VariableSet Ravage_Index = (Ravage_Index + 1)
      • Set VariableSet Ravage_Is_Enabled[Ravage_Index] = True
      • Set VariableSet Ravage_Caster[Ravage_Index] = (Triggering unit)
      • Set VariableSet Ravage_Wave_Time[Ravage_Index] = 0.01
      • Set VariableSet Ravage_Wave_Count[Ravage_Index] = 0
      • -------- --------
      • -------- ================================================= --------
      • -------- [ EDIT ] --------
      • Set VariableSet Ravage_Damage[Ravage_Index] = 100.00
      • Set VariableSet Ravage_Area_Of_Effect[Ravage_Index] = 150.00
      • Set VariableSet Ravage_Wave_Distance[Ravage_Index] = 175.00
      • Set VariableSet Ravage_Total_Wave_Count[Ravage_Index] = 3
      • Set VariableSet Ravage_Total_Wave_Time[Ravage_Index] = 0.10
      • -------- ================================================= --------
      • -------- --------
      • -------- Create the Dummy unit that will cast Stun on hit units: --------
      • Set VariableSet Ravage_Point[0] = (Position of Ravage_Caster[Ravage_Index])
      • Unit - Create 1 Dummy (Reuse This) for (Owner of Ravage_Caster[Ravage_Index]) at Ravage_Point[0] facing Default building facing degrees
      • Set VariableSet Ravage_Dummy[Ravage_Index] = (Last created unit)
      • Unit - Add Ravage (Dummy - Stun) to Ravage_Dummy[Ravage_Index]
      • Unit - Set level of Ravage (Dummy - Stun) for Ravage_Dummy[Ravage_Index] to (Level of (Ability being cast) for Ravage_Caster[Ravage_Index])
      • Unit - Add a 3.00 second Generic expiration timer to Ravage_Dummy[Ravage_Index]
      • -------- --------
      • Custom script: call RemoveLocation( udg_Ravage_Point[0] )
      • -------- --------
      • Trigger - Turn on Ravage Wave Loop <gen>
I have this trigger but I don't understand how exactly Ravage_Index work per levels...

I mean in impale is simple to set up per levels.. but here I have no idea how can i do that..

Sorry again for bothering you for so many problems..
 

Uncle

Warcraft Moderator
Level 73
Joined
Aug 10, 2018
Messages
7,866
For the new Ravage, I didn't bother creating Arrays that represent "stats per level". Instead, you just define the stats for that specific cast right then and there:
  • -------- [ EDIT ] --------
  • Set VariableSet Ravage_Level = (Level of (Ability being cast) for Ravage_Caster[Ravage_Index])
  • Set VariableSet Ravage_Damage[Ravage_Index] = (1000.00 x (Real(Ravage_Level))
  • ...
Of course you can add Arrays if you'd like. Try not to overthink it.

I recommend using the new Ravage along with the "Impale Non Channeling Dummy" map that I just posted above.
 
Level 13
Joined
Sep 11, 2013
Messages
467
For the new Ravage, I didn't bother creating Arrays that represent "stats per level". Instead, you just define the stats for that specific cast right then and there:
  • -------- [ EDIT ] --------
  • Set VariableSet Ravage_Level = (Level of (Ability being cast) for Ravage_Caster[Ravage_Index])
  • Set VariableSet Ravage_Damage[Ravage_Index] = (1000.00 x (Real(Ravage_Level))
  • ...
Of course you can add Arrays if you'd like. Try not to overthink it.

I recommend using the new Ravage along with the "Impale Non Channeling Dummy" map that I just posted above.
Great! I did that and seems to work! But there is a problem and I think i will try to fix it myself because I don't want to bother you anymore with that..

The damage is not calculated corectly just like in old Ravage.
The last spell overwrite the damage of the first spell
Check out the Deal Damage action in the Air Time trigger and make sure that it does this for the Damage value:
  • if.gif
    Impale_Damage[(Custom value of Impale_Linked_Caster[Impale_TCV])]
You solved this problem in the old Ravage with this trigger, but now seems not to work. :peasant-sad:
 
Top