diff options
author | Shauren <shauren.trinity@gmail.com> | 2021-08-30 20:42:42 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2021-08-30 23:51:46 +0200 |
commit | 0c9cc0c8ae6edb46fbbf94736eb8686ed44f3af9 (patch) | |
tree | 66f43d2f8caa51bdd8f40e815cf7fc688d82bb5c /src | |
parent | 7440c9cf199283aa511cd90f623aa1172f9e1ca2 (diff) |
Core/Auras: Changed aura dot stacking rule to not ignore aura type of "existingAura"
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Spells/Auras/SpellAuras.cpp | 47 |
1 files changed, 27 insertions, 20 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index 433e0ef1384..c783ce63189 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -1919,30 +1919,37 @@ bool Aura::CanStackWith(Aura const* existingAura) const return true; // check same periodic auras - for (uint32 i = 0; i < MAX_SPELL_EFFECTS; ++i) + auto hasPeriodicNonAreaEffect = [](SpellInfo const* spellInfo) { - switch (m_spellInfo->Effects[i].ApplyAuraName) + for (SpellEffectInfo const& spellEffectInfo : spellInfo->GetEffects()) { - // DOT or HOT from different casters will stack - case SPELL_AURA_PERIODIC_DAMAGE: - case SPELL_AURA_PERIODIC_DUMMY: - case SPELL_AURA_PERIODIC_HEAL: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL: - case SPELL_AURA_PERIODIC_ENERGIZE: - case SPELL_AURA_PERIODIC_MANA_LEECH: - case SPELL_AURA_PERIODIC_LEECH: - case SPELL_AURA_POWER_BURN: - case SPELL_AURA_OBS_MOD_POWER: - case SPELL_AURA_OBS_MOD_HEALTH: - case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: - // periodic auras which target areas are not allowed to stack this way (replenishment for example) - if (m_spellInfo->Effects[i].IsTargetingArea() || existingSpellInfo->Effects[i].IsTargetingArea()) + switch (spellEffectInfo.ApplyAuraName) + { + // DOT or HOT from different casters will stack + case SPELL_AURA_PERIODIC_DAMAGE: + case SPELL_AURA_PERIODIC_DUMMY: + case SPELL_AURA_PERIODIC_HEAL: + case SPELL_AURA_PERIODIC_TRIGGER_SPELL: + case SPELL_AURA_PERIODIC_ENERGIZE: + case SPELL_AURA_PERIODIC_MANA_LEECH: + case SPELL_AURA_PERIODIC_LEECH: + case SPELL_AURA_POWER_BURN: + case SPELL_AURA_OBS_MOD_POWER: + case SPELL_AURA_OBS_MOD_HEALTH: + case SPELL_AURA_PERIODIC_TRIGGER_SPELL_WITH_VALUE: + // periodic auras which target areas are not allowed to stack this way (replenishment for example) + if (spellEffectInfo.IsTargetingArea()) + return false; + return true; + default: break; - return true; - default: - break; + } } - } + return false; + }; + + if (hasPeriodicNonAreaEffect(m_spellInfo) && hasPeriodicNonAreaEffect(existingSpellInfo)) + return true; } if (HasEffectType(SPELL_AURA_CONTROL_VEHICLE) && existingAura->HasEffectType(SPELL_AURA_CONTROL_VEHICLE)) |