From 1a5c0f5c3b9d4a76520fde40dd22e72597d1d553 Mon Sep 17 00:00:00 2001 From: Aokromes Date: Mon, 19 Jun 2017 20:20:26 +0200 Subject: [PATCH] Core/Grids: Ported cmangos/mangos-wotlk@ea99457 (cherry picked from commit 9299e9b) --- src/server/game/AI/CoreAI/TotemAI.cpp | 2 +- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 16 +--- .../game/AI/SmartScripts/SmartScript.cpp | 10 +- .../game/Achievements/AchievementMgr.cpp | 4 +- src/server/game/Battlefield/Battlefield.cpp | 2 +- src/server/game/Chat/Chat.cpp | 2 +- .../game/Entities/Creature/Creature.cpp | 86 ++++------------- .../game/Entities/GameObject/GameObject.cpp | 12 +-- src/server/game/Entities/Object/Object.cpp | 33 ++----- src/server/game/Entities/Object/Object.h | 4 - src/server/game/Entities/Player/Player.cpp | 8 +- src/server/game/Entities/Unit/Unit.cpp | 8 +- src/server/game/Grids/Cells/Cell.h | 12 ++- src/server/game/Grids/Cells/CellImpl.h | 93 +++++++++++++++++-- .../game/Grids/Notifiers/GridNotifiers.cpp | 11 +-- src/server/game/Maps/Map.cpp | 21 ----- src/server/game/Maps/Map.h | 59 ------------ src/server/game/OutdoorPvP/OutdoorPvP.cpp | 2 +- .../game/Spells/Auras/SpellAuraEffects.cpp | 2 +- src/server/game/Spells/Auras/SpellAuras.cpp | 10 +- src/server/game/Spells/Spell.cpp | 17 +--- src/server/game/Spells/SpellEffects.cpp | 4 +- src/server/game/Texts/CreatureTextMgr.h | 4 +- src/server/scripts/Commands/cs_debug.cpp | 2 +- src/server/scripts/Commands/cs_misc.cpp | 2 +- src/server/scripts/Commands/cs_mmaps.cpp | 11 +-- .../SunwellPlateau/boss_felmyst.cpp | 7 +- .../EasternKingdoms/ZulAman/boss_akilzon.cpp | 18 +--- .../EasternKingdoms/ZulAman/boss_janalai.cpp | 50 +++------- .../BattleForMountHyjal/hyjalAI.cpp | 35 +------ .../Kalimdor/OnyxiasLair/boss_onyxia.cpp | 2 +- .../OnyxiasLair/instance_onyxias_lair.cpp | 2 +- .../Kalimdor/RazorfenDowns/razorfen_downs.cpp | 2 +- .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 2 +- .../scripts/Kalimdor/zone_bloodmyst_isle.cpp | 2 +- .../ObsidianSanctum/boss_sartharion.cpp | 2 +- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 2 +- .../boss_icecrown_gunship_battle.cpp | 4 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 2 +- .../boss_valithria_dreamwalker.cpp | 6 +- .../IcecrownCitadel/icecrown_citadel.cpp | 8 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_hodir.cpp | 4 +- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 4 +- .../BlackTemple/boss_illidari_council.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 2 +- src/server/scripts/Pet/pet_dk.cpp | 2 +- src/server/scripts/Pet/pet_mage.cpp | 4 +- src/server/scripts/Spells/spell_generic.cpp | 4 +- src/server/scripts/Spells/spell_holiday.cpp | 2 +- src/server/scripts/Spells/spell_hunter.cpp | 4 +- src/server/scripts/Spells/spell_quest.cpp | 11 ++- src/server/scripts/World/npcs_special.cpp | 2 +- src/server/worldserver/Main.cpp | 2 +- 54 files changed, 227 insertions(+), 399 deletions(-) diff --git a/src/server/game/AI/CoreAI/TotemAI.cpp b/src/server/game/AI/CoreAI/TotemAI.cpp index 937f4b82e7..107c0ff985 100644 --- a/src/server/game/AI/CoreAI/TotemAI.cpp +++ b/src/server/game/AI/CoreAI/TotemAI.cpp @@ -74,7 +74,7 @@ void TotemAI::UpdateAI(uint32 /*diff*/) victim = NULL; Trinity::NearestAttackableUnitInObjectRangeCheck u_check(me, me, max_range); Trinity::UnitLastSearcher checker(me, victim, u_check); - me->VisitNearbyObject(max_range, checker); + Cell::VisitAllObjects(me, checker, max_range); } // If have target diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index df8ca50293..b3c42103d6 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -330,7 +330,7 @@ Unit* ScriptedAI::DoSelectLowestHpFriendly(float range, uint32 minHPDiff) Unit* unit = nullptr; Trinity::MostHPMissingInRange u_check(me, range, minHPDiff); Trinity::UnitLastSearcher 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 searcher(me, unit, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitAllObjects(me, searcher, range); return unit; } @@ -350,7 +350,7 @@ std::list ScriptedAI::DoFindFriendlyCC(float range) std::list list; Trinity::FriendlyCCedInRange u_check(me, range); Trinity::CreatureListSearcher searcher(me, list, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitAllObjects(me, searcher, range); return list; } @@ -360,7 +360,7 @@ std::list ScriptedAI::DoFindFriendlyMissingBuff(float range, uint32 u std::list list; Trinity::FriendlyMissingBuffInRange u_check(me, range, uiSpellid); Trinity::CreatureListSearcher 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 searcher(me, player, check); - TypeContainerVisitor, GridTypeMapContainer> visitor(searcher); - - cell.Visit(pair, visitor, *me->GetMap(), *me, minimumRange); + Cell::VisitWorldObjects(me, searcher, minimumRange); return player; } diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 167ef211f8..b3d11d7748 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -3149,7 +3149,7 @@ ObjectList* SmartScript::GetWorldObjectsInDist(float dist) { Trinity::AllWorldObjectsInRange u_check(obj, dist); Trinity::WorldObjectListSearcher searcher(obj, *targets, u_check); - obj->VisitNearbyObject(dist, searcher); + Cell::VisitAllObjects(obj, searcher, dist); } return targets; } @@ -4025,7 +4025,7 @@ Unit* SmartScript::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff) Trinity::MostHPMissingInRange u_check(me, range, MinHPDiff); Trinity::UnitLastSearcher searcher(me, unit, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitGridObjects(me, searcher, range); return unit; } @@ -4036,7 +4036,7 @@ void SmartScript::DoFindFriendlyCC(std::list& _list, float range) Trinity::FriendlyCCedInRange u_check(me, range); Trinity::CreatureListSearcher searcher(me, _list, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitGridObjects(me, searcher, range); } void SmartScript::DoFindFriendlyMissingBuff(std::list& list, float range, uint32 spellid) @@ -4046,7 +4046,7 @@ void SmartScript::DoFindFriendlyMissingBuff(std::list& list, float ra Trinity::FriendlyMissingBuffInRange u_check(me, range, spellid); Trinity::CreatureListSearcher searcher(me, list, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitGridObjects(me, searcher, range); } Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) @@ -4057,7 +4057,7 @@ Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) Unit* unit = nullptr; Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(me, me, range, playerOnly); Trinity::UnitLastSearcher searcher(me, unit, u_check); - me->VisitNearbyObject(range, searcher); + Cell::VisitGridObjects(me, searcher, range); return unit; } diff --git a/src/server/game/Achievements/AchievementMgr.cpp b/src/server/game/Achievements/AchievementMgr.cpp index 5c34ca9aab..aa2c057102 100644 --- a/src/server/game/Achievements/AchievementMgr.cpp +++ b/src/server/game/Achievements/AchievementMgr.cpp @@ -889,8 +889,8 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievemen { Trinity::BroadcastTextBuilder _builder(GetOwner(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, GetOwner(), achievement->ID); Trinity::LocalizedPacketDo _localizer(_builder); - Trinity::PlayerDistWorker > _worker(GetOwner(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer); - GetOwner()->VisitNearbyWorldObject(sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _worker); + Trinity::PlayerDistWorker> _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); diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index c1cc5d29f0..92ac296cd6 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -978,7 +978,7 @@ bool BfCapturePoint::Update(uint32 diff) std::list players; Trinity::AnyPlayerInObjectRangeCheck checker(capturePoint, radius); Trinity::PlayerListSearcher searcher(capturePoint, players, checker); - capturePoint->VisitNearbyWorldObject(radius, searcher); + Cell::VisitWorldObjects(capturePoint, searcher, radius); for (std::list::iterator itr = players.begin(); itr != players.end(); ++itr) if ((*itr)->IsOutdoorPvPActive()) diff --git a/src/server/game/Chat/Chat.cpp b/src/server/game/Chat/Chat.cpp index 93c17cea1e..606e0d0c48 100644 --- a/src/server/game/Chat/Chat.cpp +++ b/src/server/game/Chat/Chat.cpp @@ -896,7 +896,7 @@ GameObject* ChatHandler::GetNearbyGameObject() GameObject* obj = nullptr; Trinity::NearestGameObjectCheck check(*pl); Trinity::GameObjectLastSearcher searcher(pl, obj, check); - pl->VisitNearbyGridObject(SIZE_OF_GRIDS, searcher); + Cell::VisitGridObjects(pl, searcher, SIZE_OF_GRIDS); return obj; } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index fd0b77dfaf..a5ddbdd382 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -793,16 +793,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 searcher(this, creature, u_check); - - TypeContainerVisitor, GridTypeMapContainer > grid_creature_searcher(searcher); - - cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius); + Cell::VisitGridObjects(this, searcher, radius); SetNoSearchAssistance(true); UpdateSpeed(MOVE_RUN); @@ -2018,55 +2011,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 searcher(this, target, u_check); - - TypeContainerVisitor, WorldTypeMapContainer > world_unit_searcher(searcher); - TypeContainerVisitor, 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 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 searcher(this, target, u_check); - - TypeContainerVisitor, WorldTypeMapContainer > world_unit_searcher(searcher); - TypeContainerVisitor, 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 searcher(this, target, u_check); + Cell::VisitAllObjects(this, searcher, std::max(dist, ATTACK_DISTANCE)); return target; } @@ -2093,19 +2060,9 @@ void Creature::CallAssistance() if (radius > 0) { std::list assistList; - - { - CellCoord p(Trinity::ComputeCellCoord(GetPositionX(), GetPositionY())); - Cell cell(p); - cell.SetNoCreate(); - - Trinity::AnyAssistCreatureInRangeCheck u_check(this, GetVictim(), radius); - Trinity::CreatureListSearcher searcher(this, assistList, u_check); - - TypeContainerVisitor, GridTypeMapContainer > grid_creature_searcher(searcher); - - cell.Visit(p, grid_creature_searcher, *GetMap(), *this, radius); - } + Trinity::AnyAssistCreatureInRangeCheck u_check(this, GetVictim(), radius); + Trinity::CreatureListSearcher searcher(this, assistList, u_check); + Cell::VisitGridObjects(this, searcher, radius); if (!assistList.empty()) { @@ -2127,16 +2084,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 worker(this, u_do); - - TypeContainerVisitor, 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 @@ -2704,12 +2654,10 @@ Unit* Creature::SelectNearestHostileUnitInAggroRange(bool useLOS) const Unit* target = NULL; - { - Trinity::NearestHostileUnitInAggroRangeCheck u_check(this, useLOS); - Trinity::UnitSearcher searcher(this, target, u_check); + Trinity::NearestHostileUnitInAggroRangeCheck u_check(this, useLOS); + Trinity::UnitSearcher searcher(this, target, u_check); - VisitNearbyGridObject(MAX_AGGRO_RADIUS, searcher); - } + Cell::VisitGridObjects(this, searcher, MAX_AGGRO_RADIUS); return target; } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index a51595d66c..a68dd4b789 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -563,7 +563,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 searcher(this, target, checker); - VisitNearbyObject(radius, searcher); + Cell::VisitAllObjects(this, searcher, radius); } else { @@ -571,7 +571,7 @@ void GameObject::Update(uint32 diff) Player* player = nullptr; Trinity::AnyPlayerInObjectRangeCheck checker(this, radius); Trinity::PlayerSearcher searcher(this, player, checker); - VisitNearbyWorldObject(radius, searcher); + Cell::VisitWorldObjects(this, searcher, radius); target = player; } @@ -1157,15 +1157,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 checker(this, ok, u_check); - - TypeContainerVisitor, GridTypeMapContainer > grid_object_checker(checker); - cell.Visit(p, grid_object_checker, *GetMap(), *this, range); - + Cell::VisitGridObjects(this, checker, range); return ok; } diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index e81ef38327..f02784eba9 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1956,13 +1956,13 @@ void WorldObject::SendMessageToSet(WorldPacket* data, bool self) void WorldObject::SendMessageToSetInRange(WorldPacket* data, float dist, bool /*self*/) { Trinity::MessageDistDeliverer notifier(this, data, dist); - VisitNearbyWorldObject(dist, notifier); + Cell::VisitWorldObjects(this, notifier, dist); } void WorldObject::SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) { Trinity::MessageDistDeliverer notifier(this, data, GetVisibilityRange(), false, skipped_rcvr); - VisitNearbyWorldObject(GetVisibilityRange(), notifier); + Cell::VisitWorldObjects(this, notifier, GetVisibilityRange()); } void WorldObject::SetMap(Map* map) @@ -2303,29 +2303,17 @@ Player* WorldObject::SelectNearestPlayer(float distance) const template 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 searcher(this, gameObjectContainer, check); - TypeContainerVisitor, GridTypeMapContainer> visitor(searcher); - - cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange); + Cell::VisitGridObjects(this, searcher, maxSearchRange); } template 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 searcher(this, creatureContainer, check); - TypeContainerVisitor, GridTypeMapContainer> visitor(searcher); - - cell.Visit(pair, visitor, *GetMap(), *this, maxSearchRange); + Cell::VisitGridObjects(this, searcher, maxSearchRange); } template @@ -2333,7 +2321,7 @@ void WorldObject::GetPlayerListInGrid(Container& playerContainer, float maxSearc { Trinity::AnyPlayerInObjectRangeCheck checker(this, maxSearchRange); Trinity::PlayerListSearcher searcher(this, playerContainer, checker); - VisitNearbyWorldObject(maxSearchRange, searcher); + Cell::VisitWorldObjects(this, searcher, maxSearchRange); } void WorldObject::GetNearPoint2D(float &x, float &y, float distance2d, float absAngle) const @@ -2760,7 +2748,7 @@ void WorldObject::DestroyForNearbyPlayers() std::list targets; Trinity::AnyPlayerInObjectRangeCheck check(this, GetVisibilityRange(), false); Trinity::PlayerListSearcher searcher(this, targets, check); - VisitNearbyWorldObject(GetVisibilityRange(), searcher); + Cell::VisitAllObjects(summon, notifier, GetVisibilityRange()); for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) { Player* player = (*iter); @@ -2783,7 +2771,7 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/) { //updates object's visibility for nearby players Trinity::VisibleChangesNotifier notifier(*this); - VisitNearbyWorldObject(GetVisibilityRange(), notifier); + Cell::VisitAllObjects(summon, notifier, GetVisibilityRange()); } struct WorldObjectChangeAccumulator @@ -2858,14 +2846,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 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); } diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 0192c4747e..fcaa21a37d 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -630,10 +630,6 @@ class TC_GAME_API WorldObject : public Object, public WorldLocation bool IsPermanentWorldObject() const { return m_isWorldObject; } bool IsWorldObject() const; - template void VisitNearbyObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitAll(GetPositionX(), GetPositionY(), radius, notifier); } - template void VisitNearbyGridObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitGrid(GetPositionX(), GetPositionY(), radius, notifier); } - template void VisitNearbyWorldObject(float const& radius, NOTIFIER& notifier) const { if (IsInWorld()) GetMap()->VisitWorld(GetPositionX(), GetPositionY(), radius, notifier); } - uint32 LastUsedScriptID; // Transports diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 235688c5fb..acb337e561 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6350,7 +6350,7 @@ void Player::SendMessageToSetInRange(WorldPacket* data, float dist, bool self) GetSession()->SendPacket(data); Trinity::MessageDistDeliverer notifier(this, data, dist); - VisitNearbyWorldObject(dist, notifier); + Cell::VisitWorldObjects(this, notifier, dist); } void Player::SendMessageToSetInRange(WorldPacket* data, float dist, bool self, bool own_team_only) @@ -6359,7 +6359,7 @@ void Player::SendMessageToSetInRange(WorldPacket* data, float dist, bool self, b GetSession()->SendPacket(data); Trinity::MessageDistDeliverer notifier(this, data, dist, own_team_only); - VisitNearbyWorldObject(dist, notifier); + Cell::VisitWorldObjects(this, notifier, dist); } void Player::SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) @@ -6370,7 +6370,7 @@ void Player::SendMessageToSet(WorldPacket* data, Player const* skipped_rcvr) // 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* data) const @@ -22884,7 +22884,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 } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 76960f8f01..aca7356fb6 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -10882,7 +10882,7 @@ Unit* Unit::SelectNearbyTarget(Unit* exclude, float dist) const std::list targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist); Trinity::UnitListSearcher searcher(this, targets, u_check); - VisitNearbyObject(dist, searcher); + Cell::VisitAllObjects(this, searcher, dist); // remove current target if (GetVictim()) @@ -12396,7 +12396,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()); } } @@ -14362,7 +14362,7 @@ void Unit::Talk(std::string const& text, ChatMsg msgType, Language language, flo Trinity::CustomChatTextBuilder builder(this, msgType, text, language, target); Trinity::LocalizedPacketDo localizer(builder); Trinity::PlayerDistWorker > 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*/) @@ -14402,7 +14402,7 @@ void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject con Trinity::BroadcastTextBuilder builder(this, msgType, textId, target); Trinity::LocalizedPacketDo localizer(builder); Trinity::PlayerDistWorker > worker(this, textRange, localizer); - VisitNearbyWorldObject(textRange, worker); + Cell::VisitWorldObjects(this, worker, textRange); } void Unit::Say(uint32 textId, WorldObject const* target /*= nullptr*/) diff --git a/src/server/game/Grids/Cells/Cell.h b/src/server/game/Grids/Cells/Cell.h index 907aa47889..d4169dff85 100644 --- a/src/server/game/Grids/Cells/Cell.h +++ b/src/server/game/Grids/Cells/Cell.h @@ -107,11 +107,19 @@ struct Cell uint32 All; } data; - template void Visit(CellCoord const&, TypeContainerVisitor& visitor, Map &, WorldObject const&, float) const; - template void Visit(CellCoord const&, TypeContainerVisitor& visitor, Map &, float, float, float) const; + template void Visit(CellCoord const&, TypeContainerVisitor& visitor, Map&, WorldObject const& obj, float radius) const; + template void Visit(CellCoord const&, TypeContainerVisitor& visitor, Map&, float x, float y, float radius) const; static CellArea CalculateCellArea(float x, float y, float radius); + template static void VisitGridObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true); + template static void VisitWorldObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true); + template static void VisitAllObjects(WorldObject const* obj, T& visitor, float radius, bool dont_load = true); + + template static void VisitGridObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true); + template static void VisitWorldObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true); + template static void VisitAllObjects(float x, float y, Map* map, T& visitor, float radius, bool dont_load = true); + private: template void VisitCircle(TypeContainerVisitor &, Map &, CellCoord const&, CellCoord const&) const; }; diff --git a/src/server/game/Grids/Cells/CellImpl.h b/src/server/game/Grids/Cells/CellImpl.h index 36a15346b8..0c0f7816e0 100644 --- a/src/server/game/Grids/Cells/CellImpl.h +++ b/src/server/game/Grids/Cells/CellImpl.h @@ -60,8 +60,15 @@ inline CellArea Cell::CalculateCellArea(float x, float y, float radius) return CellArea(centerX, centerY); } +inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor& 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 -inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor& visitor, Map& map, float radius, float x_off, float y_off) const +inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor& visitor, Map& map, float x_off, float y_off, float radius) const { if (!standing_cell.IsCoordValid()) return; @@ -118,14 +125,6 @@ inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor -inline void Cell::Visit(CellCoord const& standing_cell, TypeContainerVisitor& 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.GetObjectSize(), obj.GetPositionX(), obj.GetPositionY()); -} - template inline void Cell::VisitCircle(TypeContainerVisitor& visitor, Map& map, CellCoord const& begin_cell, CellCoord const& end_cell) const { @@ -177,5 +176,81 @@ inline void Cell::VisitCircle(TypeContainerVisitor& visitor, Map& } } } + +template +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 gnotifier(visitor); + cell.Visit(p, gnotifier, *center_obj->GetMap(), *center_obj, radius); +} + +template +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 wnotifier(visitor); + cell.Visit(p, wnotifier, *center_obj->GetMap(), *center_obj, radius); +} + +template +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 wnotifier(visitor); + cell.Visit(p, wnotifier, *center_obj->GetMap(), *center_obj, radius); + TypeContainerVisitor gnotifier(visitor); + cell.Visit(p, gnotifier, *center_obj->GetMap(), *center_obj, radius); +} + +template +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 gnotifier(visitor); + cell.Visit(p, gnotifier, *map, x, y, radius); +} + +template +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 wnotifier(visitor); + cell.Visit(p, wnotifier, *map, x, y, radius); +} + +template +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 wnotifier(visitor); + cell.Visit(p, wnotifier, *map, x, y, radius); + TypeContainerVisitor gnotifier(visitor); + cell.Visit(p, gnotifier, *map, x, y, radius); +} #endif diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.cpp b/src/server/game/Grids/Notifiers/GridNotifiers.cpp index d6602f68f3..86b3230b52 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.cpp +++ b/src/server/game/Grids/Notifiers/GridNotifiers.cpp @@ -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 c2world_relocation(relocate); - TypeContainerVisitor 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(); } } diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index fa01fe3b76..270b0a7485 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2689,27 +2689,6 @@ char const* Map::GetMapName() const return i_mapEntry ? i_mapEntry->name : "UNNAMEDMAP\x0"; } -void Map::UpdateObjectVisibility(WorldObject* obj, Cell cell, CellCoord cellpair) -{ - cell.SetNoCreate(); - Trinity::VisibleChangesNotifier notifier(*obj); - TypeContainerVisitor 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 world_notifier(notifier); - TypeContainerVisitor 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()); diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index ebf2c93b10..e8071c9e02 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -435,9 +435,6 @@ class TC_GAME_API Map : public GridRefManager 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); } @@ -467,10 +464,6 @@ class TC_GAME_API Map : public GridRefManager void RemoveFromActive(T* obj); template void SwitchGridContainers(T* obj, bool on); - template void VisitAll(const float &x, const float &y, float radius, NOTIFIER ¬ifier); - template void VisitFirstFound(const float &x, const float &y, float radius, NOTIFIER ¬ifier); - template void VisitWorld(const float &x, const float &y, float radius, NOTIFIER ¬ifier); - template void VisitGrid(const float &x, const float &y, float radius, NOTIFIER ¬ifier); CreatureGroupHolderType CreatureGroupHolder; void UpdateIteratorBack(Player* player); @@ -856,56 +849,4 @@ inline void Map::Visit(Cell const& cell, TypeContainerVisitor& vis getNGrid(x, y)->VisitGrid(cell_x, cell_y, visitor); } } - -template -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 world_object_notifier(notifier); - cell.Visit(p, world_object_notifier, *this, radius, x, y); - TypeContainerVisitor 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 -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 world_object_notifier(notifier); - cell.Visit(p, world_object_notifier, *this, radius, x, y); - if (!notifier.i_object) - { - TypeContainerVisitor grid_object_notifier(notifier); - cell.Visit(p, grid_object_notifier, *this, radius, x, y); - } -} - -template -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 world_object_notifier(notifier); - cell.Visit(p, world_object_notifier, *this, radius, x, y); -} - -template -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 grid_object_notifier(notifier); - cell.Visit(p, grid_object_notifier, *this, radius, x, y); -} #endif diff --git a/src/server/game/OutdoorPvP/OutdoorPvP.cpp b/src/server/game/OutdoorPvP/OutdoorPvP.cpp index 4bd9e8fcb3..211575acad 100644 --- a/src/server/game/OutdoorPvP/OutdoorPvP.cpp +++ b/src/server/game/OutdoorPvP/OutdoorPvP.cpp @@ -330,7 +330,7 @@ bool OPvPCapturePoint::Update(uint32 diff) std::list players; Trinity::AnyPlayerInObjectRangeCheck checker(m_capturePoint, radius); Trinity::PlayerListSearcher searcher(m_capturePoint, players, checker); - m_capturePoint->VisitNearbyWorldObject(radius, searcher); + Cell::VisitWorldObjects(m_capturePoint, searcher, radius); for (std::list::iterator itr = players.begin(); itr != players.end(); ++itr) { diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 96f0aa986c..031b2a20cf 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -2264,7 +2264,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo UnitList targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(target, target, target->GetMap()->GetVisibilityRange()); Trinity::UnitListSearcher 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)) diff --git a/src/server/game/Spells/Auras/SpellAuras.cpp b/src/server/game/Spells/Auras/SpellAuras.cpp index dc0d1d49c9..8e6ff252eb 100644 --- a/src/server/game/Spells/Auras/SpellAuras.cpp +++ b/src/server/game/Spells/Auras/SpellAuras.cpp @@ -2334,7 +2334,7 @@ void UnitAura::FillTargetMap(std::unordered_map& 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)); Trinity::UnitListSearcher searcher(GetUnitOwner(), units, u_check); - GetUnitOwner()->VisitNearbyObject(radius, searcher); + Cell::VisitAllObjects(GetUnitOwner(), searcher, radius); break; } case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND: @@ -2342,14 +2342,14 @@ void UnitAura::FillTargetMap(std::unordered_map& targets, Unit* ca units.push_back(GetUnitOwner()); Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius, m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS)); Trinity::UnitListSearcher 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); // No GetCharmer in searcher Trinity::UnitListSearcher searcher(GetUnitOwner(), units, u_check); - GetUnitOwner()->VisitNearbyObject(radius, searcher); + Cell::VisitAllObjects(GetUnitOwner(), searcher, radius); break; } case SPELL_EFFECT_APPLY_AREA_AURA_PET: @@ -2418,13 +2418,13 @@ void DynObjAura::FillTargetMap(std::unordered_map& targets, Unit* { Trinity::AnyFriendlyUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius, m_spellInfo->HasAttribute(SPELL_ATTR3_ONLY_TARGET_PLAYERS)); Trinity::UnitListSearcher searcher(GetDynobjOwner(), units, u_check); - GetDynobjOwner()->VisitNearbyObject(radius, searcher); + Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius); } else { Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius); Trinity::UnitListSearcher searcher(GetDynobjOwner(), units, u_check); - GetDynobjOwner()->VisitNearbyObject(radius, searcher); + Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius); } for (Unit* unit : units) diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index a2a665e32e..811ad705a6 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -1822,22 +1822,13 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere x = pos->GetPositionX(); y = pos->GetPositionY(); - CellCoord p(Trinity::ComputeCellCoord(x, y)); - Cell cell(p); - cell.SetNoCreate(); - - Map& map = *(referer->GetMap()); + Map* map = referer->GetMap(); if (searchInWorld) - { - TypeContainerVisitor world_object_notifier(searcher); - cell.Visit(p, world_object_notifier, map, radius, x, y); - } + Cell::VisitWorldObjects(x, y, map, searcher, radius); + if (searchInGrid) - { - TypeContainerVisitor grid_object_notifier(searcher); - cell.Visit(p, grid_object_notifier, map, radius, x, y); - } + Cell::VisitGridObjects(x, y, map, searcher, radius); } } diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index 22c206d0a4..ea7f6da767 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -4321,13 +4321,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, notifierBreak, dist); // we should also force pets to remove us from current target Unit::AttackerSet attackerSet; diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index 030c92a49f..3f20d6185e 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -252,8 +252,8 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder } float dist = GetRangeForChatType(msgType); - Trinity::PlayerDistWorker > worker(source, dist, localizer); - source->VisitNearbyWorldObject(dist, worker); + Trinity::PlayerDistWorker> worker(source, dist, localizer); + Cell::VisitWorldObjects(source, worker, dist); } #endif diff --git a/src/server/scripts/Commands/cs_debug.cpp b/src/server/scripts/Commands/cs_debug.cpp index 806721d3cf..124bfba907 100644 --- a/src/server/scripts/Commands/cs_debug.cpp +++ b/src/server/scripts/Commands/cs_debug.cpp @@ -929,7 +929,7 @@ public: Creature* passenger = NULL; Trinity::AllCreaturesOfEntryInRange check(handler->GetSession()->GetPlayer(), entry, 20.0f); Trinity::CreatureSearcher 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); diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 25d5abd495..31a9eae939 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1910,7 +1910,7 @@ public: Trinity::RespawnDo u_do; Trinity::WorldObjectWorker worker(player, u_do); - player->VisitNearbyGridObject(player->GetGridActivationRange(), worker); + Cell::VisitGridObjects(player, worker, player->GetGridActivationRange()); return true; } diff --git a/src/server/scripts/Commands/cs_mmaps.cpp b/src/server/scripts/Commands/cs_mmaps.cpp index 3ba0ca7904..eacce7560f 100644 --- a/src/server/scripts/Commands/cs_mmaps.cpp +++ b/src/server/scripts/Commands/cs_mmaps.cpp @@ -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 creatureList; - Trinity::AnyUnitInObjectRangeCheck go_check(object, radius); Trinity::CreatureListSearcher go_search(object, creatureList, go_check); - TypeContainerVisitor, 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()) { diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 53569bdce2..6eaecffa2b 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -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 searcher(me, templist, check); - TypeContainerVisitor, GridTypeMapContainer> cSearcher(searcher); - cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); + Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange()); for (std::list::const_iterator i = templist.begin(); i != templist.end(); ++i) { diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp index 40de85ea67..c535292f82 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_akilzon.cpp @@ -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 tempUnitMap; - - { - Trinity::AnyAoETargetUnitInObjectRangeCheck u_check(me, me, SIZE_OF_GRIDS); - Trinity::UnitListSearcher searcher(me, tempUnitMap, u_check); - - TypeContainerVisitor, WorldTypeMapContainer > world_unit_searcher(searcher); - TypeContainerVisitor, 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 searcher(me, tempUnitMap, u_check); + Cell::VisitAllObjects(me, searcher, SIZE_OF_GRIDS); // deal damage for (std::list::const_iterator i = tempUnitMap.begin(); i != tempUnitMap.end(); ++i) diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp index 05c2c37cc9..691d0b0055 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_janalai.cpp @@ -242,18 +242,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 searcher(me, templist, check); - - TypeContainerVisitor, GridTypeMapContainer> cSearcher(searcher); - - cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange()); - } + Trinity::AllCreaturesOfEntryInRange check(me, NPC_EGG, 100); + Trinity::CreatureListSearcher searcher(me, templist, check); + Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange()); //TC_LOG_ERROR("scripts", "Eggs %d at middle", templist.size()); if (templist.empty()) @@ -275,22 +266,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 searcher(me, templist, check); + Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange()); - Trinity::AllCreaturesOfEntryInRange check(me, NPC_FIRE_BOMB, 100); - Trinity::CreatureListSearcher searcher(me, templist, check); - - TypeContainerVisitor, GridTypeMapContainer> cSearcher(searcher); - - cell.Visit(pair, cSearcher, *me->GetMap(), *me, me->GetGridActivationRange()); - } for (std::list::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(); } } @@ -534,25 +517,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 searcher(me, templist, check); - - TypeContainerVisitor, GridTypeMapContainer> cSearcher(searcher); - - cell.Visit(pair, cSearcher, *(me->GetMap()), *me, me->GetGridActivationRange()); - } + Trinity::AllCreaturesOfEntryInRange check(me, 23817, 50); + Trinity::CreatureListSearcher searcher(me, templist, check); + Cell::VisitGridObjects(me, searcher, me->GetGridActivationRange()); //TC_LOG_ERROR("scripts", "Eggs %d at %d", templist.size(), side); for (std::list::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--; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp index 3464d1b022..db09129638 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjalAI.cpp @@ -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 creatures; Trinity::AllFriendlyCreaturesInGrid creature_check(me); Trinity::CreatureListSearcher creature_searcher(me, creatures, creature_check); - - TypeContainerVisitor , 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 worker(me, u_do); - TypeContainerVisitor, 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 creatures; Trinity::AllFriendlyCreaturesInGrid creature_check(me); Trinity::CreatureListSearcher creature_searcher(me, creatures, creature_check); - TypeContainerVisitor - , - 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 creatures; Trinity::AllFriendlyCreaturesInGrid creature_check(me); Trinity::CreatureListSearcher creature_searcher(me, creatures, creature_check); - TypeContainerVisitor - , - 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()) { diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 386b92b279..52a86f5d2f 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -356,7 +356,7 @@ public: GameObject* Floor = NULL; Trinity::GameObjectInRangeCheck check(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 15); Trinity::GameObjectLastSearcher 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); diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp index d2fbc4464c..afb7c801a0 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/instance_onyxias_lair.cpp @@ -118,7 +118,7 @@ public: std::list nearFloorList; Trinity::GameObjectInRangeCheck check(floorEruption->GetPositionX(), floorEruption->GetPositionY(), floorEruption->GetPositionZ(), 15); Trinity::GameObjectListSearcher 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::const_iterator itr = nearFloorList.begin(); itr != nearFloorList.end(); ++itr) { diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 45875f9a6e..4bdff3de27 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -206,7 +206,7 @@ public: std::list ClusterList; Trinity::AllWorldObjectsInRange objects(me, 50.0f); Trinity::WorldObjectListSearcher searcher(me, ClusterList, objects); - me->VisitNearbyObject(50.0f, searcher); + Cell::VisitAllObjects(me, searcher, 50.0f); for (std::list::const_iterator itr = ClusterList.begin(); itr != ClusterList.end(); ++itr) { if (Player* player = (*itr)->ToPlayer()) diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 88f5185bb8..25415d98a3 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -571,7 +571,7 @@ public: std::list players; Trinity::AnyPlayerInObjectRangeCheck checker(me, radius); Trinity::PlayerListSearcher searcher(me, players, checker); - me->VisitNearbyWorldObject(radius, searcher); + Cell::VisitWorldObjects(me, searcher, radius); for (std::list::const_iterator itr = players.begin(); itr != players.end(); ++itr) if ((*itr)->GetQuestStatus(QUEST_TREES_COMPANY) == QUEST_STATUS_INCOMPLETE && (*itr)->HasAura(SPELL_TREE_DISGUISE)) diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 9ebf92874d..21b30c68fc 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -752,7 +752,7 @@ public: Creature* sironas = NULL; Trinity::AllCreaturesOfEntryInRange check(me, NPC_SIRONAS, SIZE_OF_GRIDS); Trinity::CreatureSearcher searcher(me, sironas, check); - me->VisitNearbyObject(SIZE_OF_GRIDS, searcher); + Cell::VisitAllObjects(me, searcher, SIZE_OF_GRIDS); if (sironas) { diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index d6ff08f3b1..71487b5e04 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -396,7 +396,7 @@ public: std::list fireCyclonesList; Trinity::AllCreaturesOfEntryInRange checker(me, NPC_FIRE_CYCLONE, 200.0f); Trinity::CreatureListSearcher searcher(me, fireCyclonesList, checker); - me->VisitNearbyObject(200.0f, searcher); + Cell::VisitAllObjects(me, searcher, 200.0f); if (fireCyclonesList.empty()) return; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 2a19fe57d6..3b1e84d5ee 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -135,7 +135,7 @@ class OrbsDespawner : public BasicEvent bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override { Trinity::CreatureWorker worker(_creature, *this); - _creature->VisitNearbyGridObject(5000.0f, worker); + Cell::VisitGridObjects(_creature, worker, SIZE_OF_GRIDS); return true; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 647ea05426..0e4e9a1ee6 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -1472,7 +1472,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI std::list players; Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); Trinity::PlayerListSearcher searcher(me, players, check); - me->VisitNearbyWorldObject(200.0f, searcher); + Cell::VisitWorldObjects(me, searcher, 200.0f); players.remove_if([this](Player* player) { @@ -1536,7 +1536,7 @@ struct npc_gunship_boarding_addAI : public gunship_npc_AI std::list players; Trinity::UnitAuraCheck check(true, Instance->GetData(DATA_TEAM_IN_INSTANCE) == HORDE ? SPELL_ON_ORGRIMS_HAMMER_DECK : SPELL_ON_SKYBREAKER_DECK); Trinity::PlayerListSearcher searcher(me, players, check); - me->VisitNearbyWorldObject(200.0f, searcher); + Cell::VisitWorldObjects(me, searcher, 200.0f); players.remove_if([this](Player* player) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 57c72aeb29..c92c7d04b2 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -512,7 +512,7 @@ class boss_the_lich_king : public CreatureScript // Reset The Frozen Throne gameobjects FrozenThroneResetWorker reset; Trinity::GameObjectWorker 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); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index d501a973a9..cb9b9eeef7 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -223,7 +223,7 @@ class ValithriaDespawner : public BasicEvent bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override { Trinity::CreatureWorker 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 archmages; RisenArchmageCheck check; Trinity::CreatureListSearcher searcher(me, archmages, check); - me->VisitNearbyGridObject(100.0f, searcher); + Cell::VisitGridObjects(me, searcher, 100.0f); for (std::list::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 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; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 09942ff45e..104df273ad 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -1086,7 +1086,7 @@ class npc_crok_scourgebane : public CreatureScript std::list temp; FrostwingVrykulSearcher check(me, 80.0f); Trinity::CreatureListSearcher searcher(me, temp, check); - me->VisitNearbyGridObject(80.0f, searcher); + Cell::VisitGridObjects(me, searcher, 80.0f); _aliveTrash.clear(); for (std::list::iterator itr = temp.begin(); itr != temp.end(); ++itr) @@ -1113,7 +1113,7 @@ class npc_crok_scourgebane : public CreatureScript Player* player = NULL; Trinity::AnyPlayerInObjectRangeCheck check(me, 60.0f); Trinity::PlayerSearcher searcher(me, player, check); - me->VisitNearbyWorldObject(60.0f, searcher); + Cell::VisitWorldObjects(me, searcher, 60.0f); // wipe if (!player) { @@ -1122,7 +1122,7 @@ class npc_crok_scourgebane : public CreatureScript { FrostwingGauntletRespawner respawner; Trinity::CreatureWorker worker(me, respawner); - me->VisitNearbyGridObject(333.0f, worker); + Cell::VisitGridObjects(me, worker, 333.0f); Talk(SAY_CROK_DEATH); } return; @@ -1427,7 +1427,7 @@ class npc_captain_arnath : public CreatureScript Creature* target = NULL; Trinity::MostHPMissingInRange u_check(me, 60.0f, 0); Trinity::CreatureLastSearcher searcher(me, target, u_check); - me->VisitNearbyGridObject(60.0f, searcher); + Cell::VisitGridObjects(me, searcher, 60.0f); return target; } }; diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 7ab6a6a26c..9093d40a17 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -1746,7 +1746,7 @@ class spell_vehicle_throw_passenger : public SpellScriptLoader std::list targetList; Trinity::WorldObjectSpellAreaTargetCheck check(99, GetExplTargetDest(), GetCaster(), GetCaster(), GetSpellInfo(), TARGET_CHECK_DEFAULT, NULL); Trinity::WorldObjectListSearcher 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::iterator itr = targetList.begin(); itr != targetList.end(); ++itr) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index 8c6f9fc94f..59b9cc5bcb 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -520,7 +520,7 @@ class boss_hodir : public CreatureScript std::list TargetList; Trinity::AnyUnfriendlyUnitInObjectRangeCheck checker(me, me, 100.0f); Trinity::UnitListSearcher searcher(me, TargetList, checker); - me->VisitNearbyObject(100.0f, searcher); + Cell::VisitAllObjects(me, searcher, 100.0f); for (std::list::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr) { Unit* target = *itr; @@ -694,7 +694,7 @@ class npc_hodir_priest : public CreatureScript std::list TargetList; Trinity::AnyFriendlyUnitInObjectRangeCheck checker(me, me, 30.0f); Trinity::UnitListSearcher searcher(me, TargetList, checker); - me->VisitNearbyObject(30.0f, searcher); + Cell::VisitAllObjects(me, searcher, 30.0f); for (std::list::iterator itr = TargetList.begin(); itr != TargetList.end(); ++itr) if ((*itr)->HasAura(SPELL_FREEZE)) DoCast(*itr, SPELL_DISPEL_MAGIC, true); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index e63f8ca49d..0dc4e553ad 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -1033,7 +1033,7 @@ struct npc_thorim_trashAI : public ScriptedAI Unit* target = nullptr; MostHPMissingInRange checker(caster, range, heal); Trinity::UnitLastSearcher 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 searcher(caster, triggers, check); - caster->VisitNearbyGridObject(100.f, searcher); + Cell::VisitGridObjects(caster, searcher, 100.f); if (!triggers.empty()) { diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp index 2459e67bd2..5a51653759 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp @@ -345,7 +345,7 @@ public: std::list TargetList; Trinity::AnyFriendlyUnitInObjectRangeCheck checker(me, me, 100.0f); Trinity::UnitListSearcher searcher(me, TargetList, checker); - me->VisitNearbyObject(100.0f, searcher); + Cell::VisitAllObjects(me, searcher, 100.0f); if (!TargetList.empty()) { diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 01a3aa7859..6948561501 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -573,7 +573,7 @@ class npc_simon_bunny : public CreatureScript std::list ClusterList; Trinity::AllWorldObjectsInRange objects(me, searchDistance); Trinity::WorldObjectListSearcher searcher(me, ClusterList, objects); - me->VisitNearbyObject(searchDistance, searcher); + Cell::VisitAllObjects(me, searcher, searchDistance); for (std::list::const_iterator i = ClusterList.begin(); i != ClusterList.end(); ++i) { diff --git a/src/server/scripts/Pet/pet_dk.cpp b/src/server/scripts/Pet/pet_dk.cpp index 8ddcaa9647..a17b9fd8b5 100644 --- a/src/server/scripts/Pet/pet_dk.cpp +++ b/src/server/scripts/Pet/pet_dk.cpp @@ -56,7 +56,7 @@ class npc_pet_dk_ebon_gargoyle : public CreatureScript std::list targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); Trinity::UnitListSearcher searcher(me, targets, u_check); - me->VisitNearbyObject(30.0f, searcher); + Cell::VisitAllObjects(me, searcher, 30.0f); for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) if ((*iter)->HasAura(SPELL_DK_SUMMON_GARGOYLE_1, ownerGuid)) { diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 5f6af339f9..fa2e65f710 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -61,7 +61,7 @@ class npc_pet_mage_mirror_image : public CreatureScript std::list targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); Trinity::UnitListSearcher 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 targets; Trinity::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 30.0f); Trinity::UnitListSearcher searcher(me, targets, u_check); - me->VisitNearbyObject(40.0f, searcher); + Cell::VisitAllObjects(me, searcher, 40.0f); for (std::list::const_iterator iter = targets.begin(); iter != targets.end(); ++iter) { diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 8d7966edf4..bc20433511 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -850,7 +850,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 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; diff --git a/src/server/scripts/Spells/spell_holiday.cpp b/src/server/scripts/Spells/spell_holiday.cpp index 431342eaf5..588bccb959 100644 --- a/src/server/scripts/Spells/spell_holiday.cpp +++ b/src/server/scripts/Spells/spell_holiday.cpp @@ -81,7 +81,7 @@ class spell_love_is_in_the_air_romantic_picnic : public SpellScriptLoader std::list playerList; Trinity::AnyPlayerInObjectRangeCheck checker(target, INTERACTION_DISTANCE*2); Trinity::PlayerListSearcher searcher(target, playerList, checker); - target->VisitNearbyWorldObject(INTERACTION_DISTANCE*2, searcher); + Cell::VisitWorldObjects(target, searcher, INTERACTION_DISTANCE * 2); for (std::list::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) { if ((*itr) != target && (*itr)->HasAura(GetId())) // && (*itr)->GetStandState() == UNIT_STAND_STATE_SIT) diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index a74dbe5f89..7e38dd0f59 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -642,7 +642,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 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; diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 9d1d8f2679..ec2f8260f2 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1594,12 +1594,13 @@ class spell_q11010_q11102_q11023_choose_loc : public SpellScriptLoader std::list playerList; Trinity::AnyPlayerInObjectRangeCheck checker(caster, 65.0f); Trinity::PlayerListSearcher searcher(caster, playerList, checker); - caster->VisitNearbyWorldObject(65.0f, searcher); - for (std::list::const_iterator itr = playerList.begin(); itr != playerList.end(); ++itr) + Cell::VisitWorldObjects(caster, searcher, 65.0f); + for (std::list::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 diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 486df91a93..0762a7d91c 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -562,7 +562,7 @@ public: std::list players; Trinity::UnitAuraCheck check(true, SPELL_RIBBON_DANCE_COSMETIC); Trinity::PlayerListSearcher searcher(me, players, check); - me->VisitNearbyWorldObject(10.0f, searcher); + Cell::VisitWorldObjects(me, searcher, 10.0f); return players.empty(); } diff --git a/src/server/worldserver/Main.cpp b/src/server/worldserver/Main.cpp index 5c3cf415da..61b6c01b28 100644 --- a/src/server/worldserver/Main.cpp +++ b/src/server/worldserver/Main.cpp @@ -322,7 +322,7 @@ extern int main(int argc, char** argv) if (int coreStuckTime = sConfigMgr->GetIntDefault("MaxCoreStuckTime", 0)) { freezeDetector = std::make_shared(*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); }