mirror of
https://github.com/araxiaonline/TrinityCore.git
synced 2026-06-19 22:49:39 -04:00
Core/Grids: Ported cmangos/mangos-wotlk@ea99457e50
(cherry picked from commit 9299e9bde0)
This commit is contained in:
@@ -74,7 +74,7 @@ void TotemAI::UpdateAI(uint32 /*diff*/)
|
||||
victim = NULL;
|
||||
Trinity::NearestAttackableUnitInObjectRangeCheck u_check(me, me, max_range);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestAttackableUnitInObjectRangeCheck> checker(me, victim, u_check);
|
||||
me->VisitNearbyObject(max_range, checker);
|
||||
Cell::VisitAllObjects(me, checker, max_range);
|
||||
}
|
||||
|
||||
// If have target
|
||||
|
||||
@@ -330,7 +330,7 @@ Unit* ScriptedAI::DoSelectLowestHpFriendly(float range, uint32 minHPDiff)
|
||||
Unit* unit = nullptr;
|
||||
Trinity::MostHPMissingInRange u_check(me, range, minHPDiff);
|
||||
Trinity::UnitLastSearcher<Trinity::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
|
||||
return unit;
|
||||
}
|
||||
@@ -340,7 +340,7 @@ Unit* ScriptedAI::DoSelectBelowHpPctFriendlyWithEntry(uint32 entry, float range,
|
||||
Unit* unit = nullptr;
|
||||
Trinity::FriendlyBelowHpPctEntryInRange u_check(me, entry, range, minHPDiff, excludeSelf);
|
||||
Trinity::UnitLastSearcher<Trinity::FriendlyBelowHpPctEntryInRange> searcher(me, unit, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
|
||||
return unit;
|
||||
}
|
||||
@@ -350,7 +350,7 @@ std::list<Creature*> ScriptedAI::DoFindFriendlyCC(float range)
|
||||
std::list<Creature*> list;
|
||||
Trinity::FriendlyCCedInRange u_check(me, range);
|
||||
Trinity::CreatureListSearcher<Trinity::FriendlyCCedInRange> searcher(me, list, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -360,7 +360,7 @@ std::list<Creature*> ScriptedAI::DoFindFriendlyMissingBuff(float range, uint32 u
|
||||
std::list<Creature*> list;
|
||||
Trinity::FriendlyMissingBuffInRange u_check(me, range, uiSpellid);
|
||||
Trinity::CreatureListSearcher<Trinity::FriendlyMissingBuffInRange> searcher(me, list, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
|
||||
return list;
|
||||
}
|
||||
@@ -369,15 +369,9 @@ Player* ScriptedAI::GetPlayerAtMinimumRange(float minimumRange)
|
||||
{
|
||||
Player* player = nullptr;
|
||||
|
||||
CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::PlayerAtMinimumRangeAway check(me, minimumRange);
|
||||
Trinity::PlayerSearcher<Trinity::PlayerAtMinimumRangeAway> searcher(me, player, check);
|
||||
TypeContainerVisitor<Trinity::PlayerSearcher<Trinity::PlayerAtMinimumRangeAway>, GridTypeMapContainer> visitor(searcher);
|
||||
|
||||
cell.Visit(pair, visitor, *me->GetMap(), *me, minimumRange);
|
||||
Cell::VisitWorldObjects(me, searcher, minimumRange);
|
||||
|
||||
return player;
|
||||
}
|
||||
|
||||
@@ -2493,7 +2493,7 @@ void SmartScript::GetWorldObjectsInDist(ObjectVector& targets, float dist) const
|
||||
|
||||
Trinity::AllWorldObjectsInRange u_check(obj, dist);
|
||||
Trinity::WorldObjectListSearcher<Trinity::AllWorldObjectsInRange> searcher(obj, targets, u_check);
|
||||
obj->VisitNearbyObject(dist, searcher);
|
||||
Cell::VisitAllObjects(obj, searcher, dist);
|
||||
}
|
||||
|
||||
void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, uint32 var1, bool bvar, const SpellInfo* spell, GameObject* gob)
|
||||
@@ -3356,10 +3356,9 @@ Unit* SmartScript::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff) const
|
||||
return nullptr;
|
||||
|
||||
Unit* unit = nullptr;
|
||||
|
||||
Trinity::MostHPMissingInRange u_check(me, range, MinHPDiff);
|
||||
Trinity::UnitLastSearcher<Trinity::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
return unit;
|
||||
}
|
||||
|
||||
@@ -3370,7 +3369,7 @@ void SmartScript::DoFindFriendlyCC(std::vector<Creature*>& creatures, float rang
|
||||
|
||||
Trinity::FriendlyCCedInRange u_check(me, range);
|
||||
Trinity::CreatureListSearcher<Trinity::FriendlyCCedInRange> searcher(me, creatures, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
}
|
||||
|
||||
void SmartScript::DoFindFriendlyMissingBuff(std::vector<Creature*>& creatures, float range, uint32 spellid) const
|
||||
@@ -3380,7 +3379,7 @@ void SmartScript::DoFindFriendlyMissingBuff(std::vector<Creature*>& creatures, f
|
||||
|
||||
Trinity::FriendlyMissingBuffInRange u_check(me, range, spellid);
|
||||
Trinity::CreatureListSearcher<Trinity::FriendlyMissingBuffInRange> searcher(me, creatures, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
}
|
||||
|
||||
Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) const
|
||||
@@ -3391,7 +3390,7 @@ Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) co
|
||||
Unit* unit = nullptr;
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(me, me, range, playerOnly);
|
||||
Trinity::UnitLastSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(me, unit, u_check);
|
||||
me->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
return unit;
|
||||
}
|
||||
|
||||
|
||||
@@ -675,8 +675,8 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
||||
{
|
||||
Trinity::BroadcastTextBuilder _builder(GetPlayer(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, GetPlayer(), achievement->ID);
|
||||
Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> _localizer(_builder);
|
||||
Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> > _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer);
|
||||
GetPlayer()->VisitNearbyWorldObject(sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _worker);
|
||||
Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder>> _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer);
|
||||
Cell::VisitWorldObjects(GetPlayer(), _worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8+4+8);
|
||||
|
||||
@@ -980,7 +980,7 @@ bool BfCapturePoint::Update(uint32 diff)
|
||||
std::list<Player*> players;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(capturePoint, radius);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(capturePoint, players, checker);
|
||||
capturePoint->VisitNearbyWorldObject(radius, searcher);
|
||||
Cell::VisitWorldObjects(capturePoint, searcher, radius);
|
||||
|
||||
for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
if ((*itr)->IsOutdoorPvPActive())
|
||||
|
||||
@@ -878,7 +878,7 @@ GameObject* ChatHandler::GetNearbyGameObject()
|
||||
GameObject* obj = nullptr;
|
||||
Trinity::NearestGameObjectCheck check(*pl);
|
||||
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectCheck> searcher(pl, obj, check);
|
||||
pl->VisitNearbyGridObject(SIZE_OF_GRIDS, searcher);
|
||||
Cell::VisitGridObjects(pl, searcher, SIZE_OF_GRIDS);
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
||||
@@ -880,16 +880,9 @@ void Creature::DoFleeToGetAssistance()
|
||||
if (radius >0)
|
||||
{
|
||||
Creature* creature = nullptr;
|
||||
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
Trinity::NearestAssistCreatureInCreatureRangeCheck u_check(this, GetVictim(), radius);
|
||||
Trinity::CreatureLastSearcher<Trinity::NearestAssistCreatureInCreatureRangeCheck> searcher(this, creature, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureLastSearcher<Trinity::NearestAssistCreatureInCreatureRangeCheck>, GridTypeMapContainer > grid_creature_searcher(searcher);
|
||||
|
||||
cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius);
|
||||
Cell::VisitGridObjects(this, searcher, radius);
|
||||
|
||||
SetNoSearchAssistance(true);
|
||||
UpdateSpeed(MOVE_RUN);
|
||||
@@ -2091,55 +2084,29 @@ SpellInfo const* Creature::reachWithSpellCure(Unit* victim)
|
||||
// select nearest hostile unit within the given distance (regardless of threat list).
|
||||
Unit* Creature::SelectNearestTarget(float dist, bool playerOnly /* = false */) const
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
if (dist == 0.0f)
|
||||
dist = MAX_VISIBILITY_DISTANCE;
|
||||
|
||||
Unit* target = nullptr;
|
||||
|
||||
{
|
||||
if (dist == 0.0f)
|
||||
dist = MAX_VISIBILITY_DISTANCE;
|
||||
|
||||
Trinity::NearestHostileUnitCheck u_check(this, dist, playerOnly);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestHostileUnitCheck> searcher(this, target, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::UnitLastSearcher<Trinity::NearestHostileUnitCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
|
||||
TypeContainerVisitor<Trinity::UnitLastSearcher<Trinity::NearestHostileUnitCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
|
||||
|
||||
cell.Visit(p, world_unit_searcher, *GetMap(), *this, dist);
|
||||
cell.Visit(p, grid_unit_searcher, *GetMap(), *this, dist);
|
||||
}
|
||||
|
||||
Trinity::NearestHostileUnitCheck u_check(this, dist, playerOnly);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestHostileUnitCheck> searcher(this, target, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, dist);
|
||||
return target;
|
||||
}
|
||||
|
||||
// select nearest hostile unit within the given attack distance (i.e. distance is ignored if > than ATTACK_DISTANCE), regardless of threat list.
|
||||
Unit* Creature::SelectNearestTargetInAttackDistance(float dist) const
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Unit* target = nullptr;
|
||||
|
||||
if (dist > MAX_VISIBILITY_DISTANCE)
|
||||
{
|
||||
TC_LOG_ERROR("entities.unit", "Creature (GUID: %u Entry: %u) SelectNearestTargetInAttackDistance called with dist > MAX_VISIBILITY_DISTANCE. Distance set to ATTACK_DISTANCE.", GetGUID().GetCounter(), GetEntry());
|
||||
dist = ATTACK_DISTANCE;
|
||||
}
|
||||
|
||||
{
|
||||
Trinity::NearestHostileUnitInAttackDistanceCheck u_check(this, dist);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestHostileUnitInAttackDistanceCheck> searcher(this, target, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::UnitLastSearcher<Trinity::NearestHostileUnitInAttackDistanceCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
|
||||
TypeContainerVisitor<Trinity::UnitLastSearcher<Trinity::NearestHostileUnitInAttackDistanceCheck>, GridTypeMapContainer > grid_unit_searcher(searcher);
|
||||
|
||||
cell.Visit(p, world_unit_searcher, *GetMap(), *this, ATTACK_DISTANCE > dist ? ATTACK_DISTANCE : dist);
|
||||
cell.Visit(p, grid_unit_searcher, *GetMap(), *this, ATTACK_DISTANCE > dist ? ATTACK_DISTANCE : dist);
|
||||
}
|
||||
|
||||
Unit* target = nullptr;
|
||||
Trinity::NearestHostileUnitInAttackDistanceCheck u_check(this, dist);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestHostileUnitInAttackDistanceCheck> searcher(this, target, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, std::max(dist, ATTACK_DISTANCE));
|
||||
return target;
|
||||
}
|
||||
|
||||
@@ -2166,19 +2133,9 @@ void Creature::CallAssistance()
|
||||
if (radius > 0)
|
||||
{
|
||||
std::list<Creature*> assistList;
|
||||
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AnyAssistCreatureInRangeCheck u_check(this, GetVictim(), radius);
|
||||
Trinity::CreatureListSearcher<Trinity::AnyAssistCreatureInRangeCheck> searcher(this, assistList, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AnyAssistCreatureInRangeCheck>, GridTypeMapContainer > grid_creature_searcher(searcher);
|
||||
|
||||
cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius);
|
||||
}
|
||||
Trinity::AnyAssistCreatureInRangeCheck u_check(this, GetVictim(), radius);
|
||||
Trinity::CreatureListSearcher<Trinity::AnyAssistCreatureInRangeCheck> searcher(this, assistList, u_check);
|
||||
Cell::VisitGridObjects(this, searcher, radius);
|
||||
|
||||
if (!assistList.empty())
|
||||
{
|
||||
@@ -2200,16 +2157,9 @@ void Creature::CallForHelp(float radius)
|
||||
if (radius <= 0.0f || !GetVictim() || IsPet() || IsCharmed())
|
||||
return;
|
||||
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::CallOfHelpCreatureInRangeDo u_do(this, GetVictim(), radius);
|
||||
Trinity::CreatureWorker<Trinity::CallOfHelpCreatureInRangeDo> worker(this, u_do);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureWorker<Trinity::CallOfHelpCreatureInRangeDo>, GridTypeMapContainer > grid_creature_searcher(worker);
|
||||
|
||||
cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius);
|
||||
Cell::VisitGridObjects(this, worker, radius);
|
||||
}
|
||||
|
||||
bool Creature::CanAssistTo(const Unit* u, const Unit* enemy, bool checkfaction /*= true*/) const
|
||||
@@ -2893,12 +2843,10 @@ Unit* Creature::SelectNearestHostileUnitInAggroRange(bool useLOS) const
|
||||
|
||||
Unit* target = NULL;
|
||||
|
||||
{
|
||||
Trinity::NearestHostileUnitInAggroRangeCheck u_check(this, useLOS);
|
||||
Trinity::UnitSearcher<Trinity::NearestHostileUnitInAggroRangeCheck> searcher(this, target, u_check);
|
||||
Trinity::NearestHostileUnitInAggroRangeCheck u_check(this, useLOS);
|
||||
Trinity::UnitSearcher<Trinity::NearestHostileUnitInAggroRangeCheck> searcher(this, target, u_check);
|
||||
|
||||
VisitNearbyGridObject(MAX_AGGRO_RADIUS, searcher);
|
||||
}
|
||||
Cell::VisitGridObjects(this, searcher, MAX_AGGRO_RADIUS);
|
||||
|
||||
return target;
|
||||
}
|
||||
|
||||
@@ -582,7 +582,7 @@ void GameObject::Update(uint32 diff)
|
||||
// Hunter trap: Search units which are unfriendly to the trap's owner
|
||||
Trinity::NearestAttackableNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
|
||||
Trinity::UnitLastSearcher<Trinity::NearestAttackableNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
|
||||
VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(this, searcher, radius);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -590,7 +590,7 @@ void GameObject::Update(uint32 diff)
|
||||
Player* player = nullptr;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(this, radius);
|
||||
Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
|
||||
VisitNearbyWorldObject(radius, searcher);
|
||||
Cell::VisitWorldObjects(this, searcher, radius);
|
||||
target = player;
|
||||
}
|
||||
|
||||
@@ -1166,15 +1166,9 @@ void GameObject::TriggeringLinkedGameObject(uint32 trapEntry, Unit* target)
|
||||
GameObject* GameObject::LookupFishingHoleAround(float range)
|
||||
{
|
||||
GameObject* ok = nullptr;
|
||||
|
||||
CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(p);
|
||||
Trinity::NearestGameObjectFishingHole u_check(*this, range);
|
||||
Trinity::GameObjectSearcher<Trinity::NearestGameObjectFishingHole> checker(this, ok, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::GameObjectSearcher<Trinity::NearestGameObjectFishingHole>, GridTypeMapContainer > grid_object_checker(checker);
|
||||
cell.Visit(p, grid_object_checker, *GetMap(), *this, range);
|
||||
|
||||
Cell::VisitGridObjects(this, checker, range);
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
||||
@@ -1769,13 +1769,13 @@ void WorldObject::SendMessageToSet(WorldPacket const* data, bool self)
|
||||
void WorldObject::SendMessageToSetInRange(WorldPacket const* data, float dist, bool /*self*/)
|
||||
{
|
||||
Trinity::MessageDistDeliverer notifier(this, data, dist);
|
||||
VisitNearbyWorldObject(dist, notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, dist);
|
||||
}
|
||||
|
||||
void WorldObject::SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr)
|
||||
{
|
||||
Trinity::MessageDistDeliverer notifier(this, data, GetVisibilityRange(), false, skipped_rcvr);
|
||||
VisitNearbyWorldObject(GetVisibilityRange(), notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
}
|
||||
|
||||
void WorldObject::SendObjectDeSpawnAnim(ObjectGuid guid)
|
||||
@@ -1925,7 +1925,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
|
||||
|
||||
// call MoveInLineOfSight for nearby creatures
|
||||
Trinity::AIRelocationNotifier notifier(*summon);
|
||||
summon->VisitNearbyObject(GetVisibilityRange(), notifier);
|
||||
Cell::VisitAllObjects(summon, notifier, GetVisibilityRange());
|
||||
|
||||
return summon;
|
||||
}
|
||||
@@ -2086,7 +2086,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive
|
||||
Creature* creature = nullptr;
|
||||
Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range);
|
||||
Trinity::CreatureLastSearcher<Trinity::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(this, creature, checker);
|
||||
VisitNearbyObject(range, searcher);
|
||||
Cell::VisitAllObjects(this, searcher, range);
|
||||
return creature;
|
||||
}
|
||||
|
||||
@@ -2095,7 +2095,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range) const
|
||||
GameObject* go = nullptr;
|
||||
Trinity::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range);
|
||||
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectEntryInObjectRangeCheck> searcher(this, go, checker);
|
||||
VisitNearbyGridObject(range, searcher);
|
||||
Cell::VisitGridObjects(this, searcher, range);
|
||||
return go;
|
||||
}
|
||||
|
||||
@@ -2104,7 +2104,7 @@ GameObject* WorldObject::FindNearestGameObjectOfType(GameobjectTypes type, float
|
||||
GameObject* go = nullptr;
|
||||
Trinity::NearestGameObjectTypeInObjectRangeCheck checker(*this, type, range);
|
||||
Trinity::GameObjectLastSearcher<Trinity::NearestGameObjectTypeInObjectRangeCheck> searcher(this, go, checker);
|
||||
VisitNearbyGridObject(range, searcher);
|
||||
Cell::VisitGridObjects(this, searcher, range);
|
||||
return go;
|
||||
}
|
||||
|
||||
@@ -2114,7 +2114,7 @@ Player* WorldObject::SelectNearestPlayer(float distance) const
|
||||
|
||||
Trinity::NearestPlayerInObjectRangeCheck checker(this, distance);
|
||||
Trinity::PlayerLastSearcher<Trinity::NearestPlayerInObjectRangeCheck> searcher(this, target, checker);
|
||||
VisitNearbyObject(distance, searcher);
|
||||
Cell::VisitWorldObjects(this, searcher, distance);
|
||||
|
||||
return target;
|
||||
}
|
||||
@@ -2123,28 +2123,17 @@ template <typename Container>
|
||||
void WorldObject::GetGameObjectListWithEntryInGrid(Container& gameObjectContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllGameObjectsWithEntryInRange check(this, entry, maxSearchRange);
|
||||
Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange> searcher(this, gameObjectContainer, check);
|
||||
TypeContainerVisitor<Trinity::GameObjectListSearcher<Trinity::AllGameObjectsWithEntryInRange>, GridTypeMapContainer> visitor(searcher);
|
||||
|
||||
cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
void WorldObject::GetCreatureListWithEntryInGrid(Container& creatureContainer, uint32 entry, float maxSearchRange /*= 250.0f*/) const
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(this, entry, maxSearchRange);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(this, creatureContainer, check);
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> visitor(searcher);
|
||||
|
||||
cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
template <typename Container>
|
||||
@@ -2152,7 +2141,7 @@ void WorldObject::GetPlayerListInGrid(Container& playerContainer, float maxSearc
|
||||
{
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, playerContainer, checker);
|
||||
VisitNearbyWorldObject(maxSearchRange, searcher);
|
||||
Cell::VisitWorldObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
void WorldObject::GetNearPoint2D(float &x, float &y, float distance2d, float absAngle) const
|
||||
@@ -2419,7 +2408,7 @@ void WorldObject::DestroyForNearbyPlayers()
|
||||
std::list<Player*> targets;
|
||||
Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
|
||||
VisitNearbyWorldObject(GetVisibilityRange(), searcher);
|
||||
Cell::VisitWorldObjects(this, searcher, GetVisibilityRange());
|
||||
for (std::list<Player*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
Player* player = (*iter);
|
||||
@@ -2446,7 +2435,7 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/)
|
||||
{
|
||||
//updates object's visibility for nearby players
|
||||
Trinity::VisibleChangesNotifier notifier(*this);
|
||||
VisitNearbyWorldObject(GetVisibilityRange(), notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
}
|
||||
|
||||
struct WorldObjectChangeAccumulator
|
||||
@@ -2521,14 +2510,9 @@ struct WorldObjectChangeAccumulator
|
||||
|
||||
void WorldObject::BuildUpdate(UpdateDataMapType& data_map)
|
||||
{
|
||||
CellCoord p = Trinity::ComputeCellCoord(GetPositionX(), GetPositionY());
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
WorldObjectChangeAccumulator notifier(*this, data_map);
|
||||
TypeContainerVisitor<WorldObjectChangeAccumulator, WorldTypeMapContainer > player_notifier(notifier);
|
||||
Map& map = *GetMap();
|
||||
//we must build packets for all visible players
|
||||
cell.Visit(p, player_notifier, map, *this, GetVisibilityRange());
|
||||
Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
|
||||
ClearUpdateMask(false);
|
||||
}
|
||||
|
||||
@@ -596,10 +596,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation
|
||||
bool IsPermanentWorldObject() const { return m_isWorldObject; }
|
||||
bool IsWorldObject() const;
|
||||
|
||||
template<class NOTIFIER> void VisitNearbyObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); }
|
||||
template<class NOTIFIER> void VisitNearbyGridObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); }
|
||||
template<class NOTIFIER> void VisitNearbyWorldObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); }
|
||||
|
||||
uint32 LastUsedScriptID;
|
||||
|
||||
// Transports
|
||||
|
||||
@@ -6453,7 +6453,7 @@ void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool s
|
||||
GetSession()->SendPacket(data);
|
||||
|
||||
Trinity::MessageDistDeliverer notifier(this, data, dist);
|
||||
VisitNearbyWorldObject(dist, notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, dist);
|
||||
}
|
||||
|
||||
void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool self, bool own_team_only)
|
||||
@@ -6462,7 +6462,7 @@ void Player::SendMessageToSetInRange(WorldPacket const* data, float dist, bool s
|
||||
GetSession()->SendPacket(data);
|
||||
|
||||
Trinity::MessageDistDeliverer notifier(this, data, dist, own_team_only);
|
||||
VisitNearbyWorldObject(dist, notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, dist);
|
||||
}
|
||||
|
||||
void Player::SendMessageToSet(WorldPacket const* data, Player const* skipped_rcvr)
|
||||
@@ -6473,7 +6473,7 @@ void Player::SendMessageToSet(WorldPacket const* data, Player const* skipped_rcv
|
||||
// we use World::GetMaxVisibleDistance() because i cannot see why not use a distance
|
||||
// update: replaced by GetMap()->GetVisibilityDistance()
|
||||
Trinity::MessageDistDeliverer notifier(this, data, GetVisibilityRange(), false, skipped_rcvr);
|
||||
VisitNearbyWorldObject(GetVisibilityRange(), notifier);
|
||||
Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
}
|
||||
|
||||
void Player::SendDirectMessage(WorldPacket const* data) const
|
||||
@@ -22315,7 +22315,7 @@ void Player::UpdateVisibilityForPlayer()
|
||||
{
|
||||
// updates visibility of all objects around point of view for current player
|
||||
Trinity::VisibleNotifier notifier(*this);
|
||||
m_seer->VisitNearbyObject(GetSightRange(), notifier);
|
||||
Cell::VisitAllObjects(m_seer, notifier, GetSightRange());
|
||||
notifier.SendToSelf(); // send gathered data
|
||||
}
|
||||
|
||||
|
||||
@@ -11540,7 +11540,7 @@ Unit* Unit::SelectNearbyTarget(Unit* exclude, float dist) const
|
||||
std::list<Unit*> targets;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist);
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(this, targets, u_check);
|
||||
VisitNearbyObject(dist, searcher);
|
||||
Cell::VisitAllObjects(this, searcher, dist);
|
||||
|
||||
// remove current target
|
||||
if (GetVictim())
|
||||
@@ -13120,7 +13120,7 @@ void Unit::UpdateObjectVisibility(bool forced)
|
||||
WorldObject::UpdateObjectVisibility(true);
|
||||
// call MoveInLineOfSight for nearby creatures
|
||||
Trinity::AIRelocationNotifier notifier(*this);
|
||||
VisitNearbyObject(GetVisibilityRange(), notifier);
|
||||
Cell::VisitAllObjects(this, notifier, GetVisibilityRange());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14559,7 +14559,7 @@ void Unit::Talk(std::string const& text, ChatMsg msgType, Language language, flo
|
||||
Trinity::CustomChatTextBuilder builder(this, msgType, text, language, target);
|
||||
Trinity::LocalizedPacketDo<Trinity::CustomChatTextBuilder> localizer(builder);
|
||||
Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::CustomChatTextBuilder> > worker(this, textRange, localizer);
|
||||
VisitNearbyWorldObject(textRange, worker);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(std::string const& text, Language language, WorldObject const* target /*= nullptr*/)
|
||||
@@ -14599,7 +14599,7 @@ void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject con
|
||||
Trinity::BroadcastTextBuilder builder(this, msgType, textId, target);
|
||||
Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> localizer(builder);
|
||||
Trinity::PlayerDistWorker<Trinity::LocalizedPacketDo<Trinity::BroadcastTextBuilder> > worker(this, textRange, localizer);
|
||||
VisitNearbyWorldObject(textRange, worker);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
|
||||
@@ -107,11 +107,19 @@ struct Cell
|
||||
uint32 All;
|
||||
} data;
|
||||
|
||||
template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map &, WorldObject const&, float) const;
|
||||
template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map &, float, float, float) const;
|
||||
template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map&, WorldObject const& obj, float radius) const;
|
||||
template<class T, class CONTAINER> void Visit(CellCoord const&, TypeContainerVisitor<T, CONTAINER>& visitor, Map&, float x, float y, float radius) const;
|
||||
|
||||
static CellArea CalculateCellArea(float x, float y, float radius);
|
||||
|
||||
template<class T> static void VisitGridObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true);
|
||||
template<class T> static void VisitWorldObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true);
|
||||
template<class T> static void VisitAllObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true);
|
||||
|
||||
template<class T> static void VisitGridObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true);
|
||||
template<class T> static void VisitWorldObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true);
|
||||
template<class T> static void VisitAllObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true);
|
||||
|
||||
private:
|
||||
template<class T, class CONTAINER> void VisitCircle(TypeContainerVisitor<T, CONTAINER> &, Map &, CellCoord const&, CellCoord const&) const;
|
||||
};
|
||||
|
||||
@@ -61,7 +61,15 @@ inline CellArea Cell::CalculateCellArea(float x, float y, float radius)
|
||||
}
|
||||
|
||||
template<class T, class CONTAINER>
|
||||
inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, float radius, float x_off, float y_off) const
|
||||
inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, WorldObject const& obj, float radius) const
|
||||
{
|
||||
//we should increase search radius by object's radius, otherwise
|
||||
//we could have problems with huge creatures, which won't attack nearest players etc
|
||||
Visit(standing_cell, visitor, map, obj.GetPositionX(), obj.GetPositionY(), radius + obj.GetCombatReach());
|
||||
}
|
||||
|
||||
template<class T, class CONTAINER>
|
||||
inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, float x_off, float y_off, float radius) const
|
||||
{
|
||||
if (!standing_cell.IsCoordValid())
|
||||
return;
|
||||
@@ -118,14 +126,6 @@ inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T,
|
||||
}
|
||||
}
|
||||
|
||||
template<class T, class CONTAINER>
|
||||
inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, WorldObject const& obj, float radius) const
|
||||
{
|
||||
//we should increase search radius by object's radius, otherwise
|
||||
//we could have problems with huge creatures, which won't attack nearest players etc
|
||||
Visit(standing_cell, visitor, map, radius + obj.GetCombatReach(), obj.GetPositionX(), obj.GetPositionY());
|
||||
}
|
||||
|
||||
template<class T, class CONTAINER>
|
||||
inline void Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER>& visitor, Map& map, CellCoord const& begin_cell, CellCoord const& end_cell) const
|
||||
{
|
||||
@@ -177,5 +177,82 @@ inline void Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER>& visitor, Map&
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitGridObjects(WorldObject const* center_obj, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, GridTypeMapContainer> gnotifier(visitor);
|
||||
cell.Visit(p, gnotifier, *center_obj->GetMap(), *center_obj, radius);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitWorldObjects(WorldObject const* center_obj, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, WorldTypeMapContainer> wnotifier(visitor);
|
||||
cell.Visit(p, wnotifier, *center_obj->GetMap(), *center_obj, radius);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitAllObjects(WorldObject const* center_obj, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, WorldTypeMapContainer> wnotifier(visitor);
|
||||
cell.Visit(p, wnotifier, *center_obj->GetMap(), *center_obj, radius);
|
||||
TypeContainerVisitor<T, GridTypeMapContainer> gnotifier(visitor);
|
||||
cell.Visit(p, gnotifier, *center_obj->GetMap(), *center_obj, radius);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitGridObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, GridTypeMapContainer> gnotifier(visitor);
|
||||
cell.Visit(p, gnotifier, *map, x, y, radius);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitWorldObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, WorldTypeMapContainer> wnotifier(visitor);
|
||||
cell.Visit(p, wnotifier, *map, x, y, radius);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitAllObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load /*= true*/)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
if (dont_load)
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<T, WorldTypeMapContainer> wnotifier(visitor);
|
||||
cell.Visit(p, wnotifier, *map, x, y, radius);
|
||||
TypeContainerVisitor<T, GridTypeMapContainer> gnotifier(visitor);
|
||||
cell.Visit(p, gnotifier, *map, x, y, radius);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
@@ -234,17 +234,8 @@ void DelayedUnitRelocation::Visit(PlayerMapType &m)
|
||||
if (player != viewPoint && !viewPoint->IsPositionValid())
|
||||
continue;
|
||||
|
||||
CellCoord pair2(Trinity::ComputeCellCoord(viewPoint->GetPositionX(), viewPoint->GetPositionY()));
|
||||
Cell cell2(pair2);
|
||||
//cell.SetNoCreate(); need load cells around viewPoint or player, that's why its commented
|
||||
|
||||
PlayerRelocationNotifier relocate(*player);
|
||||
TypeContainerVisitor<PlayerRelocationNotifier, WorldTypeMapContainer > c2world_relocation(relocate);
|
||||
TypeContainerVisitor<PlayerRelocationNotifier, GridTypeMapContainer > c2grid_relocation(relocate);
|
||||
|
||||
cell2.Visit(pair2, c2world_relocation, i_map, *viewPoint, i_radius);
|
||||
cell2.Visit(pair2, c2grid_relocation, i_map, *viewPoint, i_radius);
|
||||
|
||||
Cell::VisitAllObjects(viewPoint, relocate, i_radius, false);
|
||||
relocate.SendToSelf();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2777,28 +2777,6 @@ char const* Map::GetMapName() const
|
||||
return i_mapEntry ? i_mapEntry->name[sWorld->GetDefaultDbcLocale()] : "UNNAMEDMAP\x0";
|
||||
}
|
||||
|
||||
void Map::UpdateObjectVisibility(WorldObject* obj, Cell cell, CellCoord cellpair)
|
||||
{
|
||||
cell.SetNoCreate();
|
||||
Trinity::VisibleChangesNotifier notifier(*obj);
|
||||
TypeContainerVisitor<Trinity::VisibleChangesNotifier, WorldTypeMapContainer > player_notifier(notifier);
|
||||
cell.Visit(cellpair, player_notifier, *this, *obj, obj->GetVisibilityRange());
|
||||
}
|
||||
|
||||
void Map::UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpair)
|
||||
{
|
||||
Trinity::VisibleNotifier notifier(*player);
|
||||
|
||||
cell.SetNoCreate();
|
||||
TypeContainerVisitor<Trinity::VisibleNotifier, WorldTypeMapContainer > world_notifier(notifier);
|
||||
TypeContainerVisitor<Trinity::VisibleNotifier, GridTypeMapContainer > grid_notifier(notifier);
|
||||
cell.Visit(cellpair, world_notifier, *this, *player->m_seer, player->GetSightRange());
|
||||
cell.Visit(cellpair, grid_notifier, *this, *player->m_seer, player->GetSightRange());
|
||||
|
||||
// send data
|
||||
notifier.SendToSelf();
|
||||
}
|
||||
|
||||
void Map::SendInitSelf(Player* player)
|
||||
{
|
||||
TC_LOG_DEBUG("maps", "Creating player data for himself %u", player->GetGUID().GetCounter());
|
||||
|
||||
@@ -440,9 +440,6 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
|
||||
void AddObjectToSwitchList(WorldObject* obj, bool on);
|
||||
virtual void DelayedUpdate(const uint32 diff);
|
||||
|
||||
void UpdateObjectVisibility(WorldObject* obj, Cell cell, CellCoord cellpair);
|
||||
void UpdateObjectsVisibilityFor(Player* player, Cell cell, CellCoord cellpair);
|
||||
|
||||
void resetMarkedCells() { marked_cells.reset(); }
|
||||
bool isCellMarked(uint32 pCellId) { return marked_cells.test(pCellId); }
|
||||
void markCell(uint32 pCellId) { marked_cells.set(pCellId); }
|
||||
@@ -472,10 +469,6 @@ class TC_GAME_API Map : public GridRefManager<NGridType>
|
||||
void RemoveFromActive(T* obj);
|
||||
|
||||
template<class T> void SwitchGridContainers(T* obj, bool on);
|
||||
template<class NOTIFIER> void VisitAll(const float &x, const float &y, float radius, NOTIFIER ¬ifier);
|
||||
template<class NOTIFIER> void VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER ¬ifier);
|
||||
template<class NOTIFIER> void VisitWorld(const float &x, const float &y, float radius, NOTIFIER ¬ifier);
|
||||
template<class NOTIFIER> void VisitGrid(const float &x, const float &y, float radius, NOTIFIER ¬ifier);
|
||||
CreatureGroupHolderType CreatureGroupHolder;
|
||||
|
||||
void UpdateIteratorBack(Player* player);
|
||||
@@ -858,56 +851,4 @@ inline void Map::Visit(Cell const& cell, TypeContainerVisitor<T, CONTAINER>& vis
|
||||
getNGrid(x, y)->VisitGrid(cell_x, cell_y, visitor);
|
||||
}
|
||||
}
|
||||
|
||||
template<class NOTIFIER>
|
||||
inline void Map::VisitAll(float const& x, float const& y, float radius, NOTIFIER& notifier)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
|
||||
cell.Visit(p, world_object_notifier, *this, radius, x, y);
|
||||
TypeContainerVisitor<NOTIFIER, GridTypeMapContainer > grid_object_notifier(notifier);
|
||||
cell.Visit(p, grid_object_notifier, *this, radius, x, y);
|
||||
}
|
||||
|
||||
// should be used with Searcher notifiers, tries to search world if nothing found in grid
|
||||
template<class NOTIFIER>
|
||||
inline void Map::VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
|
||||
cell.Visit(p, world_object_notifier, *this, radius, x, y);
|
||||
if (!notifier.i_object)
|
||||
{
|
||||
TypeContainerVisitor<NOTIFIER, GridTypeMapContainer > grid_object_notifier(notifier);
|
||||
cell.Visit(p, grid_object_notifier, *this, radius, x, y);
|
||||
}
|
||||
}
|
||||
|
||||
template<class NOTIFIER>
|
||||
inline void Map::VisitWorld(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<NOTIFIER, WorldTypeMapContainer> world_object_notifier(notifier);
|
||||
cell.Visit(p, world_object_notifier, *this, radius, x, y);
|
||||
}
|
||||
|
||||
template<class NOTIFIER>
|
||||
inline void Map::VisitGrid(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
TypeContainerVisitor<NOTIFIER, GridTypeMapContainer > grid_object_notifier(notifier);
|
||||
cell.Visit(p, grid_object_notifier, *this, radius, x, y);
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -329,7 +329,7 @@ bool OPvPCapturePoint::Update(uint32 diff)
|
||||
std::list<Player*> players;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(m_capturePoint, radius);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(m_capturePoint, players, checker);
|
||||
m_capturePoint->VisitNearbyWorldObject(radius, searcher);
|
||||
Cell::VisitWorldObjects(m_capturePoint, searcher, radius);
|
||||
|
||||
for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
{
|
||||
|
||||
@@ -2191,7 +2191,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
|
||||
UnitList targets;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(target, target, target->GetMap()->GetVisibilityRange());
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(target, targets, u_check);
|
||||
target->VisitNearbyObject(target->GetMap()->GetVisibilityRange(), searcher);
|
||||
Cell::VisitAllObjects(target, searcher, target->GetMap()->GetVisibilityRange());
|
||||
for (UnitList::iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
if (!(*iter)->HasUnitState(UNIT_STATE_CASTING))
|
||||
|
||||
@@ -2489,7 +2489,7 @@ void UnitAura::FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit* ca
|
||||
units.push_back(GetUnitOwner());
|
||||
Trinity::AnyGroupedUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius, m_spellInfo->Effects[effIndex].Effect == SPELL_EFFECT_APPLY_AREA_AURA_RAID, m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS), false, true);
|
||||
Trinity::UnitListSearcher<Trinity::AnyGroupedUnitInObjectRangeCheck> searcher(GetUnitOwner(), units, u_check);
|
||||
GetUnitOwner()->VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
|
||||
@@ -2497,14 +2497,14 @@ void UnitAura::FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit* ca
|
||||
units.push_back(GetUnitOwner());
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius, m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS), false, true);
|
||||
Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(GetUnitOwner(), units, u_check);
|
||||
GetUnitOwner()->VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY:
|
||||
{
|
||||
Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius, m_spellInfo, false, true); // No GetCharmer in searcher
|
||||
Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck> searcher(GetUnitOwner(), units, u_check);
|
||||
GetUnitOwner()->VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_PET:
|
||||
@@ -2566,13 +2566,13 @@ void DynObjAura::FillTargetMap(std::unordered_map<Unit*, uint8>& targets, Unit*
|
||||
{
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius, m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS), false, true);
|
||||
Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(GetDynobjOwner(), units, u_check);
|
||||
GetDynobjOwner()->VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
|
||||
}
|
||||
else
|
||||
{
|
||||
Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius, nullptr, false, true);
|
||||
Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck> searcher(GetDynobjOwner(), units, u_check);
|
||||
GetDynobjOwner()->VisitNearbyObject(radius, searcher);
|
||||
Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
|
||||
}
|
||||
|
||||
for (Unit* unit : units)
|
||||
|
||||
@@ -1751,18 +1751,13 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Map& map = *(referer->GetMap());
|
||||
Map* map = referer->GetMap();
|
||||
|
||||
if (searchInWorld)
|
||||
{
|
||||
TypeContainerVisitor<SEARCHER, WorldTypeMapContainer> world_object_notifier(searcher);
|
||||
cell.Visit(p, world_object_notifier, map, radius, x, y);
|
||||
}
|
||||
Cell::VisitWorldObjects(x, y, map, searcher, radius);
|
||||
|
||||
if (searchInGrid)
|
||||
{
|
||||
TypeContainerVisitor<SEARCHER, GridTypeMapContainer > grid_object_notifier(searcher);
|
||||
cell.Visit(p, grid_object_notifier, map, radius, x, y);
|
||||
}
|
||||
Cell::VisitGridObjects(x, y, map, searcher, radius);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4535,13 +4535,13 @@ void Spell::EffectForceDeselect(SpellEffIndex /*effIndex*/)
|
||||
WorldPacket data(SMSG_BREAK_TARGET, m_caster->GetPackGUID().size());
|
||||
data << m_caster->GetPackGUID();
|
||||
Trinity::MessageDistDelivererToHostile notifierBreak(m_caster, &data, dist);
|
||||
m_caster->VisitNearbyWorldObject(dist, notifierBreak);
|
||||
Cell::VisitWorldObjects(m_caster, notifierBreak, dist);
|
||||
|
||||
// and selection
|
||||
data.Initialize(SMSG_CLEAR_TARGET, 8);
|
||||
data << uint64(m_caster->GetGUID());
|
||||
Trinity::MessageDistDelivererToHostile notifierClear(m_caster, &data, dist);
|
||||
m_caster->VisitNearbyWorldObject(dist, notifierClear);
|
||||
Cell::VisitWorldObjects(m_caster, notifierClear, dist);
|
||||
|
||||
// we should also force pets to remove us from current target
|
||||
Unit::AttackerSet attackerSet;
|
||||
|
||||
@@ -251,8 +251,8 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder
|
||||
}
|
||||
|
||||
float dist = GetRangeForChatType(msgType);
|
||||
Trinity::PlayerDistWorker<CreatureTextLocalizer<Builder> > worker(source, dist, localizer);
|
||||
source->VisitNearbyWorldObject(dist, worker);
|
||||
Trinity::PlayerDistWorker<CreatureTextLocalizer<Builder>> worker(source, dist, localizer);
|
||||
Cell::VisitWorldObjects(source, worker, dist);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -929,7 +929,7 @@ public:
|
||||
Creature* passenger = NULL;
|
||||
Trinity::AllCreaturesOfEntryInRange check(handler->GetSession()->GetPlayer(), entry, 20.0f);
|
||||
Trinity::CreatureSearcher<Trinity::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);
|
||||
|
||||
@@ -1896,7 +1896,7 @@ public:
|
||||
|
||||
Trinity::RespawnDo u_do;
|
||||
Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(player, u_do);
|
||||
player->VisitNearbyGridObject(player->GetGridActivationRange(), worker);
|
||||
Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -261,18 +261,11 @@ public:
|
||||
float radius = 40.0f;
|
||||
WorldObject* object = handler->GetSession()->GetPlayer();
|
||||
|
||||
CellCoord pair(Trinity::ComputeCellCoord(object->GetPositionX(), object->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
// Get Creatures
|
||||
std::list<Creature*> creatureList;
|
||||
|
||||
Trinity::AnyUnitInObjectRangeCheck go_check(object, radius);
|
||||
Trinity::CreatureListSearcher<Trinity::AnyUnitInObjectRangeCheck> go_search(object, creatureList, go_check);
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::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())
|
||||
{
|
||||
|
||||
@@ -485,14 +485,9 @@ public:
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y, z);
|
||||
|
||||
CellCoord pair(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, entry, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
|
||||
cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
|
||||
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
|
||||
|
||||
for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end(); ++i)
|
||||
{
|
||||
|
||||
@@ -159,22 +159,10 @@ class boss_akilzon : public CreatureScript
|
||||
for (uint8 i = 2; i < StormCount; ++i)
|
||||
bp0 *= 2;
|
||||
|
||||
CellCoord p(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
std::list<Unit*> tempUnitMap;
|
||||
|
||||
{
|
||||
Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS);
|
||||
Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck> searcher(me, tempUnitMap, u_check);
|
||||
|
||||
TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::AnyAoETargetUnitInObjectRangeCheck>, WorldTypeMapContainer > world_unit_searcher(searcher);
|
||||
TypeContainerVisitor<Trinity::UnitListSearcher<Trinity::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);
|
||||
}
|
||||
Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS);
|
||||
Trinity::UnitListSearcher<Trinity::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)
|
||||
|
||||
@@ -234,18 +234,9 @@ class boss_janalai : public CreatureScript
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y, z);
|
||||
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
|
||||
|
||||
cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange());
|
||||
}
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
|
||||
|
||||
//TC_LOG_ERROR("scripts", "Eggs %d at middle", templist.size());
|
||||
if (templist.empty())
|
||||
@@ -267,22 +258,14 @@ class boss_janalai : public CreatureScript
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y, z);
|
||||
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, NPC_FIRE_BOMB, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, NPC_FIRE_BOMB, 100);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::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);
|
||||
(*i)->RemoveAllAuras();
|
||||
(*i)->CastSpell(*i, SPELL_FIRE_BOMB_DAMAGE, true);
|
||||
(*i)->RemoveAllAuras();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -525,25 +508,16 @@ class npc_janalai_hatcher : public CreatureScript
|
||||
float x, y, z;
|
||||
me->GetPosition(x, y, z);
|
||||
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, 23817, 50);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
|
||||
TypeContainerVisitor<Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange>, GridTypeMapContainer> cSearcher(searcher);
|
||||
|
||||
cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange());
|
||||
}
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, 23817, 50);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, templist, check);
|
||||
Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange());
|
||||
|
||||
//TC_LOG_ERROR("scripts", "Eggs %d at %d", templist.size(), side);
|
||||
|
||||
for (std::list<Creature*>::const_iterator i = templist.begin(); i != templist.end() && num > 0; ++i)
|
||||
if ((*i)->GetDisplayId() != 11686)
|
||||
{
|
||||
(*i)->CastSpell(*i, SPELL_HATCH_EGG, false);
|
||||
(*i)->CastSpell(*i, SPELL_HATCH_EGG, false);
|
||||
num--;
|
||||
}
|
||||
|
||||
|
||||
@@ -153,7 +153,7 @@ class boss_nalorakk : public CreatureScript
|
||||
|
||||
Trinity::AllFriendlyCreaturesInGrid check(me);
|
||||
Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> searcher(me, tempList, check);
|
||||
me->VisitNearbyGridObject(25.0f, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, 25.0f);
|
||||
|
||||
if (tempList.empty())
|
||||
return;
|
||||
|
||||
@@ -906,17 +906,11 @@ void hyjalAI::JustDied(Unit* /*killer*/)
|
||||
|
||||
void hyjalAI::HideNearPos(float x, float y)
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
// First get all creatures.
|
||||
std::list<Creature*> creatures;
|
||||
Trinity::AllFriendlyCreaturesInGrid creature_check(me);
|
||||
Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
|
||||
|
||||
TypeContainerVisitor <Trinity::CreatureListSearcher<Trinity::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())
|
||||
{
|
||||
@@ -930,14 +924,9 @@ void hyjalAI::HideNearPos(float x, float y)
|
||||
|
||||
void hyjalAI::RespawnNearPos(float x, float y)
|
||||
{
|
||||
CellCoord p(Trinity::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
cell.SetNoCreate();
|
||||
|
||||
Trinity::RespawnDo u_do;
|
||||
Trinity::WorldObjectWorker<Trinity::RespawnDo> worker(me, u_do);
|
||||
TypeContainerVisitor<Trinity::WorldObjectWorker<Trinity::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)
|
||||
@@ -961,19 +950,11 @@ void hyjalAI::WaypointReached(uint32 waypointId)
|
||||
}
|
||||
//do some talking
|
||||
//all alive guards walk near here
|
||||
CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
// First get all creatures.
|
||||
std::list<Creature*> creatures;
|
||||
Trinity::AllFriendlyCreaturesInGrid creature_check(me);
|
||||
Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
|
||||
TypeContainerVisitor
|
||||
<Trinity::CreatureListSearcher<Trinity::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())
|
||||
{
|
||||
@@ -1002,18 +983,10 @@ void hyjalAI::DoOverrun(uint32 faction, const uint32 diff)
|
||||
{
|
||||
if (TeleportTimer <= diff)
|
||||
{
|
||||
CellCoord pair(Trinity::ComputeCellCoord(me->GetPositionX(), me->GetPositionY()));
|
||||
Cell cell(pair);
|
||||
cell.SetNoCreate();
|
||||
|
||||
std::list<Creature*> creatures;
|
||||
Trinity::AllFriendlyCreaturesInGrid creature_check(me);
|
||||
Trinity::CreatureListSearcher<Trinity::AllFriendlyCreaturesInGrid> creature_searcher(me, creatures, creature_check);
|
||||
TypeContainerVisitor
|
||||
<Trinity::CreatureListSearcher<Trinity::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())
|
||||
{
|
||||
|
||||
@@ -356,7 +356,7 @@ public:
|
||||
GameObject* Floor = NULL;
|
||||
Trinity::GameObjectInRangeCheck check(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 15);
|
||||
Trinity::GameObjectLastSearcher<Trinity::GameObjectInRangeCheck> searcher(me, Floor, check);
|
||||
me->VisitNearbyGridObject(30, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, 30.0f);
|
||||
if (Floor)
|
||||
instance->SetGuidData(DATA_FLOOR_ERUPTION_GUID, Floor->GetGUID());
|
||||
events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30000);
|
||||
|
||||
@@ -118,7 +118,7 @@ public:
|
||||
std::list<GameObject*> nearFloorList;
|
||||
Trinity::GameObjectInRangeCheck check(floorEruption->GetPositionX(), floorEruption->GetPositionY(), floorEruption->GetPositionZ(), 15);
|
||||
Trinity::GameObjectListSearcher<Trinity::GameObjectInRangeCheck> searcher(floorEruption, nearFloorList, check);
|
||||
floorEruption->VisitNearbyGridObject(999, searcher);
|
||||
Cell::VisitGridObjects(floorEruption, searcher, SIZE_OF_GRIDS);
|
||||
//remove all that are not present on FloorEruptionGUID[1] and update treeLen on each GUID
|
||||
for (std::list<GameObject*>::const_iterator itr = nearFloorList.begin(); itr != nearFloorList.end(); ++itr)
|
||||
{
|
||||
|
||||
@@ -207,7 +207,7 @@ public:
|
||||
std::list<WorldObject*> ClusterList;
|
||||
Trinity::AllWorldObjectsInRange objects(me, 50.0f);
|
||||
Trinity::WorldObjectListSearcher<Trinity::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())
|
||||
|
||||
@@ -574,7 +574,7 @@ public:
|
||||
std::list<Player*> players;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(me, radius);
|
||||
Trinity::PlayerListSearcher<Trinity::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)
|
||||
if ((*itr)->GetQuestStatus(QUEST_TREES_COMPANY) == QUEST_STATUS_INCOMPLETE && (*itr)->HasAura(SPELL_TREE_DISGUISE))
|
||||
|
||||
@@ -752,7 +752,7 @@ public:
|
||||
Creature* sironas = NULL;
|
||||
Trinity::AllCreaturesOfEntryInRange check(me, NPC_SIRONAS, SIZE_OF_GRIDS);
|
||||
Trinity::CreatureSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, sironas, check);
|
||||
me->VisitNearbyObject(SIZE_OF_GRIDS, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, SIZE_OF_GRIDS);
|
||||
|
||||
if (sironas)
|
||||
{
|
||||
|
||||
@@ -150,7 +150,7 @@ public:
|
||||
std::list<Player*> playerOnQuestList;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(me, 5.0f);
|
||||
Trinity::PlayerListSearcher<Trinity::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
|
||||
|
||||
@@ -441,7 +441,7 @@ public:
|
||||
std::list<Unit*> citizenList;
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck checker(me, me, 25.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(me, citizenList, checker);
|
||||
me->VisitNearbyObject(20.0f, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, 20.0f);
|
||||
for (Unit* target : citizenList)
|
||||
{
|
||||
switch (target->GetEntry())
|
||||
|
||||
@@ -396,7 +396,7 @@ public:
|
||||
std::list<Creature*> fireCyclonesList;
|
||||
Trinity::AllCreaturesOfEntryInRange checker(me, NPC_FIRE_CYCLONE, 200.0f);
|
||||
Trinity::CreatureListSearcher<Trinity::AllCreaturesOfEntryInRange> searcher(me, fireCyclonesList, checker);
|
||||
me->VisitNearbyObject(200.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 200.0f);
|
||||
|
||||
if (fireCyclonesList.empty())
|
||||
return;
|
||||
|
||||
+1
-1
@@ -135,7 +135,7 @@ class OrbsDespawner : public BasicEvent
|
||||
bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override
|
||||
{
|
||||
Trinity::CreatureWorker<OrbsDespawner> worker(_creature, *this);
|
||||
_creature->VisitNearbyGridObject(5000.0f, worker);
|
||||
Cell::VisitGridObjects(_creature, worker, SIZE_OF_GRIDS);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1475,7 +1475,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
|
||||
std::list<Player*> players;
|
||||
Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK);
|
||||
Trinity::PlayerListSearcher<Trinity::UnitAuraCheck> searcher(me, players, check);
|
||||
me->VisitNearbyWorldObject(200.0f, searcher);
|
||||
Cell::VisitWorldObjects(me, searcher, 200.0f);
|
||||
|
||||
players.remove_if([this](Player* player)
|
||||
{
|
||||
@@ -1539,7 +1539,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI
|
||||
std::list<Player*> players;
|
||||
Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK);
|
||||
Trinity::PlayerListSearcher<Trinity::UnitAuraCheck> searcher(me, players, check);
|
||||
me->VisitNearbyWorldObject(200.0f, searcher);
|
||||
Cell::VisitWorldObjects(me, searcher,200.0f );
|
||||
|
||||
players.remove_if([this](Player* player)
|
||||
{
|
||||
|
||||
@@ -533,7 +533,7 @@ class boss_the_lich_king : public CreatureScript
|
||||
// Reset The Frozen Throne gameobjects
|
||||
FrozenThroneResetWorker reset;
|
||||
Trinity::GameObjectWorker<FrozenThroneResetWorker> worker(me, reset);
|
||||
me->VisitNearbyGridObject(333.0f, worker);
|
||||
Cell::VisitGridObjects(me, worker, 333.0f);
|
||||
|
||||
// Reset any light override
|
||||
me->GetMap()->SetZoneOverrideLight(AREA_ICECROWN_CITADEL, 0, 5000);
|
||||
|
||||
@@ -223,7 +223,7 @@ class ValithriaDespawner : public BasicEvent
|
||||
bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override
|
||||
{
|
||||
Trinity::CreatureWorker<ValithriaDespawner> worker(_creature, *this);
|
||||
_creature->VisitNearbyGridObject(333.0f, worker);
|
||||
Cell::VisitGridObjects(_creature, worker, 333.0f);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -728,7 +728,7 @@ class npc_risen_archmage : public CreatureScript
|
||||
std::list<Creature*> archmages;
|
||||
RisenArchmageCheck check;
|
||||
Trinity::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);
|
||||
|
||||
@@ -1103,7 +1103,7 @@ class npc_dream_cloud : public CreatureScript
|
||||
Player* player = nullptr;
|
||||
Trinity::AnyPlayerInObjectRangeCheck check(me, 5.0f);
|
||||
Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(me, player, check);
|
||||
me->VisitNearbyWorldObject(7.5f, searcher);
|
||||
Cell::VisitWorldObjects(me, searcher, 7.5f);
|
||||
_events.ScheduleEvent(player ? EVENT_EXPLODE : EVENT_CHECK_PLAYER, 1000);
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -1095,7 +1095,7 @@ class npc_crok_scourgebane : public CreatureScript
|
||||
std::list<Creature*> temp;
|
||||
FrostwingVrykulSearcher check(me, 80.0f);
|
||||
Trinity::CreatureListSearcher<FrostwingVrykulSearcher> searcher(me, temp, check);
|
||||
me->VisitNearbyGridObject(80.0f, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, 80.0f);
|
||||
|
||||
_aliveTrash.clear();
|
||||
for (std::list<Creature*>::iterator itr = temp.begin(); itr != temp.end(); ++itr)
|
||||
@@ -1122,7 +1122,7 @@ class npc_crok_scourgebane : public CreatureScript
|
||||
Player* player = NULL;
|
||||
Trinity::AnyPlayerInObjectRangeCheck check(me, 60.0f);
|
||||
Trinity::PlayerSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(me, player, check);
|
||||
me->VisitNearbyWorldObject(60.0f, searcher);
|
||||
Cell::VisitWorldObjects(me, searcher, 60.0f);
|
||||
// wipe
|
||||
if (!player)
|
||||
{
|
||||
@@ -1131,7 +1131,7 @@ class npc_crok_scourgebane : public CreatureScript
|
||||
{
|
||||
FrostwingGauntletRespawner respawner;
|
||||
Trinity::CreatureWorker<FrostwingGauntletRespawner> worker(me, respawner);
|
||||
me->VisitNearbyGridObject(333.0f, worker);
|
||||
Cell::VisitGridObjects(me, worker, 333.0f);
|
||||
Talk(SAY_CROK_DEATH);
|
||||
}
|
||||
return;
|
||||
@@ -1436,7 +1436,7 @@ class npc_captain_arnath : public CreatureScript
|
||||
Creature* target = NULL;
|
||||
Trinity::MostHPMissingInRange u_check(me, 60.0f, 0);
|
||||
Trinity::CreatureLastSearcher<Trinity::MostHPMissingInRange> searcher(me, target, u_check);
|
||||
me->VisitNearbyGridObject(60.0f, searcher);
|
||||
Cell::VisitGridObjects(me, searcher, 60.0f);
|
||||
return target;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -1757,7 +1757,7 @@ class spell_vehicle_throw_passenger : public SpellScriptLoader
|
||||
std::list<WorldObject*> targetList;
|
||||
Trinity::WorldObjectSpellAreaTargetCheck check(99, GetExplTargetDest(), GetCaster(), GetCaster(), GetSpellInfo(), TARGET_CHECK_DEFAULT, NULL);
|
||||
Trinity::WorldObjectListSearcher<Trinity::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 = NULL;
|
||||
for (std::list<WorldObject*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
|
||||
|
||||
@@ -520,7 +520,7 @@ class boss_hodir : public CreatureScript
|
||||
std::list<Unit*> TargetList;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 100.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
|
||||
me->VisitNearbyObject(100.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 100.0f);
|
||||
for (std::list<Unit*>::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
|
||||
{
|
||||
Unit* target = *itr;
|
||||
@@ -694,7 +694,7 @@ class npc_hodir_priest : public CreatureScript
|
||||
std::list<Unit*> TargetList;
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck checker(me, me, 30.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
|
||||
me->VisitNearbyObject(30.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 30.0f);
|
||||
for (std::list<Unit*>::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr)
|
||||
if ((*itr)->HasAura(SPELL_FREEZE))
|
||||
DoCast(*itr, SPELL_DISPEL_MAGIC, true);
|
||||
|
||||
@@ -1033,7 +1033,7 @@ struct npc_thorim_trashAI : public ScriptedAI
|
||||
Unit* target = nullptr;
|
||||
MostHPMissingInRange checker(caster, range, heal);
|
||||
Trinity::UnitLastSearcher<MostHPMissingInRange> searcher(caster, target, checker);
|
||||
caster->VisitNearbyObject(range, searcher);
|
||||
Cell::VisitGridObjects(caster, searcher, range);
|
||||
|
||||
return target;
|
||||
}
|
||||
@@ -2079,7 +2079,7 @@ class spell_thorim_activate_lightning_orb_periodic : public SpellScriptLoader
|
||||
|
||||
UpperOrbCheck check;
|
||||
Trinity::CreatureListSearcher<UpperOrbCheck> searcher(caster, triggers, check);
|
||||
caster->VisitNearbyGridObject(100.f, searcher);
|
||||
Cell::VisitGridObjects(caster, searcher, 100.f);
|
||||
|
||||
if (!triggers.empty())
|
||||
{
|
||||
|
||||
@@ -346,7 +346,7 @@ public:
|
||||
std::list<Unit*> TargetList;
|
||||
Trinity::AnyFriendlyUnitInObjectRangeCheck checker(me, me, 100.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyFriendlyUnitInObjectRangeCheck> searcher(me, TargetList, checker);
|
||||
me->VisitNearbyObject(100.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 100.0f);
|
||||
|
||||
if (!TargetList.empty())
|
||||
{
|
||||
|
||||
@@ -581,7 +581,7 @@ class npc_simon_bunny : public CreatureScript
|
||||
std::list<WorldObject*> ClusterList;
|
||||
Trinity::AllWorldObjectsInRange objects(me, searchDistance);
|
||||
Trinity::WorldObjectListSearcher<Trinity::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)
|
||||
{
|
||||
|
||||
@@ -56,7 +56,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript
|
||||
std::list<Unit*> targets;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
|
||||
me->VisitNearbyObject(30.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 30.0f);
|
||||
for (std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
if ((*iter)->HasAura(SPELL_DK_SUMMON_GARGOYLE_1, ownerGuid))
|
||||
{
|
||||
|
||||
@@ -61,7 +61,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
|
||||
std::list<Unit*> targets;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
|
||||
me->VisitNearbyObject(40.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 40.0f);
|
||||
|
||||
Unit* highestThreatUnit = nullptr;
|
||||
float highestThreat = 0.0f;
|
||||
@@ -123,7 +123,7 @@ class npc_pet_mage_mirror_image : public CreatureScript
|
||||
std::list<Unit*> targets;
|
||||
Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f);
|
||||
Trinity::UnitListSearcher<Trinity::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
|
||||
me->VisitNearbyObject(40.0f, searcher);
|
||||
Cell::VisitAllObjects(me, searcher, 40.0f);
|
||||
|
||||
for (std::list<Unit*>::const_iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
|
||||
@@ -789,7 +789,9 @@ class spell_gen_cannibalize : public SpellScriptLoader
|
||||
// search for nearby enemy corpse in range
|
||||
Trinity::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
|
||||
Trinity::WorldObjectSearcher<Trinity::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;
|
||||
|
||||
@@ -81,7 +81,7 @@ class spell_love_is_in_the_air_romantic_picnic : public SpellScriptLoader
|
||||
std::list<Player*> playerList;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(target, INTERACTION_DISTANCE*2);
|
||||
Trinity::PlayerListSearcher<Trinity::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)
|
||||
|
||||
@@ -915,7 +915,9 @@ class spell_hun_pet_carrion_feeder : public SpellScriptLoader
|
||||
// search for nearby enemy corpse in range
|
||||
Trinity::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
|
||||
Trinity::WorldObjectSearcher<Trinity::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;
|
||||
|
||||
@@ -1594,12 +1594,12 @@ class spell_q11010_q11102_q11023_choose_loc : public SpellScriptLoader
|
||||
std::list<Player*> playerList;
|
||||
Trinity::AnyPlayerInObjectRangeCheck checker(caster, 65.0f);
|
||||
Trinity::PlayerListSearcher<Trinity::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker);
|
||||
caster->VisitNearbyWorldObject(65.0f, searcher);
|
||||
for (std::list<Player*>::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr)
|
||||
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))
|
||||
// Summom Fel Cannon (bunny version) at found player
|
||||
caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ());
|
||||
if ((*itr)->HasAuraType(SPELL_AURA_FLY) || (*itr)->HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED))
|
||||
// Summom Fel Cannon (bunny version) at found player
|
||||
caster->SummonCreature(NPC_FEL_CANNON2, (*itr)->GetPositionX(), (*itr)->GetPositionY(), (*itr)->GetPositionZ());
|
||||
}
|
||||
|
||||
void Register() override
|
||||
|
||||
@@ -564,7 +564,7 @@ public:
|
||||
std::list<Player*> players;
|
||||
Trinity::UnitAuraCheck check(true, SPELL_RIBBON_DANCE_COSMETIC);
|
||||
Trinity::PlayerListSearcher<Trinity::UnitAuraCheck> searcher(me, players, check);
|
||||
me->VisitNearbyWorldObject(10.0f, searcher);
|
||||
Cell::VisitWorldObjects(me, searcher, 10.0f);
|
||||
|
||||
return players.empty();
|
||||
}
|
||||
|
||||
@@ -320,7 +320,7 @@ extern int main(int argc, char** argv)
|
||||
if (int coreStuckTime = sConfigMgr->GetIntDefault("MaxCoreStuckTime", 0))
|
||||
{
|
||||
freezeDetector = std::make_shared<FreezeDetector>(*ioService, coreStuckTime * 1000);
|
||||
freezeDetector->Start(freezeDetector);
|
||||
FreezeDetector::Start(freezeDetector);
|
||||
TC_LOG_INFO("server.worldserver", "Starting up anti-freeze thread (%u seconds max stuck time)...", coreStuckTime);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user