Core/SAI: Fix assertion triggered in SmartScript

Remove assertion in SmartScript added in b8625f41bd 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.
This commit is contained in:
jackpoz
2014-01-15 20:20:01 +01:00
parent 6e01c0b0b4
commit cbba22ba68

View File

@@ -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;