diff options
author | jackpoz <giacomopoz@gmail.com> | 2015-01-07 22:48:34 +0100 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2015-01-17 17:46:22 +0100 |
commit | 6df3f795ba18d2259ce3db925c99608194d3a3d1 (patch) | |
tree | a2cebceda67305eee04ec1f32546cc0ca6516438 /src | |
parent | aca47618d21c2de5d84df19c5919fceaa6b4edf5 (diff) |
Core/Aura: Replace assert with logged error for invalid AuraRemoveMode
Fix AuraScript::Remove() triggering an assert with default parameter and log an error when Aura is removed with invalid mode AURA_REMOVE_NONE instead of triggering an assert deep down in the call tree.
Fix https://github.com/TrinityCore/TrinityCore/issues/714 , triggered by spell 50240 "Evasive Maneuvers" script
(cherry picked from commit 9ea93eae33dcf776537a41e9c9ff33a31d6e3e19)
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Unit/Unit.cpp | 6 | ||||
-rw-r--r-- | src/server/game/Spells/SpellScript.cpp | 4 | ||||
-rw-r--r-- | src/server/game/Spells/SpellScript.h | 2 |
3 files changed, 9 insertions, 3 deletions
diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index d20ba57f504..44bc3e281b1 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -3353,6 +3353,12 @@ void Unit::RemoveOwnedAura(Aura* aura, AuraRemoveMode removeMode) ASSERT(aura->GetOwner() == this); + if (removeMode == AURA_REMOVE_NONE) + { + TC_LOG_ERROR("spells", "Unit::RemoveOwnedAura() called with unallowed removeMode AURA_REMOVE_NONE, spellId %u", aura->GetId()); + return; + } + uint32 spellId = aura->GetId(); AuraMapBoundsNonConst range = m_ownedAuras.equal_range(spellId); diff --git a/src/server/game/Spells/SpellScript.cpp b/src/server/game/Spells/SpellScript.cpp index c1ea5b86498..33773a57631 100644 --- a/src/server/game/Spells/SpellScript.cpp +++ b/src/server/game/Spells/SpellScript.cpp @@ -1023,9 +1023,9 @@ DynamicObject* AuraScript::GetDynobjOwner() const return m_aura->GetDynobjOwner(); } -void AuraScript::Remove(uint32 removeMode) +void AuraScript::Remove(AuraRemoveMode removeMode) { - m_aura->Remove((AuraRemoveMode)removeMode); + m_aura->Remove(removeMode); } Aura* AuraScript::GetAura() const diff --git a/src/server/game/Spells/SpellScript.h b/src/server/game/Spells/SpellScript.h index f9f62ab14c6..fb9e1ed3937 100644 --- a/src/server/game/Spells/SpellScript.h +++ b/src/server/game/Spells/SpellScript.h @@ -815,7 +815,7 @@ class AuraScript : public _SpellScript DynamicObject* GetDynobjOwner() const; // removes aura with remove mode (see AuraRemoveMode enum) - void Remove(uint32 removeMode = 0); + void Remove(AuraRemoveMode removeMode = AURA_REMOVE_BY_DEFAULT); // returns aura object of script Aura* GetAura() const; |