18#ifndef TRINITYCORE_GAMEOBJECT_H
19#define TRINITYCORE_GAMEOBJECT_H
145#define FISHING_BOBBER_READY_TIME 5
154 void BuildValuesCreate(
ByteBuffer* data,
Player const* target)
const override;
155 void BuildValuesUpdate(
ByteBuffer* data,
Player const* target)
const override;
156 void ClearUpdateMask(
bool remove)
override;
170 void operator()(
Player const* player)
const;
173 void AddToWorld()
override;
174 void RemoveFromWorld()
override;
175 void CleanupsBeforeDelete(
bool finalCleanup =
true)
override;
190 bool IsTransport()
const;
191 bool IsDynTransport()
const;
192 bool IsDestructibleBuilding()
const;
197 void SetLocalRotationAngles(
float z_rot,
float y_rot,
float x_rot);
198 void SetLocalRotation(
float qx,
float qy,
float qz,
float qw);
206 std::string GetNameForLocaleIdx(
LocaleConstant locale)
const override;
209 void SaveToDB(
uint32 mapid, std::vector<Difficulty>
const& spawnDifficulties);
216 if (!owner.
IsEmpty() && !GetOwnerGUID().IsEmpty() && GetOwnerGUID() != owner)
220 m_spawnedByDefault =
false;
227 m_spawnedByDefault =
false;
233 time_t GetRespawnTimeEx()
const;
235 void SetRespawnTime(
int32 respawn);
239 return m_respawnDelayTime == 0 ||
240 (m_respawnTime > 0 && !m_spawnedByDefault) ||
241 (m_respawnTime == 0 && m_spawnedByDefault);
250 void SendGameObjectDespawn();
263 void SetGoState(
GOState state);
267 void SetGoArtKit(
uint32 artkit);
272 std::vector<uint32>
const* GetPauseTimes()
const;
273 void SetPathProgressForClient(
float progress);
275 void EnableCollision(
bool enable);
277 void Use(
Unit* user);
290 bool IsFullyLooted()
const;
291 void OnLootRelease(
Player* looter);
296 return m_SkillupList.count(playerGuid) > 0;
300 void AddUniqueUse(
Player* player);
306 void SaveRespawnTime(
uint32 forceDelay = 0);
313 bool IsLootAllowedFor(
Player const* player)
const;
315 Loot* GetLootForPlayer(
Player const* )
const override;
320 bool hasQuest(
uint32 quest_id)
const override;
321 bool hasInvolvedQuest(
uint32 quest_id)
const override;
322 bool ActivateToQuest(
Player const* target)
const;
323 void UseDoorOrButton(
uint32 time_to_restore = 0,
bool alternative =
false,
Unit* user =
nullptr);
325 void ResetDoorOrButton();
328 void TriggeringLinkedGameObject(
uint32 trapEntry,
Unit* target);
330 bool IsNeverVisibleFor(
WorldObject const* seer,
bool allowServersideObjects =
false)
const override;
331 bool IsAlwaysVisibleFor(
WorldObject const* seer)
const override;
332 bool IsInvisibleDueToDespawn(
WorldObject const* seer)
const override;
336 GameObject* LookupFishingHoleAround(
float range);
338 void SendCustomAnim(
uint32 anim);
339 bool IsInRange(
float x,
float y,
float z,
float radius)
const;
357 std::string
const& GetAIName()
const;
358 uint32 GetScriptId()
const;
361 bool HasStringId(std::string_view
id)
const;
362 void SetScriptStringId(std::string
id);
363 std::array<std::string_view, 3>
const&
GetStringIds()
const {
return m_stringIds; }
365 void SetDisplayId(
uint32 displayid);
367 uint8 GetNameSetId()
const;
373 void GetRespawnPosition(
float &x,
float &y,
float &z,
float* ori =
nullptr)
const;
381 float GetStationaryX()
const override {
return m_stationaryPosition.GetPositionX(); }
382 float GetStationaryY()
const override {
return m_stationaryPosition.GetPositionY(); }
383 float GetStationaryZ()
const override {
return m_stationaryPosition.GetPositionZ(); }
384 float GetStationaryO()
const override {
return m_stationaryPosition.GetOrientation(); }
388 void AfterRelocation();
390 float GetInteractionDistance()
const;
392 void UpdateModelPosition();
394 bool IsAtInteractDistance(
Position const& pos,
float radius)
const;
395 bool IsAtInteractDistance(
Player const* player,
SpellInfo const* spell =
nullptr)
const;
397 bool IsWithinDistInMap(
Player const* player)
const;
403 void SetAnimKitId(
uint16 animKitId,
bool oneshot);
409 void AssaultCapturePoint(
Player* player);
410 void UpdateCapturePoint();
411 bool CanInteractWithCapturePoint(
Player const* target)
const;
414 time_t GetFlagTakenFromBaseTime()
const;
416 bool MeetsInteractCondition(
Player const* user)
const;
419 bool AIM_Initialize();
423 void UpdateDynamicFlagsForNearbyPlayers();
473 void RemoveFromOwner();
474 void SwitchDoorOrButton(
bool activate,
bool alternative =
false);
475 void UpdatePackedRotation();
493 bool Despawned =
false;
498 std::unordered_map<ObjectGuid, PerPlayerState>& GetOrCreatePerPlayerStates();
std::chrono::system_clock::time_point SystemTimePoint
std::chrono::seconds Seconds
Seconds shorthand typedef.
std::chrono::milliseconds Milliseconds
Milliseconds 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
virtual void Execute(GameObjectTypeBase &type) const =0
virtual void Update(uint32 diff)
virtual ~GameObjectTypeBase()=default
virtual void OnRelocated()
GameObjectTypeBase(GameObject &owner)
virtual bool IsNeverVisibleFor(WorldObject const *seer, bool allowServersideObjects) const
virtual void OnStateChanged(GOState oldState, GOState newState)
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
float GetStationaryZ() const override
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
float GetStationaryY() const override
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
time_t GetRespawnTime() const
void SetWorldEffectID(uint32 worldEffectID)
bool HasLootRecipient() const
void AddToSkillupList(ObjectGuid const &PlayerGuidLow)
float GetStationaryX() const override
uint32 m_respawnDelayTime
GameObjectAI * AI() const
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
GuidUnorderedSet m_tapList
bool GetRespawnCompatibilityMode()
uint32 GetDisplayId() const
int64 GetPackedLocalRotation() const
GameObjectModel * m_model
std::unique_ptr< Loot > m_loot
void SetLevel(uint32 level)
UF::UpdateField< UF::GameObjectData, 0, TYPEID_GAMEOBJECT > m_gameObjectData
Optional< std::string > m_scriptStringId
std::array< std::string_view, 3 > const & GetStringIds() const
GameObjectTemplateAddon const * GetTemplateAddon() const
void SetLootMode(uint16 lootMode)
uint32 GetUseCount() const
void RelocateStationaryPosition(float x, float y, float z, float o)
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
Position const & GetStationaryPosition() const
uint16 GetLootMode() const
TransportBase * ToTransportBase()
std::array< std::string_view, 3 > m_stringIds
Transport * ToTransport()
GameObjectDestructibleState GetDestructibleState() const
uint32 GetWorldEffectID() const
std::unique_ptr< std::unordered_map< ObjectGuid, PerPlayerState > > m_perPlayerState
float GetStationaryO() const override
void SetTapList(GuidUnorderedSet tapList)
std::unique_ptr< GameObjectTypeBase > m_goTypeImpl
ObjectGuid m_ritualOwnerGUID
void SetSpellId(uint32 id)
void SetFaction(uint32 faction) override
static ObjectGuid const Empty
static ObjectGuid GetGUID(Object const *o)
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)
UF::ObjectData::Base ObjectMask
float GetPositionZ() const
float GetPositionX() const
float GetPositionY() 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::@208 Building
OPvPCapturePoint * OPvPObj
WorldPackets::Battleground::BattlegroundCapturePointState State
struct GameObjectValue::@209 CapturePoint
struct GameObjectValue::@206 FishingHole
struct GameObjectValue::@207 ControlZone