38#include <unordered_map>
113 return setter.
SetValue(std::move(value));
156 virtual void AddToWorld();
157 virtual void RemoveFromWorld();
176 virtual void BuildCreateUpdateBlockForPlayer(
UpdateData* data,
Player* target)
const;
177 void SendUpdateToPlayer(
Player* player);
179 void BuildValuesUpdateBlockForPlayer(
UpdateData* data,
Player const* target)
const;
181 void BuildDestroyUpdateBlock(
UpdateData* data)
const;
182 void BuildOutOfRangeUpdateBlock(
UpdateData* data)
const;
185 virtual void DestroyForPlayer(
Player* target)
const;
186 void SendOutOfRangeForPlayer(
Player* target)
const;
188 virtual void ClearUpdateMask(
bool remove);
209 Item*
ToItem() {
if (IsItem())
return reinterpret_cast<Item*
>(
this);
else return nullptr; }
210 Item const*
ToItem()
const {
if (IsItem())
return reinterpret_cast<Item const*
>(
this);
else return nullptr; }
227 Unit*
ToUnit() {
if (IsUnit())
return reinterpret_cast<Unit*
>(
this);
else return nullptr; }
228 Unit const*
ToUnit()
const {
if (IsUnit())
return reinterpret_cast<Unit const*
>(
this);
else return nullptr; }
240 Corpse const*
ToCorpse()
const {
if (IsCorpse())
return reinterpret_cast<Corpse const*
>(
this);
else return nullptr; }
272 AddToObjectUpdateIfNeeded();
290 AddToObjectUpdateIfNeeded();
296 static_assert(std::is_integral<T>::value,
"SetUpdateFieldFlagValue must be used with integral types");
303 static_assert(std::is_integral<T>::value,
"RemoveUpdateFieldFlagValue must be used with integral types");
310 AddToObjectUpdateIfNeeded();
317 AddToObjectUpdateIfNeeded();
324 AddToObjectUpdateIfNeeded();
331 AddToObjectUpdateIfNeeded();
338 AddToObjectUpdateIfNeeded();
346 static_assert(std::is_arithmetic<T>::value,
"SetUpdateFieldStatValue must be used with arithmetic types");
353 static_assert(std::is_arithmetic<T>::value,
"SetUpdateFieldStatValue must be used with arithmetic types");
367 static_assert(std::is_arithmetic<T>::value,
"SetUpdateFieldStatValue must be used with arithmetic types");
373 if (percent == -100.0f)
375 value *= (
apply ? (100.0f + percent) / 100.0f : 100.0f / (100.0f + percent));
380 template<
typename Action>
383 bool wasUpdatedBeforeAction = m_objectUpdated;
385 if (m_objectUpdated && !wasUpdatedBeforeAction)
387 RemoveFromObjectUpdate();
388 m_objectUpdated =
false;
408 void AddToObjectUpdateIfNeeded();
427template <
class T_VALUES,
class T_FLAGS,
class FLAG_TYPE,
size_t ARRAY_SIZE>
431 static_assert(
sizeof(T_FLAGS) * 8 > ARRAY_SIZE,
"Fix T_FLAGS");
435 for (
uint32 i = 0; i < ARRAY_SIZE; ++i)
501 void AddToWorld()
override;
502 void RemoveFromWorld()
override;
504 void GetNearPoint2D(
WorldObject const* searcher,
float& x,
float& y,
float distance,
float absAngle)
const;
505 void GetNearPoint(
WorldObject const* searcher,
float& x,
float& y,
float& z,
float distance2d,
float absAngle)
const;
506 void GetClosePoint(
float& x,
float& y,
float& z,
float size,
float distance2d = 0,
float relAngle = 0)
const;
507 void MovePosition(
Position &pos,
float dist,
float angle);
508 Position GetNearPosition(
float dist,
float angle);
509 void MovePositionToFirstCollision(
Position &pos,
float dist,
float angle);
510 Position GetFirstCollisionPosition(
float dist,
float angle);
511 Position GetRandomNearPosition(
float radius);
515 void UpdateGroundPositionZ(
float x,
float y,
float &z)
const;
516 void UpdateAllowedPositionZ(
float x,
float y,
float &z,
float* groundZ =
nullptr)
const;
518 void GetRandomPoint(
Position const& srcPos,
float distance,
float& rand_x,
float& rand_y,
float& rand_z)
const;
529 return GetPhaseShift().CanSee(phaseShift);
548 bool IsInWorldPvpZone()
const;
555 std::string
const&
GetName()
const {
return m_name; }
556 void SetName(std::string newname) { m_name = std::move(newname); }
561 float GetDistance(
Position const& pos)
const;
562 float GetDistance(
float x,
float y,
float z)
const;
564 float GetDistance2d(
float x,
float y)
const;
567 bool IsSelfOrInSameMap(
WorldObject const* obj)
const;
569 bool IsWithinDist3d(
float x,
float y,
float z,
float dist)
const;
570 bool IsWithinDist3d(
Position const* pos,
float dist)
const;
571 bool IsWithinDist2d(
float x,
float y,
float dist)
const;
572 bool IsWithinDist2d(
Position const* pos,
float dist)
const;
574 bool IsWithinDist(
WorldObject const* obj,
float dist2compare,
bool is3D =
true,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
575 bool IsWithinDistInMap(
WorldObject const* obj,
float dist2compare,
bool is3D =
true,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
579 void GetHitSpherePointFor(
Position const& dest,
float& x,
float& y,
float& z)
const;
581 bool IsInRange(
WorldObject const* obj,
float minRange,
float maxRange,
bool is3D =
true)
const;
582 bool IsInRange2d(
float x,
float y,
float minRange,
float maxRange)
const;
583 bool IsInRange3d(
float x,
float y,
float z,
float minRange,
float maxRange)
const;
584 bool isInFront(
WorldObject const* target,
float arc =
float(
M_PI))
const;
585 bool isInBack(
WorldObject const* target,
float arc =
float(
M_PI))
const;
590 virtual void CleanupsBeforeDelete(
bool finalCleanup =
true);
592 virtual void SendMessageToSet(
WorldPacket const* data,
bool self)
const;
593 virtual void SendMessageToSetInRange(
WorldPacket const* data,
float dist,
bool self)
const;
594 virtual void SendMessageToSet(
WorldPacket const* data,
Player const* skipped_rcvr)
const;
600 void PlayDistanceSound(
uint32 soundId,
Player const* target =
nullptr)
const;
601 void StopDistanceSound(
Player const* target =
nullptr)
const;
602 void PlayDirectSound(
uint32 soundId,
Player const* target =
nullptr,
uint32 broadcastTextId = 0)
const;
603 void PlayDirectMusic(
uint32 musicId,
Player const* target =
nullptr)
const;
604 void PlayObjectSound(
int32 soundKitId,
ObjectGuid targetObject,
Player const* target =
nullptr,
int32 broadcastTextId = 0)
const;
606 void AddObjectToRemoveList();
608 float GetGridActivationRange()
const;
609 float GetVisibilityRange()
const;
610 float GetSightRange(
WorldObject const* target =
nullptr)
const;
611 bool CanSeeOrDetect(
WorldObject const* obj,
bool implicitDetect =
false,
bool distanceCheck =
false,
bool checkAlert =
false)
const;
622 virtual void SetMap(
Map* map);
623 virtual void ResetMap();
628 void SetZoneScript();
640 void SummonCreatureGroup(
uint8 group, std::list<TempSummon*>* list =
nullptr);
642 Creature* FindNearestCreature(
uint32 entry,
float range,
bool alive =
true)
const;
644 GameObject* FindNearestGameObject(
uint32 entry,
float range,
bool spawnedOnly =
true)
const;
646 GameObject* FindNearestUnspawnedGameObject(
uint32 entry,
float range)
const;
648 Player* SelectNearestPlayer(
float range)
const;
653 ObjectGuid GetCharmerOrOwnerOrOwnGUID()
const;
655 Unit* GetOwner()
const;
656 Unit* GetCharmerOrOwner()
const;
657 Unit* GetCharmerOrOwnerOrSelf()
const;
658 Player* GetCharmerOrOwnerPlayerOrPlayerItself()
const;
659 Player* GetAffectingPlayer()
const;
661 Player* GetSpellModOwner()
const;
662 int32 CalculateSpellDamage(
Unit const* target,
SpellEffectInfo const& spellEffectInfo,
int32 const* basePoints =
nullptr,
float* variance =
nullptr,
uint32 castItemId = 0,
int32 itemLevel = -1)
const;
665 float GetSpellMaxRangeForTarget(
Unit const* target,
SpellInfo const* spellInfo)
const;
666 float GetSpellMinRangeForTarget(
Unit const* target,
SpellInfo const* spellInfo)
const;
668 double ApplyEffectModifiers(
SpellInfo const* spellInfo,
uint8 effIndex,
double value)
const;
669 int32 CalcSpellDuration(
SpellInfo const* spellInfo, std::vector<SpellPowerCost>
const* powerCosts)
const;
671 void ModSpellCastTime(
SpellInfo const* spellInfo,
int32& castTime,
Spell* spell =
nullptr)
const;
672 void ModSpellDurationTime(
SpellInfo const* spellInfo,
int32& durationTime,
Spell* spell =
nullptr)
const;
688 bool IsHostileToPlayers()
const;
689 bool IsFriendlyTo(
WorldObject const* target)
const;
690 bool IsNeutralToAll()
const;
695 void SendPlayOrphanSpellVisual(
ObjectGuid const& target,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
696 void SendPlayOrphanSpellVisual(
Position const& targetLocation,
uint32 spellVisualId,
float travelSpeed,
bool speedAsTime =
false,
bool withSourceOrientation =
false);
697 void SendCancelOrphanSpellVisual(
uint32 id);
704 virtual uint32 GetCastSpellXSpellVisualId(
SpellInfo const* spellInfo)
const;
706 template <
typename Container>
709 template <
typename Container>
710 void GetGameObjectListWithOptionsInGrid(Container& gameObjectContainer,
float maxSearchRange,
FindGameObjectOptions const& options)
const;
712 template <
typename Container>
715 template <
typename Container>
718 template <
typename Container>
719 void GetPlayerListInGrid(Container& playerContainer,
float maxSearchRange,
bool alive =
true)
const;
721 void DestroyForNearbyPlayers();
722 virtual void UpdateObjectVisibility(
bool forced =
true);
725 void UpdatePositionData();
728 bool AddToObjectUpdate()
override;
729 void RemoveFromObjectUpdate()
override;
738 void setActive(
bool isActiveObject);
740 void SetFarVisible(
bool on);
743 void SetIsStoredInWorldObjectGridContainer(
bool apply);
745 bool IsStoredInWorldObjectGridContainer()
const;
754 float GetTransOffsetO()
const {
return m_movementInfo.transport.pos.GetOrientation(); }
768 float GetFloorZ()
const;
771 float GetMapWaterOrGroundLevel(
float x,
float y,
float z,
float* ground =
nullptr)
const;
772 float GetMapHeight(
float x,
float y,
float z,
bool vmap =
true,
float distanceToSearch = 50.0f)
const;
787 bool CheckPrivateObjectOwnerVisibility(
WorldObject const* seer)
const;
819 virtual bool CanNeverSee(
WorldObject const* obj)
const;
821 virtual bool IsNeverVisibleFor([[maybe_unused]]
WorldObject const* seer, [[maybe_unused]]
bool allowServersideObjects =
false)
const {
return !IsInWorld() || IsDestroyedObject(); }
840 virtual bool _IsWithinDist(
WorldObject const* obj,
float dist2compare,
bool is3D,
bool incOwnRadius =
true,
bool incTargetRadius =
true)
const;
842 bool CanDetect(
WorldObject const* obj,
bool ignoreStealth,
bool checkAlert =
false)
const;
843 bool CanDetectInvisibilityOf(
WorldObject const* obj)
const;
844 bool CanDetectStealthOf(
WorldObject const* obj,
bool checkAlert =
false)
const;
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::string GetDebugInfo()
@ TEMPSUMMON_MANUAL_DESPAWN
@ GO_SUMMON_TIMED_OR_CORPSE_DESPAWN
float const DEFAULT_COLLISION_HEIGHT
std::unordered_map< Player *, UpdateData > UpdateDataMapType
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)
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)
Object(Object &&right)=delete
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)
void ClearDynamicUpdateFieldValues(UF::DynamicUpdateFieldSetter< T > setter)
Trinity::unique_trackable_ptr< Object > m_scriptRef
DynamicObject * ToDynObject()
static Unit * ToUnit(Object *o)
bool IsDestroyedObject() const
UF::DynamicUpdateFieldSetter< T >::insert_result InsertDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
static GameObject * ToGameObject(Object *o)
ObjectGuid const & GetGUID() const
static Corpse const * ToCorpse(Object const *o)
static Conversation * ToConversation(Object *o)
UF::UpdateField< UF::ObjectData, 0, TYPEID_OBJECT > m_objectData
SceneObject const * ToSceneObject() const
WorldObject const * ToWorldObject() const
virtual std::string GetNameForLocaleIdx(LocaleConstant locale) const =0
bool HasDynamicFlag(uint32 flag) const
void RemoveUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
Conversation * ToConversation()
virtual bool hasQuest(uint32) const
SceneObject * ToSceneObject()
static Conversation const * ToConversation(Object const *o)
WorldObject * ToWorldObject()
virtual bool AddToObjectUpdate()=0
UF::DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter)
CreateObjectBits m_updateFlag
bool isType(uint16 mask) const
Object & operator=(Object &&right)=delete
void SetUpdateFieldFlagValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type flag)
virtual void BuildValuesCreate(ByteBuffer *data, Player const *target) const =0
static WorldObject const * ToWorldObject(Object const *o)
Object & operator=(Object const &right)=delete
bool IsGameObject() const
Item const * ToItem() const
Conversation const * ToConversation() const
AreaTrigger * ToAreaTrigger()
static WorldObject * ToWorldObject(Object *o)
void SetUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
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
bool IsConversation() const
UF::UpdateFieldHolder m_values
bool IsSceneObject() const
void SetUpdateFieldStatValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type value)
void RemoveDynamicFlag(uint32 flag)
virtual void BuildValuesUpdate(ByteBuffer *data, Player const *target) const =0
void SetIsNewObject(bool enable)
virtual void BuildUpdate(UpdateDataMapType &)
void RemoveOptionalUpdateFieldValue(UF::OptionalUpdateFieldSetter< T > setter)
bool IsWorldObject() const
static Unit const * ToUnit(Object const *o)
static AreaTrigger * ToAreaTrigger(Object *o)
void RemoveDynamicUpdateFieldValue(UF::DynamicUpdateFieldSetter< T > setter, uint32 index)
static Creature const * ToCreature(Object const *o)
virtual void RemoveFromObjectUpdate()=0
void DoWithSuppressingObjectUpdates(Action &&action)
static Corpse * ToCorpse(Object *o)
static ObjectGuid GetGUID(Object const *o)
Creature const * ToCreature() const
AreaTrigger const * ToAreaTrigger() const
void SetEntry(uint32 entry)
static SceneObject * ToSceneObject(Object *o)
virtual void SetObjectScale(float scale)
virtual bool hasInvolvedQuest(uint32) const
void SetDestroyedObject(bool destroyed)
void ForceUpdateFieldChange(UF::UpdateFieldSetter< T > const &)
bool IsAreaTrigger() const
Object(Object const &right)=delete
DynamicObject const * ToDynObject() const
static DynamicObject * ToDynObject(Object *o)
void ApplyModUpdateFieldValue(UF::UpdateFieldSetter< T > setter, typename UF::UpdateFieldSetter< T >::value_type mod, bool apply)
static Player * ToPlayer(Object *o)
void ApplyPercentModUpdateFieldValue(UF::UpdateFieldSetter< T > setter, float percent, bool apply)
WorldObject const * _refObj
ObjectDistanceOrderPred(WorldObject const *refObj, bool ascending=true)
bool operator()(WorldObject const *left, WorldObject const *right) const
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
virtual float GetStationaryO() const
bool isNeedNotify(uint16 f) const
virtual uint8 GetLevelForTarget(WorldObject const *) const
virtual void UpdateObjectVisibilityOnDestroy()
void SetLocationInstanceId(uint32 _instanceId)
ObjectGuid GetPrivateObjectOwner() 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
virtual float GetStationaryX() 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
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 float GetStationaryY() const
virtual void SetFaction(uint32)
virtual float GetCombatReach() const
virtual float GetStationaryZ() const
virtual bool CanAlwaysSee(WorldObject const *) const
void SetTransport(TransportBase *t)
constexpr std::size_t size()
DynamicUpdateFieldSetter< T >::insert_result AddDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter)
void RemoveDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter, uint32 index)
void ClearDynamicUpdateFieldValues(DynamicUpdateFieldSetter< T > &setter)
void RemoveOptionalUpdateFieldValue(OptionalUpdateFieldSetter< T > &setter)
bool SetUpdateFieldValue(UpdateFieldSetter< T > &setter, typename UpdateFieldSetter< T >::value_type &&value)
DynamicUpdateFieldSetter< T >::insert_result InsertDynamicUpdateFieldValue(DynamicUpdateFieldSetter< T > &setter, uint32 index)
void Update(VignetteData &vignette, WorldObject const *owner)
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
std::conditional_t< std::is_base_of_v< HasChangesMaskTag, T >, MutableFieldReference< T, true >, T & > insert_result
void RemoveValue(std::size_t index)
insert_result InsertValue(std::size_t index)
UpdateField< uint32, 0, 2 > DynamicFlags
UpdateField< int32, 0, 1 > EntryID
UpdateField< float, 0, 3 > Scale