18#ifndef TRINITYCORE_GAMEOBJECT_H
19#define TRINITYCORE_GAMEOBJECT_H
169#define FISHING_BOBBER_READY_TIME 5
180 void ClearValuesChangesMask()
override;
195 void operator()(
Player const* player)
const;
198 void AddToWorld()
override;
199 void RemoveFromWorld()
override;
200 void CleanupsBeforeDelete(
bool finalCleanup =
true)
override;
208 void Update(
uint32 diff)
override;
215 bool IsTransport()
const;
216 bool IsDestructibleBuilding()
const;
221 void SetLocalRotationAngles(
float z_rot,
float y_rot,
float x_rot);
222 void SetLocalRotation(
float qx,
float qy,
float qz,
float qw);
230 std::string GetNameForLocaleIdx(
LocaleConstant locale)
const override;
232 bool HasLabel(
int32 gameobjectLabel)
const;
233 std::span<int32 const> GetLabels()
const;
236 void SaveToDB(
uint32 mapid, std::vector<Difficulty>
const& spawnDifficulties);
244 if (!owner.
IsEmpty() && !GetOwnerGUID().IsEmpty() && GetOwnerGUID() != owner)
248 m_spawnedByDefault =
false;
255 m_spawnedByDefault =
false;
261 time_t GetRespawnTimeEx()
const;
263 void SetRespawnTime(
int32 respawn);
267 return m_respawnDelayTime == 0 ||
268 (m_respawnTime > 0 && !m_spawnedByDefault) ||
269 (m_respawnTime == 0 && m_spawnedByDefault);
278 void SendGameObjectDespawn();
291 void SetGoState(
GOState state);
295 void SetGoArtKit(
uint32 artkit);
300 std::span<uint32 const> GetPauseTimes()
const;
302 void SetPathProgressForClient(
float progress);
304 void EnableCollision(
bool enable);
306 void Use(
Unit* user,
bool ignoreCastInProgress =
false);
319 bool IsFullyLooted()
const;
320 void OnLootRelease(
Player* looter);
325 return m_SkillupList.count(playerGuid) > 0;
329 void AddUniqueUse(
Player* player);
335 void SaveRespawnTime(
uint32 forceDelay = 0);
342 bool IsLootAllowedFor(
Player const* player)
const;
344 Loot* GetLootForPlayer(
Player const* )
const override;
349 bool hasQuest(
uint32 quest_id)
const override;
350 bool hasInvolvedQuest(
uint32 quest_id)
const override;
351 bool HasConditionalInteraction()
const;
352 bool CanActivateForPlayer(
Player const* target)
const;
353 bool ActivateToQuest(
Player const* target)
const;
354 void UseDoorOrButton(
uint32 time_to_restore = 0,
bool alternative =
false,
Unit* user =
nullptr);
356 void ResetDoorOrButton();
359 void TriggeringLinkedGameObject(
uint32 trapEntry,
Unit* target);
361 bool IsNeverVisibleFor(
WorldObject const* seer,
bool allowServersideObjects)
const override;
362 bool IsAlwaysVisibleFor(
WorldObject const* seer)
const override;
363 bool IsInvisibleDueToDespawn(
WorldObject const* seer)
const override;
367 GameObject* LookupFishingHoleAround(
float range);
369 void SendCustomAnim(
uint32 anim);
370 bool IsInRange(
float x,
float y,
float z,
float radius)
const;
388 std::string
const& GetAIName()
const;
389 uint32 GetScriptId()
const;
392 void InheritStringIds(
GameObject const* parent);
393 bool HasStringId(std::string_view
id)
const;
394 void SetScriptStringId(std::string
id);
395 std::string_view
GetStringId(
StringIdType type)
const {
return m_stringIds[size_t(type)] ? std::string_view(*m_stringIds[
size_t(type)]) : std::string_view(); }
399 void SetDisplayId(
uint32 displayid);
401 uint8 GetNameSetId()
const;
407 Position GetRespawnPosition()
const;
419 void AfterRelocation();
421 float GetInteractionDistance()
const;
423 void UpdateModelPosition();
425 bool IsAtInteractDistance(
Position const& pos,
float radius)
const;
426 bool IsAtInteractDistance(
Player const* player,
SpellInfo const* spell =
nullptr)
const;
428 bool IsWithinDistInMap(
Player const* player)
const;
434 void SetAnimKitId(
uint16 animKitId,
bool oneshot);
440 void SetVignette(
uint32 vignetteId);
443 void AssaultCapturePoint(
Player* player);
444 void UpdateCapturePoint();
445 bool CanInteractWithCapturePoint(
Player const* target)
const;
448 time_t GetFlagTakenFromBaseTime()
const;
452 bool MeetsInteractCondition(
Player const* user)
const;
455 bool AIM_Initialize();
459 void UpdateDynamicFlagsForNearbyPlayers();
465 TeamId GetControllingTeam()
const;
511 void RemoveFromOwner();
512 void SwitchDoorOrButton(
bool activate,
bool alternative =
false);
513 void UpdatePackedRotation();
534 bool Despawned =
false;
539 std::unordered_map<ObjectGuid, PerPlayerState>& GetOrCreatePerPlayerStates();
std::chrono::system_clock::time_point SystemTimePoint
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::string GetDebugInfo()
std::unordered_set< ObjectGuid > GuidUnorderedSet
std::set< ObjectGuid > GuidSet
std::optional< T > Optional
Optional helper class to wrap optional values within.
static void SaveToDB(QuestPool const &pool, CharacterDatabaseTransaction trans)
@ GAMEOBJECT_TYPE_MAP_OBJ_TRANSPORT
GameObjectDestructibleState
@ GO_DESTRUCTIBLE_DESTROYED
@ GO_DESTRUCTIBLE_DAMAGED
ObjectGuid const & GetGUID() const
virtual void Execute(GameObjectTypeBase &type) const =0
virtual void Update(uint32 diff)
virtual ~GameObjectTypeBase()=default
virtual void OnRelocated()
GameObjectTypeBase(GameObject &owner)
virtual void ActivateObject(GameObjectActions action, int32 param, WorldObject *spellCaster=nullptr, uint32 spellId=0, int32 effectIndex=-1)
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects) const
virtual void OnStateChanged(GOState oldState, GOState newState)
Optional< uint32 > _value
uint32 GetRespawnDelay() const
ObjectGuid GetOwnerGUID() const override
bool _IsWithinDist(WorldObject const *obj, float dist2compare, bool, bool, bool) const override
Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size...
GameObjectValue m_goValue
void AddLootMode(uint16 lootMode)
GameObjectTemplate const * GetGOInfo() const
GOState GetGoState() const
void RemoveFlag(GameObjectFlags flags)
uint32 GetGoArtKit() const
bool HasFlag(GameObjectFlags flags) const
GameObjectData const * m_goData
LootState getLootState() const
uint32 GetSpellId() const
uint8 GetGoAnimProgress() const
Position m_stationaryPosition
QuaternionData const & GetLocalRotation() const
uint32 GetUniqueUseCount() const
void ReplaceAllFlags(GameObjectFlags flags)
uint32 GetFaction() const override
std::unordered_map< ObjectGuid, std::unique_ptr< Loot > > m_personalLoot
void SetGoAnimProgress(uint8 animprogress)
ObjectGuid m_lootStateUnitGUID
void SetOwnerGUID(ObjectGuid owner)
bool isSpawnedByDefault() const
ChairSlotAndUser ChairListSlots
bool HasLootMode(uint16 lootMode) const
GameObjectValue const * GetGOValue() const
void SetFlag(GameObjectFlags flags)
uint16 GetAIAnimKitId() const override
std::array< std::string const *, 3 > m_stringIds
time_t GetRespawnTime() const
void SetWorldEffectID(uint32 worldEffectID)
bool HasLootRecipient() const
void AddToSkillupList(ObjectGuid const &PlayerGuidLow)
uint32 m_respawnDelayTime
GameObjectAI * AI() const
std::unique_ptr< Vignettes::VignetteData > m_vignette
void RemoveLootMode(uint16 lootMode)
void SetSpawnedByDefault(bool b)
bool IsInSkillupList(ObjectGuid const &playerGuid) const
void SetRespawnCompatibilityMode(bool mode=true)
GameobjectTypes GetGoType() const
Transport const * ToTransport() const
void SetGoType(GameobjectTypes type)
Seconds m_despawnRespawnTime
QuaternionData m_localRotation
void SetLinkedTrap(GameObject *linkedTrap)
GameObjectData const * GetGameObjectData() const
bool m_respawnCompatibilityMode
GameObjectTemplateAddon const * m_goTemplateAddon
ObjectGuid::LowType GetSpawnId() const
Position const & GetStationaryPosition() const override
GuidUnorderedSet m_tapList
bool GetRespawnCompatibilityMode()
uint32 GetDisplayId() const
int64 GetPackedLocalRotation() const
std::unique_ptr< Loot > m_loot
void SetLevel(uint32 level)
Optional< float > m_transportPathProgress
ObjectGuid GetCreatorGUID() const override
Optional< std::string > m_scriptStringId
GameObjectTemplateAddon const * GetTemplateAddon() const
void SetLootMode(uint16 lootMode)
uint32 GetUseCount() const
void RelocateStationaryPosition(float x, float y, float z, float o)
Optional< float > GetPathProgressForClient() const
GameObjectTemplate const * m_goInfo
GuidUnorderedSet const & GetTapList() const
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
std::map< uint32, ObjectGuid > ChairSlotAndUser
std::string_view GetStringId(StringIdType type) const
void RelocateStationaryPosition(Position const &pos)
uint16 GetLootMode() const
TransportBase * ToTransportBase()
Transport * ToTransport()
GameObjectDestructibleState GetDestructibleState() const
uint32 GetWorldEffectID() const
std::unique_ptr< std::unordered_map< ObjectGuid, PerPlayerState > > m_perPlayerState
void SetTapList(GuidUnorderedSet tapList)
UF::UpdateField< UF::GameObjectData, int32(WowCS::EntityFragment::CGObject), TYPEID_GAMEOBJECT > m_gameObjectData
std::unique_ptr< GameObjectTypeBase > m_goTypeImpl
ObjectGuid m_ritualOwnerGUID
Vignettes::VignetteData const * GetVignette() const
std::unique_ptr< GameObjectModel > m_model
void SetSpellId(uint32 id)
void SetFaction(uint32 faction) override
static ObjectGuid const Empty
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
BattlegroundCapturePointState
Optional< GOState > State
UF::GameObjectData::Base GameObjectMask
ValuesUpdateForPlayerWithMaskSender(GameObject const *owner)
bool IgnoreNestedChangesMask
UF::ObjectData::Base ObjectMask
constexpr float GetPositionX() const
constexpr float GetPositionY() const
constexpr float GetPositionZ() const
UpdateField< uint32, 0, 12 > Flags
UpdateField< ObjectGuid, 0, 10 > CreatedBy
UpdateField< int32, 0, 21 > Level
UpdateField< uint8, 0, 18 > PercentHealth
UpdateField< int8, 0, 17 > TypeID
UpdateField< int32, 0, 15 > FactionTemplate
struct GameObjectValue::@194 Trap
OPvPCapturePoint * OPvPObj
struct GameObjectValue::@197 Building
SpellTargetCheckTypes TargetSearcherCheckType
WorldPackets::Battleground::BattlegroundCapturePointState State
::DestructibleHitpoint const * DestructibleHitpoint
struct GameObjectValue::@196 ControlZone
struct GameObjectValue::@198 CapturePoint
struct GameObjectValue::@195 FishingHole