aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Creature.cpp21
-rw-r--r--src/game/DynamicObject.cpp14
-rw-r--r--src/game/GameObject.cpp14
-rw-r--r--src/game/Object.h3
-rw-r--r--src/game/Pet.cpp16
-rw-r--r--src/game/Unit.cpp3
6 files changed, 48 insertions, 23 deletions
diff --git a/src/game/Creature.cpp b/src/game/Creature.cpp
index 8c120309217..ad3f435ae53 100644
--- a/src/game/Creature.cpp
+++ b/src/game/Creature.cpp
@@ -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()
diff --git a/src/game/DynamicObject.cpp b/src/game/DynamicObject.cpp
index fddac254272..801626d5a9b 100644
--- a/src/game/DynamicObject.cpp
+++ b/src/game/DynamicObject.cpp
@@ -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 )
diff --git a/src/game/GameObject.cpp b/src/game/GameObject.cpp
index 9338ee17079..d1bb0362872 100644
--- a/src/game/GameObject.cpp
+++ b/src/game/GameObject.cpp
@@ -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)
diff --git a/src/game/Object.h b/src/game/Object.h
index 1a7a70163ca..7e18ea4db92 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -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);
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index a5d80266242..6b5ff6c1543 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -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 )
diff --git a/src/game/Unit.cpp b/src/game/Unit.cpp
index ac6881a4356..4e400c509c8 100644
--- a/src/game/Unit.cpp
+++ b/src/game/Unit.cpp
@@ -11268,9 +11268,8 @@ void Unit::RemoveFromWorld()
RemoveCharmAuras();
RemoveBindSightAuras();
RemoveNotOwnSingleTargetAuras();
+ WorldObject::RemoveFromWorld();
}
-
- WorldObject::RemoveFromWorld();
}
void Unit::CleanupsBeforeDelete()