refactor(Core/Grids): Ported cmangos/mangos-wotlk@ea99457 (#6113)

* refactor(Core/Grids): Ported cmangos/mangos-wotlk@ea99457

(cherry picked from commit d6201e5dbb)
Co-Authored-By: Shauren <shauren.trinity@gmail.com>
Co-Authored-By: SilverIce <slifeleaf@gmail.com>

* Update CellImpl.h

* w

* more more brackets

* ew

* fix build
This commit is contained in:
Kitzunu
2021-06-03 05:27:51 +02:00
committed by GitHub
parent cc28cf6bf0
commit 7152ddc82c
46 changed files with 238 additions and 361 deletions

View File

@@ -918,7 +918,7 @@ public:
Creature* passenger = nullptr;
Acore::AllCreaturesOfEntryInRange check(handler->GetSession()->GetPlayer(), entry, 20.0f);
Acore::CreatureSearcher<Acore::AllCreaturesOfEntryInRange> searcher(handler->GetSession()->GetPlayer(), passenger, check);
handler->GetSession()->GetPlayer()->VisitNearbyObject(30.0f, searcher);
Cell::VisitAllObjects(handler->GetSession()->GetPlayer(), searcher, 30.0f);
if (!passenger || passenger == target)
return false;
passenger->EnterVehicle(target, seatId);

View File

@@ -2233,9 +2233,7 @@ public:
Acore::RespawnDo u_do;
Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
TypeContainerVisitor<Acore::WorldObjectWorker<Acore::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
cell.Visit(p, obj_worker, *player->GetMap(), *player, player->GetGridActivationRange());
Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());
return true;
}

View File

@@ -263,18 +263,11 @@ public:
float radius = 40.0f;
WorldObject* object = handler->GetSession()->GetPlayer();
CellCoord pair(Acore::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()));
Cell cell(pair);
cell.SetNoCreate();
// Get Creatures
std::list<Creature*> creatureList;
Acore::AnyUnitInObjectRangeCheck go_check(object, radius);
Acore::CreatureListSearcher<Acore::AnyUnitInObjectRangeCheck> go_search(object, creatureList, go_check);
TypeContainerVisitor<Acore::CreatureListSearcher<Acore::AnyUnitInObjectRangeCheck>, GridTypeMapContainer> go_visit(go_search);
// Get Creatures
cell.Visit(pair, go_visit, *(object->GetMap()), *object, radius);
Cell::VisitGridObjects(object, go_search, radius);
if (!creatureList.empty())
{

View File

@@ -149,22 +149,11 @@ public:
for (uint8 i = 2; i < StormCount; ++i)
bp0 *= 2;
CellCoord p(Acore::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(p);
cell.SetNoCreate();
std::list<Unit*> tempUnitMap;
{
Acore::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS);
Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck> searcher(me, tempUnitMap, u_check);
TypeContainerVisitor<Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
TypeContainerVisitor<Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
cell.Visit(p, world_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
cell.Visit(p, grid_unit_searcher, *me->GetMap(), *me, SIZE_OF_GRIDS);
}
Acore::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS);
Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck> searcher(me, tempUnitMap, u_check);
Cell::VisitAllObjects(me, searcher, SIZE_OF_GRIDS);
// deal damage
for (std::list<Unit*>::const_iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i)

View File

@@ -223,18 +223,9 @@ public:
float x, y, z;
me->GetPosition(x, y, z);
{
CellCoord pair(Acore::ComputeCellCoord(x, y));
Cell cell(pair);
cell.SetNoCreate();
Acore::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
TypeContainerVisitor<Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange());
}
Acore::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
//TC_LOG_ERROR("scripts", "Eggs %d at middle", templist.size());
if (templist.empty())
@@ -256,18 +247,10 @@ public:
float x, y, z;
me->GetPosition(x, y, z);
{
CellCoord pair(Acore::ComputeCellCoord(x, y));
Cell cell(pair);
cell.SetNoCreate();
Acore::AllCreaturesOfEntryInRange check(me, NPC_FIRE_BOMB, 100);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
Acore::AllCreaturesOfEntryInRange check(me, NPC_FIRE_BOMB, 100);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
TypeContainerVisitor<Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange());
}
for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
{
(*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true);
@@ -517,18 +500,9 @@ public:
float x, y, z;
me->GetPosition(x, y, z);
{
CellCoord pair(Acore::ComputeCellCoord(x, y));
Cell cell(pair);
cell.SetNoCreate();
Acore::AllCreaturesOfEntryInRange check(me, 23817, 50);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
TypeContainerVisitor<Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
}
Acore::AllCreaturesOfEntryInRange check(me, 23817, 50);
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(me, templist, check);
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
//TC_LOG_ERROR("scripts", "Eggs %d at %d", templist.size(), side);

View File

@@ -1109,7 +1109,7 @@ public:
Player* player = nullptr;
Acore::AnyPlayerInObjectRangeCheck checker(me, 2.0f);
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, player, checker);
me->VisitNearbyWorldObject(2.0f, searcher);
Cell::VisitWorldObjects(me, searcher, 2.0f);
if (player)
{
player->CastSpell(player, SPELL_DRUNKEN_MASTER, true);

View File

@@ -812,7 +812,7 @@ public:
std::list<Player*> players;
Acore::AnyPlayerInObjectRangeCheck checker(me, radius);
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, players, checker);
me->VisitNearbyWorldObject(radius, searcher);
Cell::VisitWorldObjects(me, searcher, radius);
for (std::list<Player*>::const_iterator itr = players.begin(); itr != players.end(); ++itr)
{

View File

@@ -727,7 +727,7 @@ public:
std::list<Player*> playerList;
Acore::AnyPlayerInObjectRangeCheck checker(target, INTERACTION_DISTANCE * 2);
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(target, playerList, checker);
target->VisitNearbyWorldObject(INTERACTION_DISTANCE * 2, searcher);
Cell::VisitWorldObjects(target, searcher, INTERACTION_DISTANCE * 2);
for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
{
if ((*itr) != target && (*itr)->HasAura(GetId())) // && (*itr)->getStandState() == UNIT_STAND_STATE_SIT)

View File

@@ -888,17 +888,12 @@ void hyjalAI::JustDied(Unit* /*killer*/)
void hyjalAI::HideNearPos(float x, float y)
{
CellCoord pair(Acore::ComputeCellCoord(x, y));
Cell cell(pair);
cell.SetNoCreate();
// First get all creatures.
std::list<Creature*> creatures;
Acore::AllFriendlyCreaturesInGrid creature_check(me);
Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
TypeContainerVisitor <Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid>, GridTypeMapContainer> creature_visitor(creature_searcher);
cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
Cell::VisitGridObjects(x, y, me->GetMap(), creature_searcher, me->GetGridActivationRange());
if (!creatures.empty())
{
@@ -912,14 +907,9 @@ void hyjalAI::HideNearPos(float x, float y)
void hyjalAI::RespawnNearPos(float x, float y)
{
CellCoord p(Acore::ComputeCellCoord(x, y));
Cell cell(p);
cell.SetNoCreate();
Acore::RespawnDo u_do;
Acore::WorldObjectWorker<Acore::RespawnDo> worker(me, u_do);
TypeContainerVisitor<Acore::WorldObjectWorker<Acore::RespawnDo>, GridTypeMapContainer > obj_worker(worker);
cell.Visit(p, obj_worker, *me->GetMap(), *me, me->GetGridActivationRange());
Cell::VisitGridObjects(x, y, me->GetMap(), worker, me->GetGridActivationRange());
}
void hyjalAI::WaypointReached(uint32 waypointId)
@@ -943,19 +933,11 @@ void hyjalAI::WaypointReached(uint32 waypointId)
}
//do some talking
//all alive guards walk near here
CellCoord pair(Acore::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(pair);
cell.SetNoCreate();
// First get all creatures.
std::list<Creature*> creatures;
Acore::AllFriendlyCreaturesInGrid creature_check(me);
Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
TypeContainerVisitor
<Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid>,
GridTypeMapContainer> creature_visitor(creature_searcher);
cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
Cell::VisitGridObjects(me, creature_searcher, me->GetGridActivationRange());
if (!creatures.empty())
{
@@ -984,18 +966,10 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
{
if (TeleportTimer <= diff)
{
CellCoord pair(Acore::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
Cell cell(pair);
cell.SetNoCreate();
std::list<Creature*> creatures;
Acore::AllFriendlyCreaturesInGrid creature_check(me);
Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
TypeContainerVisitor
<Acore::CreatureListSearcher<Acore::AllFriendlyCreaturesInGrid>,
GridTypeMapContainer> creature_visitor(creature_searcher);
cell.Visit(pair, creature_visitor, *(me->GetMap()), *me, me->GetGridActivationRange());
Cell::VisitGridObjects(me, creature_searcher, me->GetGridActivationRange());
if (!creatures.empty())
{

View File

@@ -182,7 +182,7 @@ public:
std::list<WorldObject*> ClusterList;
Acore::AllWorldObjectsInRange objects(me, 50.0f);
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(me, ClusterList, objects);
me->VisitNearbyObject(50.0f, searcher);
Cell::VisitAllObjects(me, searcher, 50.0f);
for (std::list<WorldObject*>::const_iterator itr = ClusterList.begin(); itr != ClusterList.end(); ++itr)
{
if (Player* player = (*itr)->ToPlayer())

View File

@@ -141,7 +141,7 @@ public:
std::list<WorldObject*> cagesList;
Acore::AllWorldObjectsInRange objects(GetCaster(), 15.0f);
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(GetCaster(), cagesList, objects);
GetCaster()->VisitNearbyObject(15.0f, searcher);
Cell::VisitAllObjects(GetCaster(), searcher, 15.0f);
for (std::list<WorldObject*>::const_iterator itr = cagesList.begin(); itr != cagesList.end(); ++itr)
{
if (GameObject* go = (*itr)->ToGameObject())

View File

@@ -313,7 +313,7 @@ public:
std::list<Player*> playerOnQuestList;
Acore::AnyPlayerInObjectRangeCheck checker(me, 5.0f);
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, playerOnQuestList, checker);
me->VisitNearbyWorldObject(5.0f, searcher);
Cell::VisitWorldObjects(me, searcher, 5.0f);
for (std::list<Player*>::const_iterator itr = playerOnQuestList.begin(); itr != playerOnQuestList.end(); ++itr)
{
// Check if found player target has active quest

View File

@@ -687,7 +687,7 @@ public:
// Reset The Frozen Throne gameobjects
FrozenThroneResetWorker reset;
Acore::GameObjectWorker<FrozenThroneResetWorker> worker(me, reset);
me->VisitNearbyGridObject(333.0f, worker);
Cell::VisitGridObjects(me, worker, 333.0f);
me->AddAura(SPELL_EMOTE_SIT_NO_SHEATH, me);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC);

View File

@@ -206,7 +206,7 @@ public:
bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override
{
Acore::CreatureWorker<ValithriaDespawner> worker(_creature, *this);
_creature->VisitNearbyGridObject(333.0f, worker);
Cell::VisitGridObjects(_creature, worker, 333.0f);
_creature->AI()->Reset();
_creature->setActive(false);
return true;
@@ -526,7 +526,7 @@ public:
std::list<Creature*> archmages;
RisenArchmageCheck check;
Acore::CreatureListSearcher<RisenArchmageCheck> searcher(me, archmages, check);
me->VisitNearbyGridObject(100.0f, searcher);
Cell::VisitGridObjects(me, searcher, 100.0f);
for (std::list<Creature*>::iterator itr = archmages.begin(); itr != archmages.end(); ++itr)
(*itr)->AI()->DoAction(ACTION_ENTER_COMBAT);
}

View File

@@ -841,7 +841,7 @@ public:
std::list<Creature*> temp;
FrostwingVrykulSearcher check(me, 150.0f);
Acore::CreatureListSearcher<FrostwingVrykulSearcher> searcher(me, temp, check);
me->VisitNearbyGridObject(150.0f, searcher);
Cell::VisitGridObjects(me, searcher, 150.0f);
_aliveTrash.clear();
for (std::list<Creature*>::iterator itr = temp.begin(); itr != temp.end(); ++itr)
@@ -886,14 +886,14 @@ public:
Player* player = nullptr;
Acore::AnyPlayerInObjectRangeCheck check(me, 140.0f);
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, player, check);
me->VisitNearbyWorldObject(140.0f, searcher);
Cell::VisitWorldObjects(me, searcher, 140.0f);
// wipe
if (!player || me->GetExactDist(4357.0f, 2606.0f, 350.0f) > 125.0f)
{
//Talk(SAY_CROK_DEATH);
FrostwingGauntletRespawner respawner;
Acore::CreatureWorker<FrostwingGauntletRespawner> worker(me, respawner);
me->VisitNearbyGridObject(333.0f, worker);
Cell::VisitGridObjects(me, worker, 333.0f);
return;
}
}
@@ -1363,7 +1363,7 @@ public:
Creature* target = nullptr;
Acore::MostHPMissingInRange u_check(me, 60.0f, 0);
Acore::CreatureLastSearcher<Acore::MostHPMissingInRange> searcher(me, target, u_check);
me->VisitNearbyGridObject(60.0f, searcher);
Cell::VisitGridObjects(me, searcher, 60.0f);
return target;
}
};
@@ -2333,7 +2333,7 @@ public:
{
FrostwingGauntletRespawner respawner;
Acore::CreatureWorker<FrostwingGauntletRespawner> worker(crok, respawner);
crok->VisitNearbyGridObject(333.0f, worker);
Cell::VisitGridObjects(crok, worker, 333.0f);
return true;
}
else

View File

@@ -1198,7 +1198,7 @@ public:
Unit* target = nullptr;
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 0.5f);
Acore::UnitLastSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, target, u_check);
me->VisitNearbyObject(1.5f, searcher);
Cell::VisitAllObjects(me, searcher, 1.5f);
if (target)
{
me->CastSpell(me, SPELL_FROGGER_EXPLODE, true);

View File

@@ -1711,7 +1711,7 @@ public:
std::list<WorldObject*> targetList;
Acore::WorldObjectSpellAreaTargetCheck check(99, GetExplTargetDest(), GetCaster(), GetCaster(), GetSpellInfo(), TARGET_CHECK_DEFAULT, nullptr);
Acore::WorldObjectListSearcher<Acore::WorldObjectSpellAreaTargetCheck> searcher(GetCaster(), targetList, check);
GetCaster()->GetMap()->VisitAll(GetCaster()->m_positionX, GetCaster()->m_positionY, 99, searcher);
Cell::VisitAllObjects(GetCaster(), searcher, 99.0f);
float minDist = 99 * 99;
Unit* target = nullptr;
for (std::list<WorldObject*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)

View File

@@ -774,7 +774,7 @@ public:
go->Delete();
WretchedGhoulCleaner cleaner;
Acore::CreatureWorker<WretchedGhoulCleaner> worker(me, cleaner);
me->VisitNearbyGridObject(150.0f, worker);
Cell::VisitGridObjects(me, worker, 150.0f);
}
void Reset() override
@@ -988,7 +988,7 @@ public:
{
WretchedGhoulCleaner cleaner;
Acore::CreatureWorker<WretchedGhoulCleaner> worker(me, cleaner);
me->VisitNearbyGridObject(150.0f, worker);
Cell::VisitGridObjects(me, worker, 150.0f);
if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE, 150.0f, true))
if (Creature* v = me->FindNearestCreature(NPC_SAC_VEGARD_1, 50.0f, true))

View File

@@ -699,7 +699,7 @@ public:
std::list<WorldObject*> ClusterList;
Acore::AllWorldObjectsInRange objects(me, searchDistance);
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(me, ClusterList, objects);
me->VisitNearbyObject(searchDistance, searcher);
Cell::VisitAllObjects(me, searcher, searchDistance);
for (std::list<WorldObject*>::const_iterator i = ClusterList.begin(); i != ClusterList.end(); ++i)
{

View File

@@ -157,7 +157,7 @@ public:
std::list<Unit*> targets;
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 50);
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
me->VisitNearbyObject(50, searcher);
Cell::VisitAllObjects(me, searcher, 50.0f);
for (std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
if ((*iter)->GetAura(SPELL_DK_SUMMON_GARGOYLE_1, me->GetOwnerGUID()))
{

View File

@@ -1721,9 +1721,15 @@ public:
// search for nearby enemy corpse in range
Acore::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_CORPSE);
Acore::WorldObjectSearcher<Acore::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
caster->GetMap()->VisitFirstFound(caster->m_positionX, caster->m_positionY, max_range, searcher);
Cell::VisitWorldObjects(caster, searcher, max_range);
if (!result)
{
Cell::VisitGridObjects(caster, searcher, max_range);
}
if (!result)
{
return SPELL_FAILED_NO_EDIBLE_CORPSES;
}
return SPELL_CAST_OK;
}

View File

@@ -979,9 +979,15 @@ public:
// search for nearby enemy corpse in range
Acore::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
Acore::WorldObjectSearcher<Acore::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
caster->GetMap()->VisitFirstFound(caster->m_positionX, caster->m_positionY, max_range, searcher);
Cell::VisitWorldObjects(caster, searcher, max_range);
if (!result)
{
Cell::VisitGridObjects(caster, searcher, max_range);
}
if (!result)
{
return SPELL_FAILED_NO_EDIBLE_CORPSES;
}
return SPELL_CAST_OK;
}

View File

@@ -2428,7 +2428,7 @@ public:
std::list<Player*> playerList;
Acore::AnyPlayerInObjectRangeCheck checker(caster, 65.0f);
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker);
caster->VisitNearbyWorldObject(65.0f, searcher);
Cell::VisitWorldObjects(caster, searcher, 65.0f);
for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
// Check if found player target is on fly mount or using flying form
if ((*itr)->HasAuraType(SPELL_AURA_FLY) || (*itr)->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))

View File

@@ -351,7 +351,7 @@ public:
std::list<Player*> players;
Acore::AnyPlayerExactPositionInGameObjectRangeCheck checker(go, 0.3f);
Acore::PlayerListSearcher<Acore::AnyPlayerExactPositionInGameObjectRangeCheck> searcher(go, players, checker);
go->VisitNearbyWorldObject(0.3f, searcher);
Cell::VisitWorldObjects(go, searcher, 0.3f);
if (players.size() > 0)
{
@@ -398,7 +398,7 @@ public:
std::list<Player*> players;
Acore::AnyPlayerExactPositionInGameObjectRangeCheck checker(go, 0.3f);
Acore::PlayerListSearcher<Acore::AnyPlayerExactPositionInGameObjectRangeCheck> searcher(go, players, checker);
go->VisitNearbyWorldObject(0.3f, searcher);
Cell::VisitWorldObjects(go, searcher, 0.3f);
if (players.size() > 0)
{