fix(Core): Missing updates for creatures; disable Travis modules check (#2457)
This commit is contained in:
+8
-4
@@ -39,7 +39,8 @@ jobs:
|
|||||||
- source ./apps/ci/ci-before_install.sh
|
- source ./apps/ci/ci-before_install.sh
|
||||||
install:
|
install:
|
||||||
- source ./apps/ci/ci-install.sh OFF
|
- 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:
|
script:
|
||||||
- source ./apps/ci/ci-compile.sh
|
- source ./apps/ci/ci-compile.sh
|
||||||
|
|
||||||
@@ -49,7 +50,8 @@ jobs:
|
|||||||
- source ./apps/ci/ci-before_install.sh
|
- source ./apps/ci/ci-before_install.sh
|
||||||
install:
|
install:
|
||||||
- source ./apps/ci/ci-install.sh ON
|
- 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
|
- source ./apps/ci/ci-import-db.sh
|
||||||
script:
|
script:
|
||||||
- source ./apps/ci/ci-compile.sh
|
- source ./apps/ci/ci-compile.sh
|
||||||
@@ -61,7 +63,8 @@ jobs:
|
|||||||
- source ./apps/ci/ci-before_install.sh
|
- source ./apps/ci/ci-before_install.sh
|
||||||
install:
|
install:
|
||||||
- source ./apps/ci/ci-install.sh OFF
|
- 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:
|
script:
|
||||||
- source ./apps/ci/ci-compile.sh
|
- source ./apps/ci/ci-compile.sh
|
||||||
|
|
||||||
@@ -71,7 +74,8 @@ jobs:
|
|||||||
- source ./apps/ci/ci-before_install.sh
|
- source ./apps/ci/ci-before_install.sh
|
||||||
install:
|
install:
|
||||||
- source ./apps/ci/ci-install.sh ON
|
- 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:
|
script:
|
||||||
- source ./apps/ci/ci-compile.sh
|
- source ./apps/ci/ci-compile.sh
|
||||||
|
|
||||||
|
|||||||
@@ -333,20 +333,7 @@ void ObjectUpdater::Visit(GridRefManager<T> &m)
|
|||||||
{
|
{
|
||||||
obj = iter->GetSource();
|
obj = iter->GetSource();
|
||||||
++iter;
|
++iter;
|
||||||
if (obj->IsInWorld())
|
if (obj->IsInWorld() && (i_largeOnly == obj->IsVisibilityOverridden()))
|
||||||
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())
|
|
||||||
obj->Update(i_timeDiff);
|
obj->Update(i_timeDiff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -384,4 +371,3 @@ bool AnyDeadUnitSpellTargetInRangeCheck::operator()(Creature* u)
|
|||||||
template void ObjectUpdater::Visit<Creature>(CreatureMapType&);
|
template void ObjectUpdater::Visit<Creature>(CreatureMapType&);
|
||||||
template void ObjectUpdater::Visit<GameObject>(GameObjectMapType&);
|
template void ObjectUpdater::Visit<GameObject>(GameObjectMapType&);
|
||||||
template void ObjectUpdater::Visit<DynamicObject>(DynamicObjectMapType&);
|
template void ObjectUpdater::Visit<DynamicObject>(DynamicObjectMapType&);
|
||||||
template void LargeObjectUpdater::Visit<Creature>(CreatureMapType&);
|
|
||||||
|
|||||||
@@ -141,22 +141,13 @@ namespace Trinity
|
|||||||
struct ObjectUpdater
|
struct ObjectUpdater
|
||||||
{
|
{
|
||||||
uint32 i_timeDiff;
|
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);
|
template<class T> void Visit(GridRefManager<T> &m);
|
||||||
void Visit(PlayerMapType &) {}
|
void Visit(PlayerMapType &) {}
|
||||||
void Visit(CorpseMapType &) {}
|
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
|
// SEARCHERS & LIST SEARCHERS & WORKERS
|
||||||
|
|
||||||
// WorldObject searchers & workers
|
// WorldObject searchers & workers
|
||||||
|
|||||||
@@ -629,16 +629,17 @@ bool Map::IsGridLoaded(const GridCoord &p) const
|
|||||||
|
|
||||||
void Map::VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor,
|
void Map::VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor,
|
||||||
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor,
|
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor,
|
||||||
TypeContainerVisitor<Trinity::LargeObjectUpdater, GridTypeMapContainer> &largeObjectVisitor)
|
TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &largeGridVisitor,
|
||||||
|
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &largeWorldVisitor)
|
||||||
{
|
{
|
||||||
// check for valid position
|
// check for valid position
|
||||||
if (!player->IsPositionValid())
|
if (!player->IsPositionValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// check normal grid activation range of the player
|
// 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);
|
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)
|
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
|
// marked cells are those that have been visited
|
||||||
// don't visit the same cell twice
|
// don't visit the same cell twice
|
||||||
uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x;
|
uint32 cell_id = (y * TOTAL_NUMBER_OF_CELLS_PER_MAP) + x;
|
||||||
if (isCellMarked(cell_id))
|
if (isCellMarkedLarge(cell_id))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
markCell(cell_id);
|
markCellLarge(cell_id);
|
||||||
CellCoord pair(x, y);
|
CellCoord pair(x, y);
|
||||||
Cell cell(pair);
|
Cell cell(pair);
|
||||||
|
|
||||||
Visit(cell, largeObjectVisitor);
|
Visit(cell, largeGridVisitor);
|
||||||
|
Visit(cell, largeWorldVisitor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor,
|
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
|
// Check for valid position
|
||||||
if (!obj->IsPositionValid())
|
if (!obj->IsPositionValid())
|
||||||
@@ -690,6 +694,13 @@ void Map::VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::Obj
|
|||||||
|
|
||||||
Visit(cell, gridVisitor);
|
Visit(cell, gridVisitor);
|
||||||
Visit(cell, worldVisitor);
|
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
|
/// update active cells around players and active objects
|
||||||
resetMarkedCells();
|
resetMarkedCells();
|
||||||
|
resetMarkedCellsLarge();
|
||||||
|
|
||||||
Trinity::ObjectUpdater updater(t_diff);
|
Trinity::ObjectUpdater updater(t_diff, false);
|
||||||
// for creature
|
// for creature
|
||||||
TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
|
TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer > grid_object_update(updater);
|
||||||
// for pets
|
// for pets
|
||||||
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater);
|
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer > world_object_update(updater);
|
||||||
|
|
||||||
// for large creatures
|
// for large creatures
|
||||||
Trinity::LargeObjectUpdater largeObjectUpdater(t_diff);
|
Trinity::ObjectUpdater largeObjectUpdater(t_diff, true);
|
||||||
TypeContainerVisitor<Trinity::LargeObjectUpdater, GridTypeMapContainer > grid_large_object_update(largeObjectUpdater);
|
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
|
// pussywizard: container for far creatures in combat with players
|
||||||
std::vector<Creature*> updateList; updateList.reserve(10);
|
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())
|
if (!obj || !obj->IsInWorld())
|
||||||
continue;
|
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
|
// 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
|
// update players at tick
|
||||||
player->Update(s_diff);
|
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
|
// handle updates for creatures in combat with player and are more than X yards away
|
||||||
if (player->IsInCombat())
|
if (player->IsInCombat())
|
||||||
@@ -788,7 +801,7 @@ void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/)
|
|||||||
ref = ref->next();
|
ref = ref->next();
|
||||||
}
|
}
|
||||||
for (std::vector<Creature*>::const_iterator itr = updateList.begin(); itr != updateList.end(); ++itr)
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -297,10 +297,13 @@ class Map : public GridRefManager<NGridType>
|
|||||||
template<class T> void RemoveFromMap(T *, bool);
|
template<class T> void RemoveFromMap(T *, bool);
|
||||||
|
|
||||||
void VisitNearbyCellsOf(WorldObject* obj, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor,
|
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,
|
void VisitNearbyCellsOfPlayer(Player* player, TypeContainerVisitor<Trinity::ObjectUpdater, GridTypeMapContainer> &gridVisitor,
|
||||||
TypeContainerVisitor<Trinity::ObjectUpdater, WorldTypeMapContainer> &worldVisitor,
|
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);
|
virtual void Update(const uint32, const uint32, bool thread = true);
|
||||||
|
|
||||||
float GetVisibilityRange() const { return m_VisibleDistance; }
|
float GetVisibilityRange() const { return m_VisibleDistance; }
|
||||||
@@ -410,6 +413,9 @@ class Map : public GridRefManager<NGridType>
|
|||||||
void resetMarkedCells() { marked_cells.reset(); }
|
void resetMarkedCells() { marked_cells.reset(); }
|
||||||
bool isCellMarked(uint32 pCellId) { return marked_cells.test(pCellId); }
|
bool isCellMarked(uint32 pCellId) { return marked_cells.test(pCellId); }
|
||||||
void markCell(uint32 pCellId) { marked_cells.set(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(); }
|
bool HavePlayers() const { return !m_mapRefManager.isEmpty(); }
|
||||||
uint32 GetPlayersCountExceptGMs() const;
|
uint32 GetPlayersCountExceptGMs() const;
|
||||||
@@ -609,6 +615,7 @@ class Map : public GridRefManager<NGridType>
|
|||||||
NGridType* i_grids[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
|
NGridType* i_grids[MAX_NUMBER_OF_GRIDS][MAX_NUMBER_OF_GRIDS];
|
||||||
GridMap* GridMaps[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;
|
||||||
|
std::bitset<TOTAL_NUMBER_OF_CELLS_PER_MAP*TOTAL_NUMBER_OF_CELLS_PER_MAP> marked_cells_large;
|
||||||
|
|
||||||
bool i_scriptLock;
|
bool i_scriptLock;
|
||||||
std::unordered_set<WorldObject*> i_objectsToRemove;
|
std::unordered_set<WorldObject*> i_objectsToRemove;
|
||||||
|
|||||||
Reference in New Issue
Block a user