aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Spells/Spell.cpp13
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.cpp3
-rwxr-xr-xsrc/server/game/Spells/SpellMgr.h7
-rwxr-xr-xsrc/server/game/Spells/SpellScript.cpp1
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;
}
}