summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Object/Object.cpp21
-rw-r--r--src/server/game/Grids/GridObjectLoader.cpp2
-rw-r--r--src/server/game/Maps/Map.cpp81
-rw-r--r--src/server/game/Maps/Map.h38
-rw-r--r--src/server/scripts/Commands/cs_debug.cpp4
5 files changed, 6 insertions, 140 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 91889565fc..c8fd3d8514 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -1083,31 +1083,14 @@ void WorldObject::setActive(bool on)
m_isActive = on;
- if (on && !IsInWorld())
+ if (!on || !IsInWorld())
return;
Map* map = FindMap();
if (!map)
return;
- if (on)
- {
- if (IsCreature())
- map->AddToActive(this->ToCreature());
- else if (IsDynamicObject())
- map->AddToActive((DynamicObject*)this);
- else if (IsGameObject())
- map->AddToActive((GameObject*)this);
- }
- else
- {
- if (IsCreature())
- map->RemoveFromActive(this->ToCreature());
- else if (IsDynamicObject())
- map->RemoveFromActive((DynamicObject*)this);
- else if (IsGameObject())
- map->RemoveFromActive((GameObject*)this);
- }
+ map->AddObjectToPendingUpdateList(this);
}
void WorldObject::SetVisibilityDistanceOverride(VisibilityDistanceType type)
diff --git a/src/server/game/Grids/GridObjectLoader.cpp b/src/server/game/Grids/GridObjectLoader.cpp
index ff960db654..248551069c 100644
--- a/src/server/game/Grids/GridObjectLoader.cpp
+++ b/src/server/game/Grids/GridObjectLoader.cpp
@@ -32,8 +32,6 @@ void GridObjectLoader::AddObjectHelper(Map* map, T* obj)
map->AddToGrid(obj, cell);
obj->AddToWorld();
- if (obj->isActiveObject())
- map->AddToActive(obj);
}
void GridObjectLoader::LoadCreatures(CellGuidSet const& guid_set, Map* map)
diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp
index e82fbcaed0..6216613574 100644
--- a/src/server/game/Maps/Map.cpp
+++ b/src/server/game/Maps/Map.cpp
@@ -73,8 +73,7 @@ Map::~Map()
Map::Map(uint32 id, uint32 InstanceId, uint8 SpawnMode, Map* _parent) :
_mapGridManager(this), i_mapEntry(sMapStore.LookupEntry(id)), i_spawnMode(SpawnMode), i_InstanceId(InstanceId),
- m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE),
- _instanceResetPeriod(0), m_activeNonPlayersIter(m_activeNonPlayers.end()),
+ m_unloadTimer(0), m_VisibleDistance(DEFAULT_VISIBILITY_DISTANCE), _instanceResetPeriod(0),
_transportsUpdateIter(_transports.end()), i_scriptLock(false), _defaultLight(GetDefaultMapLight(id))
{
m_parentMap = (_parent ? _parent : this);
@@ -357,9 +356,6 @@ bool Map::AddToMap(T* obj, bool checkTransport)
InitializeObject(obj);
- if (obj->isActiveObject())
- AddToActive(obj);
-
//something, such as vehicle, needs to be update immediately
//also, trigger needs to cast spell, if not update, cannot see visual
obj->UpdateObjectVisibility(true);
@@ -393,9 +389,6 @@ bool Map::AddToMap(MotionTransport* obj, bool /*checkTransport*/)
obj->AddToWorld();
- if (obj->isActiveObject())
- AddToActive(obj);
-
_transports.insert(obj);
// Broadcast creation to players
@@ -511,19 +504,6 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/)
}
}
- if (_updatableObjectListRecheckTimer.Passed())
- {
- // Mark all cells near active objects
- for (m_activeNonPlayersIter = m_activeNonPlayers.begin(); m_activeNonPlayersIter != m_activeNonPlayers.end(); ++m_activeNonPlayersIter)
- {
- WorldObject* obj = *m_activeNonPlayersIter;
- if (!obj || !obj->IsInWorld())
- continue;
-
- MarkNearbyCellsOf(obj);
- }
- }
-
UpdateNonPlayerObjects(t_diff);
SendObjectUpdates();
@@ -699,9 +679,6 @@ void Map::RemoveFromMap(T* obj, bool remove)
{
obj->RemoveFromWorld();
- if (obj->isActiveObject())
- RemoveFromActive(obj);
-
obj->RemoveFromGrid();
obj->ResetMap();
@@ -717,8 +694,6 @@ template<>
void Map::RemoveFromMap(MotionTransport* obj, bool remove)
{
obj->RemoveFromWorld();
- if (obj->isActiveObject())
- RemoveFromActive(obj);
Map::PlayerList const& players = GetPlayers();
if (!players.IsEmpty())
@@ -1820,60 +1795,6 @@ void Map::SendToPlayers(WorldPacket const* data) const
itr->GetSource()->GetSession()->SendPacket(data);
}
-template<class T>
-void Map::AddToActive(T* obj)
-{
- AddToActiveHelper(obj);
-}
-
-template <>
-void Map::AddToActive(Creature* c)
-{
- AddToActiveHelper(c);
-}
-
-template<>
-void Map::AddToActive(DynamicObject* d)
-{
- AddToActiveHelper(d);
-}
-
-template<>
-void Map::AddToActive(GameObject* d)
-{
- AddToActiveHelper(d);
-}
-
-template<>
-void Map::AddToActive(Corpse* /*c*/)
-{
- // do nothing for corpses
-}
-
-template<class T>
-void Map::RemoveFromActive(T* obj)
-{
- RemoveFromActiveHelper(obj);
-}
-
-template <>
-void Map::RemoveFromActive(Creature* c)
-{
- RemoveFromActiveHelper(c);
-}
-
-template<>
-void Map::RemoveFromActive(DynamicObject* obj)
-{
- RemoveFromActiveHelper(obj);
-}
-
-template<>
-void Map::RemoveFromActive(GameObject* obj)
-{
- RemoveFromActiveHelper(obj);
-}
-
template bool Map::AddToMap(Corpse*, bool);
template bool Map::AddToMap(Creature*, bool);
template bool Map::AddToMap(GameObject*, bool);
diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h
index 53a35efb9c..d5bb8c6b55 100644
--- a/src/server/game/Maps/Map.h
+++ b/src/server/game/Maps/Map.h
@@ -327,14 +327,6 @@ public:
void ScriptsStart(std::map<uint32, std::multimap<uint32, ScriptInfo> > const& scripts, uint32 id, Object* source, Object* target);
void ScriptCommandStart(ScriptInfo const& script, uint32 delay, Object* source, Object* target);
- // must called with AddToWorld
- template<class T>
- void AddToActive(T* obj);
-
- // must called with RemoveFromWorld
- template<class T>
- void RemoveFromActive(T* obj);
-
CreatureGroupHolderType CreatureGroupHolder;
void UpdateIteratorBack(Player* player);
@@ -490,10 +482,7 @@ public:
_updateObjects.erase(obj);
}
- std::size_t GetActiveNonPlayersCount() const
- {
- return m_activeNonPlayers.size();
- }
+ size_t GetUpdateObjectsCount() const { return _updateObjects.size(); }
virtual std::string GetDebugInfo() const;
@@ -549,10 +538,6 @@ protected:
MapRefMgr m_mapRefMgr;
MapRefMgr::iterator m_mapRefIter;
- typedef std::set<WorldObject*> ActiveNonPlayers;
- ActiveNonPlayers m_activeNonPlayers;
- ActiveNonPlayers::iterator m_activeNonPlayersIter;
-
// Objects that must update even in inactive grids without activating them
TransportsContainer _transports;
TransportsContainer::iterator _transportsUpdateIter;
@@ -583,27 +568,6 @@ private:
template<class T>
void DeleteFromWorld(T*);
- void AddToActiveHelper(WorldObject* obj)
- {
- m_activeNonPlayers.insert(obj);
- }
-
- void RemoveFromActiveHelper(WorldObject* obj)
- {
- // Map::Update for active object in proccess
- if (m_activeNonPlayersIter != m_activeNonPlayers.end())
- {
- ActiveNonPlayers::iterator itr = m_activeNonPlayers.find(obj);
- if (itr == m_activeNonPlayers.end())
- return;
- if (itr == m_activeNonPlayersIter)
- ++m_activeNonPlayersIter;
- m_activeNonPlayers.erase(itr);
- }
- else
- m_activeNonPlayers.erase(obj);
- }
-
void UpdateNonPlayerObjects(uint32 const diff);
void _AddObjectToUpdateList(WorldObject* obj);
diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp
index 8a6def72a7..33acdde9a5 100644
--- a/src/server/scripts/Commands/cs_debug.cpp
+++ b/src/server/scripts/Commands/cs_debug.cpp
@@ -1347,11 +1347,11 @@ public:
static void HandleDebugObjectCountMap(ChatHandler* handler, Map* map)
{
- handler->PSendSysMessage("Map Id: {} Name: '{}' Instance Id: {} Creatures: {} GameObjects: {} SetActive Objects: {}",
+ handler->PSendSysMessage("Map Id: {} Name: '{}' Instance Id: {} Creatures: {} GameObjects: {} Update Objects: {}",
map->GetId(), map->GetMapName(), map->GetInstanceId(),
uint64(map->GetObjectsStore().Size<Creature>()),
uint64(map->GetObjectsStore().Size<GameObject>()),
- uint64(map->GetActiveNonPlayersCount()));
+ uint64(map->GetUpdateObjectsCount()));
CreatureCountWorker worker;
TypeContainerVisitor<CreatureCountWorker, MapStoredObjectTypesContainer> visitor(worker);