aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/game/Corpse.cpp11
-rw-r--r--src/game/Corpse.h2
-rw-r--r--src/game/Creature.h1
-rw-r--r--src/game/DynamicObject.cpp3
-rw-r--r--src/game/Map.cpp98
-rw-r--r--src/game/Object.cpp2
-rw-r--r--src/game/Object.h2
-rw-r--r--src/game/Pet.cpp2
-rw-r--r--src/game/Player.cpp1
9 files changed, 29 insertions, 93 deletions
diff --git a/src/game/Corpse.cpp b/src/game/Corpse.cpp
index 83d21bb3b14..3b3a5fc3cc1 100644
--- a/src/game/Corpse.cpp
+++ b/src/game/Corpse.cpp
@@ -29,6 +29,7 @@
#include "World.h"
Corpse::Corpse(CorpseType type) : WorldObject()
+, m_type(type)
{
m_objectType |= TYPEMASK_CORPSE;
m_objectTypeId = TYPEID_CORPSE;
@@ -37,13 +38,14 @@ Corpse::Corpse(CorpseType type) : WorldObject()
m_valuesCount = CORPSE_END;
- m_type = type;
-
m_mapId = 0;
m_time = time(NULL);
lootForBody = false;
+
+ if(type != CORPSE_BONES)
+ m_isWorldObject = true;
}
Corpse::~Corpse()
@@ -203,7 +205,7 @@ bool Corpse::LoadFromDB(uint32 guid, Field *fields)
SetInstanceId(fields[8].GetUInt32());
m_time = time_t(fields[6].GetUInt64());
- m_type = CorpseType(fields[7].GetUInt32());
+ const_cast<CorpseType>(m_type) = CorpseType(fields[7].GetUInt32());
if(m_type >= MAX_CORPSE_TYPE)
{
@@ -211,6 +213,9 @@ bool Corpse::LoadFromDB(uint32 guid, Field *fields)
return false;
}
+ if(m_type != CORPSE_BONES)
+ m_isWorldObject = true;
+
uint32 phaseMask = fields[9].GetUInt32();
// overwrite possible wrong/corrupted guid
diff --git a/src/game/Corpse.h b/src/game/Corpse.h
index ee6556e3436..ce47b19b404 100644
--- a/src/game/Corpse.h
+++ b/src/game/Corpse.h
@@ -99,7 +99,7 @@ class Corpse : public WorldObject
private:
GridReference<Corpse> m_gridRef;
- CorpseType m_type;
+ const CorpseType m_type;
time_t m_time;
GridPair m_grid; // gride for corpse position for fast search
uint32 m_mapId; // map id for fast corpse check at packet requests and in other situations with unloaded map of corpse.
diff --git a/src/game/Creature.h b/src/game/Creature.h
index d291aaf9db0..f2f02d165eb 100644
--- a/src/game/Creature.h
+++ b/src/game/Creature.h
@@ -509,7 +509,6 @@ class TRINITY_DLL_SPEC Creature : public Unit
bool isHunterPet() const{ return m_summonMask & SUMMON_MASK_HUNTER_PET; }
bool isVehicle() const { return m_summonMask & SUMMON_MASK_VEHICLE; }
bool isTotem() const { return m_summonMask & SUMMON_MASK_TOTEM; }
- bool isWorldCreature() const { return m_summonMask & SUMMON_MASK_PET; }
void SetCorpseDelay(uint32 delay) { m_corpseDelay = delay; }
bool isRacialLeader() const { return GetCreatureInfo()->RacialLeader; }
diff --git a/src/game/DynamicObject.cpp b/src/game/DynamicObject.cpp
index 80b0d91a1b8..7316bb58884 100644
--- a/src/game/DynamicObject.cpp
+++ b/src/game/DynamicObject.cpp
@@ -100,6 +100,9 @@ bool DynamicObject::Create( uint32 guidlow, Unit *caster, uint32 spellId, uint32
m_effIndex = effIndex;
m_spellId = spellId;
m_updateTimer = 0;
+
+ if(m_effIndex == 4)
+ m_isWorldObject = true;
return true;
}
diff --git a/src/game/Map.cpp b/src/game/Map.cpp
index 5aeb043a92f..e10ee1a2b94 100644
--- a/src/game/Map.cpp
+++ b/src/game/Map.cpp
@@ -221,104 +221,30 @@ Map::Map(uint32 id, time_t expiry, uint32 InstanceId, uint8 SpawnMode, Map* _par
template<class T>
void Map::AddToGrid(T* obj, NGridType *grid, Cell const& cell)
{
- (*grid)(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj, obj->GetGUID());
-}
-
-template<>
-void Map::AddToGrid(Player* obj, NGridType *grid, Cell const& cell)
-{
- (*grid)(cell.CellX(), cell.CellY()).AddWorldObject(obj, obj->GetGUID());
+ if(obj->m_isWorldObject)
+ (*grid)(cell.CellX(), cell.CellY()).template AddWorldObject<T>(obj, obj->GetGUID());
+ else
+ (*grid)(cell.CellX(), cell.CellY()).template AddGridObject<T>(obj, obj->GetGUID());
}
template<>
-void Map::AddToGrid(Corpse *obj, NGridType *grid, Cell const& cell)
+void Map::AddToGrid(Creature* obj, NGridType *grid, Cell const& cell)
{
- // add to world object registry in grid
- if(obj->GetType()!=CORPSE_BONES)
- {
+ if(obj->m_isWorldObject)
(*grid)(cell.CellX(), cell.CellY()).AddWorldObject(obj, obj->GetGUID());
- }
- // add to grid object store
else
- {
(*grid)(cell.CellX(), cell.CellY()).AddGridObject(obj, obj->GetGUID());
- }
-}
-template<>
-void Map::AddToGrid(Creature* obj, NGridType *grid, Cell const& cell)
-{
- // add to world object registry in grid
- if(obj->isWorldCreature() || obj->IsTempWorldObject)
- {
- (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<Creature>(obj, obj->GetGUID());
- }
- // add to grid object store
- else
- {
- (*grid)(cell.CellX(), cell.CellY()).AddGridObject<Creature>(obj, obj->GetGUID());
- }
obj->SetCurrentCell(cell);
}
-template<>
-void Map::AddToGrid(DynamicObject* obj, NGridType *grid, Cell const& cell)
-{
- if(obj->isActiveObject()) // only farsight
- (*grid)(cell.CellX(), cell.CellY()).AddWorldObject<DynamicObject>(obj, obj->GetGUID());
- else
- (*grid)(cell.CellX(), cell.CellY()).AddGridObject<DynamicObject>(obj, obj->GetGUID());
-}
-
template<class T>
void Map::RemoveFromGrid(T* obj, NGridType *grid, Cell const& cell)
{
- (*grid)(cell.CellX(), cell.CellY()).template RemoveGridObject<T>(obj, obj->GetGUID());
-}
-
-template<>
-void Map::RemoveFromGrid(Player* obj, NGridType *grid, Cell const& cell)
-{
- (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject(obj, obj->GetGUID());
-}
-
-template<>
-void Map::RemoveFromGrid(Corpse *obj, NGridType *grid, Cell const& cell)
-{
- // remove from world object registry in grid
- if(obj->GetType()!=CORPSE_BONES)
- {
- (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject(obj, obj->GetGUID());
- }
- // remove from grid object store
- else
- {
- (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject(obj, obj->GetGUID());
- }
-}
-
-template<>
-void Map::RemoveFromGrid(Creature* obj, NGridType *grid, Cell const& cell)
-{
- // remove from world object registry in grid
- if(obj->isWorldCreature() || obj->IsTempWorldObject)
- {
- (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<Creature>(obj, obj->GetGUID());
- }
- // remove from grid object store
- else
- {
- (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject<Creature>(obj, obj->GetGUID());
- }
-}
-
-template<>
-void Map::RemoveFromGrid(DynamicObject* obj, NGridType *grid, Cell const& cell)
-{
- if(obj->isActiveObject()) // only farsight
- (*grid)(cell.CellX(), cell.CellY()).RemoveWorldObject<DynamicObject>(obj, obj->GetGUID());
+ if(obj->m_isWorldObject)
+ (*grid)(cell.CellX(), cell.CellY()).template RemoveWorldObject<T>(obj, obj->GetGUID());
else
- (*grid)(cell.CellX(), cell.CellY()).RemoveGridObject<DynamicObject>(obj, obj->GetGUID());
+ (*grid)(cell.CellX(), cell.CellY()).template RemoveGridObject<T>(obj, obj->GetGUID());
}
template<class T>
@@ -361,11 +287,11 @@ void Map::SwitchGridContainers(T* obj, bool on)
assert(false);
}*/
}
- obj->IsTempWorldObject = on;
+ obj->m_isWorldObject = on;
}
template void Map::SwitchGridContainers(Creature *, bool);
-template void Map::SwitchGridContainers(DynamicObject *, bool);
+//template void Map::SwitchGridContainers(DynamicObject *, bool);
template<class T>
void Map::DeleteFromWorld(T* obj)
@@ -2223,7 +2149,7 @@ void Map::RemoveAllObjectsInRemoveList()
switch(obj->GetTypeId())
{
case TYPEID_UNIT:
- if(!((Creature*)obj)->isWorldCreature())
+ if(!((Creature*)obj)->isPet())
SwitchGridContainers((Creature*)obj, on);
break;
}
diff --git a/src/game/Object.cpp b/src/game/Object.cpp
index 3f6b34a20bb..681a5da6d44 100644
--- a/src/game/Object.cpp
+++ b/src/game/Object.cpp
@@ -1069,7 +1069,7 @@ WorldObject::WorldObject()
: m_phaseMask(PHASEMASK_NORMAL),
m_positionX(0.0f), m_positionY(0.0f), m_positionZ(0.0f), m_orientation(0.0f), m_currMap(NULL)
, m_zoneScript(NULL)
- , m_isActive(false), IsTempWorldObject(false)
+ , m_isActive(false), m_isWorldObject(false)
, m_name("")
{
}
diff --git a/src/game/Object.h b/src/game/Object.h
index 15bc7fcd003..28825d2154f 100644
--- a/src/game/Object.h
+++ b/src/game/Object.h
@@ -557,7 +557,6 @@ class TRINITY_DLL_SPEC WorldObject : public Object
template<class NOTIFIER> void VisitNearbyObject(const float &radius, NOTIFIER &notifier) const { GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
template<class NOTIFIER> void VisitNearbyGridObject(const float &radius, NOTIFIER &notifier) const { GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
template<class NOTIFIER> void VisitNearbyWorldObject(const float &radius, NOTIFIER &notifier) const { GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
- bool IsTempWorldObject;
#ifdef MAP_BASED_RAND_GEN
int32 irand(int32 min, int32 max) const { return int32 (GetMap()->mtRand.randInt(max - min)) + min; }
@@ -567,6 +566,7 @@ class TRINITY_DLL_SPEC WorldObject : public Object
double rand_chance() const { return GetMap()->mtRand.randExc(100.0);}
#endif
+ bool m_isWorldObject;
protected:
explicit WorldObject();
std::string m_name;
diff --git a/src/game/Pet.cpp b/src/game/Pet.cpp
index 05764beec11..b4ee8b6732b 100644
--- a/src/game/Pet.cpp
+++ b/src/game/Pet.cpp
@@ -58,6 +58,8 @@ m_declinedname(NULL), m_owner(owner)
m_name = "Pet";
m_regenTimer = 4000;
+
+ m_isWorldObject = true;
}
Pet::~Pet()
diff --git a/src/game/Player.cpp b/src/game/Player.cpp
index a56dba641db..dc28d3c9a8c 100644
--- a/src/game/Player.cpp
+++ b/src/game/Player.cpp
@@ -472,6 +472,7 @@ Player::Player (WorldSession *session): Unit(), m_achievementMgr(this), m_reputa
m_lastFallZ = 0;
m_ControlledByPlayer = true;
+ m_isWorldObject = true;
sWorld.IncreasePlayerCount();
}