diff options
-rwxr-xr-x | src/server/game/Entities/DynamicObject/DynamicObject.cpp | 11 | ||||
-rwxr-xr-x | src/server/game/Entities/DynamicObject/DynamicObject.h | 1 |
2 files changed, 7 insertions, 5 deletions
diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.cpp b/src/server/game/Entities/DynamicObject/DynamicObject.cpp index d6eb5ac3516..4fc463e6e88 100755 --- a/src/server/game/Entities/DynamicObject/DynamicObject.cpp +++ b/src/server/game/Entities/DynamicObject/DynamicObject.cpp @@ -28,7 +28,7 @@ #include "ScriptMgr.h" DynamicObject::DynamicObject() : WorldObject(), - _aura(NULL), _caster(NULL), _duration(0), _isViewpoint(false) + _aura(NULL), _removedAura(NULL), _caster(NULL), _duration(0), _isViewpoint(false) { m_objectType |= TYPEMASK_DYNAMICOBJECT; m_objectTypeId = TYPEID_DYNAMICOBJECT; @@ -44,6 +44,7 @@ DynamicObject::~DynamicObject() ASSERT(!_aura); ASSERT(!_caster); ASSERT(!_isViewpoint); + delete _removedAura; } void DynamicObject::AddToWorld() @@ -178,11 +179,11 @@ void DynamicObject::SetAura(Aura* aura) void DynamicObject::RemoveAura() { - ASSERT(_aura); - if (!_aura->IsRemoved()) - _aura->_Remove(AURA_REMOVE_BY_DEFAULT); - delete _aura; + ASSERT(_aura && !_removedAura); + _removedAura = _aura; _aura = NULL; + if (!_removedAura->IsRemoved()) + _removedAura->_Remove(AURA_REMOVE_BY_DEFAULT); } void DynamicObject::SetCasterViewpoint() diff --git a/src/server/game/Entities/DynamicObject/DynamicObject.h b/src/server/game/Entities/DynamicObject/DynamicObject.h index 540e4c06113..d764b5eafe0 100755 --- a/src/server/game/Entities/DynamicObject/DynamicObject.h +++ b/src/server/game/Entities/DynamicObject/DynamicObject.h @@ -66,6 +66,7 @@ class DynamicObject : public WorldObject, public GridObject<DynamicObject> protected: Aura* _aura; + Aura* _removedAura; Unit* _caster; int32 _duration; // for non-aura dynobjects bool _isViewpoint; |