18#ifndef TRINITY_GRIDNOTIFIERS_H
19#define TRINITY_GRIDNOTIFIERS_H
36 template<
typename ObjectType>
55 VisibleNotifier(
Player &player) : i_player(player), i_data(player.GetMapId()), vis_guids(player.m_clientGUIDs) { }
57 void SendToSelf(
void);
96 i_map(map), cell(c), p(pair), i_radius(radius) { }
145 template<
typename Packet>
156 template<
typename PacketSender>
174 team = player->GetEffectiveTeam();
195 template<
typename PacketSender>
241 template<
typename Type>
260 template<
typename Type>
280 template<
typename Type>
292 inserter = [](
void* containerRaw, Type&& object)
294 T* container =
reinterpret_cast<T*
>(containerRaw);
295 container->insert(container->end(), std::move(
object));
310 template<
class Check,
class Result>
317 template<
typename Container>
325 template<
class Check>
332 template<
class Check>
339 template<
class Check>
342 template<
typename Container>
362 for (
auto itr = m.
begin(); itr != m.
end(); ++itr)
364 i_do(itr->GetSource());
370 template<
class Check,
class Result>
376 template<
typename Container>
385 template<
class Check>
393 template<
class Check>
400 template<
class Check>
403 template<
typename Container>
408 template<
class Functor>
418 _func(itr->GetSource());
430 template<
class Check,
class Result>
436 template<
typename Container>
450 template<
class Check>
458 template<
class Check>
466 template<
class Check>
469 template<
typename Container>
476 template<
class Check,
class Result>
482 template<
typename Container>
491 template<
class Check>
499 template<
class Check>
506 template<
class Check>
509 template<
typename Container>
527 i_do(itr->GetSource());
535 template<
class Check,
class Result>
541 template<
typename Container>
550 template<
class Check>
557 template<
class Check>
564 template<
class Check>
567 template<
typename Container>
571 template<
typename Container>
589 i_do(itr->GetSource());
609 i_do(itr->GetSource());
661 bool operator()(
Player* u);
662 bool operator()(
Corpse* u);
664 template<
class NOT_INTERESTED>
bool operator()(NOT_INTERESTED*) {
return false; }
676 bool operator()(
Player* u);
677 bool operator()(
Corpse* u);
679 template<
class NOT_INTERESTED>
bool operator()(NOT_INTERESTED*) {
return false; }
1056 float searchRadius =
_range;
1217 m_range = (dist == 0.f ? 9999.f : dist);
1247 m_range = (dist == 0.f ? 9999.f : dist);
1248 m_force = (dist == 0.f ? false :
true);
1300 if (c->IsCivilian())
1410 template <
typename Customizer = InRangeCheckCustomizer>
1469 template <
typename Customizer = InRangeCheckCustomizer>
1637 if (m_fRange < 0.0f && m_pObject->IsWithinDist(unit,
m_fRange,
false))
1724 return object->GetGUID() ==
_GUID;
1778 return object->GetEntry() ==
_entry && (!
object->IsPrivateObject() ||
object->GetPrivateObjectOwner() ==
_ownerGUID);
1789 template<
typename Localizer>
std::unordered_set< ObjectGuid > GuidUnorderedSet
@ GAMEOBJECT_TYPE_FISHINGHOLE
@ SPELL_ATTR5_NOT_ON_PLAYER_CONTROLLED_NPC
@ SPELL_ATTR5_NOT_ON_PLAYER
@ CREATURE_TYPE_NON_COMBAT_PET
@ SPELL_ATTR3_ONLY_ON_PLAYER
void Respawn(bool force=false)
float GetAggroRange(Unit const *target) const
bool HasStringId(std::string_view id) const
bool CanAssistTo(Unit const *u, Unit const *enemy, bool checkfaction=true) const
bool CanStartAttack(Unit const *u, bool force) const
bool HasStringId(std::string_view id) const
ObjectGuid GetOwnerGUID() const override
GameObjectTemplate const * GetGOInfo() const
bool IsInRange(float x, float y, float z, float radius) const
GameobjectTypes GetGoType() const
ObjectGuid::LowType GetSpawnId() const
static ObjectGuid const Empty
static Creature * ToCreature(Object *o)
static ObjectGuid GetGUID(Object const *o)
static Player * ToPlayer(Object *o)
bool HaveAtClient(Object const *u) const
void SendDirectMessage(WorldPacket const *data) const
bool IsGameMaster() const
Team GetEffectiveTeam() const
bool HasAttribute(SpellAttr0 attribute) const
WorldObject const * m_pObject
bool operator()(Unit *unit) const
AllCreaturesOfEntryInRange(WorldObject const *object, uint32 entry, float maxRange=0.0f)
bool operator()(Unit *u) const
AllFriendlyCreaturesInGrid(Unit const *obj)
bool operator()(GameObject *go) const
WorldObject const * m_pObject
AllGameObjectsWithEntryInRange(WorldObject const *object, uint32 entry, float maxRange)
bool operator()(WorldObject *go) const
AllWorldObjectsInRange(WorldObject const *object, float maxRange)
WorldObject const * m_pObject
WorldObject const * i_obj
SpellInfo const * _spellInfo
bool operator()(Unit *u) const
AnyAoETargetUnitInObjectRangeCheck(WorldObject const *obj, Unit const *funit, float range, SpellInfo const *spellInfo=nullptr, bool incOwnRadius=true, bool incTargetRadius=true)
AnyAssistCreatureInRangeCheck(Unit *funit, Unit *enemy, float range)
bool operator()(Creature *u) const
WorldObject const *const i_searchObj
AnyDeadUnitObjectInRangeCheck(WorldObject *searchObj, float range)
bool operator()(NOT_INTERESTED *)
bool operator()(NOT_INTERESTED *)
AnyDeadUnitSpellTargetInRangeCheck(WorldObject *searchObj, float range, SpellInfo const *spellInfo, SpellTargetCheckTypes check, SpellTargetObjectTypes objectType)
WorldObject const * i_obj
bool operator()(Unit *u) const
AnyFriendlyUnitInObjectRangeCheck(WorldObject const *obj, Unit const *funit, float range, bool playerOnly=false, bool incOwnRadius=true, bool incTargetRadius=true)
bool operator()(Unit *u) const
WorldObject const * _source
AnyGroupedUnitInObjectRangeCheck(WorldObject const *obj, Unit const *funit, float range, bool raid, bool playerOnly=false, bool incOwnRadius=true, bool incTargetRadius=true)
bool operator()(Player *u) const
AnyPlayerInObjectRangeCheck(WorldObject const *obj, float range, bool reqAlive=true)
bool operator()(Player *u)
AnyPlayerInPositionRangeCheck(Position const *pos, float range, bool reqAlive=true)
bool operator()(Unit *u) const
WorldObject const * i_obj
AnyUnfriendlyUnitInObjectRangeCheck(WorldObject const *obj, Unit const *funit, float range)
AnyUnitInObjectRangeCheck(WorldObject const *obj, float range, bool check3D=true)
WorldObject const * i_obj
bool operator()(Unit *u) const
void operator()(Creature *u) const
CallOfHelpCreatureInRangeDo(Unit *funit, Unit *enemy, float range)
Customizer & i_customizer
FindCreatureOptions const & i_args
WorldObject const & i_obj
CreatureWithOptionsInObjectRangeCheck(WorldObject const &obj, Customizer &customizer, FindCreatureOptions const &args)
bool operator()(Creature const *u) const
FriendlyBelowHpPctEntryInRange(Unit const *obj, uint32 entry, float range, uint8 pct, bool excludeSelf)
FriendlyCCedInRange(Unit const *obj, float range)
bool operator()(Unit *u) const
FriendlyMissingBuffInRange(Unit const *obj, float range, uint32 spellid)
bool operator()(Unit *u) const
bool operator()(GameObject *go) const
GameObjectFocusCheck(WorldObject const *caster, uint32 focusId)
WorldObject const * _caster
GameObjectInRangeCheck(float _x, float _y, float _z, float _range, uint32 _entry=0)
bool operator()(GameObject *go) const
FindGameObjectOptions const & i_args
bool operator()(GameObject const *go) const
WorldObject const & i_obj
GameObjectWithOptionsInObjectRangeCheck(WorldObject const &obj, Customizer &customizer, FindGameObjectOptions const &args)
Customizer & i_customizer
bool operator()(WorldObject *unit) const
HeightDifferenceCheck(WorldObject *go, float diff, bool reverse)
WorldObject * _baseObject
WorldObject const & i_obj
bool Test(WorldObject const *o) const
void Update(WorldObject const *)
InRangeCheckCustomizer(WorldObject const &obj, float range)
Utility class to enable range for loop syntax for multimap.equal_range uses.
void operator()(Player const *p)
LocalizedDo(Localizer &localizer)
std::remove_pointer_t< decltype(std::declval< Localizer >()(LocaleConstant{}))> LocalizedAction
std::vector< std::unique_ptr< LocalizedAction > > _localizedCache
MostHPMissingInRange(Unit const *obj, float range, uint32 hp)
MostHPPercentMissingInRange(Unit const *obj, float range, uint32 minHpPct, uint32 maxHpPct)
NearestAssistCreatureInCreatureRangeCheck(NearestAssistCreatureInCreatureRangeCheck const &)=delete
NearestAssistCreatureInCreatureRangeCheck(Creature *obj, Unit *enemy, float range)
bool operator()(Creature *u)
NearestAttackableNoTotemUnitInObjectRangeCheck(WorldObject const *obj, float range)
WorldObject const * i_obj
NearestAttackableUnitInObjectRangeCheck(WorldObject const *obj, Unit const *funit, float range)
WorldObject const * i_obj
NearestAttackableUnitInObjectRangeCheck(NearestAttackableUnitInObjectRangeCheck const &)=delete
WorldObject const & i_obj
NearestCheckCustomizer(WorldObject const &obj, float range)
bool Test(WorldObject const *o) const
void Update(WorldObject const *o)
NearestCreatureEntryWithLiveStateInObjectRangeCheck(WorldObject const &obj, uint32 entry, bool alive, float range)
WorldObject const & i_obj
bool operator()(Creature *u)
NearestCreatureEntryWithLiveStateInObjectRangeCheck(NearestCreatureEntryWithLiveStateInObjectRangeCheck const &)=delete
WorldObject const & i_obj
NearestGameObjectCheck(WorldObject const &obj)
bool operator()(GameObject *go)
NearestGameObjectCheck(NearestGameObjectCheck const &)=delete
NearestGameObjectEntryInObjectRangeCheck(NearestGameObjectEntryInObjectRangeCheck const &)=delete
WorldObject const & i_obj
NearestGameObjectEntryInObjectRangeCheck(WorldObject const &obj, uint32 entry, float range, bool spawnedOnly=true)
bool operator()(GameObject *go)
WorldObject const & i_obj
bool operator()(GameObject *go)
NearestGameObjectFishingHole(NearestGameObjectFishingHole const &)=delete
NearestGameObjectFishingHole(WorldObject const &obj, float range)
NearestGameObjectTypeInObjectRangeCheck(NearestGameObjectTypeInObjectRangeCheck const &)=delete
WorldObject const & i_obj
NearestGameObjectTypeInObjectRangeCheck(WorldObject const &obj, GameobjectTypes type, float range)
bool operator()(GameObject *go)
NearestHostileUnitCheck(NearestHostileUnitCheck const &)=delete
NearestHostileUnitCheck(Creature const *creature, float dist=0.f, bool playerOnly=false)
bool operator()(Unit *u) const
NearestHostileUnitInAggroRangeCheck(NearestHostileUnitInAggroRangeCheck const &)=delete
NearestHostileUnitInAggroRangeCheck(Creature const *creature, bool useLOS=false, bool ignoreCivilians=false)
NearestHostileUnitInAttackDistanceCheck(Creature const *creature, float dist=0.f)
NearestHostileUnitInAttackDistanceCheck(NearestHostileUnitInAttackDistanceCheck const &)=delete
bool operator()(Player *u)
WorldObject const * i_obj
NearestPlayerInObjectRangeCheck(NearestPlayerInObjectRangeCheck const &)=delete
NearestPlayerInObjectRangeCheck(WorldObject const *obj, float range)
bool operator()(GameObject *go)
NearestUnspawnedGameObjectEntryInObjectRangeCheck(NearestUnspawnedGameObjectEntryInObjectRangeCheck const &)=delete
NearestUnspawnedGameObjectEntryInObjectRangeCheck(WorldObject const &obj, uint32 entry, float range)
WorldObject const & i_obj
bool operator()(WorldObject *object) const
ObjectEntryAndPrivateOwnerIfExistsCheck(ObjectGuid ownerGUID, uint32 entry)
bool operator()(WorldObject *object) const
ObjectGUIDCheck(ObjectGuid GUID)
ObjectTypeIdCheck(TypeID typeId, bool equals)
bool operator()(WorldObject *object) const
bool operator()(Player *player) const
PlayerAtMinimumRangeAway(Unit const *unit, float fMinRange)
void operator()(WorldObject *) const
void operator()(GameObject *u) const
void operator()(Corpse *) const
void operator()(Creature *u) const
SearcherContainerResult(T &ref_)
WorldObjectSearcherContinuation ShouldContinue() const
void(*)(void *, Type &&) InserterType
WorldObjectSearcherContinuation ShouldContinue() const
SearcherFirstObjectResult(Type &ref_)
WorldObjectSearcherContinuation ShouldContinue() const
SearcherLastObjectResult(Type &ref_)
UnitAuraCheck(bool present, uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty)
bool operator()(WorldObject *object) const
bool operator()(Unit *unit) const
bool isTargetableForAttack(bool checkFakeDeath=true) const
float GetHealthPct() const
ObjectGuid GetDemonCreatorGUID() const
ObjectGuid GetOwnerGUID() const override
float GetCombatReach() const override
bool IsInCombatWith(Unit const *who) const
ObjectGuid GetCreatorGUID() const override
uint32 GetCreatureType() const
bool HealthBelowPct(int32 pct) const
uint64 GetMaxHealth() const
void EngageWithTarget(Unit *who)
DeathState getDeathState() const
bool HasUnitState(const uint32 f) const
bool IsInRaidWith(Unit const *unit) const
bool HasAura(uint32 spellId, ObjectGuid casterGUID=ObjectGuid::Empty, ObjectGuid itemCasterGUID=ObjectGuid::Empty, uint32 reqEffMask=0) const
bool IsControlledByPlayer() const
ObjectGuid GetCharmerGUID() const
bool IsInPartyWith(Unit const *unit) const
bool InSamePhase(PhaseShift const &phaseShift) const
bool IsWithinDist3d(float x, float y, float z, float dist) const
bool CheckPrivateObjectOwnerVisibility(WorldObject const *seer) const
ObjectGuid GetPrivateObjectOwner() const
bool IsValidAttackTarget(WorldObject const *target, SpellInfo const *bySpell=nullptr) const
bool IsHostileTo(WorldObject const *target) const
bool IsPrivateObject() const
bool CanSeeOrDetect(WorldObject const *obj, bool implicitDetect=false, bool distanceCheck=false, bool checkAlert=false) const
bool IsWithinLOSInMap(WorldObject const *obj, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing) const
float GetDistance(WorldObject const *obj) const
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
bool IsFriendlyTo(WorldObject const *target) const
virtual float GetCombatReach() const
bool IsInMap(WorldObject const *obj) const
WorldObjectSearcherContinuation
Optional< std::string_view > StringId
Optional< ObjectGuid > CreatorGuid
Optional< bool > IsSummon
bool IgnoreNotOwnedPrivateObjects
bool IgnorePrivateObjects
Optional< uint32 > AuraSpellId
Optional< ObjectGuid > PrivateObjectOwnerGuid
Optional< uint32 > CreatureId
Optional< ObjectGuid > DemonCreatorGuid
Optional< bool > IsInCombat
Optional< ObjectGuid > OwnerGuid
Optional< ObjectGuid > CharmerGuid
bool IgnoreNotOwnedPrivateObjects
Optional< ObjectGuid > OwnerGuid
Optional< std::string_view > StringId
Optional< GameobjectTypes > GameObjectType
Optional< uint32 > GameObjectId
Optional< ObjectGuid > PrivateObjectOwnerGuid
bool IgnorePrivateObjects
Optional< bool > IsSummon
Optional< bool > IsSpawned
uint32 GetSpellFocusRadius() const
uint32 GetSpellFocusType() const
struct GameObjectTemplate::@210::@237 fishingHole
float GetPositionZ() const
bool IsWithinDoubleVerticalCylinder(Position const *center, float radius, float height) const
AIRelocationNotifier(Unit &unit)
void Visit(GridRefManager< T > &)
bool operator()(Unit *u) const
CreatureLastSearcher(WorldObject const *searcher, Creature *&result, Check &check)
CreatureListSearcher(WorldObject const *searcher, Container &container, Check &check)
void Visit(GridRefManager< T > &)
CreatureRelocationNotifier(Creature &c)
PhaseShift const * i_phaseShift
CreatureSearcherBase(PhaseShift const *phaseShift, Container &result, Check &check)
void Visit(GridRefManager< NOT_INTERESTED > &)
void Visit(CreatureMapType &m)
CreatureSearcher(WorldObject const *searcher, Creature *&result, Check &check)
CreatureWorker(WorldObject const *searcher, Do &_do)
void Visit(CreatureMapType &m)
void Visit(GridRefManager< NOT_INTERESTED > &)
PhaseShift const * i_phaseShift
void Visit(GridRefManager< T > &)
DelayedUnitRelocation(Cell &c, CellCoord &pair, Map &map, float radius)
GameObjectLastSearcher(WorldObject const *searcher, GameObject *&result, Check &check)
GameObjectListSearcher(WorldObject const *searcher, Container &container, Check &check)
void Visit(GameObjectMapType &m)
void Visit(GridRefManager< NOT_INTERESTED > &)
GameObjectSearcherBase(PhaseShift const *phaseShift, Container &result, Check &check)
PhaseShift const * i_phaseShift
GameObjectSearcher(WorldObject const *searcher, GameObject *&result, Check &check)
void Visit(GridRefManager< NOT_INTERESTED > &)
GameObjectWorker(WorldObject const *searcher, Functor &func)
PhaseShift const * _phaseShift
void Visit(GameObjectMapType &m)
void Visit(CorpseMapType &m)
void Visit(PlayerMapType &m)
void Visit(SceneObjectMapType &m)
void updateObjects(GridRefManager< T > &m)
void Visit(CreatureMapType &m)
void Visit(DynamicObjectMapType &m)
void Visit(AreaTriggerMapType &m)
GridUpdater(GridType &grid, uint32 diff)
void Visit(ConversationMapType &m)
void Visit(GameObjectMapType &m)
MessageDistDelivererToHostile(Unit *src, PacketSender &packetSender, float dist)
PacketSender & i_packetSender
void Visit(PlayerMapType &m) const
void Visit(GridRefManager< SKIP > &) const
PhaseShift const * i_phaseShift
void SendPacket(Player const *player) const
void Visit(GridRefManager< SKIP > &) const
void SendPacket(Player const *player) const
MessageDistDeliverer(WorldObject const *src, PacketSender &packetSender, float dist, bool own_team_only=false, Player const *skipped=nullptr, bool req3dDist=false)
Player const * skipped_receiver
WorldObject const * i_source
PhaseShift const * i_phaseShift
PacketSender & i_packetSender
void Visit(PlayerMapType &m) const
void Visit(PlayerMapType &)
void Visit(GridRefManager< T > &m)
void Visit(CorpseMapType &)
ObjectUpdater(const uint32 diff)
void operator()(Player const *player) const
void operator()(Player const *player) const
PacketSenderRef(WorldPacket const *message)
WorldObject const * i_searcher
PlayerDistWorker(WorldObject const *searcher, float _dist, Do &_do)
void Visit(PlayerMapType &m)
void Visit(GridRefManager< NOT_INTERESTED > &)
PlayerLastSearcher(WorldObject const *searcher, Player *&result, Check &check)
PlayerListSearcher(PhaseShift const &phaseShift, Container &container, Check &check)
PlayerListSearcher(WorldObject const *searcher, Container &container, Check &check)
void Visit(GridRefManager< T > &m)
PlayerRelocationNotifier(Player &player)
PhaseShift const * i_phaseShift
void Visit(PlayerMapType &m)
void Visit(GridRefManager< NOT_INTERESTED > &)
PlayerSearcherBase(PhaseShift const *phaseShift, Container &result, Check &check)
PlayerSearcher(WorldObject const *searcher, Player *&result, Check &check)
PlayerWorker(WorldObject const *searcher, Do &_do)
PhaseShift const * i_phaseShift
void Visit(GridRefManager< NOT_INTERESTED > &)
void Visit(PlayerMapType &m)
UnitLastSearcher(WorldObject const *searcher, Unit *&result, Check &check)
UnitListSearcher(WorldObject const *searcher, Container &container, Check &check)
void VisitImpl(GridRefManager< T > &m)
void Visit(CreatureMapType &m)
PhaseShift const * i_phaseShift
UnitSearcherBase(PhaseShift const *phaseShift, Container &result, Check &check)
void Visit(PlayerMapType &m)
void Visit(GridRefManager< NOT_INTERESTED > &)
UnitSearcher(WorldObject const *searcher, Unit *&result, Check &check)
IteratorPair< WorldObject ** > i_objects
void Visit(GridRefManager< T > &)
VisibleChangesNotifier(IteratorPair< WorldObject ** > objects)
GuidUnorderedSet vis_guids
VisibleNotifier(Player &player)
std::set< Unit * > i_visibleNow
WorldObjectLastSearcher(WorldObject const *searcher, WorldObject *&result, Check &check, uint32 mapTypeMask=GRID_MAP_TYPE_MASK_ALL)
WorldObjectListSearcher(WorldObject const *searcher, Container &container, Check &check, uint32 mapTypeMask=GRID_MAP_TYPE_MASK_ALL)
void Visit(GridRefManager< T > &)
WorldObjectSearcherBase(PhaseShift const *phaseShift, Container &result, Check &check, uint32 mapTypeMask=GRID_MAP_TYPE_MASK_ALL)
PhaseShift const * i_phaseShift
WorldObjectSearcher(WorldObject const *searcher, WorldObject *&result, Check &check, uint32 mapTypeMask=GRID_MAP_TYPE_MASK_ALL)
void Visit(GridRefManager< T > &m)
WorldObjectWorker(WorldObject const *searcher, Do const &_do, uint32 mapTypeMask=GRID_MAP_TYPE_MASK_ALL)
PhaseShift const * i_phaseShift