18#ifndef TRINITYCORE_GAMEOBJECT_H
19#define TRINITYCORE_GAMEOBJECT_H
163#define FISHING_BOBBER_READY_TIME 5
174 void ClearValuesChangesMask()
override;
189 void operator()(
Player const* player)
const;
192 void AddToWorld()
override;
193 void RemoveFromWorld()
override;
194 void CleanupsBeforeDelete(
bool finalCleanup =
true)
override;
202 void Update(
uint32 diff)
override;
209 bool IsTransport()
const;
210 bool IsDestructibleBuilding()
const;
215 void SetLocalRotationAngles(
float z_rot,
float y_rot,
float x_rot);
216 void SetLocalRotation(
float qx,
float qy,
float qz,
float qw);
224 std::string GetNameForLocaleIdx(
LocaleConstant locale)
const override;
226 bool HasLabel(
int32 gameobjectLabel)
const;
227 std::span<int32 const> GetLabels()
const;
230 void SaveToDB(
uint32 mapid, std::vector<Difficulty>
const& spawnDifficulties);
238 if (!owner.
IsEmpty() && !GetOwnerGUID().IsEmpty() && GetOwnerGUID() != owner)
242 m_spawnedByDefault =
false;
249 m_spawnedByDefault =
false;
255 time_t GetRespawnTimeEx()
const;
257 void SetRespawnTime(
int32 respawn);
261 return m_respawnDelayTime == 0 ||
262 (m_respawnTime > 0 && !m_spawnedByDefault) ||
263 (m_respawnTime == 0 && m_spawnedByDefault);
272 void SendGameObjectDespawn();
285 void SetGoState(
GOState state);
289 void SetGoArtKit(
uint32 artkit);
294 std::span<uint32 const> GetPauseTimes()
const;
296 void SetPathProgressForClient(
float progress);
298 void EnableCollision(
bool enable);
300 void Use(
Unit* user,
bool ignoreCastInProgress =
false);
313 bool IsFullyLooted()
const;
314 void OnLootRelease(
Player* looter);
319 return m_SkillupList.count(playerGuid) > 0;
323 void AddUniqueUse(
Player* player);
329 void SaveRespawnTime(
uint32 forceDelay = 0);
336 bool IsLootAllowedFor(
Player const* player)
const;
338 Loot* GetLootForPlayer(
Player const* )
const override;
343 bool hasQuest(
uint32 quest_id)
const override;
344 bool hasInvolvedQuest(
uint32 quest_id)
const override;
345 bool HasConditionalInteraction()
const;
346 bool CanActivateForPlayer(
Player const* target)
const;
347 bool ActivateToQuest(
Player const* target)
const;
348 void UseDoorOrButton(
uint32 time_to_restore = 0,
bool alternative =
false,
Unit* user =
nullptr);
350 void ResetDoorOrButton();
353 void TriggeringLinkedGameObject(
uint32 trapEntry,
Unit* target);
355 bool IsNeverVisibleFor(
WorldObject const* seer,
bool allowServersideObjects =
false)
const override;
356 bool IsAlwaysVisibleFor(
WorldObject const* seer)
const override;
357 bool IsInvisibleDueToDespawn(
WorldObject const* seer)
const override;
361 GameObject* LookupFishingHoleAround(
float range);
363 void SendCustomAnim(
uint32 anim);
364 bool IsInRange(
float x,
float y,
float z,
float radius)
const;
382 std::string
const& GetAIName()
const;
383 uint32 GetScriptId()
const;
386 void InheritStringIds(
GameObject const* parent);
387 bool HasStringId(std::string_view
id)
const;
388 void SetScriptStringId(std::string
id);
389 std::string_view
GetStringId(
StringIdType type)
const {
return m_stringIds[size_t(type)] ? std::string_view(*m_stringIds[
size_t(type)]) : std::string_view(); }
393 void SetDisplayId(
uint32 displayid);
395 uint8 GetNameSetId()
const;
401 Position GetRespawnPosition()
const;
413 void AfterRelocation();
415 float GetInteractionDistance()
const;
417 void UpdateModelPosition();
419 bool IsAtInteractDistance(
Position const& pos,
float radius)
const;
420 bool IsAtInteractDistance(
Player const* player,
SpellInfo const* spell =
nullptr)
const;
422 bool IsWithinDistInMap(
Player const* player)
const;
428 void SetAnimKitId(
uint16 animKitId,
bool oneshot);
434 void SetVignette(
uint32 vignetteId);
437 void AssaultCapturePoint(
Player* player);
438 void UpdateCapturePoint();
439 bool CanInteractWithCapturePoint(
Player const* target)
const;
442 time_t GetFlagTakenFromBaseTime()
const;
446 bool MeetsInteractCondition(
Player const* user)
const;
449 bool AIM_Initialize();
453 void UpdateDynamicFlagsForNearbyPlayers();
459 TeamId GetControllingTeam()
const;
505 void RemoveFromOwner();
506 void SwitchDoorOrButton(
bool activate,
bool alternative =
false);
507 void UpdatePackedRotation();
528 bool Despawned =
false;
533 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< int8, 0, 16 > TypeID
UpdateField< int32, 0, 20 > Level
UpdateField< uint8, 0, 17 > PercentHealth
UpdateField< int32, 0, 14 > FactionTemplate
struct GameObjectValue::@196 CapturePoint
struct GameObjectValue::@193 FishingHole
OPvPCapturePoint * OPvPObj
struct GameObjectValue::@195 Building
struct GameObjectValue::@194 ControlZone
WorldPackets::Battleground::BattlegroundCapturePointState State
::DestructibleHitpoint const * DestructibleHitpoint