summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStoabrogga <38475780+Stoabrogga@users.noreply.github.com>2019-11-26 09:49:58 +0100
committerGitHub <noreply@github.com>2019-11-26 09:49:58 +0100
commita8ee99643119322679235724d40567357fd7fc52 (patch)
tree3d752ff74950b69cd48b0f77d19545e78ccff97c
parent3700e9143625a1be50e66bc209931d2be268f9bb (diff)
fix(Core): Missing updates for creatures; disable Travis modules check (#2457)
-rw-r--r--.travis.yml12
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.cpp16
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h13
-rw-r--r--src/server/game/Maps/Map.cpp39
-rw-r--r--src/server/game/Maps/Map.h11
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;