diff options
author | Stoabrogga <38475780+Stoabrogga@users.noreply.github.com> | 2019-11-26 09:49:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-11-26 09:49:58 +0100 |
commit | a8ee99643119322679235724d40567357fd7fc52 (patch) | |
tree | 3d752ff74950b69cd48b0f77d19545e78ccff97c | |
parent | 3700e9143625a1be50e66bc209931d2be268f9bb (diff) |
fix(Core): Missing updates for creatures; disable Travis modules check (#2457)
-rw-r--r-- | .travis.yml | 12 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.cpp | 16 | ||||
-rw-r--r-- | src/server/game/Grids/Notifiers/GridNotifiers.h | 13 | ||||
-rw-r--r-- | src/server/game/Maps/Map.cpp | 39 | ||||
-rw-r--r-- | src/server/game/Maps/Map.h | 11 |
5 files changed, 46 insertions, 45 deletions
diff --git a/.travis.yml b/.travis.yml index 5085c19ed7..332618d1bd 100644 --- a/.travis.yml +++ b/.travis.yml @@ -39,7 +39,8 @@ jobs: - source ./apps/ci/ci-before_install.sh install: - source ./apps/ci/ci-install.sh OFF - - source ./apps/ci/ci-install-modules.sh + # compilation with modules temporarily disabled until PR 2454 is merged and the modules are fixed + # - source ./apps/ci/ci-install-modules.sh script: - source ./apps/ci/ci-compile.sh @@ -49,7 +50,8 @@ jobs: - source ./apps/ci/ci-before_install.sh install: - source ./apps/ci/ci-install.sh ON - - source ./apps/ci/ci-install-modules.sh + # compilation with modules temporarily disabled until PR 2454 is merged and the modules are fixed + # - source ./apps/ci/ci-install-modules.sh - source ./apps/ci/ci-import-db.sh script: - source ./apps/ci/ci-compile.sh @@ -61,7 +63,8 @@ jobs: - source ./apps/ci/ci-before_install.sh install: - source ./apps/ci/ci-install.sh OFF - - source ./apps/ci/ci-install-modules.sh + # compilation with modules temporarily disabled until PR 2454 is merged and the modules are fixed + # - source ./apps/ci/ci-install-modules.sh script: - source ./apps/ci/ci-compile.sh @@ -71,7 +74,8 @@ jobs: - source ./apps/ci/ci-before_install.sh install: - source ./apps/ci/ci-install.sh ON - - source ./apps/ci/ci-install-modules.sh + # compilation with modules temporarily disabled until PR 2454 is merged and the modules are fixed + # - source ./apps/ci/ci-install-modules.sh script: - source ./apps/ci/ci-compile.sh diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index 6a18bb8b60..63b2542724 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -333,20 +333,7 @@ void ObjectUpdater::Visit(GridRefManager<T> &m) { obj = iter->GetSource(); ++iter; - if (obj->IsInWorld()) - obj->Update(i_timeDiff); - } -} - -template<class T> -void LargeObjectUpdater::Visit(GridRefManager<T> &m) -{ - T* obj; - for (typename GridRefManager<T>::iterator iter = m.begin(); iter != m.end(); ) - { - obj = iter->GetSource(); - ++iter; - if (obj->IsInWorld() && obj->IsVisibilityOverridden()) + if (obj->IsInWorld() && (i_largeOnly == obj->IsVisibilityOverridden())) obj->Update(i_timeDiff); } } @@ -384,4 +371,3 @@ bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u) template void ObjectUpdater::Visit<Creature>(CreatureMapType&); template void ObjectUpdater::Visit<GameObject>(GameObjectMapType&); template void ObjectUpdater::Visit<DynamicObject>(DynamicObjectMapType&); -template void LargeObjectUpdater::Visit<Creature>(CreatureMapType&); diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index f73b2b668a..f5bb9c7a0b 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -141,22 +141,13 @@ namespace Trinity struct ObjectUpdater { uint32 i_timeDiff; - explicit ObjectUpdater(const uint32 diff) : i_timeDiff(diff) {} + bool i_largeOnly; + explicit ObjectUpdater(const uint32 diff, bool largeOnly) : i_timeDiff(diff), i_largeOnly(largeOnly) {} template<class T> void Visit(GridRefManager<T> &m); void Visit(PlayerMapType &) {} void Visit(CorpseMapType &) {} }; - struct LargeObjectUpdater - { - uint32 i_timeDiff; - explicit LargeObjectUpdater(const uint32 diff) : i_timeDiff(diff) {} - template<class T> void Visit(GridRefManager<T> &m); - void Visit(GameObjectMapType &) {} - void Visit(DynamicObjectMapType &) {} - void Visit(CorpseMapType &) {} - }; - // SEARCHERS & LIST SEARCHERS & WORKERS // WorldObject searchers & workers diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 5562fcf9b3..0511b602de 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -629,16 +629,17 @@ bool Map::IsGridLoaded(const GridCoord &p) const void Map::VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor, - TypeContainerVisitor<Trinity::LargeObjectUpdater, GridTypeMapContainer> &largeObjectVisitor) + TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &largeGridVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &largeWorldVisitor) { // check for valid position if (!player->IsPositionValid()) return; // check normal grid activation range of the player - VisitNearbyCellsOf(player, gridVisitor, worldVisitor); + VisitNearbyCellsOf(player, gridVisitor, worldVisitor, largeGridVisitor, largeWorldVisitor); - // check maximum visibility distance for large creatures (cells already visited by the normal check won't be visited again) + // check maximum visibility distance for large creatures CellArea area = Cell::CalculateCellArea(player->GetPositionX(), player->GetPositionY(), MAX_VISIBILITY_DISTANCE); for (uint32 x = area.low_bound.x_coord; x <= area.high_bound.x_coord; ++x) @@ -648,20 +649,23 @@ void Map::VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity: // marked cells are those that have been visited // don't visit the same cell twice uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x; - if (isCellMarked(cell_id)) + if (isCellMarkedLarge(cell_id)) continue; - markCell(cell_id); + markCellLarge(cell_id); CellCoord pair(x, y); Cell cell(pair); - Visit(cell, largeObjectVisitor); + Visit(cell, largeGridVisitor); + Visit(cell, largeWorldVisitor); } } } void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, - TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor) + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &largeGridVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &largeWorldVisitor) { // Check for valid position if (!obj->IsPositionValid()) @@ -690,6 +694,13 @@ void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::Obj Visit(cell, gridVisitor); Visit(cell, worldVisitor); + + if (!isCellMarkedLarge(cell_id)) + { + markCellLarge(cell_id); + Visit(cell, largeGridVisitor); + Visit(cell, largeWorldVisitor); + } } } } @@ -733,16 +744,18 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/) /// update active cells around players and active objects resetMarkedCells(); + resetMarkedCellsLarge(); - Trinity::ObjectUpdater updater(t_diff); + Trinity::ObjectUpdater updater(t_diff, false); // for creature TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater); // for pets TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater); // for large creatures - Trinity::LargeObjectUpdater largeObjectUpdater(t_diff); - TypeContainerVisitor<Trinity::LargeObjectUpdater, GridTypeMapContainer > grid_large_object_update(largeObjectUpdater); + Trinity::ObjectUpdater largeObjectUpdater(t_diff, true); + TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer > grid_large_object_update(largeObjectUpdater); + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer > world_large_object_update(largeObjectUpdater); // pussywizard: container for far creatures in combat with players std::vector<Creature*> updateList; updateList.reserve(10); @@ -756,7 +769,7 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/) if (!obj || !obj->IsInWorld()) continue; - VisitNearbyCellsOf(obj, grid_object_update, world_object_update); + VisitNearbyCellsOf(obj, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update); } // the player iterator is stored in the map object @@ -771,7 +784,7 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/) // update players at tick player->Update(s_diff); - VisitNearbyCellsOfPlayer(player, grid_object_update, world_object_update, grid_large_object_update); + VisitNearbyCellsOfPlayer(player, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update); // handle updates for creatures in combat with player and are more than X yards away if (player->IsInCombat()) @@ -788,7 +801,7 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/) ref = ref->next(); } for (std::vector<Creature*>::const_iterator itr = updateList.begin(); itr != updateList.end(); ++itr) - VisitNearbyCellsOf(*itr, grid_object_update, world_object_update); + VisitNearbyCellsOf(*itr, grid_object_update, world_object_update, grid_large_object_update, world_large_object_update); } } diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 37944f212e..2ee050e718 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -297,10 +297,13 @@ class Map : public GridRefManager<NGridType> template<class T> void RemoveFromMap(T *, bool); void VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, - TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor); + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &largeGridVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &largeWorldVisitor); void VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor, TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor, - TypeContainerVisitor<Trinity::LargeObjectUpdater, GridTypeMapContainer> &largeObjectVisitor); + TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &largeGridVisitor, + TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &largeWorldVisitor); virtual void Update(const uint32, const uint32, bool thread = true); float GetVisibilityRange() const { return m_VisibleDistance; } @@ -410,6 +413,9 @@ class Map : public GridRefManager<NGridType> void resetMarkedCells() { marked_cells.reset(); } bool isCellMarked(uint32 pCellId) { return marked_cells.test(pCellId); } void markCell(uint32 pCellId) { marked_cells.set(pCellId); } + void resetMarkedCellsLarge() { marked_cells_large.reset(); } + bool isCellMarkedLarge(uint32 pCellId) { return marked_cells_large.test(pCellId); } + void markCellLarge(uint32 pCellId) { marked_cells_large.set(pCellId); } bool HavePlayers() const { return !m_mapRefManager.isEmpty(); } uint32 GetPlayersCountExceptGMs() const; @@ -609,6 +615,7 @@ class Map : public GridRefManager<NGridType> NGridType* i_grids[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]; GridMap* GridMaps[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS]; std::bitset<TOTAL_NUMBER_OF_CELLS_PER_MAP*TOTAL_NUMBER_OF_CELLS_PER_MAP> marked_cells; + std::bitset<TOTAL_NUMBER_OF_CELLS_PER_MAP*TOTAL_NUMBER_OF_CELLS_PER_MAP> marked_cells_large; bool i_scriptLock; std::unordered_set<WorldObject*> i_objectsToRemove; |