diff options
author | jackpoz <giacomopoz@gmail.com> | 2014-01-15 20:20:01 +0100 |
---|---|---|
committer | jackpoz <giacomopoz@gmail.com> | 2014-01-15 20:20:01 +0100 |
commit | cbba22ba6809caf4e9272d8c601756ec0323cc05 (patch) | |
tree | 203c2afe51297e384e627089f21a6463c039691b | |
parent | 6e01c0b0b4205f0d981ec658ae4d61b7e54fbab7 (diff) |
Core/SAI: Fix assertion triggered in SmartScript
Remove assertion in SmartScript added in b8625f41bd6131e7fb3ff126780da18d5d2959fd and handle SmartScripts with GetBaseObject() returning NULL , like SmartTrigger . In this case SmartScript::mTargetStorage cannot be sanitized and might contain references to free'd WorldObjects if the script doesn't last a single Map::Update() call.
-rw-r--r-- | src/server/game/AI/SmartScripts/SmartScriptMgr.h | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 08ef71771e5..9ba5ccc578e 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1332,7 +1332,6 @@ public: ObjectGuidList(ObjectList* objectList, WorldObject* baseObject) { ASSERT(objectList != NULL); - ASSERT(baseObject != NULL); m_objectList = objectList; m_baseObject = baseObject; m_guidList = new GuidList(); @@ -1345,15 +1344,18 @@ public: ObjectList* GetObjectList() { - //sanitize list using m_guidList - m_objectList->clear(); - - for (GuidList::iterator itr = m_guidList->begin(); itr != m_guidList->end(); ++itr) + if (m_baseObject) { - if (WorldObject* obj = ObjectAccessor::GetWorldObject(*m_baseObject, *itr)) - m_objectList->push_back(obj); - else - TC_LOG_DEBUG("scripts.ai", "SmartScript::mTargetStorage stores a guid to an invalid object: " UI64FMTD, *itr); + //sanitize list using m_guidList + m_objectList->clear(); + + for (GuidList::iterator itr = m_guidList->begin(); itr != m_guidList->end(); ++itr) + { + if (WorldObject* obj = ObjectAccessor::GetWorldObject(*m_baseObject, *itr)) + m_objectList->push_back(obj); + else + TC_LOG_DEBUG("scripts.ai", "SmartScript::mTargetStorage stores a guid to an invalid object: " UI64FMTD, *itr); + } } return m_objectList; |