*Check IsInWorld() when calling GetMap() in RemoveFromWorld(). This may fix some crash bugs.
--HG-- branch : trunk
This commit is contained in:
@@ -52,15 +52,18 @@ void DynamicObject::AddToWorld()
|
|||||||
|
|
||||||
void DynamicObject::RemoveFromWorld()
|
void DynamicObject::RemoveFromWorld()
|
||||||
{
|
{
|
||||||
// Make sure the object is back to grid container for removal as farsight targets
|
|
||||||
// are switched to world container on creation and they are also set to active
|
|
||||||
if (isActive())
|
|
||||||
{
|
|
||||||
GetMap()->SwitchGridContainers(this, false);
|
|
||||||
setActive(false);
|
|
||||||
}
|
|
||||||
///- Remove the dynamicObject from the accessor
|
///- Remove the dynamicObject from the accessor
|
||||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
if(IsInWorld())
|
||||||
|
{
|
||||||
|
// Make sure the object is back to grid container for removal as farsight targets
|
||||||
|
// are switched to world container on creation and they are also set to active
|
||||||
|
if (isActive())
|
||||||
|
{
|
||||||
|
GetMap()->SwitchGridContainers(this, false);
|
||||||
|
setActive(false);
|
||||||
|
}
|
||||||
|
ObjectAccessor::Instance().RemoveObject(this);
|
||||||
|
}
|
||||||
WorldObject::RemoveFromWorld();
|
WorldObject::RemoveFromWorld();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1101,7 +1101,7 @@ void WorldObject::AddToWorld()
|
|||||||
|
|
||||||
void WorldObject::RemoveFromWorld()
|
void WorldObject::RemoveFromWorld()
|
||||||
{
|
{
|
||||||
if(m_isActive && !isType(TYPEMASK_PLAYER))
|
if(m_isActive && IsInWorld() && !isType(TYPEMASK_PLAYER))
|
||||||
GetMap()->RemoveActiveObject(this);
|
GetMap()->RemoveActiveObject(this);
|
||||||
Object::RemoveFromWorld();
|
Object::RemoveFromWorld();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user