From ebc9ead61793b21137016ff733d4a1ea3c5862d3 Mon Sep 17 00:00:00 2001 From: QAston Date: Thu, 16 Jun 2011 00:55:27 +0200 Subject: Core/DynamicObject: Delete DynObjAura on DynObj delete, not on aura remove from object (prevents crashes) --- src/server/game/Entities/DynamicObject/DynamicObject.cpp | 11 ++++++----- src/server/game/Entities/DynamicObject/DynamicObject.h | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'src') 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 protected: Aura* _aura; + Aura* _removedAura; Unit* _caster; int32 _duration; // for non-aura dynobjects bool _isViewpoint; -- cgit v1.2.3