diff options
author | QAston <qaston@gmail.com> | 2011-06-16 00:55:27 +0200 |
---|---|---|
committer | QAston <qaston@gmail.com> | 2011-06-16 00:55:27 +0200 |
commit | ebc9ead61793b21137016ff733d4a1ea3c5862d3 (patch) | |
tree | 8409b08869d365b6f01f892fe46773a4c5daff04 /src | |
parent | 2bef7477bb0897aa11c5042f0b9f54389100139f (diff) |
Core/DynamicObject: Delete DynObjAura on DynObj delete, not on aura remove from object (prevents crashes)
Diffstat (limited to 'src')
-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; |