diff options
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Spells/Spell.cpp | 13 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellMgr.cpp | 3 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellMgr.h | 7 | ||||
-rwxr-xr-x | src/server/game/Spells/SpellScript.cpp | 1 |
4 files changed, 11 insertions, 13 deletions
diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index e105da7ca4d..1ae359f38fa 100755 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -2745,19 +2745,6 @@ void Spell::SelectEffectTargets(uint32 i, uint32 cur) unitList.sort(Trinity::PowerPctOrderPred((Powers)power)); unitList.resize(maxSize); } - - // Replenishment: refresh existing auras - if (m_spellInfo->Id == 57669) - for (std::list<Unit *>::iterator itr = unitList.begin(); itr != unitList.end();) - if (AuraEffect *aurEff = (*itr)->GetAuraEffect(SPELL_AURA_PERIODIC_ENERGIZE, SPELLFAMILY_GENERIC, 3184, EFFECT_0)) - { - aurEff->SetAmount((*itr)->GetMaxPower(POWER_MANA) * 25 / 10000); - aurEff->GetBase()->RefreshDuration(); - - itr = unitList.erase(itr); - } - else - ++itr; } } diff --git a/src/server/game/Spells/SpellMgr.cpp b/src/server/game/Spells/SpellMgr.cpp index 09a96ebf9a8..8a3074742f0 100755 --- a/src/server/game/Spells/SpellMgr.cpp +++ b/src/server/game/Spells/SpellMgr.cpp @@ -3157,6 +3157,9 @@ bool SpellMgr::CanAurasStack(SpellEntry const *spellInfo_1, SpellEntry const *sp 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 (IsAreaOfEffectSpellEffect(spellInfo_1, i) || IsAreaOfEffectSpellEffect(spellInfo_2, i)) + break; return true; default: break; diff --git a/src/server/game/Spells/SpellMgr.h b/src/server/game/Spells/SpellMgr.h index df130205943..e16dd2b1c33 100755 --- a/src/server/game/Spells/SpellMgr.h +++ b/src/server/game/Spells/SpellMgr.h @@ -403,6 +403,13 @@ inline bool IsAreaOfEffectSpell(SpellEntry const *spellInfo) return false; } +inline bool IsAreaOfEffectSpellEffect(SpellEntry const *spellInfo, uint8 effIndex) +{ + if (IsAreaEffectTarget[spellInfo->EffectImplicitTargetA[effIndex]] || IsAreaEffectTarget[spellInfo->EffectImplicitTargetB[effIndex]]) + return true; + return false; +} + inline bool IsFarUnitTargetEffect(uint32 effect) { return (effect == SPELL_EFFECT_SUMMON_PLAYER); diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index af884e6ebcc..bfa5fc6b8f5 100755 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -567,6 +567,7 @@ bool AuraScript::_IsDefaultActionPrevented() case AURA_SCRIPT_HOOK_EFFECT_PERIODIC: return m_defaultActionPrevented; default: + ASSERT(false && "m_defaultActionPrevented has incorrect value, or AuraScript::_IsDefaultActionPrevented is called in a wrong place"); return false; } } |