aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorQAston <qaston@gmail.com>2011-06-16 00:55:27 +0200
committerQAston <qaston@gmail.com>2011-06-16 00:55:27 +0200
commitebc9ead61793b21137016ff733d4a1ea3c5862d3 (patch)
tree8409b08869d365b6f01f892fe46773a4c5daff04 /src
parent2bef7477bb0897aa11c5042f0b9f54389100139f (diff)
Core/DynamicObject: Delete DynObjAura on DynObj delete, not on aura remove from object (prevents crashes)
Diffstat (limited to 'src')
-rwxr-xr-xsrc/server/game/Entities/DynamicObject/DynamicObject.cpp11
-rwxr-xr-xsrc/server/game/Entities/DynamicObject/DynamicObject.h1
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;