177 virtual void ClearValuesChangesMask();
187 static bool IsObjectFragmentChanged(
void const* rawFragmentData);
188 static void ClearObjectFragmentChanged(
void const* rawFragmentData);
194template <
class T_VALUES,
class T_FLAGS,
class FLAG_TYPE,
size_t ARRAY_SIZE>
198 static_assert(
sizeof(T_FLAGS) * 8 > ARRAY_SIZE,
"Fix T_FLAGS");
202 for (
uint32 i = 0; i < ARRAY_SIZE; ++i)
287 virtual void Update(
uint32 diff);
292 void GetNearPoint2D(
WorldObject const* searcher,
float& x,
float& y,
float distance,
float absAngle)
const;
293 void GetNearPoint(
WorldObject const* searcher,
float& x,
float& y,
float& z,
float distance2d,
float absAngle)
const;
294 void GetClosePoint(
float& x,
float& y,
float& z,
float size,
float distance2d = 0,
float relAngle = 0)
const;
295 void MovePosition(
Position &pos,
float dist,
float angle,
float maxHeightChange = 6.0f)
const;
296 Position GetNearPosition(
float dist,
float angle);
297 void MovePositionToFirstCollision(
Position &pos,
float dist,
float angle)
const;
298 Position GetFirstCollisionPosition(
float dist,
float angle);
299 Position GetRandomNearPosition(
float radius);
303 void UpdateGroundPositionZ(
float x,
float y,
float &z)
const;
304 void UpdateAllowedPositionZ(
float x,
float y,
float &z,
float* groundZ =
nullptr)
const;
306 Position GetRandomPoint(
Position const& srcPos,
float distance,
float minDistance = 0.0f)
const;
316 return GetPhaseShift().CanSee(phaseShift);
335 bool IsInWorldPvpZone()
const;
342 std::string
const&
GetName()
const {
return m_name; }
343 void SetName(std::string newname) { m_name = std::move(newname); }
348 float GetDistance(
Position const& pos)
const;
349 float GetDistance(
float x,
float y,
float z)
const;
351 float GetDistance2d(
float x,
float y)
const;
354 bool IsSelfOrInSameMap(
WorldObject const* obj)
const;
356 bool IsWithinDist3d(
float x,
float y,
float z,
float dist)
const;
357 bool IsWithinDist3d(
Position const* pos,
float dist)
const;
358 bool IsWithinDist2d(
float x,
float y,
float dist)
const;
359 bool IsWithinDist2d(
Position const* pos,
float dist)
const;
361 bool IsWithinDist(
WorldObject const* obj,
float dist2compare,
bool is3D =
true,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
362 bool IsWithinDistInMap(
WorldObject const* obj,
float dist2compare,
bool is3D =
true,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
366 void GetHitSpherePointFor(
Position const& dest,
float& x,
float& y,
float& z)
const;
368 bool IsInRange(
WorldObject const* obj,
float minRange,
float maxRange,
bool is3D =
true)
const;
369 bool IsInRange2d(
Position const* pos,
float minRange,
float maxRange)
const;
370 bool IsInRange3d(
Position const* pos,
float minRange,
float maxRange)
const;
371 bool isInFront(
WorldObject const* target,
float arc =
float(
M_PI))
const;
372 bool isInBack(
WorldObject const* target,
float arc =
float(
M_PI))
const;
374 bool IsInBetween(
Position const& pos1,
Position const& pos2,
float size = 0)
const;
377 virtual void CleanupsBeforeDelete(
bool finalCleanup =
true);
379 virtual void SendMessageToSet(
WorldPacket const* data,
bool self)
const;
380 virtual void SendMessageToSetInRange(
WorldPacket const* data,
float dist,
bool self)
const;
381 virtual void SendMessageToSet(
WorldPacket const* data,
Player const* skipped_rcvr)
const;
387 void PlayDistanceSound(
uint32 soundId,
Player const* target =
nullptr)
const;
388 void StopDistanceSound(
Player const* target =
nullptr)
const;
389 void PlayDirectSound(
uint32 soundId,
Player const* target =
nullptr,
uint32 broadcastTextId = 0)
const;
390 void PlayDirectMusic(
uint32 musicId,
Player const* target =
nullptr)
const;
391 void PlayObjectSound(
int32 soundKitId,
ObjectGuid targetObject,
Player const* target =
nullptr,
int32 broadcastTextId = 0)
const;
393 void AddObjectToRemoveList();
395 float GetGridActivationRange()
const;
396 float GetVisibilityRange()
const;
397 float GetSightRange(
WorldObject const* target =
nullptr)
const;
409 virtual void SetMap(
Map* map);
410 virtual void ResetMap();
415 void SetZoneScript();
429 Creature* FindNearestCreature(
uint32 entry,
float range,
bool alive =
true)
const;
431 GameObject* FindNearestGameObject(
uint32 entry,
float range,
bool spawnedOnly =
true)
const;
433 GameObject* FindNearestUnspawnedGameObject(
uint32 entry,
float range)
const;
435 Player* SelectNearestPlayer(
float range)
const;
440 ObjectGuid GetCharmerOrOwnerOrOwnGUID()
const;
442 Unit* GetOwner()
const;
443 Unit* GetCharmerOrOwner()
const;
444 Unit* GetCharmerOrOwnerOrSelf()
const;
445 Player* GetCharmerOrOwnerPlayerOrPlayerItself()
const;
446 Player* GetAffectingPlayer()
const;
448 Player* GetSpellModOwner()
const;
454 int32 CalcSpellDuration(
SpellInfo const* spellInfo, std::vector<SpellPowerCost>
const* powerCosts)
const;
456 void ModSpellCastTime(
SpellInfo const* spellInfo,
int32& castTime,
Spell* spell =
nullptr)
const;
457 void ModSpellDurationTime(
SpellInfo const* spellInfo,
int32& durationTime,
Spell* spell =
nullptr)
const;
473 bool IsHostileToPlayers()
const;
474 bool IsFriendlyTo(
WorldObject const* target)
const;
475 bool IsNeutralToAll()
const;
480 void SendPlayOrphanSpellVisual(
Position const& sourceLocation,
ObjectGuid const& target,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
481 void SendPlayOrphanSpellVisual(
Position const& sourceLocation,
Position const& targetLocation,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
482 void SendPlayOrphanSpellVisual(
ObjectGuid const& target,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
483 void SendPlayOrphanSpellVisual(
Position const& targetLocation,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
484 void SendCancelOrphanSpellVisual(
uint32 id);
491 virtual uint32 GetCastSpellXSpellVisualId(
SpellInfo const* spellInfo)
const;
493 template <
typename Container>
496 template <
typename Container>
497 void GetGameObjectListWithOptionsInGrid(Container& gameObjectContainer,
float maxSearchRange,
FindGameObjectOptions const& options)
const;
499 template <
typename Container>
502 template <
typename Container>
505 template <
typename Container>
506 void GetPlayerListInGrid(Container& playerContainer,
float maxSearchRange,
bool alive =
true)
const;
508 void DestroyForNearbyPlayers();
509 virtual void UpdateObjectVisibility(
bool forced =
true);
512 void UpdatePositionData();
525 void setActive(
bool isActiveObject);
527 void SetFarVisible(
bool on);
530 void SetIsStoredInWorldObjectGridContainer(
bool apply);
532 bool IsStoredInWorldObjectGridContainer()
const;
541 float GetTransOffsetO()
const {
return m_movementInfo.transport.pos.GetOrientation(); }
552 float GetFloorZ()
const;
555 float GetMapWaterOrGroundLevel(
float x,
float y,
float z,
float* ground =
nullptr)
const;
556 float GetMapHeight(
float x,
float y,
float z,
bool vmap =
true,
float distanceToSearch = 50.0f)
const;
571 bool CheckPrivateObjectOwnerVisibility(
WorldObject const* seer)
const;
603 virtual bool CanNeverSee(
WorldObject const* obj,
bool ignorePhaseShift =
false)
const;
628 virtual bool _IsWithinDist(
WorldObject const* obj,
float dist2compare,
bool is3D,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
630 bool CanDetect(
WorldObject const* obj,
bool ignoreStealth,
bool checkAlert =
false)
const;
631 bool CanDetectInvisibilityOf(
WorldObject const* obj)
const;
632 bool CanDetectStealthOf(
WorldObject const* obj,
bool checkAlert =
false)
const;
std::unordered_map< Player *, UpdateData > UpdateDataMapType
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
@ TEMPSUMMON_MANUAL_DESPAWN
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
static void SummonCreatureGroup(uint32 summonerId, SummonerType summonerType, uint8 group, std::list< TempSummon * > *summoned, SummonCreature summonCreature)
static constexpr Milliseconds const HEARTBEAT_INTERVAL
float const DEFAULT_COLLISION_HEIGHT
std::optional< T > Optional
Optional helper class to wrap optional values within.
void GetCreatureListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
void GetCreatureListWithOptionsInGrid(Container &container, WorldObject *source, float maxSearchRange, FindCreatureOptions const &options)
void GetPlayerListInGrid(Container &container, WorldObject *source, float maxSearchRange, bool alive=true)
void GetGameObjectListWithEntryInGrid(Container &container, WorldObject *source, uint32 entry, float maxSearchRange)
double SpellEffectValue
This is a double instead of float to be able to store full range of int32.
void SetUpdateFieldValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type value)
virtual std::string GetDebugInfo() const
bool IsAreaTrigger() const
bool IsWorldObject() const
virtual bool AddToObjectUpdate()=0
virtual void RemoveFromWorld()
void SetUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
bool IsSceneObject() const
virtual void AddToWorld()
virtual void RemoveFromObjectUpdate()=0
void RemoveUpdateFieldFlagValue(UF::UpdateFieldPrivateSetter< T > setter, typename UF::UpdateFieldPrivateSetter< T >::value_type flag)
bool IsGameObject() const
bool IsConversation() const
bool IsDestroyedObject() const
virtual void BuildUpdate(UpdateDataMapType &data_map)
bool HasFlag(FLAG_TYPE flag) const
void AddFlag(FLAG_TYPE flag)
void DelFlag(FLAG_TYPE flag)
T_VALUES GetValue(FLAG_TYPE flag) const
T_VALUES m_values[ARRAY_SIZE]
void AddValue(FLAG_TYPE flag, T_VALUES value)
void SetValue(FLAG_TYPE flag, T_VALUES value)
static ObjectGuid const Empty
Trinity::unique_weak_ptr< Object > GetWeakPtr() const
void SetDynamicFlag(uint32 flag)
static Creature * ToCreature(Object *o)
static Player const * ToPlayer(Object const *o)
Player const * ToPlayer() const
static Item const * ToItem(Object const *o)
float GetObjectScale() const
static SceneObject const * ToSceneObject(Object const *o)
Trinity::unique_trackable_ptr< Object > m_scriptRef
DynamicObject * ToDynObject()
static Unit * ToUnit(Object *o)
static GameObject * ToGameObject(Object *o)
static Corpse const * ToCorpse(Object const *o)
static Conversation * ToConversation(Object *o)
SceneObject const * ToSceneObject() const
WorldObject const * ToWorldObject() const
bool HasDynamicFlag(uint32 flag) const
Conversation * ToConversation()
virtual bool hasQuest(uint32) const
SceneObject * ToSceneObject()
static Conversation const * ToConversation(Object const *o)
virtual void BuildValuesCreate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
WorldObject * ToWorldObject()
virtual void BuildValuesUpdate(UF::UpdateFieldFlag flags, ByteBuffer &data, Player const *target) const =0
static WorldObject const * ToWorldObject(Object const *o)
Item const * ToItem() const
Conversation const * ToConversation() const
AreaTrigger * ToAreaTrigger()
static WorldObject * ToWorldObject(Object *o)
GameObject * ToGameObject()
static AreaTrigger const * ToAreaTrigger(Object const *o)
GameObject const * ToGameObject() const
Corpse const * ToCorpse() const
Unit const * ToUnit() const
void ReplaceAllDynamicFlags(uint32 flag)
static DynamicObject const * ToDynObject(Object const *o)
static GameObject const * ToGameObject(Object const *o)
static Item * ToItem(Object *o)
virtual Loot * GetLootForPlayer(Player const *player) const
uint32 GetDynamicFlags() const
void RemoveDynamicFlag(uint32 flag)
static Unit const * ToUnit(Object const *o)
static AreaTrigger * ToAreaTrigger(Object *o)
static Creature const * ToCreature(Object const *o)
static Corpse * ToCorpse(Object *o)
friend ObjectFragmentInfoInitializer
Creature const * ToCreature() const
AreaTrigger const * ToAreaTrigger() const
void SetEntry(uint32 entry)
static SceneObject * ToSceneObject(Object *o)
virtual void SetObjectScale(float scale)
UF::UpdateField< UF::ObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_OBJECT > m_objectData
virtual bool hasInvolvedQuest(uint32) const
virtual SpawnTrackingStateData const * GetSpawnTrackingStateDataForPlayer(Player const *player) const
DynamicObject const * ToDynObject() const
static DynamicObject * ToDynObject(Object *o)
static Player * ToPlayer(Object *o)
WorldObject const * _refObj
ObjectDistanceOrderPred(WorldObject const *refObj, bool ascending=true)
bool operator()(WorldObject const *left, WorldObject const *right) const
Specialized variant of std::shared_ptr that enforces unique ownership and/or std::unique_ptr with std...
Trinity::unique_trackable_ptr companion class, replicating what std::weak_ptr is to std::shared_ptr.
int8 GetTransSeat() const
bool InSamePhase(PhaseShift const &phaseShift) const
virtual uint16 GetMeleeAnimKitId() const
ZLiquidStatus m_liquidStatus
PhaseShift const & GetSuppressedPhaseShift() const
virtual uint16 GetMovementAnimKitId() const
virtual bool IsInvisibleDueToDespawn(WorldObject const *seer) const
ZLiquidStatus GetLiquidStatus() const
SmoothPhasing const * GetSmoothPhasing() const
virtual ObjectGuid GetCreatorGUID() const =0
virtual float GetCollisionHeight() const
virtual bool IsAlwaysVisibleFor(WorldObject const *seer) const
bool isNeedNotify(uint16 f) const
virtual uint8 GetLevelForTarget(WorldObject const *) const
virtual void UpdateObjectVisibilityOnDestroy()
void SetLocationInstanceId(uint32 _instanceId)
ObjectGuid GetPrivateObjectOwner() const
virtual Position const & GetStationaryPosition() const
Position const & GetTransOffset() const
virtual bool IsAlwaysDetectableFor(WorldObject const *seer) const
bool IsVisibilityOverridden() const
virtual ObjectGuid GetCharmerOrOwnerGUID() const
float GetTransOffsetX() const
PhaseShift & GetPhaseShift()
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
void SetLocationMapId(uint32 _mapId)
ZoneScript * GetZoneScript() const
virtual void UpdateObjectVisibilityOnCreate()
bool isActiveObject() const
TransportBase * GetTransport() const
PhaseShift const & GetPhaseShift() const
WmoLocation const * GetCurrentWmo() const
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
bool IsPrivateObject() const
uint32 GetInstanceId() const
FlaggedValuesArray32< int32, uint64, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
uint16 GetNotifyFlags() const
void SetPrivateObjectOwner(ObjectGuid const &owner)
ZoneScript * m_zoneScript
SmoothPhasing * GetSmoothPhasing()
std::string GetNameForLocaleIdx(LocaleConstant) const override
float GetTransOffsetY() const
PhaseShift _suppressedPhaseShift
virtual uint16 GetAIAnimKitId() const
std::string const & GetName() const
bool IsFarVisible() const
float GetTransOffsetZ() const
bool InSamePhase(WorldObject const *obj) const
uint32 GetTransTime() const
bool const m_isStoredInWorldObjectGridContainer
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
PhaseShift & GetSuppressedPhaseShift()
void SetName(std::string newname)
void AddToNotify(uint16 f)
std::unique_ptr< SmoothPhasing > _smoothPhasing
TransportBase * m_transport
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
virtual uint32 GetFaction() const =0
static bool InSamePhase(WorldObject const *a, WorldObject const *b)
Optional< float > m_visibilityDistanceOverride
ObjectGuid _privateObjectOwner
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
float GetTransOffsetO() const
virtual ObjectGuid GetOwnerGUID() const =0
Milliseconds _heartbeatTimer
MovementInfo m_movementInfo
Optional< WmoLocation > m_currentWmo
bool IsAlwaysStoredInWorldObjectGridContainer() const
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects=false) const
virtual void SetFaction(uint32)
virtual float GetCombatReach() const
virtual bool CanAlwaysSee(WorldObject const *) const
Optional< FindCreatureAliveState > IsAlive
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
void operator()(Object *) const
constexpr void GetPosition(float &x, float &y) const
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< int32, 0, 1 > EntryID
UpdateField< float, 0, 3 > Scale