HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

Stacking buffs from same ability

06-22-2008, 03:35 PM#1
Themerion
...is impossible, right?

Or is there any way (not requiring scripting) I can make two different curse abilities and make both affect the same unit at once?
06-22-2008, 06:22 PM#2
Anitarf
No, if you have two (non-aura) buff abilities based on the same base ability, then they won't stack even if they use different buffs.
06-22-2008, 07:20 PM#3
Themerion
Does the ABuffSystem provide some way to work around this?
06-22-2008, 07:36 PM#4
Anitarf
You can do pretty much anything with triggered buffs. As long as the effect of the buff is entirely triggered, you can use self-targetting auras to display the buff on the unit instead of using buff spells (custom auras, as long as they use different buffs, stack).

It can be a bit of a difficulty only if your stackable spells need a buff spell for their effect (for example, only a curse buff can give a unit a miss chance, there's no passive ability that you could give the unit to achieve the exact same effect, so you have to use the curse spell which doesn't stack). There are ways to get around that too, but they're more complicated.
06-22-2008, 07:59 PM#5
Themerion
Yeah, I was thinking of making auras (hidden in a disabled spell book) for displaying the buffs. What scares me here is that Warcraft might be incompetent enough to check for nearby units even if the target is only 'self' (well, might not matter much anyway)...

Who needs exact effects? :P A curse can be approximated by displaying a red floating text which says "miss!" when the target takes damage. Works for me.

That is... does the ABuffSystem allow my scripted curse to interrupt all other onDamage events?
06-22-2008, 11:24 PM#6
Anitarf
Quote:
Originally Posted by Themerion
Yeah, I was thinking of making auras (hidden in a disabled spell book) for displaying the buffs. What scares me here is that Warcraft might be incompetent enough to check for nearby units even if the target is only 'self' (well, might not matter much anyway)...
You don't really need a disabled spellbook if you use the tornado slow aura, it doesn't display an icon.

Quote:
Who needs exact effects? :P A curse can be approximated by displaying a red floating text which says "miss!" when the target takes damage. Works for me.
Wouldn't that be an approximation of evasion, not curse, since it blocks damage when the target is damaged, not when it damages something?

Quote:
That is... does the ABuffSystem allow my scripted curse to interrupt all other onDamage events?
You can't interrupt damage events. Damage prevention is done after the fact; you can't really prevent damage, only refund it. If multiple functions are called from a damage detection trigger (or if you have multiple damage detection triggers) and one of them refunds some of the damage dealt, other functions have no way of knowing that.

That's why I was going to implement a shield subsystem into the ABuff system, but that won't be out for a while. With it, the engine would refund damage before calling the ABuff damage event response functions, so by the time those functions were called they would be passed a corrected damage value. However, this would cause only the ABuff functions to treat the damage as prevented, any other damage detection triggers that call GetEventDamage() independantly would be unaware of the damage prevention taking place, as I already described in the previous paragraph.

So, in short, what you're asking for can't be done, but the ABuff system will support something similar once I make the next version of it.
06-23-2008, 10:51 AM#7
Themerion
Quote:
Originally Posted by Anitarf
You don't really need a disabled spellbook if you use the tornado slow aura, it doesn't display an icon.

That's useful.

Quote:
Originally Posted by Anitarf
Wouldn't that be an approximation of evasion, not curse, since it blocks damage when the target is damaged, not when it damages something?

Well, yeah. But curse is approximately equal to evasion imo :P

Quote:
Originally Posted by Anitarf
However, this would cause only the ABuff functions to treat the damage as prevented, any other damage detection triggers that call GetEventDamage() independantly would be unaware of the damage prevention taking place, as I already described in the previous paragraph.

Yeah, I understand that. What I wanted is what you described as a "Shield System", where I can block the other events declared in the system.