From cbba22ba6809caf4e9272d8c601756ec0323cc05 Mon Sep 17 00:00:00 2001 From: jackpoz Date: Wed, 15 Jan 2014 20:20:01 +0100 Subject: 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. --- src/server/game/AI/SmartScripts/SmartScriptMgr.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src') 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; -- cgit v1.2.3