feat(Core/Grids): Remove WorldObject separation in grid containers (#22595)
This commit is contained in:
parent
c97cee1e4f
commit
73317b2706
63 changed files with 160 additions and 313 deletions
|
|
@ -35,7 +35,6 @@
|
|||
template<class OBJECT>
|
||||
struct ContainerMapList
|
||||
{
|
||||
//std::map<OBJECT_HANDLE, OBJECT *> _element;
|
||||
GridRefMgr<OBJECT> _element;
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ void TotemAI::UpdateAI(uint32 /*diff*/)
|
|||
victim = nullptr;
|
||||
Acore::NearestAttackableUnitInObjectRangeCheck u_check(me, me, max_range);
|
||||
Acore::UnitLastSearcher<Acore::NearestAttackableUnitInObjectRangeCheck> checker(me, victim, u_check);
|
||||
Cell::VisitAllObjects(me, checker, max_range);
|
||||
Cell::VisitObjects(me, checker, max_range);
|
||||
}
|
||||
|
||||
if (!victim && me->GetCharmerOrOwnerOrSelf()->IsInCombat())
|
||||
|
|
|
|||
|
|
@ -491,7 +491,7 @@ Unit* ScriptedAI::DoSelectLowestHpFriendly(float range, uint32 minHPDiff)
|
|||
Unit* unit = nullptr;
|
||||
Acore::MostHPMissingInRange u_check(me, range, minHPDiff);
|
||||
Acore::UnitLastSearcher<Acore::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
|
||||
return unit;
|
||||
}
|
||||
|
|
@ -501,7 +501,7 @@ std::list<Creature*> ScriptedAI::DoFindFriendlyCC(float range)
|
|||
std::list<Creature*> list;
|
||||
Acore::FriendlyCCedInRange u_check(me, range);
|
||||
Acore::CreatureListSearcher<Acore::FriendlyCCedInRange> searcher(me, list, u_check);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
|
@ -510,7 +510,7 @@ std::list<Creature*> ScriptedAI::DoFindFriendlyMissingBuff(float range, uint32 u
|
|||
std::list<Creature*> list;
|
||||
Acore::FriendlyMissingBuffInRange u_check(me, range, uiSpellid);
|
||||
Acore::CreatureListSearcher<Acore::FriendlyMissingBuffInRange> searcher(me, list, u_check);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
return list;
|
||||
}
|
||||
|
||||
|
|
@ -521,7 +521,7 @@ Player* ScriptedAI::GetPlayerAtMinimumRange(float minimumRange)
|
|||
Acore::PlayerAtMinimumRangeAway check(me, minimumRange);
|
||||
Acore::PlayerSearcher<Acore::PlayerAtMinimumRangeAway> searcher(me, player, check);
|
||||
|
||||
Cell::VisitWorldObjects(me, searcher, minimumRange);
|
||||
Cell::VisitObjects(me, searcher, minimumRange);
|
||||
|
||||
return player;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4030,7 +4030,7 @@ void SmartScript::GetWorldObjectsInDist(ObjectVector& targets, float dist) const
|
|||
|
||||
Acore::AllWorldObjectsInRange u_check(obj, dist);
|
||||
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(obj, targets, u_check);
|
||||
Cell::VisitAllObjects(obj, searcher, dist);
|
||||
Cell::VisitObjects(obj, searcher, dist);
|
||||
}
|
||||
|
||||
void SmartScript::ProcessEvent(SmartScriptHolder& e, Unit* unit, uint32 var0, uint32 var1, bool bvar, SpellInfo const* spell, GameObject* gob)
|
||||
|
|
@ -5252,7 +5252,7 @@ Unit* SmartScript::DoSelectLowestHpFriendly(float range, uint32 MinHPDiff) const
|
|||
|
||||
Acore::MostHPMissingInRange u_check(me, range, MinHPDiff);
|
||||
Acore::UnitLastSearcher<Acore::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
return unit;
|
||||
}
|
||||
|
||||
|
|
@ -5266,7 +5266,7 @@ Unit* SmartScript::DoSelectLowestHpPercentFriendly(float range, uint32 minHpPct,
|
|||
Unit* unit = nullptr;
|
||||
Acore::MostHPPercentMissingInRange u_check(me, range, minHpPct, maxHpPct);
|
||||
Acore::UnitLastSearcher<Acore::MostHPPercentMissingInRange> searcher(me, unit, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
return unit;
|
||||
}
|
||||
|
||||
|
|
@ -5277,7 +5277,7 @@ void SmartScript::DoFindFriendlyCC(std::vector<Creature*>& creatures, float rang
|
|||
|
||||
Acore::FriendlyCCedInRange u_check(me, range);
|
||||
Acore::CreatureListSearcher<Acore::FriendlyCCedInRange> searcher(me, creatures, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
}
|
||||
|
||||
void SmartScript::DoFindFriendlyMissingBuff(std::vector<Creature*>& creatures, float range, uint32 spellid) const
|
||||
|
|
@ -5287,7 +5287,7 @@ void SmartScript::DoFindFriendlyMissingBuff(std::vector<Creature*>& creatures, f
|
|||
|
||||
Acore::FriendlyMissingBuffInRange u_check(me, range, spellid);
|
||||
Acore::CreatureListSearcher<Acore::FriendlyMissingBuffInRange> searcher(me, creatures, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
}
|
||||
|
||||
Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) const
|
||||
|
|
@ -5298,7 +5298,7 @@ Unit* SmartScript::DoFindClosestFriendlyInRange(float range, bool playerOnly) co
|
|||
Unit* unit = nullptr;
|
||||
Acore::AnyFriendlyNotSelfUnitInObjectRangeCheck u_check(me, me, range, playerOnly);
|
||||
Acore::UnitLastSearcher<Acore::AnyFriendlyNotSelfUnitInObjectRangeCheck> searcher(me, unit, u_check);
|
||||
Cell::VisitAllObjects(me, searcher, range);
|
||||
Cell::VisitObjects(me, searcher, range);
|
||||
return unit;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -754,8 +754,7 @@ void AchievementMgr::SendAchievementEarned(AchievementEntry const* achievement)
|
|||
Acore::BroadcastTextBuilder _builder(GetPlayer(), CHAT_MSG_ACHIEVEMENT, BROADCAST_TEXT_ACHIEVEMENT_EARNED, GetPlayer()->getGender(), GetPlayer(), achievement->ID);
|
||||
Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> _localizer(_builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder>> _worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), _localizer);
|
||||
TypeContainerVisitor<Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> >, WorldTypeMapContainer > message(_worker);
|
||||
Cell::VisitWorldObjects(GetPlayer(), _worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
|
||||
Cell::VisitObjects(GetPlayer(), _worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
|
||||
}
|
||||
|
||||
WorldPacket data(SMSG_ACHIEVEMENT_EARNED, 8 + 4 + 8);
|
||||
|
|
|
|||
|
|
@ -805,7 +805,7 @@ Creature* Battlefield::SpawnCreature(uint32 entry, float x, float y, float z, fl
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
Creature* creature = new Creature(true);
|
||||
Creature* creature = new Creature();
|
||||
if (!creature->Create(map->GenerateLowGuid<HighGuid::Unit>(), map, PHASEMASK_NORMAL, entry, 0, x, y, z, o))
|
||||
{
|
||||
LOG_ERROR("bg.battlefield", "Battlefield::SpawnCreature: Can't create creature entry: {}", entry);
|
||||
|
|
@ -1019,7 +1019,7 @@ bool BfCapturePoint::Update(uint32 diff)
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(capturePoint, radius);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(capturePoint, players, checker);
|
||||
Cell::VisitWorldObjects(capturePoint, searcher, radius);
|
||||
Cell::VisitObjects(capturePoint, searcher, radius);
|
||||
|
||||
for (std::list<Player*>::iterator itr = players.begin(); itr != players.end(); ++itr)
|
||||
if ((*itr)->IsOutdoorPvPActive())
|
||||
|
|
|
|||
|
|
@ -571,7 +571,7 @@ GameObject* ChatHandler::GetNearbyGameObject() const
|
|||
GameObject* obj = nullptr;
|
||||
Acore::NearestGameObjectCheck check(*pl);
|
||||
Acore::GameObjectLastSearcher<Acore::NearestGameObjectCheck> searcher(pl, obj, check);
|
||||
Cell::VisitGridObjects(pl, searcher, SIZE_OF_GRIDS);
|
||||
Cell::VisitObjects(pl, searcher, SIZE_OF_GRIDS);
|
||||
return obj;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@
|
|||
#include "UpdateMask.h"
|
||||
#include "World.h"
|
||||
|
||||
Corpse::Corpse(CorpseType type) : WorldObject(type != CORPSE_BONES), m_type(type)
|
||||
Corpse::Corpse(CorpseType type) : WorldObject(), m_type(type)
|
||||
{
|
||||
m_objectType |= TYPEMASK_CORPSE;
|
||||
m_objectTypeId = TYPEID_CORPSE;
|
||||
|
|
|
|||
|
|
@ -269,7 +269,7 @@ bool TemporaryThreatModifierEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/)
|
|||
return true;
|
||||
}
|
||||
|
||||
Creature::Creature(bool isWorldObject): Unit(isWorldObject), MovableMapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_lootRecipientGroup(0),
|
||||
Creature::Creature(): Unit(), MovableMapObject(), m_groupLootTimer(0), lootingGroupLowGUID(0), m_lootRecipientGroup(0),
|
||||
m_corpseRemoveTime(0), m_respawnTime(0), m_respawnDelay(300), m_corpseDelay(60), m_wanderDistance(0.0f), m_boundaryCheckTime(2500),
|
||||
m_transportCheckTimer(1000), lootPickPocketRestoreTime(0), m_combatPulseTime(0), m_combatPulseDelay(0), m_reactState(REACT_AGGRESSIVE), m_defaultMovementType(IDLE_MOTION_TYPE),
|
||||
m_spawnId(0), m_equipmentId(0), m_originalEquipmentId(0), m_AlreadyCallAssistance(false),
|
||||
|
|
@ -1079,7 +1079,7 @@ void Creature::DoFleeToGetAssistance()
|
|||
Acore::NearestAssistCreatureInCreatureRangeCheck u_check(this, GetVictim(), radius);
|
||||
Acore::CreatureLastSearcher<Acore::NearestAssistCreatureInCreatureRangeCheck> searcher(this, creature, u_check);
|
||||
|
||||
Cell::VisitGridObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
|
||||
SetNoSearchAssistance(true);
|
||||
UpdateSpeed(MOVE_RUN, false);
|
||||
|
|
@ -2400,7 +2400,7 @@ Unit* Creature::SelectNearestTarget(float dist, bool playerOnly /* = false */) c
|
|||
|
||||
Acore::NearestHostileUnitCheck u_check(this, dist, playerOnly);
|
||||
Acore::UnitLastSearcher<Acore::NearestHostileUnitCheck> searcher(this, target, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, dist);
|
||||
Cell::VisitObjects(this, searcher, dist);
|
||||
return target;
|
||||
}
|
||||
|
||||
|
|
@ -2417,7 +2417,7 @@ Unit* Creature::SelectNearestTargetInAttackDistance(float dist) const
|
|||
Unit* target = nullptr;
|
||||
Acore::NearestHostileUnitInAttackDistanceCheck u_check(this, dist);
|
||||
Acore::UnitLastSearcher<Acore::NearestHostileUnitInAttackDistanceCheck> searcher(this, target, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, std::max(dist, ATTACK_DISTANCE));
|
||||
Cell::VisitObjects(this, searcher, std::max(dist, ATTACK_DISTANCE));
|
||||
|
||||
return target;
|
||||
}
|
||||
|
|
@ -2453,7 +2453,7 @@ void Creature::CallAssistance(Unit* target /*= nullptr*/)
|
|||
|
||||
Acore::AnyAssistCreatureInRangeCheck u_check(this, target, radius);
|
||||
Acore::CreatureListSearcher<Acore::AnyAssistCreatureInRangeCheck> searcher(this, assistList, u_check);
|
||||
Cell::VisitGridObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
|
||||
if (!assistList.empty())
|
||||
{
|
||||
|
|
@ -2489,7 +2489,7 @@ void Creature::CallForHelp(float radius, Unit* target /*= nullptr*/)
|
|||
|
||||
Acore::CallOfHelpCreatureInRangeDo u_do(this, target, radius);
|
||||
Acore::CreatureWorker<Acore::CallOfHelpCreatureInRangeDo> worker(this, u_do);
|
||||
Cell::VisitGridObjects(this, worker, radius);
|
||||
Cell::VisitObjects(this, worker, radius);
|
||||
}
|
||||
|
||||
bool Creature::CanAssistTo(Unit const* u, Unit const* enemy, bool checkfaction /*= true*/) const
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ class CreatureGroup;
|
|||
class Creature : public Unit, public GridObject<Creature>, public MovableMapObject, public UpdatableMapObject
|
||||
{
|
||||
public:
|
||||
explicit Creature(bool isWorldObject = false);
|
||||
explicit Creature();
|
||||
~Creature() override;
|
||||
|
||||
void AddToWorld() override;
|
||||
|
|
|
|||
|
|
@ -24,8 +24,8 @@
|
|||
#include "Player.h"
|
||||
#include "ScriptMgr.h"
|
||||
|
||||
TempSummon::TempSummon(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject) :
|
||||
Creature(isWorldObject), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
|
||||
TempSummon::TempSummon(SummonPropertiesEntry const* properties, ObjectGuid owner) :
|
||||
Creature(), m_Properties(properties), m_type(TEMPSUMMON_MANUAL_DESPAWN),
|
||||
m_timer(0), m_lifetime(0), _visibleBySummonerOnly(false)
|
||||
{
|
||||
if (owner)
|
||||
|
|
@ -350,7 +350,7 @@ std::string TempSummon::GetDebugInfo() const
|
|||
return sstr.str();
|
||||
}
|
||||
|
||||
Minion::Minion(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject) : TempSummon(properties, owner, isWorldObject)
|
||||
Minion::Minion(SummonPropertiesEntry const* properties, ObjectGuid owner) : TempSummon(properties, owner)
|
||||
, m_owner(owner)
|
||||
{
|
||||
ASSERT(m_owner);
|
||||
|
|
@ -417,7 +417,7 @@ std::string Minion::GetDebugInfo() const
|
|||
return sstr.str();
|
||||
}
|
||||
|
||||
Guardian::Guardian(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject) : Minion(properties, owner, isWorldObject)
|
||||
Guardian::Guardian(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion(properties, owner)
|
||||
{
|
||||
m_unitTypeMask |= UNIT_MASK_GUARDIAN;
|
||||
if (properties && (properties->Type == SUMMON_TYPE_PET || properties->Category == SUMMON_CATEGORY_PET))
|
||||
|
|
@ -462,7 +462,7 @@ std::string Guardian::GetDebugInfo() const
|
|||
return sstr.str();
|
||||
}
|
||||
|
||||
Puppet::Puppet(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion(properties, owner, false), m_owner(owner) //maybe true?
|
||||
Puppet::Puppet(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion(properties, owner), m_owner(owner)
|
||||
{
|
||||
ASSERT(owner.IsPlayer());
|
||||
m_unitTypeMask |= UNIT_MASK_PUPPET;
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ struct TempSummonData
|
|||
class TempSummon : public Creature
|
||||
{
|
||||
public:
|
||||
explicit TempSummon(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject);
|
||||
explicit TempSummon(SummonPropertiesEntry const* properties, ObjectGuid owner);
|
||||
~TempSummon() override = default;
|
||||
void Update(uint32 time) override;
|
||||
virtual void InitStats(uint32 lifetime);
|
||||
|
|
@ -76,7 +76,7 @@ private:
|
|||
class Minion : public TempSummon
|
||||
{
|
||||
public:
|
||||
Minion(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject);
|
||||
Minion(SummonPropertiesEntry const* properties, ObjectGuid owner);
|
||||
void InitStats(uint32 duration) override;
|
||||
void RemoveFromWorld() override;
|
||||
[[nodiscard]] Unit* GetOwner() const;
|
||||
|
|
@ -95,7 +95,7 @@ protected:
|
|||
class Guardian : public Minion
|
||||
{
|
||||
public:
|
||||
Guardian(SummonPropertiesEntry const* properties, ObjectGuid owner, bool isWorldObject);
|
||||
Guardian(SummonPropertiesEntry const* properties, ObjectGuid owner);
|
||||
void InitStats(uint32 duration) override;
|
||||
bool InitStatsForLevel(uint8 level);
|
||||
void InitSummon() override;
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@
|
|||
#include "SpellAuraEffects.h"
|
||||
#include "Transport.h"
|
||||
|
||||
DynamicObject::DynamicObject(bool isWorldObject) : WorldObject(isWorldObject), MovableMapObject(),
|
||||
DynamicObject::DynamicObject() : WorldObject(), MovableMapObject(),
|
||||
_aura(nullptr), _removedAura(nullptr), _caster(nullptr), _duration(0), _isViewpoint(false), _updateViewerVisibilityTimer(0)
|
||||
{
|
||||
m_objectType |= TYPEMASK_DYNAMICOBJECT;
|
||||
|
|
@ -128,11 +128,6 @@ bool DynamicObject::CreateDynamicObject(ObjectGuid::LowType guidlow, Unit* caste
|
|||
return false;
|
||||
}
|
||||
|
||||
if (IsWorldObject())
|
||||
{
|
||||
setActive(true);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -34,7 +34,7 @@ enum DynamicObjectType
|
|||
class DynamicObject : public WorldObject, public GridObject<DynamicObject>, public MovableMapObject, public UpdatableMapObject
|
||||
{
|
||||
public:
|
||||
DynamicObject(bool isWorldObject);
|
||||
DynamicObject();
|
||||
~DynamicObject() override;
|
||||
|
||||
void AddToWorld() override;
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include <G3D/CoordinateFrame.h>
|
||||
#include <G3D/Quat.h>
|
||||
|
||||
GameObject::GameObject() : WorldObject(false), MovableMapObject(),
|
||||
GameObject::GameObject() : WorldObject(), MovableMapObject(),
|
||||
m_model(nullptr), m_goValue(), m_AI(nullptr)
|
||||
{
|
||||
m_objectType |= TYPEMASK_GAMEOBJECT;
|
||||
|
|
@ -721,7 +721,7 @@ void GameObject::Update(uint32 diff)
|
|||
{
|
||||
Acore::NearestAttackableNoTotemUnitInObjectRangeCheck checker(this, owner, radius);
|
||||
Acore::UnitSearcher<Acore::NearestAttackableNoTotemUnitInObjectRangeCheck> searcher(this, target, checker);
|
||||
Cell::VisitAllObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
}
|
||||
else // environmental trap
|
||||
{
|
||||
|
|
@ -730,7 +730,7 @@ void GameObject::Update(uint32 diff)
|
|||
Player* player = nullptr;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(this, radius, true, true);
|
||||
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
|
||||
Cell::VisitWorldObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
target = player;
|
||||
}
|
||||
|
||||
|
|
@ -1397,7 +1397,7 @@ GameObject* GameObject::LookupFishingHoleAround(float range)
|
|||
Acore::NearestGameObjectFishingHole u_check(*this, range);
|
||||
Acore::GameObjectSearcher<Acore::NearestGameObjectFishingHole> checker(this, ok, u_check);
|
||||
|
||||
Cell::VisitGridObjects(this, checker, range);
|
||||
Cell::VisitObjects(this, checker, range);
|
||||
return ok;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -86,17 +86,6 @@ Object::Object() : m_PackGUID(sizeof(uint64) + 1)
|
|||
WorldObject::~WorldObject()
|
||||
{
|
||||
sScriptMgr->OnWorldObjectDestroy(this);
|
||||
|
||||
// this may happen because there are many !create/delete
|
||||
if (IsWorldObject() && m_currMap)
|
||||
{
|
||||
if (IsCorpse())
|
||||
{
|
||||
LOG_FATAL("entities.object", "Object::~Object Corpse {}, type={} deleted but still in map!!", GetGUID().ToString(), ((Corpse*)this)->GetType());
|
||||
ABORT();
|
||||
}
|
||||
ResetMap();
|
||||
}
|
||||
}
|
||||
|
||||
Object::~Object()
|
||||
|
|
@ -1047,8 +1036,8 @@ void MovementInfo::OutDebug()
|
|||
LOG_INFO("movement", "splineElevation: {}", splineElevation);
|
||||
}
|
||||
|
||||
WorldObject::WorldObject(bool isWorldObject) : WorldLocation(),
|
||||
LastUsedScriptID(0), m_name(""), m_isActive(false), m_visibilityDistanceOverride(), m_isWorldObject(isWorldObject), m_zoneScript(nullptr),
|
||||
WorldObject::WorldObject() : WorldLocation(),
|
||||
LastUsedScriptID(0), m_name(""), m_isActive(false), m_visibilityDistanceOverride(), m_zoneScript(nullptr),
|
||||
_zoneId(0), _areaId(0), _floorZ(INVALID_HEIGHT), _outdoors(false), _liquidData(), _updatePositionData(false), m_transport(nullptr),
|
||||
m_currMap(nullptr), _heartbeatTimer(HEARTBEAT_INTERVAL), m_InstanceId(0), m_phaseMask(PHASEMASK_NORMAL), m_useCombinedPhases(true),
|
||||
m_notifyflags(0), m_executed_notifies(0), _objectVisibilityContainer(this)
|
||||
|
|
@ -2102,9 +2091,6 @@ void WorldObject::SetMap(Map* map)
|
|||
m_InstanceId = map->GetInstanceId();
|
||||
|
||||
sScriptMgr->OnWorldObjectSetMap(this, map);
|
||||
|
||||
if (IsWorldObject())
|
||||
m_currMap->AddWorldObject(this);
|
||||
}
|
||||
|
||||
void WorldObject::ResetMap()
|
||||
|
|
@ -2112,11 +2098,6 @@ void WorldObject::ResetMap()
|
|||
ASSERT(m_currMap);
|
||||
ASSERT(!IsInWorld());
|
||||
|
||||
if (IsWorldObject())
|
||||
{
|
||||
m_currMap->RemoveWorldObject(this);
|
||||
}
|
||||
|
||||
sScriptMgr->OnWorldObjectResetMap(this);
|
||||
|
||||
m_currMap = nullptr;
|
||||
|
|
@ -2198,10 +2179,10 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
|
|||
switch (mask)
|
||||
{
|
||||
case UNIT_MASK_SUMMON:
|
||||
summon = new TempSummon(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
|
||||
summon = new TempSummon(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
|
||||
break;
|
||||
case UNIT_MASK_GUARDIAN:
|
||||
summon = new Guardian(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
|
||||
summon = new Guardian(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
|
||||
break;
|
||||
case UNIT_MASK_PUPPET:
|
||||
summon = new Puppet(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
|
||||
|
|
@ -2210,7 +2191,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
|
|||
summon = new Totem(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
|
||||
break;
|
||||
case UNIT_MASK_MINION:
|
||||
summon = new Minion(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty, false);
|
||||
summon = new Minion(properties, summoner ? summoner->GetGUID() : ObjectGuid::Empty);
|
||||
break;
|
||||
default:
|
||||
return nullptr;
|
||||
|
|
@ -2244,7 +2225,7 @@ TempSummon* Map::SummonCreature(uint32 entry, Position const& pos, SummonPropert
|
|||
|
||||
// call MoveInLineOfSight for nearby creatures
|
||||
Acore::AIRelocationNotifier notifier(*summon);
|
||||
Cell::VisitAllObjects(summon, notifier, GetVisibilityRange());
|
||||
Cell::VisitObjects(summon, notifier, GetVisibilityRange());
|
||||
|
||||
return summon;
|
||||
}
|
||||
|
|
@ -2429,7 +2410,7 @@ Creature* WorldObject::FindNearestCreature(uint32 entry, float range, bool alive
|
|||
Creature* creature = nullptr;
|
||||
Acore::NearestCreatureEntryWithLiveStateInObjectRangeCheck checker(*this, entry, alive, range);
|
||||
Acore::CreatureLastSearcher<Acore::NearestCreatureEntryWithLiveStateInObjectRangeCheck> searcher(this, creature, checker);
|
||||
Cell::VisitAllObjects(this, searcher, range);
|
||||
Cell::VisitObjects(this, searcher, range);
|
||||
return creature;
|
||||
}
|
||||
|
||||
|
|
@ -2438,7 +2419,7 @@ GameObject* WorldObject::FindNearestGameObject(uint32 entry, float range, bool o
|
|||
GameObject* go = nullptr;
|
||||
Acore::NearestGameObjectEntryInObjectRangeCheck checker(*this, entry, range, onlySpawned);
|
||||
Acore::GameObjectLastSearcher<Acore::NearestGameObjectEntryInObjectRangeCheck> searcher(this, go, checker);
|
||||
Cell::VisitGridObjects(this, searcher, range);
|
||||
Cell::VisitObjects(this, searcher, range);
|
||||
return go;
|
||||
}
|
||||
|
||||
|
|
@ -2447,7 +2428,7 @@ GameObject* WorldObject::FindNearestGameObjectOfType(GameobjectTypes type, float
|
|||
GameObject* go = nullptr;
|
||||
Acore::NearestGameObjectTypeInObjectRangeCheck checker(*this, type, range);
|
||||
Acore::GameObjectLastSearcher<Acore::NearestGameObjectTypeInObjectRangeCheck> searcher(this, go, checker);
|
||||
Cell::VisitGridObjects(this, searcher, range);
|
||||
Cell::VisitObjects(this, searcher, range);
|
||||
return go;
|
||||
}
|
||||
|
||||
|
|
@ -2457,7 +2438,7 @@ Player* WorldObject::SelectNearestPlayer(float distance) const
|
|||
|
||||
Acore::NearestPlayerInObjectRangeCheck checker(this, distance);
|
||||
Acore::PlayerLastSearcher<Acore::NearestPlayerInObjectRangeCheck> searcher(this, target, checker);
|
||||
Cell::VisitWorldObjects(this, searcher, distance);
|
||||
Cell::VisitObjects(this, searcher, distance);
|
||||
|
||||
return target;
|
||||
}
|
||||
|
|
@ -2475,35 +2456,35 @@ void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& gameo
|
|||
{
|
||||
Acore::AllGameObjectsWithEntryInRange check(this, entry, maxSearchRange);
|
||||
Acore::GameObjectListSearcher<Acore::AllGameObjectsWithEntryInRange> searcher(this, gameobjectList, check);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
Cell::VisitObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
void WorldObject::GetGameObjectListWithEntryInGrid(std::list<GameObject*>& gameobjectList, std::vector<uint32> const& entries, float maxSearchRange) const
|
||||
{
|
||||
Acore::AllGameObjectsMatchingOneEntryInRange check(this, entries, maxSearchRange);
|
||||
Acore::GameObjectListSearcher searcher(this, gameobjectList, check);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
Cell::VisitObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& creatureList, uint32 entry, float maxSearchRange) const
|
||||
{
|
||||
Acore::AllCreaturesOfEntryInRange check(this, entry, maxSearchRange);
|
||||
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(this, creatureList, check);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
Cell::VisitObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
void WorldObject::GetCreatureListWithEntryInGrid(std::list<Creature*>& creatureList, std::vector<uint32> const& entries, float maxSearchRange) const
|
||||
{
|
||||
Acore::AllCreaturesMatchingOneEntryInRange check(this, entries, maxSearchRange);
|
||||
Acore::CreatureListSearcher searcher(this, creatureList, check);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
Cell::VisitObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
void WorldObject::GetDeadCreatureListInGrid(std::list<Creature*>& creaturedeadList, float maxSearchRange, bool alive /*= false*/) const
|
||||
{
|
||||
Acore::AllDeadCreaturesInRange check(this, maxSearchRange, alive);
|
||||
Acore::CreatureListSearcher<Acore::AllDeadCreaturesInRange> searcher(this, creaturedeadList, check);
|
||||
Cell::VisitGridObjects(this, searcher, maxSearchRange);
|
||||
Cell::VisitObjects(this, searcher, maxSearchRange);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
@ -2895,7 +2876,7 @@ void WorldObject::PlayRadiusSound(uint32 sound_id, float radius)
|
|||
std::vector<Player*> targets;
|
||||
Acore::AnyPlayerInObjectRangeCheck check(this, radius, false);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
|
||||
Cell::VisitWorldObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
|
||||
for (Player* player : targets)
|
||||
player->SendDirectMessage(WorldPackets::Misc::Playsound(sound_id).Write());
|
||||
|
|
@ -2914,7 +2895,7 @@ void WorldObject::PlayRadiusMusic(uint32 music_id, float radius)
|
|||
std::vector<Player*> targets;
|
||||
Acore::AnyPlayerInObjectRangeCheck check(this, radius, false);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, targets, check);
|
||||
Cell::VisitWorldObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
|
||||
for (Player* player : targets)
|
||||
player->SendDirectMessage(WorldPackets::Misc::PlayMusic(music_id).Write());
|
||||
|
|
@ -2942,7 +2923,7 @@ void WorldObject::UpdateObjectVisibility(bool /*forced*/, bool /*fromUpdate*/)
|
|||
{
|
||||
//updates object's visibility for nearby players
|
||||
Acore::VisibleChangesNotifier notifier(*this);
|
||||
Cell::VisitWorldObjects(this, notifier, GetVisibilityRange());
|
||||
Cell::VisitObjects(this, notifier, GetVisibilityRange());
|
||||
}
|
||||
|
||||
void WorldObject::AddToNotify(uint16 f)
|
||||
|
|
@ -2990,7 +2971,7 @@ void WorldObject::GetCreaturesWithEntryInRange(std::list<Creature*>& creatureLis
|
|||
{
|
||||
Acore::AllCreaturesOfEntryInRange check(this, entry, radius);
|
||||
Acore::CreatureListSearcher<Acore::AllCreaturesOfEntryInRange> searcher(this, creatureList, check);
|
||||
Cell::VisitAllObjects(this, searcher, radius);
|
||||
Cell::VisitObjects(this, searcher, radius);
|
||||
}
|
||||
|
||||
void WorldObject::AddToObjectUpdate()
|
||||
|
|
|
|||
|
|
@ -460,7 +460,7 @@ private:
|
|||
class WorldObject : public Object, public WorldLocation
|
||||
{
|
||||
protected:
|
||||
explicit WorldObject(bool isWorldObject); //note: here it means if it is in grid object list or world object list
|
||||
explicit WorldObject();
|
||||
public:
|
||||
~WorldObject() override;
|
||||
|
||||
|
|
@ -657,7 +657,6 @@ public:
|
|||
[[nodiscard]] bool IsFarVisible() const { return m_isFarVisible; }
|
||||
[[nodiscard]] bool IsVisibilityOverridden() const { return m_visibilityDistanceOverride.has_value(); }
|
||||
void SetVisibilityDistanceOverride(VisibilityDistanceType type);
|
||||
[[nodiscard]] bool IsWorldObject() const { return m_isWorldObject; }
|
||||
|
||||
[[nodiscard]] bool IsInWintergrasp() const
|
||||
{
|
||||
|
|
@ -722,7 +721,6 @@ protected:
|
|||
bool m_isActive;
|
||||
bool m_isFarVisible;
|
||||
Optional<float> m_visibilityDistanceOverride;
|
||||
const bool m_isWorldObject;
|
||||
ZoneScript* m_zoneScript;
|
||||
|
||||
virtual void ProcessPositionDataChanged(PositionFullTerrainStatus const& data);
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include "WorldPacket.h"
|
||||
#include "WorldSession.h"
|
||||
|
||||
Pet::Pet(Player* owner, PetType type) : Guardian(nullptr, owner ? owner->GetGUID() : ObjectGuid::Empty, true),
|
||||
Pet::Pet(Player* owner, PetType type) : Guardian(nullptr, owner ? owner->GetGUID() : ObjectGuid::Empty),
|
||||
m_usedTalentCount(0),
|
||||
m_removed(false),
|
||||
m_owner(owner),
|
||||
|
|
@ -75,7 +75,7 @@ void Pet::AddToWorld()
|
|||
if (!IsInWorld())
|
||||
{
|
||||
///- Register the pet for guid lookup
|
||||
GetMap()->GetObjectsStore().Insert<Pet>(GetGUID(), this);
|
||||
GetMap()->GetObjectsStore().Insert<Creature>(GetGUID(), this);
|
||||
Unit::AddToWorld();
|
||||
Motion_Initialize();
|
||||
AIM_Initialize();
|
||||
|
|
@ -126,7 +126,7 @@ void Pet::RemoveFromWorld()
|
|||
{
|
||||
///- Don't call the function for Creature, normal mobs + totems go in a different storage
|
||||
Unit::RemoveFromWorld();
|
||||
GetMap()->GetObjectsStore().Remove<Pet>(GetGUID());
|
||||
GetMap()->GetObjectsStore().Remove<Creature>(GetGUID());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -149,7 +149,7 @@ static uint32 copseReclaimDelay[MAX_DEATH_COUNT] = { 30, 60, 120 };
|
|||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4355)
|
||||
#endif
|
||||
Player::Player(WorldSession* session): Unit(true), m_mover(this)
|
||||
Player::Player(WorldSession* session): Unit(), m_mover(this)
|
||||
{
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(default:4355)
|
||||
|
|
@ -9381,7 +9381,7 @@ void Player::Say(std::string_view text, Language language, WorldObject const* /*
|
|||
|
||||
// Special handling for messages, do not use visibility map for stealthed units
|
||||
Acore::MessageDistDeliverer notifier(this, &data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY), false, nullptr, true);
|
||||
Cell::VisitWorldObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
|
||||
Cell::VisitObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_SAY));
|
||||
}
|
||||
|
||||
void Player::Say(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
|
|
@ -9407,7 +9407,7 @@ void Player::Yell(std::string_view text, Language language, WorldObject const* /
|
|||
|
||||
// Special handling for messages, do not use visibility map for stealthed units
|
||||
Acore::MessageDistDeliverer notifier(this, &data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL), false, nullptr, true);
|
||||
Cell::VisitWorldObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL));
|
||||
Cell::VisitObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_YELL));
|
||||
}
|
||||
|
||||
void Player::Yell(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
|
|
@ -9433,7 +9433,7 @@ void Player::TextEmote(std::string_view text, WorldObject const* /*= nullptr*/,
|
|||
|
||||
// Special handling for messages, do not use visibility map for stealthed units
|
||||
Acore::MessageDistDeliverer notifier(this, &data, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), !sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_EMOTE), nullptr, true);
|
||||
Cell::VisitWorldObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE));
|
||||
Cell::VisitObjects(this, notifier, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE));
|
||||
}
|
||||
|
||||
void Player::TextEmote(uint32 textId, WorldObject const* target /*= nullptr*/, bool /*isBossEmote = false*/)
|
||||
|
|
|
|||
|
|
@ -1601,13 +1601,13 @@ void Player::UpdateVisibilityForPlayer(bool mapChange)
|
|||
Acore::VisibleNotifier notifierNoLarge(
|
||||
*this, mapChange,
|
||||
false); // visit only objects which are not large; default distance
|
||||
Cell::VisitAllObjects(m_seer, notifierNoLarge,
|
||||
Cell::VisitObjects(m_seer, notifierNoLarge,
|
||||
GetSightRange() + VISIBILITY_INC_FOR_GOBJECTS);
|
||||
notifierNoLarge.SendToSelf();
|
||||
|
||||
Acore::VisibleNotifier notifierLarge(
|
||||
*this, mapChange, true); // visit only large objects; maximum distance
|
||||
Cell::VisitAllObjects(m_seer, notifierLarge, GetSightRange());
|
||||
Cell::VisitObjects(m_seer, notifierLarge, GetSightRange());
|
||||
notifierLarge.SendToSelf();
|
||||
|
||||
if (mapChange)
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
#include "SpellMgr.h"
|
||||
#include "TotemPackets.h"
|
||||
|
||||
Totem::Totem(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion(properties, owner, false)
|
||||
Totem::Totem(SummonPropertiesEntry const* properties, ObjectGuid owner) : Minion(properties, owner)
|
||||
{
|
||||
m_unitTypeMask |= UNIT_MASK_TOTEM;
|
||||
m_duration = 0;
|
||||
|
|
|
|||
|
|
@ -201,7 +201,7 @@ SpellInfo const* ProcEventInfo::GetSpellInfo() const
|
|||
#ifdef _MSC_VER
|
||||
#pragma warning(disable:4355)
|
||||
#endif
|
||||
Unit::Unit(bool isWorldObject) : WorldObject(isWorldObject),
|
||||
Unit::Unit() : WorldObject(),
|
||||
m_movedByPlayer(nullptr),
|
||||
m_lastSanctuaryTime(0),
|
||||
IsAIEnabled(false),
|
||||
|
|
@ -17060,7 +17060,7 @@ Unit* Unit::SelectNearbyTarget(Unit* exclude, float dist) const
|
|||
std::list<Unit*> targets;
|
||||
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(this, this, dist);
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(this, targets, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, dist);
|
||||
Cell::VisitObjects(this, searcher, dist);
|
||||
|
||||
// remove current target
|
||||
if (GetVictim())
|
||||
|
|
@ -17095,7 +17095,7 @@ Unit* Unit::SelectNearbyNoTotemTarget(Unit* exclude, float dist) const
|
|||
std::list<Unit*> targets;
|
||||
Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck u_check(this, this, dist);
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyNoTotemUnitInObjectRangeCheck> searcher(this, targets, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, dist);
|
||||
Cell::VisitObjects(this, searcher, dist);
|
||||
|
||||
// remove current target
|
||||
if (GetVictim())
|
||||
|
|
@ -17332,7 +17332,7 @@ void Unit::SetContestedPvP(Player* attackedPlayer, bool lookForNearContestedGuar
|
|||
std::list<Unit*> targets;
|
||||
Acore::NearestVisibleDetectableContestedGuardUnitCheck u_check(this);
|
||||
Acore::UnitListSearcher<Acore::NearestVisibleDetectableContestedGuardUnitCheck> searcher(this, targets, u_check);
|
||||
Cell::VisitAllObjects(this, searcher, MAX_AGGRO_RADIUS);
|
||||
Cell::VisitObjects(this, searcher, MAX_AGGRO_RADIUS);
|
||||
|
||||
// return if there are no contested guards found
|
||||
if (!targets.size())
|
||||
|
|
@ -19224,7 +19224,7 @@ void Unit::UpdateObjectVisibility(bool forced, bool /*fromUpdate*/)
|
|||
WorldObject::UpdateObjectVisibility(true);
|
||||
Acore::AIRelocationNotifier notifier(*this);
|
||||
float radius = 60.0f;
|
||||
Cell::VisitAllObjects(this, notifier, radius);
|
||||
Cell::VisitObjects(this, notifier, radius);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -20275,10 +20275,10 @@ void Unit::ExecuteDelayedUnitRelocationEvent()
|
|||
}
|
||||
|
||||
Acore::PlayerRelocationNotifier relocateNoLarge(*player, false); // visit only objects which are not large; default distance
|
||||
Cell::VisitAllObjects(viewPoint, relocateNoLarge, player->GetSightRange() + VISIBILITY_INC_FOR_GOBJECTS);
|
||||
Cell::VisitObjects(viewPoint, relocateNoLarge, player->GetSightRange() + VISIBILITY_INC_FOR_GOBJECTS);
|
||||
relocateNoLarge.SendToSelf();
|
||||
Acore::PlayerRelocationNotifier relocateLarge(*player, true); // visit only large objects; maximum distance
|
||||
Cell::VisitAllObjects(viewPoint, relocateLarge, MAX_VISIBILITY_DISTANCE);
|
||||
Cell::VisitObjects(viewPoint, relocateLarge, MAX_VISIBILITY_DISTANCE);
|
||||
relocateLarge.SendToSelf();
|
||||
}
|
||||
|
||||
|
|
@ -20314,13 +20314,13 @@ void Unit::ExecuteDelayedUnitRelocationEvent()
|
|||
GetMap()->LoadGridsInRange(*player, MAX_VISIBILITY_DISTANCE);
|
||||
|
||||
Acore::PlayerRelocationNotifier relocateNoLarge(*player, false); // visit only objects which are not large; default distance
|
||||
Cell::VisitAllObjects(viewPoint, relocateNoLarge, player->GetSightRange() + VISIBILITY_INC_FOR_GOBJECTS);
|
||||
Cell::VisitObjects(viewPoint, relocateNoLarge, player->GetSightRange() + VISIBILITY_INC_FOR_GOBJECTS);
|
||||
relocateNoLarge.SendToSelf();
|
||||
|
||||
if (!player->GetFarSightDistance())
|
||||
{
|
||||
Acore::PlayerRelocationNotifier relocateLarge(*player, true); // visit only large objects; maximum distance
|
||||
Cell::VisitAllObjects(viewPoint, relocateLarge, MAX_VISIBILITY_DISTANCE);
|
||||
Cell::VisitObjects(viewPoint, relocateLarge, MAX_VISIBILITY_DISTANCE);
|
||||
relocateLarge.SendToSelf();
|
||||
}
|
||||
|
||||
|
|
@ -20342,7 +20342,7 @@ void Unit::ExecuteDelayedUnitRelocationEvent()
|
|||
unit->m_last_notify_position.Relocate(unit->GetPositionX(), unit->GetPositionY(), unit->GetPositionZ());
|
||||
|
||||
Acore::CreatureRelocationNotifier relocate(*unit);
|
||||
Cell::VisitAllObjects(unit, relocate, unit->GetVisibilityRange() + VISIBILITY_COMPENSATION);
|
||||
Cell::VisitObjects(unit, relocate, unit->GetVisibilityRange() + VISIBILITY_COMPENSATION);
|
||||
|
||||
this->AddToNotify(NOTIFY_AI_RELOCATION);
|
||||
}
|
||||
|
|
@ -20356,7 +20356,7 @@ void Unit::ExecuteDelayedUnitAINotifyEvent()
|
|||
|
||||
Acore::AIRelocationNotifier notifier(*this);
|
||||
float radius = 60.0f;
|
||||
Cell::VisitAllObjects(this, notifier, radius);
|
||||
Cell::VisitObjects(this, notifier, radius);
|
||||
}
|
||||
|
||||
void Unit::SetInFront(WorldObject const* target)
|
||||
|
|
@ -20992,7 +20992,7 @@ void Unit::Talk(std::string_view text, ChatMsg msgType, Language language, float
|
|||
Acore::CustomChatTextBuilder builder(this, msgType, text, language, target);
|
||||
Acore::LocalizedPacketDo<Acore::CustomChatTextBuilder> localizer(builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::CustomChatTextBuilder> > worker(this, textRange, localizer);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
Cell::VisitObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(std::string_view text, Language language, WorldObject const* target /*= nullptr*/)
|
||||
|
|
@ -21050,7 +21050,7 @@ void Unit::Talk(uint32 textId, ChatMsg msgType, float textRange, WorldObject con
|
|||
Acore::BroadcastTextBuilder builder(this, msgType, textId, getGender(), target);
|
||||
Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> localizer(builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::BroadcastTextBuilder> > worker(this, textRange, localizer);
|
||||
Cell::VisitWorldObjects(this, worker, textRange);
|
||||
Cell::VisitObjects(this, worker, textRange);
|
||||
}
|
||||
|
||||
void Unit::Say(uint32 textId, WorldObject const* target /*= nullptr*/)
|
||||
|
|
|
|||
|
|
@ -2029,7 +2029,7 @@ public:
|
|||
Movement::MoveSpline* movespline;
|
||||
|
||||
protected:
|
||||
explicit Unit (bool isWorldObject);
|
||||
explicit Unit();
|
||||
|
||||
void BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) override;
|
||||
|
||||
|
|
|
|||
|
|
@ -103,13 +103,8 @@ struct Cell
|
|||
|
||||
static CellArea CalculateCellArea(float x, float y, float radius);
|
||||
|
||||
template<class T> static void VisitGridObjects(WorldObject const* obj, T& visitor, float radius);
|
||||
template<class T> static void VisitWorldObjects(WorldObject const* obj, T& visitor, float radius);
|
||||
template<class T> static void VisitAllObjects(WorldObject const* obj, T& visitor, float radius);
|
||||
|
||||
template<class T> static void VisitGridObjects(float x, float y, Map* map, T& visitor, float radius);
|
||||
template<class T> static void VisitWorldObjects(float x, float y, Map* map, T& visitor, float radius);
|
||||
template<class T> static void VisitAllObjects(float x, float y, Map* map, T& visitor, float radius);
|
||||
template<class T> static void VisitObjects(WorldObject const* obj, T& visitor, float radius);
|
||||
template<class T> static void VisitObjects(float x, float y, Map* map, T& visitor, float radius);
|
||||
|
||||
private:
|
||||
template<class T, class CONTAINER> void VisitCircle(TypeContainerVisitor<T, CONTAINER>&, Map&, CellCoord const&, CellCoord const&) const;
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ inline void Cell::VisitCircle(TypeContainerVisitor<T, CONTAINER>& visitor, Map&
|
|||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitGridObjects(WorldObject const* center_obj, T& visitor, float radius)
|
||||
inline void Cell::VisitObjects(WorldObject const* center_obj, T& visitor, float radius)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
|
|
@ -172,29 +172,7 @@ inline void Cell::VisitGridObjects(WorldObject const* center_obj, T& visitor, fl
|
|||
}
|
||||
|
||||
template<class T>
|
||||
inline void Cell::VisitWorldObjects(WorldObject const* center_obj, T& visitor, float radius)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
|
||||
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)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(center_obj->GetPositionX(), center_obj->GetPositionY()));
|
||||
Cell cell(p);
|
||||
|
||||
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)
|
||||
inline void Cell::VisitObjects(float x, float y, Map* map, T& visitor, float radius)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
|
|
@ -203,26 +181,4 @@ inline void Cell::VisitGridObjects(float x, float y, Map* map, T& visitor, float
|
|||
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)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
|
||||
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)
|
||||
{
|
||||
CellCoord p(Acore::ComputeCellCoord(x, y));
|
||||
Cell cell(p);
|
||||
|
||||
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
|
||||
|
|
|
|||
|
|
@ -35,7 +35,6 @@
|
|||
|
||||
template
|
||||
<
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class GridCell
|
||||
|
|
@ -43,12 +42,6 @@ class GridCell
|
|||
public:
|
||||
~GridCell() = default;
|
||||
|
||||
template<class SPECIFIC_OBJECT> void AddWorldObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
_worldObjects.template insert<SPECIFIC_OBJECT>(obj);
|
||||
ASSERT(obj->IsInGrid());
|
||||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT> void AddGridObject(SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
_gridObjects.template insert<SPECIFIC_OBJECT>(obj);
|
||||
|
|
@ -62,14 +55,7 @@ public:
|
|||
visitor.Visit(_gridObjects);
|
||||
}
|
||||
|
||||
// Visit world objects
|
||||
template<class T>
|
||||
void Visit(TypeContainerVisitor<T, TypeMapContainer<WORLD_OBJECT_TYPES> >& visitor)
|
||||
{
|
||||
visitor.Visit(_worldObjects);
|
||||
}
|
||||
private:
|
||||
TypeMapContainer<GRID_OBJECT_TYPES> _gridObjects;
|
||||
TypeMapContainer<WORLD_OBJECT_TYPES> _worldObjects;
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -51,10 +51,11 @@ class ObjectGuid;
|
|||
#define MAP_SIZE (SIZE_OF_GRIDS*MAX_NUMBER_OF_GRIDS)
|
||||
#define MAP_HALFSIZE (MAP_SIZE/2)
|
||||
|
||||
// Creature used instead pet to simplify *::Visit templates (not required duplicate code for Creature->Pet case)
|
||||
typedef TYPELIST_4(GameObject, Player, Creature/*pets*/, Corpse/*resurrectable*/) AllWorldObjectTypes;
|
||||
typedef TYPELIST_4(GameObject, Creature/*except pets*/, DynamicObject, Corpse/*Bones*/) AllGridObjectTypes;
|
||||
typedef TYPELIST_5(Creature, GameObject, DynamicObject, Pet, Corpse) AllMapStoredObjectTypes;
|
||||
// List of object types stored in a map grid
|
||||
typedef TYPELIST_5(GameObject, Player, Creature, Corpse, DynamicObject) AllMapGridStoredObjectTypes;
|
||||
|
||||
// List of object types stored on map level
|
||||
typedef TYPELIST_4(Creature, GameObject, DynamicObject, Corpse) AllMapStoredObjectTypes;
|
||||
|
||||
typedef GridRefMgr<Corpse> CorpseMapType;
|
||||
typedef GridRefMgr<Creature> CreatureMapType;
|
||||
|
|
@ -72,11 +73,10 @@ enum GridMapTypeMask
|
|||
GRID_MAP_TYPE_MASK_ALL = 0x1F
|
||||
};
|
||||
|
||||
typedef GridCell<AllWorldObjectTypes, AllGridObjectTypes> GridCellType;
|
||||
typedef MapGrid<AllWorldObjectTypes, AllGridObjectTypes> MapGridType;
|
||||
typedef GridCell<AllMapGridStoredObjectTypes> GridCellType;
|
||||
typedef MapGrid<AllMapGridStoredObjectTypes> MapGridType;
|
||||
|
||||
typedef TypeMapContainer<AllGridObjectTypes> GridTypeMapContainer;
|
||||
typedef TypeMapContainer<AllWorldObjectTypes> WorldTypeMapContainer;
|
||||
typedef TypeMapContainer<AllMapGridStoredObjectTypes> GridTypeMapContainer;
|
||||
typedef TypeUnorderedMapContainer<AllMapStoredObjectTypes, ObjectGuid> MapStoredObjectTypesContainer;
|
||||
|
||||
template<uint32 LIMIT>
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ void GridObjectLoader::AddObjectHelper(Map* map, T* obj)
|
|||
CellCoord cellCoord = Acore::ComputeCellCoord(obj->GetPositionX(), obj->GetPositionY());
|
||||
Cell cell(cellCoord);
|
||||
|
||||
map->AddToGrid(obj, cell);
|
||||
map->AddToGrid<T>(obj, cell);
|
||||
obj->AddToWorld();
|
||||
}
|
||||
|
||||
|
|
@ -53,7 +53,7 @@ void GridObjectLoader::LoadCreatures(CellGuidSet const& guid_set, Map* map)
|
|||
{
|
||||
// call MoveInLineOfSight for nearby grid creatures
|
||||
Acore::AIRelocationNotifier notifier(*obj);
|
||||
Cell::VisitGridObjects(obj, notifier, 60.f);
|
||||
Cell::VisitObjects(obj, notifier, 60.f);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ class GridObjectCleaner
|
|||
{
|
||||
public:
|
||||
template<class T> void Visit(GridRefMgr<T>&);
|
||||
void Visit(PlayerMapType&) { }
|
||||
};
|
||||
|
||||
// Delete objects before deleting NGrid
|
||||
|
|
@ -54,6 +55,7 @@ class GridObjectUnloader
|
|||
{
|
||||
public:
|
||||
void Visit(CorpseMapType&) { } // corpses are deleted with Map
|
||||
void Visit(PlayerMapType&) { }
|
||||
template<class T> void Visit(GridRefMgr<T>& m);
|
||||
};
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -25,13 +25,12 @@ class GridTerrainData;
|
|||
|
||||
template
|
||||
<
|
||||
class WORLD_OBJECT_TYPES,
|
||||
class GRID_OBJECT_TYPES
|
||||
>
|
||||
class MapGrid
|
||||
{
|
||||
public:
|
||||
typedef GridCell<WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES> GridCellType;
|
||||
typedef GridCell<GRID_OBJECT_TYPES> GridCellType;
|
||||
|
||||
MapGrid(uint16 const x, uint16 const y)
|
||||
: _x(x), _y(y), _objectDataLoaded(false), _terrainData(nullptr) { }
|
||||
|
|
@ -45,16 +44,6 @@ public:
|
|||
bool IsObjectDataLoaded() const { return _objectDataLoaded; }
|
||||
void SetObjectDataLoaded() { _objectDataLoaded = true; }
|
||||
|
||||
template<class SPECIFIC_OBJECT> void AddWorldObject(uint16 const x, uint16 const y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
GetOrCreateCell(x, y).AddWorldObject(obj);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT> void RemoveWorldObject(uint16 const x, uint16 const y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
GetOrCreateCell(x, y).RemoveWorldObject(obj);
|
||||
}
|
||||
|
||||
template<class SPECIFIC_OBJECT> void AddGridObject(uint16 const x, uint16 const y, SPECIFIC_OBJECT* obj)
|
||||
{
|
||||
GetOrCreateCell(x, y).AddGridObject(obj);
|
||||
|
|
@ -92,7 +81,7 @@ public:
|
|||
gridCell->Visit(visitor);
|
||||
}
|
||||
|
||||
void link(GridRefMgr<MapGrid<WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES>>* pTo)
|
||||
void link(GridRefMgr<MapGrid<GRID_OBJECT_TYPES>>* pTo)
|
||||
{
|
||||
_gridReference.link(pTo, this);
|
||||
}
|
||||
|
|
@ -145,7 +134,7 @@ private:
|
|||
|
||||
bool _objectDataLoaded;
|
||||
std::array<std::array<std::unique_ptr<GridCellType>, MAX_NUMBER_OF_CELLS>, MAX_NUMBER_OF_CELLS> _cells; // N * N array
|
||||
GridReference<MapGrid<WORLD_OBJECT_TYPES, GRID_OBJECT_TYPES>> _gridReference;
|
||||
GridReference<MapGrid<GRID_OBJECT_TYPES>> _gridReference;
|
||||
|
||||
// Instances will share a copy of the parent maps terrainData
|
||||
std::shared_ptr<GridTerrainData> _terrainData;
|
||||
|
|
|
|||
|
|
@ -780,7 +780,7 @@ void WorldSession::HandleTextEmoteOpcode(WorldPacket& recvData)
|
|||
Acore::EmoteChatBuilder emote_builder(*GetPlayer(), text_emote, emoteNum, unit);
|
||||
Acore::LocalizedPacketDo<Acore::EmoteChatBuilder > emote_do(emote_builder);
|
||||
Acore::PlayerDistWorker<Acore::LocalizedPacketDo<Acore::EmoteChatBuilder > > emote_worker(GetPlayer(), sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE), emote_do);
|
||||
Cell::VisitWorldObjects(GetPlayer(), emote_worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE));
|
||||
Cell::VisitObjects(GetPlayer(), emote_worker, sWorld->getFloatConfig(CONFIG_LISTEN_RANGE_TEXTEMOTE));
|
||||
|
||||
GetPlayer()->UpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_DO_EMOTE, text_emote, 0, unit);
|
||||
|
||||
|
|
|
|||
|
|
@ -55,16 +55,6 @@ Map::~Map()
|
|||
|
||||
sScriptMgr->OnDestroyMap(this);
|
||||
|
||||
while (!i_worldObjects.empty())
|
||||
{
|
||||
WorldObject* obj = *i_worldObjects.begin();
|
||||
ASSERT(obj->IsWorldObject());
|
||||
LOG_DEBUG("maps", "Map::~Map: WorldObject TypeId is not a corpse! ({})", static_cast<uint8>(obj->GetTypeId()));
|
||||
//ASSERT(obj->IsCorpse());
|
||||
obj->RemoveFromWorld();
|
||||
obj->ResetMap();
|
||||
}
|
||||
|
||||
if (!m_scriptSchedule.empty())
|
||||
sScriptMgr->DecreaseScheduledScriptCount(m_scriptSchedule.size());
|
||||
|
||||
|
|
@ -116,20 +106,16 @@ template<class T>
|
|||
void Map::AddToGrid(T* obj, Cell const& cell)
|
||||
{
|
||||
MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
|
||||
if (obj->IsWorldObject())
|
||||
grid->AddWorldObject<T>(cell.CellX(), cell.CellY(), obj);
|
||||
else
|
||||
grid->AddGridObject<T>(cell.CellX(), cell.CellY(), obj);
|
||||
grid->AddGridObject<T>(cell.CellX(), cell.CellY(), obj);
|
||||
|
||||
obj->SetCurrentCell(cell);
|
||||
}
|
||||
|
||||
template<>
|
||||
void Map::AddToGrid(Creature* obj, Cell const& cell)
|
||||
{
|
||||
MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
|
||||
if (obj->IsWorldObject())
|
||||
grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
|
||||
else
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
|
||||
obj->SetCurrentCell(cell);
|
||||
}
|
||||
|
|
@ -144,15 +130,10 @@ void Map::AddToGrid(GameObject* obj, Cell const& cell)
|
|||
}
|
||||
|
||||
template<>
|
||||
void Map::AddToGrid(DynamicObject* obj, Cell const& cell)
|
||||
void Map::AddToGrid(Player* obj, Cell const& cell)
|
||||
{
|
||||
MapGridType* grid = GetMapGrid(cell.GridX(), cell.GridY());
|
||||
if (obj->IsWorldObject())
|
||||
grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
|
||||
else
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
|
||||
obj->SetCurrentCell(cell);
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
}
|
||||
|
||||
template<>
|
||||
|
|
@ -166,12 +147,7 @@ void Map::AddToGrid(Corpse* obj, Cell const& cell)
|
|||
// so we need to explicitly check it here (Map::AddToGrid is only called from Player::BuildPlayerRepop, not from ObjectGridLoader)
|
||||
// to avoid failing an assertion in GridObject::AddToGrid
|
||||
if (grid->IsObjectDataLoaded())
|
||||
{
|
||||
if (obj->IsWorldObject())
|
||||
grid->AddWorldObject(cell.CellX(), cell.CellY(), obj);
|
||||
else
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
}
|
||||
grid->AddGridObject(cell.CellX(), cell.CellY(), obj);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
@ -2315,7 +2291,7 @@ GameObject* Map::GetGameObject(ObjectGuid const guid)
|
|||
|
||||
Pet* Map::GetPet(ObjectGuid const guid)
|
||||
{
|
||||
return _objectsStore.Find<Pet>(guid);
|
||||
return dynamic_cast<Pet*>(_objectsStore.Find<Creature>(guid));
|
||||
}
|
||||
|
||||
Transport* Map::GetTransport(ObjectGuid guid)
|
||||
|
|
|
|||
|
|
@ -315,9 +315,6 @@ public:
|
|||
[[nodiscard]] bool HavePlayers() const { return !m_mapRefMgr.IsEmpty(); }
|
||||
[[nodiscard]] uint32 GetPlayersCountExceptGMs() const;
|
||||
|
||||
void AddWorldObject(WorldObject* obj) { i_worldObjects.insert(obj); }
|
||||
void RemoveWorldObject(WorldObject* obj) { i_worldObjects.erase(obj); }
|
||||
|
||||
void SendToPlayers(WorldPacket const* data) const;
|
||||
|
||||
typedef MapRefMgr PlayerList;
|
||||
|
|
@ -560,7 +557,6 @@ private:
|
|||
|
||||
bool i_scriptLock;
|
||||
std::unordered_set<WorldObject*> i_objectsToRemove;
|
||||
std::unordered_set<WorldObject*> i_worldObjects;
|
||||
|
||||
typedef std::multimap<time_t, ScriptAction> ScriptScheduleMap;
|
||||
ScriptScheduleMap m_scriptSchedule;
|
||||
|
|
|
|||
|
|
@ -336,7 +336,7 @@ bool OPvPCapturePoint::Update(uint32 diff)
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(_capturePoint, radius);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(_capturePoint, players, checker);
|
||||
Cell::VisitWorldObjects(_capturePoint, searcher, radius);
|
||||
Cell::VisitObjects(_capturePoint, searcher, radius);
|
||||
|
||||
for (auto& itr : players)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2838,7 +2838,7 @@ void AuraEffect::HandleFeignDeath(AuraApplication const* aurApp, uint8 mode, boo
|
|||
UnitList targets;
|
||||
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(target, target, target->GetVisibilityRange()); // no VISIBILITY_COMPENSATION, distance is enough
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(target, targets, u_check);
|
||||
Cell::VisitAllObjects(target, searcher, target->GetMap()->GetVisibilityRange());
|
||||
Cell::VisitObjects(target, searcher, target->GetMap()->GetVisibilityRange());
|
||||
for (UnitList::iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
if (!(*iter)->HasUnitState(UNIT_STATE_CASTING))
|
||||
|
|
@ -5631,7 +5631,7 @@ void AuraEffect::HandleAuraDummy(AuraApplication const* aurApp, uint8 mode, bool
|
|||
Player* player = nullptr;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(target, 10.0f);
|
||||
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(target, player, checker);
|
||||
Cell::VisitWorldObjects(target, searcher, 10.0f);
|
||||
Cell::VisitObjects(target, searcher, 10.0f);
|
||||
|
||||
if (player && player->GetGUID() != target->GetGUID())
|
||||
target->CastSpell(player, 52921, true);
|
||||
|
|
@ -7365,7 +7365,7 @@ void AuraEffect::HandleRaidProcFromChargeWithValueAuraProc(AuraApplication* aurA
|
|||
Unit* triggerTarget = nullptr;
|
||||
Acore::MostHPMissingGroupInRange u_check(target, radius, 0);
|
||||
Acore::UnitLastSearcher<Acore::MostHPMissingGroupInRange> searcher(target, triggerTarget, u_check);
|
||||
Cell::VisitAllObjects(target, searcher, radius);
|
||||
Cell::VisitObjects(target, searcher, radius);
|
||||
|
||||
if (triggerTarget)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -2823,7 +2823,7 @@ void UnitAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* caster)
|
|||
targetList.push_back(GetUnitOwner());
|
||||
Acore::AnyGroupedUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius, GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_APPLY_AREA_AURA_RAID);
|
||||
Acore::UnitListSearcher<Acore::AnyGroupedUnitInObjectRangeCheck> searcher(GetUnitOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_FRIEND:
|
||||
|
|
@ -2831,14 +2831,14 @@ void UnitAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* caster)
|
|||
targetList.push_back(GetUnitOwner());
|
||||
Acore::AnyFriendlyUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius);
|
||||
Acore::UnitListSearcher<Acore::AnyFriendlyUnitInObjectRangeCheck> searcher(GetUnitOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_ENEMY:
|
||||
{
|
||||
Acore::AnyAoETargetUnitInObjectRangeCheck u_check(GetUnitOwner(), GetUnitOwner(), radius); // No GetCharmer in searcher
|
||||
Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck> searcher(GetUnitOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetUnitOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetUnitOwner(), searcher, radius);
|
||||
break;
|
||||
}
|
||||
case SPELL_EFFECT_APPLY_AREA_AURA_PET:
|
||||
|
|
@ -2900,7 +2900,7 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
|
|||
{
|
||||
Acore::AnyFriendlyUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
|
||||
Acore::UnitListSearcher<Acore::AnyFriendlyUnitInObjectRangeCheck> searcher(GetDynobjOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetDynobjOwner(), searcher, radius);
|
||||
}
|
||||
// pussywizard: TARGET_DEST_DYNOBJ_NONE is supposed to search for both friendly and unfriendly targets, so for any unit
|
||||
// what about EffectImplicitTargetA?
|
||||
|
|
@ -2908,13 +2908,13 @@ void DynObjAura::FillTargetMap(std::map<Unit*, uint8>& targets, Unit* /*caster*/
|
|||
{
|
||||
Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
|
||||
Acore::UnitListSearcher<Acore::AnyAttackableUnitExceptForOriginalCasterInObjectRangeCheck> searcher(GetDynobjOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetDynobjOwner(), searcher, radius);
|
||||
}
|
||||
else
|
||||
{
|
||||
Acore::AnyAoETargetUnitInObjectRangeCheck u_check(GetDynobjOwner(), dynObjOwnerCaster, radius);
|
||||
Acore::UnitListSearcher<Acore::AnyAoETargetUnitInObjectRangeCheck> searcher(GetDynobjOwner(), targetList, u_check);
|
||||
Cell::VisitAllObjects(GetDynobjOwner(), searcher, radius);
|
||||
Cell::VisitObjects(GetDynobjOwner(), searcher, radius);
|
||||
}
|
||||
|
||||
for (UnitList::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
|
||||
|
|
|
|||
|
|
@ -2161,24 +2161,7 @@ void Spell::SearchTargets(SEARCHER& searcher, uint32 containerMask, Unit* refere
|
|||
if (!containerMask)
|
||||
return;
|
||||
|
||||
// search world and grid for possible targets
|
||||
bool searchInGrid = containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_GAMEOBJECT);
|
||||
bool searchInWorld = containerMask & (GRID_MAP_TYPE_MASK_CREATURE | GRID_MAP_TYPE_MASK_PLAYER | GRID_MAP_TYPE_MASK_CORPSE);
|
||||
|
||||
if (searchInGrid || searchInWorld)
|
||||
{
|
||||
float x, y;
|
||||
x = pos->GetPositionX();
|
||||
y = pos->GetPositionY();
|
||||
|
||||
Map* map = referer->GetMap();
|
||||
|
||||
if (searchInWorld)
|
||||
Cell::VisitWorldObjects(x, y, map, searcher, radius);
|
||||
|
||||
if (searchInGrid)
|
||||
Cell::VisitGridObjects(x, y, map, searcher, radius);
|
||||
}
|
||||
Cell::VisitObjects(pos->GetPositionX(), pos->GetPositionY(), referer->GetMap(), searcher, radius);
|
||||
}
|
||||
|
||||
WorldObject* Spell::SearchNearbyTarget(float range, SpellTargetObjectTypes objectType, SpellTargetCheckTypes selectionType, ConditionList* condList)
|
||||
|
|
|
|||
|
|
@ -1854,7 +1854,7 @@ void Spell::EffectPersistentAA(SpellEffIndex effIndex)
|
|||
// Caster not in world, might be spell triggered from aura removal
|
||||
if (!caster->IsInWorld() || !caster->FindMap() || !ObjectAccessor::GetUnit(*caster, caster->GetGUID())) // pussywizard: temporary crash fix (FindMap and GetUnit are mine)
|
||||
return;
|
||||
DynamicObject* dynObj = new DynamicObject(false);
|
||||
DynamicObject* dynObj = new DynamicObject();
|
||||
if (!dynObj->CreateDynamicObject(caster->GetMap()->GenerateLowGuid<HighGuid::DynamicObject>(), caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_AREA_SPELL))
|
||||
{
|
||||
delete dynObj;
|
||||
|
|
@ -2731,7 +2731,7 @@ void Spell::EffectAddFarsight(SpellEffIndex effIndex)
|
|||
// Remove old farsight if exist
|
||||
bool updateViewerVisibility = m_caster->RemoveDynObject(m_spellInfo->Id);
|
||||
|
||||
DynamicObject* dynObj = new DynamicObject(false);
|
||||
DynamicObject* dynObj = new DynamicObject();
|
||||
if (!dynObj->CreateDynamicObject(m_caster->GetMap()->GenerateLowGuid<HighGuid::DynamicObject>(), m_caster, m_spellInfo->Id, *destTarget, radius, DYNAMIC_OBJECT_FARSIGHT_FOCUS))
|
||||
{
|
||||
delete dynObj;
|
||||
|
|
@ -4043,7 +4043,7 @@ void Spell::EffectSanctuary(SpellEffIndex /*effIndex*/)
|
|||
UnitList targets;
|
||||
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(unitTarget, unitTarget, unitTarget->GetVisibilityRange()); // no VISIBILITY_COMPENSATION, distance is enough
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(unitTarget, targets, u_check);
|
||||
Cell::VisitAllObjects(unitTarget, searcher, unitTarget->GetVisibilityRange());
|
||||
Cell::VisitObjects(unitTarget, searcher, unitTarget->GetVisibilityRange());
|
||||
for (UnitList::iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
if (!(*iter)->HasUnitState(UNIT_STATE_CASTING))
|
||||
|
|
@ -4778,7 +4778,7 @@ void Spell::EffectForceDeselect(SpellEffIndex /*effIndex*/)
|
|||
|
||||
float dist = m_caster->GetVisibilityRange() + VISIBILITY_COMPENSATION;
|
||||
Acore::MessageDistDelivererToHostile notifier(m_caster, &data, dist);
|
||||
Cell::VisitWorldObjects(m_caster, notifier, dist);
|
||||
Cell::VisitObjects(m_caster, notifier, dist);
|
||||
|
||||
// xinef: we should also force pets to remove us from current target
|
||||
Unit::AttackerSet attackerSet;
|
||||
|
|
@ -4803,7 +4803,7 @@ void Spell::EffectForceDeselect(SpellEffIndex /*effIndex*/)
|
|||
UnitList targets;
|
||||
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(m_caster, m_caster, m_caster->GetVisibilityRange()); // no VISIBILITY_COMPENSATION, distance is enough
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(m_caster, targets, u_check);
|
||||
Cell::VisitAllObjects(m_caster, searcher, m_caster->GetVisibilityRange());
|
||||
Cell::VisitObjects(m_caster, searcher, m_caster->GetVisibilityRange());
|
||||
for (UnitList::iterator iter = targets.begin(); iter != targets.end(); ++iter)
|
||||
{
|
||||
if (!(*iter)->HasUnitState(UNIT_STATE_CASTING))
|
||||
|
|
|
|||
|
|
@ -251,7 +251,7 @@ void CreatureTextMgr::SendChatPacket(WorldObject* source, Builder const& builder
|
|||
dist = 250.0f;
|
||||
|
||||
Acore::PlayerDistWorker<CreatureTextLocalizer<Builder> > worker(source, dist, localizer);
|
||||
Cell::VisitWorldObjects(source, worker, dist);
|
||||
Cell::VisitObjects(source, worker, dist);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -911,7 +911,7 @@ public:
|
|||
Creature* passenger = nullptr;
|
||||
Acore::AllCreaturesOfEntryInRange check(handler->GetPlayer(), entry, 20.0f);
|
||||
Acore::CreatureSearcher<Acore::AllCreaturesOfEntryInRange> searcher(handler->GetPlayer(), passenger, check);
|
||||
Cell::VisitAllObjects(handler->GetPlayer(), searcher, 30.0f);
|
||||
Cell::VisitObjects(handler->GetPlayer(), searcher, 30.0f);
|
||||
|
||||
if (!passenger || passenger == target)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -2451,7 +2451,7 @@ public:
|
|||
|
||||
Acore::RespawnDo u_do;
|
||||
Acore::WorldObjectWorker<Acore::RespawnDo> worker(player, u_do);
|
||||
Cell::VisitGridObjects(player, worker, player->GetGridActivationRange());
|
||||
Cell::VisitObjects(player, worker, player->GetGridActivationRange());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -268,7 +268,7 @@ public:
|
|||
std::list<Creature*> creatureList;
|
||||
Acore::AnyUnitInObjectRangeCheck go_check(object, radius);
|
||||
Acore::CreatureListSearcher<Acore::AnyUnitInObjectRangeCheck> go_search(object, creatureList, go_check);
|
||||
Cell::VisitGridObjects(object, go_search, radius);
|
||||
Cell::VisitObjects(object, go_search, radius);
|
||||
|
||||
if (!creatureList.empty())
|
||||
{
|
||||
|
|
|
|||
|
|
@ -793,7 +793,7 @@ struct npc_brewfest_super_brew_trigger : public ScriptedAI
|
|||
Player* player = nullptr;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(me, 2.0f);
|
||||
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, player, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, 2.0f);
|
||||
Cell::VisitObjects(me, searcher, 2.0f);
|
||||
if (player)
|
||||
{
|
||||
player->CastSpell(player, SPELL_DRUNKEN_MASTER, true);
|
||||
|
|
|
|||
|
|
@ -807,7 +807,7 @@ struct npc_hallows_end_soh : public ScriptedAI
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(me, 60.f);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, players, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, 60.f);
|
||||
Cell::VisitObjects(me, searcher, 60.f);
|
||||
if (players.empty())
|
||||
{
|
||||
return;
|
||||
|
|
@ -887,7 +887,7 @@ struct npc_hallows_end_soh : public ScriptedAI
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(me, radius);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, players, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, radius);
|
||||
Cell::VisitObjects(me, searcher, radius);
|
||||
|
||||
for (Player* player : players)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -407,7 +407,7 @@ class spell_love_is_in_the_air_romantic_picnic : public AuraScript
|
|||
std::list<Player*> playerList;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(target, INTERACTION_DISTANCE * 2);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(target, playerList, checker);
|
||||
Cell::VisitWorldObjects(target, searcher, INTERACTION_DISTANCE * 2);
|
||||
Cell::VisitObjects(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)
|
||||
|
|
|
|||
|
|
@ -198,7 +198,7 @@ public:
|
|||
std::list<WorldObject*> ClusterList;
|
||||
Acore::AllWorldObjectsInRange objects(me, 50.0f);
|
||||
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(me, ClusterList, objects);
|
||||
Cell::VisitAllObjects(me, searcher, 50.0f);
|
||||
Cell::VisitObjects(me, searcher, 50.0f);
|
||||
for (std::list<WorldObject*>::const_iterator itr = ClusterList.begin(); itr != ClusterList.end(); ++itr)
|
||||
{
|
||||
if (Player* player = (*itr)->ToPlayer())
|
||||
|
|
|
|||
|
|
@ -178,7 +178,7 @@ struct boss_ouro : public BossAI
|
|||
std::list<WorldObject*> targets;
|
||||
Acore::AllWorldObjectsInRange checker(me, 10.0f);
|
||||
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(me, targets, checker);
|
||||
Cell::VisitAllObjects(me, searcher, 10.0f);
|
||||
Cell::VisitObjects(me, searcher, 10.0f);
|
||||
|
||||
for (WorldObject* target : targets)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -498,7 +498,7 @@ class spell_zulfarrak_unlocking : public SpellScript
|
|||
std::list<WorldObject*> cagesList;
|
||||
Acore::AllWorldObjectsInRange objects(GetCaster(), 15.0f);
|
||||
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(GetCaster(), cagesList, objects);
|
||||
Cell::VisitAllObjects(GetCaster(), searcher, 15.0f);
|
||||
Cell::VisitObjects(GetCaster(), searcher, 15.0f);
|
||||
for (std::list<WorldObject*>::const_iterator itr = cagesList.begin(); itr != cagesList.end(); ++itr)
|
||||
{
|
||||
if (GameObject* go = (*itr)->ToGameObject())
|
||||
|
|
|
|||
|
|
@ -653,7 +653,7 @@ public:
|
|||
Unit* unit = nullptr;
|
||||
Acore::MostHPMissingInRange u_check(me, 40.f, 1500);
|
||||
Acore::UnitLastSearcher<Acore::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, 40.f);
|
||||
Cell::VisitObjects(me, searcher, 40.f);
|
||||
if (unit)
|
||||
{
|
||||
DoCast(unit, SPELL_HEAL);
|
||||
|
|
@ -671,7 +671,7 @@ public:
|
|||
Unit* unit = nullptr;
|
||||
Acore::MostHPMissingInRange u_check(me, 40.f, 700);
|
||||
Acore::UnitLastSearcher<Acore::MostHPMissingInRange> searcher(me, unit, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, 40.f);
|
||||
Cell::VisitObjects(me, searcher, 40.f);
|
||||
if (unit)
|
||||
{
|
||||
DoCast(unit, SPELL_RENEW);
|
||||
|
|
|
|||
|
|
@ -333,7 +333,7 @@ public:
|
|||
std::list<Player*> playerOnQuestList;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(me, 5.0f);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, playerOnQuestList, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, 5.0f);
|
||||
Cell::VisitObjects(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
|
||||
|
|
|
|||
|
|
@ -673,7 +673,7 @@ public:
|
|||
// Reset The Frozen Throne gameobjects
|
||||
FrozenThroneResetWorker reset;
|
||||
Acore::GameObjectWorker<FrozenThroneResetWorker> worker(me, reset);
|
||||
Cell::VisitGridObjects(me, worker, 333.0f);
|
||||
Cell::VisitObjects(me, worker, 333.0f);
|
||||
|
||||
me->AddAura(SPELL_EMOTE_SIT_NO_SHEATH, me);
|
||||
me->SetImmuneToPC(true);
|
||||
|
|
|
|||
|
|
@ -224,7 +224,7 @@ public:
|
|||
bool Execute(uint64 /*currTime*/, uint32 /*diff*/) override
|
||||
{
|
||||
Acore::CreatureWorker<ValithriaDespawner> worker(_creature, *this);
|
||||
Cell::VisitGridObjects(_creature, worker, 333.0f);
|
||||
Cell::VisitObjects(_creature, worker, 333.0f);
|
||||
_creature->AI()->Reset();
|
||||
_creature->setActive(false);
|
||||
return true;
|
||||
|
|
@ -545,7 +545,7 @@ public:
|
|||
std::list<Creature*> archmages;
|
||||
RisenArchmageCheck check;
|
||||
Acore::CreatureListSearcher<RisenArchmageCheck> searcher(me, archmages, check);
|
||||
Cell::VisitGridObjects(me, searcher, 100.0f);
|
||||
Cell::VisitObjects(me, searcher, 100.0f);
|
||||
for (std::list<Creature*>::iterator itr = archmages.begin(); itr != archmages.end(); ++itr)
|
||||
(*itr)->AI()->DoAction(ACTION_ENTER_COMBAT);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -856,7 +856,7 @@ public:
|
|||
std::list<Creature*> temp;
|
||||
FrostwingVrykulSearcher check(me, 150.0f);
|
||||
Acore::CreatureListSearcher<FrostwingVrykulSearcher> searcher(me, temp, check);
|
||||
Cell::VisitGridObjects(me, searcher, 150.0f);
|
||||
Cell::VisitObjects(me, searcher, 150.0f);
|
||||
|
||||
_aliveTrash.clear();
|
||||
for (std::list<Creature*>::iterator itr = temp.begin(); itr != temp.end(); ++itr)
|
||||
|
|
@ -901,14 +901,14 @@ public:
|
|||
Player* player = nullptr;
|
||||
Acore::AnyPlayerInObjectRangeCheck check(me, 140.0f);
|
||||
Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(me, player, check);
|
||||
Cell::VisitWorldObjects(me, searcher, 140.0f);
|
||||
Cell::VisitObjects(me, searcher, 140.0f);
|
||||
// wipe
|
||||
if (!player || me->GetExactDist(4357.0f, 2606.0f, 350.0f) > 125.0f)
|
||||
{
|
||||
//Talk(SAY_CROK_DEATH);
|
||||
FrostwingGauntletRespawner respawner;
|
||||
Acore::CreatureWorker<FrostwingGauntletRespawner> worker(me, respawner);
|
||||
Cell::VisitGridObjects(me, worker, 333.0f);
|
||||
Cell::VisitObjects(me, worker, 333.0f);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
@ -1365,7 +1365,7 @@ public:
|
|||
Creature* target = nullptr;
|
||||
Acore::MostHPMissingInRange u_check(me, 60.0f, 0);
|
||||
Acore::CreatureLastSearcher<Acore::MostHPMissingInRange> searcher(me, target, u_check);
|
||||
Cell::VisitGridObjects(me, searcher, 60.0f);
|
||||
Cell::VisitObjects(me, searcher, 60.0f);
|
||||
return target;
|
||||
}
|
||||
};
|
||||
|
|
@ -2261,7 +2261,7 @@ public:
|
|||
{
|
||||
FrostwingGauntletRespawner respawner;
|
||||
Acore::CreatureWorker<FrostwingGauntletRespawner> worker(crok, respawner);
|
||||
Cell::VisitGridObjects(crok, worker, 333.0f);
|
||||
Cell::VisitObjects(crok, worker, 333.0f);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
|
|
|||
|
|
@ -1665,7 +1665,7 @@ class spell_vehicle_throw_passenger : public SpellScript
|
|||
std::list<WorldObject*> targetList;
|
||||
Acore::WorldObjectSpellAreaTargetCheck check(99, GetExplTargetDest(), GetCaster(), GetCaster(), GetSpellInfo(), TARGET_CHECK_DEFAULT, nullptr);
|
||||
Acore::WorldObjectListSearcher<Acore::WorldObjectSpellAreaTargetCheck> searcher(GetCaster(), targetList, check);
|
||||
Cell::VisitAllObjects(GetCaster(), searcher, 99.0f);
|
||||
Cell::VisitObjects(GetCaster(), searcher, 99.0f);
|
||||
float minDist = 99 * 99;
|
||||
Unit* target = nullptr;
|
||||
for (std::list<WorldObject*>::iterator itr = targetList.begin(); itr != targetList.end(); ++itr)
|
||||
|
|
|
|||
|
|
@ -1067,7 +1067,7 @@ public:
|
|||
go->Delete();
|
||||
WretchedGhoulCleaner cleaner;
|
||||
Acore::CreatureWorker<WretchedGhoulCleaner> worker(me, cleaner);
|
||||
Cell::VisitGridObjects(me, worker, 150.0f);
|
||||
Cell::VisitObjects(me, worker, 150.0f);
|
||||
}
|
||||
|
||||
void Reset() override
|
||||
|
|
@ -1281,7 +1281,7 @@ public:
|
|||
{
|
||||
WretchedGhoulCleaner cleaner;
|
||||
Acore::CreatureWorker<WretchedGhoulCleaner> worker(me, cleaner);
|
||||
Cell::VisitGridObjects(me, worker, 150.0f);
|
||||
Cell::VisitObjects(me, worker, 150.0f);
|
||||
|
||||
if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE, 150.0f, true))
|
||||
if (Creature* v = me->FindNearestCreature(NPC_SAC_VEGARD_1, 50.0f, true))
|
||||
|
|
|
|||
|
|
@ -615,7 +615,7 @@ bool OPvPCapturePointNA::Update(uint32 diff)
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(_capturePoint, radius);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(_capturePoint, players, checker);
|
||||
Cell::VisitWorldObjects(_capturePoint, searcher, radius);
|
||||
Cell::VisitObjects(_capturePoint, searcher, radius);
|
||||
|
||||
for (Player* player : players)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -699,7 +699,7 @@ public:
|
|||
std::list<WorldObject*> ClusterList;
|
||||
Acore::AllWorldObjectsInRange objects(me, searchDistance);
|
||||
Acore::WorldObjectListSearcher<Acore::AllWorldObjectsInRange> searcher(me, ClusterList, objects);
|
||||
Cell::VisitAllObjects(me, searcher, searchDistance);
|
||||
Cell::VisitObjects(me, searcher, searchDistance);
|
||||
|
||||
for (std::list<WorldObject*>::const_iterator i = ClusterList.begin(); i != ClusterList.end(); ++i)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ struct npc_pet_dk_ebon_gargoyle : ScriptedAI
|
|||
std::list<Unit*> targets;
|
||||
Acore::AnyUnfriendlyUnitInObjectRangeCheck u_check(me, me, 50.0f);
|
||||
Acore::UnitListSearcher<Acore::AnyUnfriendlyUnitInObjectRangeCheck> searcher(me, targets, u_check);
|
||||
Cell::VisitAllObjects(me, searcher, 50.0f);
|
||||
Cell::VisitObjects(me, searcher, 50.0f);
|
||||
for (auto const& target : targets)
|
||||
if (target->GetAura(SPELL_DK_SUMMON_GARGOYLE_1, me->GetOwnerGUID()))
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1358,11 +1358,7 @@ class spell_gen_cannibalize : public SpellScript
|
|||
// search for nearby enemy corpse in range
|
||||
Acore::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_CORPSE);
|
||||
Acore::WorldObjectSearcher<Acore::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
|
||||
Cell::VisitWorldObjects(caster, searcher, max_range);
|
||||
if (!result)
|
||||
{
|
||||
Cell::VisitGridObjects(caster, searcher, max_range);
|
||||
}
|
||||
Cell::VisitObjects(caster, searcher, max_range);
|
||||
if (!result)
|
||||
{
|
||||
return SPELL_FAILED_NO_EDIBLE_CORPSES;
|
||||
|
|
|
|||
|
|
@ -843,11 +843,7 @@ class spell_hun_pet_carrion_feeder : public SpellScript
|
|||
// search for nearby enemy corpse in range
|
||||
Acore::AnyDeadUnitSpellTargetInRangeCheck check(caster, max_range, GetSpellInfo(), TARGET_CHECK_ENEMY);
|
||||
Acore::WorldObjectSearcher<Acore::AnyDeadUnitSpellTargetInRangeCheck> searcher(caster, result, check);
|
||||
Cell::VisitWorldObjects(caster, searcher, max_range);
|
||||
if (!result)
|
||||
{
|
||||
Cell::VisitGridObjects(caster, searcher, max_range);
|
||||
}
|
||||
Cell::VisitObjects(caster, searcher, max_range);
|
||||
if (!result)
|
||||
{
|
||||
return SPELL_FAILED_NO_EDIBLE_CORPSES;
|
||||
|
|
|
|||
|
|
@ -1876,7 +1876,7 @@ class spell_q11010_q11102_q11023_choose_loc : public SpellScript
|
|||
std::list<Player*> playerList;
|
||||
Acore::AnyPlayerInObjectRangeCheck checker(caster, 65.0f);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(caster, playerList, checker);
|
||||
Cell::VisitWorldObjects(caster, searcher, 65.0f);
|
||||
Cell::VisitObjects(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)->HasFlyAura() || (*itr)->HasIncreaseMountedFlightSpeedAura())
|
||||
|
|
|
|||
|
|
@ -322,7 +322,7 @@ public:
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerExactPositionInGameObjectRangeCheck checker(me, 0.3f);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerExactPositionInGameObjectRangeCheck> searcher(me, players, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, 0.3f);
|
||||
Cell::VisitObjects(me, searcher, 0.3f);
|
||||
|
||||
if (players.size() > 0)
|
||||
{
|
||||
|
|
@ -369,7 +369,7 @@ public:
|
|||
std::list<Player*> players;
|
||||
Acore::AnyPlayerExactPositionInGameObjectRangeCheck checker(me, 0.3f);
|
||||
Acore::PlayerListSearcher<Acore::AnyPlayerExactPositionInGameObjectRangeCheck> searcher(me, players, checker);
|
||||
Cell::VisitWorldObjects(me, searcher, 0.3f);
|
||||
Cell::VisitObjects(me, searcher, 0.3f);
|
||||
|
||||
if (players.size() > 0)
|
||||
{
|
||||
|
|
@ -823,7 +823,7 @@ public:
|
|||
std::list<Player*> targets;
|
||||
Acore::AnyPlayerInObjectRangeCheck check(me, me->GetVisibilityRange(), false);
|
||||
Acore::PlayerListSearcherWithSharedVision<Acore::AnyPlayerInObjectRangeCheck> searcher(me, targets, check);
|
||||
Cell::VisitWorldObjects(me, searcher, me->GetVisibilityRange());
|
||||
Cell::VisitObjects(me, searcher, me->GetVisibilityRange());
|
||||
for (Player* player : targets)
|
||||
{
|
||||
if (player->GetTeamId() == TEAM_HORDE)
|
||||
|
|
|
|||
|
|
@ -931,7 +931,7 @@ struct npc_pallid_horror : public ScriptedAI
|
|||
std::list<Creature*> targets;
|
||||
FlameshockerCheck check;
|
||||
Acore::CreatureListSearcher<FlameshockerCheck> searcher(me, targets, check);
|
||||
Cell::VisitGridObjects(me, searcher, VISIBILITY_DISTANCE_NORMAL);
|
||||
Cell::VisitObjects(me, searcher, VISIBILITY_DISTANCE_NORMAL);
|
||||
|
||||
if (!targets.empty())
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue