aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjackpoz <giacomopoz@gmail.com>2014-01-15 20:20:01 +0100
committerjackpoz <giacomopoz@gmail.com>2014-01-15 20:20:01 +0100
commitcbba22ba6809caf4e9272d8c601756ec0323cc05 (patch)
tree203c2afe51297e384e627089f21a6463c039691b
parent6e01c0b0b4205f0d981ec658ae4d61b7e54fbab7 (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.h20
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;