aboutsummaryrefslogtreecommitdiff
path: root/src/server/game
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game')
-rw-r--r--src/server/game/Entities/GameObject/GameObject.cpp4
-rw-r--r--src/server/game/Entities/Object/Object.cpp23
-rw-r--r--src/server/game/Grids/Notifiers/GridNotifiers.h22
3 files changed, 12 insertions, 37 deletions
diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp
index e8bb99ffb01..731bc5c7991 100644
--- a/src/server/game/Entities/GameObject/GameObject.cpp
+++ b/src/server/game/Entities/GameObject/GameObject.cpp
@@ -1472,8 +1472,8 @@ void GameObject::Update(uint32 diff)
{
// Environmental trap: Any player
Player* player = nullptr;
- Trinity::AnyPlayerInObjectRangeCheck checker(this, radius);
- Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
+ Trinity::AnyUnitInObjectRangeCheck checker(this, radius);
+ Trinity::PlayerSearcher searcher(this, player, checker);
Cell::VisitWorldObjects(this, searcher, radius);
target = player;
}
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 26e3c8585f3..cdaf87c80a9 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -3452,8 +3452,8 @@ void WorldObject::GetCreatureListWithOptionsInGrid(Container& creatureContainer,
template <typename Container>
void WorldObject::GetPlayerListInGrid(Container& playerContainer, float maxSearchRange, bool alive /*= true*/) const
{
- Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange, alive);
- Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerContainer, checker);
+ Trinity::AnyUnitInObjectRangeCheck checker(this, maxSearchRange, true, alive);
+ Trinity::PlayerListSearcher searcher(this, playerContainer, checker);
Cell::VisitWorldObjects(this, searcher, maxSearchRange);
}
@@ -3746,26 +3746,23 @@ void WorldObject::DestroyForNearbyPlayers()
if (!IsInWorld())
return;
- std::list<Player*> targets;
- Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false);
- Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
- Cell::VisitWorldObjects(this, searcher, GetVisibilityRange());
- for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
+ auto destroyer = [this](Player* player)
{
- Player* player = (*iter);
-
if (player == this)
- continue;
+ return;
if (!player->HaveAtClient(this))
- continue;
+ return;
if (Unit const* unit = ToUnit(); unit && unit->GetCharmerGUID() == player->GetGUID()) /// @todo this is for puppet
- continue;
+ return;
DestroyForPlayer(player);
player->m_clientGUIDs.erase(GetGUID());
- }
+ };
+
+ Trinity::PlayerDistWorker worker(this, GetVisibilityRange(), destroyer);
+ Cell::VisitWorldObjects(this, worker, GetVisibilityRange());
}
void WorldObject::UpdateObjectVisibility(bool /*forced*/)
diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h
index 41a74f2fc4c..39ee9374f6c 100644
--- a/src/server/game/Grids/Notifiers/GridNotifiers.h
+++ b/src/server/game/Grids/Notifiers/GridNotifiers.h
@@ -1599,28 +1599,6 @@ namespace Trinity
Customizer& i_customizer;
};
- class AnyPlayerInObjectRangeCheck
- {
- public:
- AnyPlayerInObjectRangeCheck(WorldObject const* obj, float range, bool reqAlive = true) : _obj(obj), _range(range), _reqAlive(reqAlive) { }
-
- bool operator()(Player* u) const
- {
- if (_reqAlive && !u->IsAlive())
- return false;
-
- if (!_obj->IsWithinDist(u, _range))
- return false;
-
- return true;
- }
-
- private:
- WorldObject const* _obj;
- float _range;
- bool _reqAlive;
- };
-
class AnyPlayerInPositionRangeCheck
{
public: