aboutsummaryrefslogtreecommitdiff
path: root/src/server
diff options
context:
space:
mode:
authorHavenard <havenard@hotmail.com>2011-07-09 14:59:35 +0700
committertobmaps <spambot42@yandex.ru>2011-07-09 14:59:35 +0700
commit0c984bfdf5aa6ad52b8d74518df61af1a6c9c188 (patch)
tree644ea0a0380dd1f8db7d834a366da93012defd89 /src/server
parentbc1f66847123df6295c08395fd6d9da30de42695 (diff)
Core/Auras: Fix problem with aura charges introduced on 42a20f1 with the reuse of existing aura objects on aura reapply.
Closes #1989 Closes #2039 Closes #2211
Diffstat (limited to 'src/server')
-rw-r--r--src/server/game/Spells/Auras/SpellAuraEffects.h1
-rwxr-xr-xsrc/server/game/Spells/Auras/SpellAuras.cpp6
2 files changed, 7 insertions, 0 deletions
diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h
index 6a06d4d3a46..8aaef85c394 100644
--- a/src/server/game/Spells/Auras/SpellAuraEffects.h
+++ b/src/server/game/Spells/Auras/SpellAuraEffects.h
@@ -41,6 +41,7 @@ class AuraEffect
Aura * GetBase() const { return m_base; }
void GetTargetList(std::list<Unit*> & targetList) const;
void GetApplicationList(std::list<AuraApplication*> & applicationList) const;
+ SpellModifier* GetSpellModifier() const { return m_spellmod; }
SpellEntry const* GetSpellProto() const { return m_spellProto; }
uint32 GetId() const { return m_spellProto->Id; }
diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp
index 3f49fc2cf18..0f21cee9868 100755
--- a/src/server/game/Spells/Auras/SpellAuras.cpp
+++ b/src/server/game/Spells/Auras/SpellAuras.cpp
@@ -831,6 +831,12 @@ bool Aura::ModStackAmount(int32 num, AuraRemoveMode removeMode)
// reset charges
SetCharges(CalcMaxCharges());
+ // FIXME: not a best way to synchronize charges, but works
+ for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
+ if (AuraEffect* aurEff = GetEffect(i))
+ if (aurEff->GetAuraType() == SPELL_AURA_ADD_FLAT_MODIFIER || aurEff->GetAuraType() == SPELL_AURA_ADD_PCT_MODIFIER)
+ if (SpellModifier* mod = aurEff->GetSpellModifier())
+ mod->charges = GetCharges();
}
SetNeedClientUpdateForTargets();
return false;