18#ifndef TRINITYCORE_GAMEOBJECT_H
19#define TRINITYCORE_GAMEOBJECT_H
163#define FISHING_BOBBER_READY_TIME 5
172 void BuildValuesCreate(
ByteBuffer* data,
Player const* target)
const override;
173 void BuildValuesUpdate(
ByteBuffer* data,
Player const* target)
const override;
174 void ClearUpdateMask(
bool remove)
override;
188 void operator()(
Player const* player)
const;
191 void AddToWorld()
override;
192 void RemoveFromWorld()
override;
193 void CleanupsBeforeDelete(
bool finalCleanup =
true)
override;
208 bool IsTransport()
const;
209 bool IsDynTransport()
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;
227 void SaveToDB(
uint32 mapid, std::vector<Difficulty>
const& spawnDifficulties);
235 if (!owner.
IsEmpty() && !GetOwnerGUID().IsEmpty() && GetOwnerGUID() != owner)
239 m_spawnedByDefault =
false;
246 m_spawnedByDefault =
false;
252 time_t GetRespawnTimeEx()
const;
254 void SetRespawnTime(
int32 respawn);
258 return m_respawnDelayTime == 0 ||
259 (m_respawnTime > 0 && !m_spawnedByDefault) ||
260 (m_respawnTime == 0 && m_spawnedByDefault);
269 void SendGameObjectDespawn();
282 void SetGoState(
GOState state);
286 void SetGoArtKit(
uint32 artkit);
291 std::vector<uint32>
const* GetPauseTimes()
const;
292 void SetPathProgressForClient(
float progress);
294 void EnableCollision(
bool enable);
296 void Use(
Unit* user);
309 bool IsFullyLooted()
const;
310 void OnLootRelease(
Player* looter);
315 return m_SkillupList.count(playerGuid) > 0;
319 void AddUniqueUse(
Player* player);
325 void SaveRespawnTime(
uint32 forceDelay = 0);
332 bool IsLootAllowedFor(
Player const* player)
const;
334 Loot* GetLootForPlayer(
Player const* )
const override;
339 bool hasQuest(
uint32 quest_id)
const override;
340 bool hasInvolvedQuest(
uint32 quest_id)
const override;
341 bool ActivateToQuest(
Player const* target)
const;
342 void UseDoorOrButton(
uint32 time_to_restore = 0,
bool alternative =
false,
Unit* user =
nullptr);
344 void ResetDoorOrButton();
347 void TriggeringLinkedGameObject(
uint32 trapEntry,
Unit* target);
349 bool IsNeverVisibleFor(
WorldObject const* seer,
bool allowServersideObjects =
false)
const override;
350 bool IsAlwaysVisibleFor(
WorldObject const* seer)
const override;
351 bool IsInvisibleDueToDespawn(
WorldObject const* seer)
const override;
355 GameObject* LookupFishingHoleAround(
float range);
357 void SendCustomAnim(
uint32 anim);
358 bool IsInRange(
float x,
float y,
float z,
float radius)
const;
376 std::string
const& GetAIName()
const;
377 uint32 GetScriptId()
const;
380 bool HasStringId(std::string_view
id)
const;
381 void SetScriptStringId(std::string
id);
382 std::array<std::string_view, 3>
const&
GetStringIds()
const {
return m_stringIds; }
384 void SetDisplayId(
uint32 displayid);
386 uint8 GetNameSetId()
const;
392 void GetRespawnPosition(
float &x,
float &y,
float &z,
float* ori =
nullptr)
const;
400 float GetStationaryX()
const override {
return m_stationaryPosition.GetPositionX(); }
401 float GetStationaryY()
const override {
return m_stationaryPosition.GetPositionY(); }
402 float GetStationaryZ()
const override {
return m_stationaryPosition.GetPositionZ(); }
403 float GetStationaryO()
const override {
return m_stationaryPosition.GetOrientation(); }
407 void AfterRelocation();
409 float GetInteractionDistance()
const;
411 void UpdateModelPosition();
413 bool IsAtInteractDistance(
Position const& pos,
float radius)
const;
414 bool IsAtInteractDistance(
Player const* player,
SpellInfo const* spell =
nullptr)
const;
416 bool IsWithinDistInMap(
Player const* player)
const;
422 void SetAnimKitId(
uint16 animKitId,
bool oneshot);
428 void SetVignette(
uint32 vignetteId);
431 void AssaultCapturePoint(
Player* player);
432 void UpdateCapturePoint();
433 bool CanInteractWithCapturePoint(
Player const* target)
const;
436 time_t GetFlagTakenFromBaseTime()
const;
440 bool MeetsInteractCondition(
Player const* user)
const;
443 bool AIM_Initialize();
447 void UpdateDynamicFlagsForNearbyPlayers();
497 void RemoveFromOwner();
498 void SwitchDoorOrButton(
bool activate,
bool alternative =
false);
499 void UpdatePackedRotation();
519 bool Despawned =
false;
524 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 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
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
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
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
ObjectGuid GetCreatorGUID() const override
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
Vignettes::VignetteData const * GetVignette() const
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
bool SetUpdateFieldValue(UpdateFieldSetter< T > &setter, typename UpdateFieldSetter< T >::value_type &&value)
std::unique_ptr< VignetteData > Create(VignetteEntry const *vignetteData, WorldObject const *owner)
void Update(VignetteData &vignette, WorldObject const *owner)
BattlegroundCapturePointState
Optional< GOState > State
UF::GameObjectData::Base GameObjectMask
ValuesUpdateForPlayerWithMaskSender(GameObject const *owner)
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::@211 Building
OPvPCapturePoint * OPvPObj
struct GameObjectValue::@212 CapturePoint
struct GameObjectValue::@209 FishingHole
WorldPackets::Battleground::BattlegroundCapturePointState State
struct GameObjectValue::@210 ControlZone