*Do not allow to add/remove obj to/from world more than once.
--HG-- branch : trunk
This commit is contained in:
+13
-8
@@ -177,19 +177,24 @@ Creature::~Creature()
|
||||
void Creature::AddToWorld()
|
||||
{
|
||||
///- Register the creature for guid lookup
|
||||
if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
SearchFormation();
|
||||
if(!IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
SearchFormation();
|
||||
}
|
||||
}
|
||||
|
||||
void Creature::RemoveFromWorld()
|
||||
{
|
||||
if(m_formationID)
|
||||
formation_mgr.DestroyGroup(m_formationID, GetGUID());
|
||||
|
||||
///- Remove the creature from the accessor
|
||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
||||
Unit::RemoveFromWorld();
|
||||
if(IsInWorld())
|
||||
{
|
||||
if(m_formationID)
|
||||
formation_mgr.DestroyGroup(m_formationID, GetGUID());
|
||||
ObjectAccessor::Instance().RemoveObject(this);
|
||||
Unit::RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
void Creature::SearchFormation()
|
||||
|
||||
@@ -46,15 +46,21 @@ DynamicObject::DynamicObject() : WorldObject()
|
||||
void DynamicObject::AddToWorld()
|
||||
{
|
||||
///- Register the dynamicObject for guid lookup
|
||||
if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
|
||||
WorldObject::AddToWorld();
|
||||
if(!IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().AddObject(this);
|
||||
WorldObject::AddToWorld();
|
||||
}
|
||||
}
|
||||
|
||||
void DynamicObject::RemoveFromWorld()
|
||||
{
|
||||
///- Remove the dynamicObject from the accessor
|
||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
||||
WorldObject::RemoveFromWorld();
|
||||
if(IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().RemoveObject(this);
|
||||
WorldObject::RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
bool DynamicObject::Create( uint32 guidlow, Unit *caster, uint32 spellId, uint32 effIndex, float x, float y, float z, int32 duration, float radius )
|
||||
|
||||
+10
-4
@@ -82,15 +82,21 @@ GameObject::~GameObject()
|
||||
void GameObject::AddToWorld()
|
||||
{
|
||||
///- Register the gameobject for guid lookup
|
||||
if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
|
||||
WorldObject::AddToWorld();
|
||||
if(!IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().AddObject(this);
|
||||
WorldObject::AddToWorld();
|
||||
}
|
||||
}
|
||||
|
||||
void GameObject::RemoveFromWorld()
|
||||
{
|
||||
///- Remove the gameobject from the accessor
|
||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
||||
WorldObject::RemoveFromWorld();
|
||||
if(IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().RemoveObject(this);
|
||||
WorldObject::RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
bool GameObject::Create(uint32 guidlow, uint32 name_id, Map *map, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 animprogress, uint32 go_state, uint32 ArtKit)
|
||||
|
||||
@@ -130,6 +130,9 @@ class TRINITY_DLL_SPEC Object
|
||||
}
|
||||
virtual void RemoveFromWorld()
|
||||
{
|
||||
if(!m_inWorld)
|
||||
return;
|
||||
|
||||
// if we remove from world then sending changes not required
|
||||
if(m_uint32Values)
|
||||
ClearUpdateMask(true);
|
||||
|
||||
+11
-5
@@ -114,16 +114,22 @@ Pet::~Pet()
|
||||
void Pet::AddToWorld()
|
||||
{
|
||||
///- Register the pet for guid lookup
|
||||
if(!IsInWorld()) ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
if(!IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().AddObject(this);
|
||||
Unit::AddToWorld();
|
||||
}
|
||||
}
|
||||
|
||||
void Pet::RemoveFromWorld()
|
||||
{
|
||||
///- Remove the pet from the accessor
|
||||
if(IsInWorld()) ObjectAccessor::Instance().RemoveObject(this);
|
||||
///- Don't call the function for Creature, normal mobs + totems go in a different storage
|
||||
Unit::RemoveFromWorld();
|
||||
if(IsInWorld())
|
||||
{
|
||||
ObjectAccessor::Instance().RemoveObject(this);
|
||||
///- Don't call the function for Creature, normal mobs + totems go in a different storage
|
||||
Unit::RemoveFromWorld();
|
||||
}
|
||||
}
|
||||
|
||||
bool Pet::LoadPetFromDB( Unit* owner, uint32 petentry, uint32 petnumber, bool current )
|
||||
|
||||
+1
-2
@@ -11268,9 +11268,8 @@ void Unit::RemoveFromWorld()
|
||||
RemoveCharmAuras();
|
||||
RemoveBindSightAuras();
|
||||
RemoveNotOwnSingleTargetAuras();
|
||||
WorldObject::RemoveFromWorld();
|
||||
}
|
||||
|
||||
WorldObject::RemoveFromWorld();
|
||||
}
|
||||
|
||||
void Unit::CleanupsBeforeDelete()
|
||||
|
||||
Reference in New Issue
Block a user