diff options
author | megamage <none@none> | 2009-06-17 09:57:22 -0500 |
---|---|---|
committer | megamage <none@none> | 2009-06-17 09:57:22 -0500 |
commit | e405e6f9ede8c9ce5db647fdffb1dd6c008856eb (patch) | |
tree | f328a83ed1da47537f905ecf80bfb4a7c904df1e | |
parent | 0085745c42eb7e4a483614e5038860c31638123f (diff) |
*Fix a crash caused by mailed item deconstructor.
--HG--
branch : trunk
-rw-r--r-- | src/game/Object.cpp | 7 | ||||
-rw-r--r-- | src/game/Player.cpp | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/src/game/Object.cpp b/src/game/Object.cpp index 1afd3ac3ae7..3561621f0bd 100644 --- a/src/game/Object.cpp +++ b/src/game/Object.cpp @@ -82,19 +82,20 @@ Object::Object( ) : m_PackGUID(sizeof(uint64)+1) Object::~Object( ) { - //if(m_objectUpdated) - // ObjectAccessor::Instance().RemoveUpdateObject(this); - if(IsInWorld()) { sLog.outCrash("Object::~Object - guid="UI64FMTD", typeid=%d, entry=%u deleted but still in world!!", GetGUID(), GetTypeId(), GetEntry()); + if(isType(TYPEMASK_ITEM)) + sLog.outCrash("Item slot %u", ((Item*)this)->GetSlot()); assert(false); + RemoveFromWorld(); } if(m_objectUpdated) { sLog.outCrash("Object::~Object - guid="UI64FMTD", typeid=%d, entry=%u deleted but still in update list!!", GetGUID(), GetTypeId(), GetEntry()); assert(false); + ObjectAccessor::Instance().RemoveUpdateObject(this); } if(m_uint32Values) diff --git a/src/game/Player.cpp b/src/game/Player.cpp index 02c7fa18e9f..07b3f62c3c5 100644 --- a/src/game/Player.cpp +++ b/src/game/Player.cpp @@ -1844,6 +1844,9 @@ void Player::RemoveFromWorld() m_items[i]->RemoveFromWorld(); } + for (ItemMap::iterator iter = mMitems.begin(); iter != mMitems.end(); ++iter) + iter->second->RemoveFromWorld(); + ///- Do not add/remove the player from the object storage ///- It will crash when updating the ObjectAccessor ///- The player should only be removed when logging out |