AzerothCore 3.3.5a
OpenSource WoW Emulator
Loading...
Searching...
No Matches
GameObject Class Reference

#include "GameObject.h"

Inheritance diagram for GameObject:
WorldObject GridObject< GameObject > MovableMapObject UpdatableMapObject Object WorldLocation Position Transport MotionTransport StaticTransport

Public Member Functions

 GameObject ()
 
 ~GameObject () override
 
void BuildValuesUpdate (uint8 updateType, ByteBuffer *data, Player *target) override
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void CleanupsBeforeDelete (bool finalCleanup=true) override
 
uint32 GetDynamicFlags () const override
 
void ReplaceAllDynamicFlags (uint32 flag) override
 
virtual bool Create (ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0)
 
void Update (uint32 p_time) override
 
GameObjectTemplate const * GetGOInfo () const
 
GameObjectTemplateAddon const * GetTemplateAddon () const
 
GameObjectData const * GetGameObjectData () const
 
GameObjectValue const * GetGOValue () const
 
bool IsTransport () const
 
bool IsDestructibleBuilding () const
 
ObjectGuid::LowType GetSpawnId () const
 
void SetWorldRotationAngles (float z_rot, float y_rot, float x_rot)
 
void SetWorldRotation (G3D::Quat const &rot)
 
void SetTransportPathRotation (float qx, float qy, float qz, float qw)
 
G3D::Quat const & GetWorldRotation () const
 
int64 GetPackedWorldRotation () const
 
G3D::Quat GetFinalWorldRotation () const
 
std::string const & GetNameForLocaleIdx (LocaleConstant locale_idx) const override
 
void SaveToDB (bool saveAddon=false)
 
void SaveToDB (uint32 mapid, uint8 spawnMask, uint32 phaseMask, bool saveAddon=false)
 
virtual bool LoadFromDB (ObjectGuid::LowType guid, Map *map)
 
virtual bool LoadGameObjectFromDB (ObjectGuid::LowType guid, Map *map, bool addToMap=true)
 
void DeleteFromDB ()
 
void SetOwnerGUID (ObjectGuid owner)
 
ObjectGuid GetOwnerGUID () const
 
UnitGetOwner () const
 
void SetSpellId (uint32 id)
 
uint32 GetSpellId () const
 
time_t GetRespawnTime () const
 
time_t GetRespawnTimeEx () const
 
void SetRespawnTime (int32 respawn)
 
void SetRespawnDelay (int32 respawn)
 
void Respawn ()
 
bool isSpawned () const
 
bool isSpawnedByDefault () const
 
void SetSpawnedByDefault (bool b)
 
uint32 GetRespawnDelay () const
 
void Refresh ()
 
void DespawnOrUnsummon (Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
 
void Delete ()
 
void GetFishLoot (Loot *fishLoot, Player *lootOwner, bool junk=false)
 
GameobjectTypes GetGoType () const
 
void SetGoType (GameobjectTypes type)
 
GOState GetGoState () const
 
void SetGoState (GOState state)
 
uint8 GetGoArtKit () const
 
void SetGoArtKit (uint8 artkit)
 
uint8 GetGoAnimProgress () const
 
void SetGoAnimProgress (uint8 animprogress)
 
void SetPhaseMask (uint32 newPhaseMask, bool update) override
 
void EnableCollision (bool enable)
 
GameObjectFlags GetGameObjectFlags () const
 
bool HasGameObjectFlag (GameObjectFlags flags) const
 
void SetGameObjectFlag (GameObjectFlags flags)
 
void RemoveGameObjectFlag (GameObjectFlags flags)
 
void ReplaceAllGameObjectFlags (GameObjectFlags flags)
 
void Use (Unit *user)
 
LootState getLootState () const
 
void SetLootState (LootState s, Unit *unit=nullptr)
 
uint16 GetLootMode () const
 
bool HasLootMode (uint16 lootMode) const
 
void SetLootMode (uint16 lootMode)
 
void AddLootMode (uint16 lootMode)
 
void RemoveLootMode (uint16 lootMode)
 
void ResetLootMode ()
 
void AddToSkillupList (ObjectGuid const &playerGuid)
 
bool IsInSkillupList (ObjectGuid const &playerGuid) const
 
void AddUniqueUse (Player *player)
 
void AddUse ()
 
uint32 GetUseCount () const
 
uint32 GetUniqueUseCount () const
 
void SaveRespawnTime () override
 
void SaveRespawnTime (uint32 forceDelay)
 
PlayerGetLootRecipient () const
 
GroupGetLootRecipientGroup () const
 
void SetLootRecipient (Creature *creature)
 
void SetLootRecipient (Map *map)
 
bool IsLootAllowedFor (Player const *player) const
 
bool HasLootRecipient () const
 
void SetLootGenerationTime ()
 
uint32 GetLootGenerationTime () const
 
GameObjectGetLinkedTrap ()
 
void SetLinkedTrap (GameObject *linkedTrap)
 
bool hasQuest (uint32 quest_id) const override
 
bool hasInvolvedQuest (uint32 quest_id) const override
 
bool ActivateToQuest (Player *target) const
 
void UseDoorOrButton (uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
 
void ResetDoorOrButton ()
 
void TriggeringLinkedGameObject (uint32 trapEntry, Unit *target)
 
bool IsNeverVisible () const override
 
bool IsAlwaysVisibleFor (WorldObject const *seer) const override
 
bool IsInvisibleDueToDespawn () const override
 
uint8 getLevelForTarget (WorldObject const *target) const override
 
GameObjectLookupFishingHoleAround (float range)
 
void CastSpell (Unit *target, uint32 spell)
 
void SendCustomAnim (uint32 anim)
 
bool IsInRange (float x, float y, float z, float radius) const
 
void ModifyHealth (int32 change, Unit *attackerOrHealer=nullptr, uint32 spellId=0)
 
void SetDestructibleBuildingModifyState (bool allow)
 
void SetDestructibleState (GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
 
GameObjectDestructibleState GetDestructibleState () const
 
void EventInform (uint32 eventId)
 
virtual uint32 GetScriptId () const
 
GameObjectAIAI () const
 
std::string const & GetAIName () const
 
void SetDisplayId (uint32 displayid)
 
uint32 GetDisplayId () const
 
void GetRespawnPosition (float &x, float &y, float &z, float *ori=nullptr) const
 
void SetPosition (float x, float y, float z, float o)
 
void SetPosition (const Position &pos)
 
bool IsStaticTransport () const
 
bool IsMotionTransport () const
 
TransportToTransport ()
 
Transport const * ToTransport () const
 
StaticTransportToStaticTransport ()
 
StaticTransport const * ToStaticTransport () const
 
MotionTransportToMotionTransport ()
 
MotionTransport const * ToMotionTransport () const
 
float GetStationaryX () const override
 
float GetStationaryY () const override
 
float GetStationaryZ () const override
 
float GetStationaryO () const override
 
float GetInteractionDistance () const
 
void UpdateModelPosition ()
 
bool IsAtInteractDistance (Position const &pos, float radius) const
 
bool IsAtInteractDistance (Player const *player, SpellInfo const *spell=nullptr) const
 
bool IsWithinDistInMap (Player const *player) const
 
SpellInfo const * GetSpellForLock (Player const *player) const
 
bool ValidateGameobjectType () const
 
bool IsInstanceGameobject () const
 
uint8 GameobjectStateToInt (GOState *state) const
 
bool IsAllowedToSaveToDB () const
 
void AllowSaveToDB (bool enable)
 
void SaveStateToDB ()
 
std::string GetDebugInfo () const override
 
bool IsUpdateNeeded () override
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
- Public Member Functions inherited from WorldObject
 ~WorldObject () override
 
void _Create (ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void GetNearPoint2D (WorldObject const *searcher, float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint2D (float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint (WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle, float controlZ=0, Position const *startPos=nullptr) const
 
void GetVoidClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0, float controlZ=0) const
 
bool GetClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
 
void MovePosition (Position &pos, float dist, float angle)
 
Position GetNearPosition (float dist, float angle)
 
void MovePositionToFirstCollision (Position &pos, float dist, float angle)
 
Position GetFirstCollisionPosition (float startX, float startY, float startZ, float destX, float destY)
 
Position GetFirstCollisionPosition (float destX, float destY, float destZ)
 
Position GetFirstCollisionPosition (float dist, float angle)
 
Position GetRandomNearPosition (float radius)
 
void GetContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
void GetChargeContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
float GetObjectSize () const
 
virtual float GetCombatReach () const
 
void UpdateGroundPositionZ (float x, float y, float &z) const
 
void UpdateAllowedPositionZ (float x, float y, float &z, float *groundZ=nullptr) const
 
void GetRandomPoint (const Position &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (const Position &srcPos, float distance) const
 
uint32 GetInstanceId () const
 
uint32 GetPhaseMask () const
 
bool InSamePhase (WorldObject const *obj) const
 
bool InSamePhase (uint32 phasemask) const
 
uint32 GetZoneId () const
 
uint32 GetAreaId () const
 
void GetZoneAndAreaId (uint32 &zoneid, uint32 &areaid) const
 
bool IsOutdoors () const
 
LiquidData const & GetLiquidData () const
 
InstanceScriptGetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string const &newname)
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (const Position &pos) const
 
float GetDistance (float x, float y, float z) const
 
float GetDistance2d (WorldObject const *obj) const
 
float GetDistance2d (float x, float y) const
 
float GetDistanceZ (WorldObject const *obj) const
 
bool IsSelfOrInSameMap (WorldObject const *obj) const
 
bool IsInMap (WorldObject const *obj) const
 
bool IsWithinDist3d (float x, float y, float z, float dist) const
 
bool IsWithinDist3d (const Position *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (const Position *pos, float dist) const
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
 
bool IsWithinLOS (float x, float y, float z, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS) const
 
bool IsWithinLOSInMap (WorldObject const *obj, VMAP::ModelIgnoreFlags ignoreFlags=VMAP::ModelIgnoreFlags::Nothing, LineOfSightChecks checks=LINEOFSIGHT_ALL_CHECKS, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
Position GetHitSpherePointFor (Position const &dest, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
void GetHitSpherePointFor (Position const &dest, float &x, float &y, float &z, Optional< float > collisionHeight={ }, Optional< float > combatReach={ }) const
 
bool GetDistanceOrder (WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
 
bool IsInRange (WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
 
bool IsInRange2d (float x, float y, float minRange, float maxRange) const
 
bool IsInRange3d (float x, float y, float z, float minRange, float maxRange) const
 
bool isInFront (WorldObject const *target, float arc=M_PI) const
 
bool isInBack (WorldObject const *target, float arc=M_PI) const
 
bool IsInBetween (WorldObject const *obj1, WorldObject const *obj2, float size=0) const
 
virtual void SendMessageToSet (WorldPacket const *data, bool self) const
 
virtual void SendMessageToSetInRange (WorldPacket const *data, float dist, bool self) const
 
virtual void SendMessageToSet (WorldPacket const *data, Player const *skipped_rcvr) const
 
void PlayDistanceSound (uint32 sound_id, Player *target=nullptr)
 
void PlayDirectSound (uint32 sound_id, Player *target=nullptr)
 
void PlayRadiusSound (uint32 sound_id, float radius)
 
void PlayDirectMusic (uint32 music_id, Player *target=nullptr)
 
void PlayRadiusMusic (uint32 music_id, float radius)
 
template<typename Worker >
void DoForAllVisiblePlayers (Worker &&worker)
 
template<typename Worker >
void DoForAllVisibleWorldObjects (Worker &&worker)
 
void DestroyForVisiblePlayers ()
 
void SendObjectDeSpawnAnim (ObjectGuid guid)
 
void AddObjectToRemoveList ()
 
float GetGridActivationRange () const
 
float GetVisibilityRange () const
 
virtual float GetSightRange (WorldObject const *target=nullptr) const
 
bool CanSeeOrDetect (WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
 
void SendPlayMusic (uint32 Music, bool OnlySelf)
 
virtual void SetMap (Map *map)
 
virtual void ResetMap ()
 
MapGetMap () const
 
MapFindMap () const
 
void SetZoneScript ()
 
void ClearZoneScript ()
 
ZoneScriptGetZoneScript () const
 
TempSummonSummonCreature (uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
 
TempSummonSummonCreature (uint32 id, float x, float y, float z, float ang=0, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
CreatureSummonTrigger (float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
CreatureFindNearestCreature (uint32 entry, float range, bool alive=true) const
 
GameObjectFindNearestGameObject (uint32 entry, float range, bool onlySpawned=false) const
 
GameObjectFindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
PlayerSelectNearestPlayer (float distance=0) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &gameobjectList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &creatureList, std::vector< uint32 > const &entries, float maxSearchRange) const
 
void GetDeadCreatureListInGrid (std::list< Creature * > &lList, float maxSearchRange, bool alive=false) const
 
virtual void UpdateObjectVisibility (bool forced=true, bool fromUpdate=false)
 
virtual void UpdateObjectVisibilityOnCreate ()
 
void BuildUpdate (UpdateDataMapType &data_map) override
 
void GetCreaturesWithEntryInRange (std::list< Creature * > &creatureList, float radius, uint32 entry)
 
void SetPositionDataUpdate ()
 
void UpdatePositionData ()
 
void AddToObjectUpdate () override
 
void RemoveFromObjectUpdate () override
 
void AddToNotify (uint16 f)
 
void RemoveFromNotify (uint16 f)
 
bool isNeedNotify (uint16 f) const
 
uint16 GetNotifyFlags () const
 
bool NotifyExecuted (uint16 f) const
 
void SetNotified (uint16 f)
 
void ResetAllNotifies ()
 
bool isActiveObject () const
 
void setActive (bool isActiveObject)
 
VisibilityDistanceType GetVisibilityOverrideType () const
 
bool IsVisibilityOverridden () const
 
bool IsZoneWideVisible () const
 
bool IsFarVisible () const
 
float GetVisibilityOverrideDistance () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
bool IsInWintergrasp () const
 
TransportGetTransport () const
 
float GetTransOffsetX () const
 
float GetTransOffsetY () const
 
float GetTransOffsetZ () const
 
float GetTransOffsetO () const
 
uint32 GetTransTime () const
 
int8 GetTransSeat () const
 
virtual ObjectGuid GetTransGUID () const
 
void SetTransport (Transport *t)
 
float GetMapWaterOrGroundLevel (Position pos, float *ground=nullptr) const
 
float GetMapWaterOrGroundLevel (float x, float y, float z, float *ground=nullptr) const
 
float GetMapHeight (float x, float y, float z, bool vmap=true, float distanceToSearch=50.0f) const
 
float GetFloorZ () const
 
float GetMinHeightInWater () const
 Get the minimum height of a object that should be in water to start floating/swim.
 
virtual float GetCollisionHeight () const
 
virtual float GetCollisionWidth () const
 
virtual float GetCollisionRadius () const
 
void AddAllowedLooter (ObjectGuid guid)
 
void ResetAllowedLooters ()
 
void SetAllowedLooters (GuidUnorderedSet const looters)
 
bool HasAllowedLooter (ObjectGuid guid) const
 
GuidUnorderedSet const & GetAllowedLooters () const
 
void RemoveAllowedLooter (ObjectGuid guid)
 
bool CanBeAddedToMapUpdateList ()
 
std::string GetDebugInfo () const override
 
ObjectVisibilityContainerGetObjectVisibilityContainer ()
 
ObjectVisibilityContainer const & GetObjectVisibilityContainer () const
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
bool IsInWorld () const
 
ObjectGuid GetGUID () const
 
PackedGuid const & GetPackGUID () const
 
uint32 GetEntry () const
 
void SetEntry (uint32 entry)
 
float GetObjectScale () const
 
virtual void SetObjectScale (float scale)
 
bool HasDynamicFlag (uint32 flag) const
 
virtual void SetDynamicFlag (uint32 flag)
 
virtual void RemoveDynamicFlag (uint32 flag)
 
TypeID GetTypeId () const
 
bool isType (uint16 mask) const
 
virtual void BuildCreateUpdateBlockForPlayer (UpdateData *data, Player *target)
 
void SendUpdateToPlayer (Player *player)
 
void BuildValuesUpdateBlockForPlayer (UpdateData *data, Player *target)
 
void BuildOutOfRangeUpdateBlock (UpdateData *data) const
 
void BuildMovementUpdateBlock (UpdateData *data, uint32 flags=0) const
 
virtual void DestroyForPlayer (Player *target, bool onDeath=false) const
 
int32 GetInt32Value (uint16 index) const
 
uint32 GetUInt32Value (uint16 index) const
 
uint64 GetUInt64Value (uint16 index) const
 
float GetFloatValue (uint16 index) const
 
uint8 GetByteValue (uint16 index, uint8 offset) const
 
uint16 GetUInt16Value (uint16 index, uint8 offset) const
 
ObjectGuid GetGuidValue (uint16 index) const
 
void SetInt32Value (uint16 index, int32 value)
 
void SetUInt32Value (uint16 index, uint32 value)
 
void UpdateUInt32Value (uint16 index, uint32 value)
 
void SetUInt64Value (uint16 index, uint64 value)
 
void SetFloatValue (uint16 index, float value)
 
void SetByteValue (uint16 index, uint8 offset, uint8 value)
 
void SetUInt16Value (uint16 index, uint8 offset, uint16 value)
 
void SetInt16Value (uint16 index, uint8 offset, int16 value)
 
void SetGuidValue (uint16 index, ObjectGuid value)
 
void SetStatFloatValue (uint16 index, float value)
 
void SetStatInt32Value (uint16 index, int32 value)
 
bool AddGuidValue (uint16 index, ObjectGuid value)
 
bool RemoveGuidValue (uint16 index, ObjectGuid value)
 
void ApplyModUInt32Value (uint16 index, int32 val, bool apply)
 
void ApplyModInt32Value (uint16 index, int32 val, bool apply)
 
void ApplyModUInt64Value (uint16 index, int32 val, bool apply)
 
void ApplyModPositiveFloatValue (uint16 index, float val, bool apply)
 
void ApplyModSignedFloatValue (uint16 index, float val, bool apply)
 
void SetFlag (uint16 index, uint32 newFlag)
 
void RemoveFlag (uint16 index, uint32 oldFlag)
 
void ToggleFlag (uint16 index, uint32 flag)
 
bool HasFlag (uint16 index, uint32 flag) const
 
void ApplyModFlag (uint16 index, uint32 flag, bool apply)
 
void SetByteFlag (uint16 index, uint8 offset, uint8 newFlag)
 
void RemoveByteFlag (uint16 index, uint8 offset, uint8 newFlag)
 
bool HasByteFlag (uint16 index, uint8 offset, uint8 flag) const
 
void SetFlag64 (uint16 index, uint64 newFlag)
 
void RemoveFlag64 (uint16 index, uint64 oldFlag)
 
void ToggleFlag64 (uint16 index, uint64 flag)
 
bool HasFlag64 (uint16 index, uint64 flag) const
 
void ApplyModFlag64 (uint16 index, uint64 flag, bool apply)
 
void ClearUpdateMask (bool remove)
 
uint16 GetValuesCount () const
 
void BuildFieldsUpdate (Player *, UpdateDataMapType &)
 
void SetFieldNotifyFlag (uint16 flag)
 
void RemoveFieldNotifyFlag (uint16 flag)
 
void ForceValuesUpdateAtIndex (uint32)
 
bool IsPlayer () const
 
PlayerToPlayer ()
 
Player const * ToPlayer () const
 
bool IsCreature () const
 
CreatureToCreature ()
 
Creature const * ToCreature () const
 
bool IsUnit () const
 
UnitToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObjectToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
CorpseToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynamicObject () const
 
DynamicObjectToDynObject ()
 
DynamicObject const * ToDynObject () const
 
bool IsItem () const
 
virtual void Heartbeat ()
 
template<typename... T>
bool EntryEquals (T... entries) const
 
- Public Member Functions inherited from WorldLocation
 WorldLocation (uint32 _mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
 WorldLocation (uint32 mapId, Position const &position)
 
void WorldRelocate (const WorldLocation &loc)
 
void WorldRelocate (uint32 mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
void SetMapId (uint32 mapId)
 
uint32 GetMapId () const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z, float &o) const
 
void GetWorldLocation (WorldLocation *location) const
 
WorldLocation GetWorldLocation () const
 
std::string GetDebugInfo () const
 
- Public Member Functions inherited from Position
 Position (float x=0, float y=0, float z=0, float o=0)
 
 Position (Position const &loc)
 
 Position (Position &&)=default
 
Positionoperator= (const Position &)=default
 
Positionoperator= (Position &&)=default
 
bool operator== (Position const &a) const
 
bool operator!= (Position const &a)
 
bool operator!= (Position const &a) const
 
 operator G3D::Vector3 () const
 
void Relocate (float x, float y)
 
void Relocate (float x, float y, float z)
 
void Relocate (float x, float y, float z, float orientation)
 
void Relocate (const Position &pos)
 
void Relocate (const Position *pos)
 
void RelocatePolarOffset (float angle, float dist, float z=0.0f)
 
void RelocateOffset (const Position &offset)
 
void SetOrientation (float orientation)
 
float GetPositionX () const
 
float GetPositionY () const
 
float GetPositionZ () const
 
float GetOrientation () const
 
void GetPosition (float &x, float &y) const
 
void GetPosition (float &x, float &y, float &z) const
 
void GetPosition (float &x, float &y, float &z, float &o) const
 
Position GetPosition () const
 
Position::PositionXYZStreamer PositionXYZStream ()
 
Position::PositionXYZOStreamer PositionXYZOStream ()
 
bool IsPositionValid () const
 
float GetExactDist2dSq (const float x, const float y) const
 
float GetExactDist2dSq (Position const &pos) const
 
float GetExactDist2dSq (Position const *pos) const
 
float GetExactDist2d (const float x, const float y) const
 
float GetExactDist2d (Position const &pos) const
 
float GetExactDist2d (Position const *pos) const
 
float GetExactDistSq (float x, float y, float z) const
 
float GetExactDistSq (Position const &pos) const
 
float GetExactDistSq (Position const *pos) const
 
float GetExactDist (float x, float y, float z) const
 
float GetExactDist (Position const &pos) const
 
float GetExactDist (Position const *pos) const
 
void GetPositionOffsetTo (const Position &endPos, Position &retOffset) const
 
Position GetPositionWithOffset (Position const &offset) const
 
float GetAngle (const Position *pos) const
 
float GetAngle (float x, float y) const
 
float GetAbsoluteAngle (float x, float y) const
 
float GetAbsoluteAngle (Position const &pos) const
 
float GetAbsoluteAngle (Position const *pos) const
 
float GetRelativeAngle (const Position *pos) const
 
float GetRelativeAngle (float x, float y) const
 
float ToAbsoluteAngle (float relAngle) const
 
void GetSinCos (float x, float y, float &vsin, float &vcos) const
 
bool IsInDist2d (float x, float y, float dist) const
 
bool IsInDist2d (const Position *pos, float dist) const
 
bool IsInDist (float x, float y, float z, float dist) const
 
bool IsInDist (const Position *pos, float dist) const
 
bool IsWithinBox (const Position &center, float xradius, float yradius, float zradius) const
 
bool HasInArc (float arcangle, const Position *pos, float targetRadius=0.0f) const
 
bool HasInLine (Position const *pos, float width) const
 
bool HasInLine (Position const *pos, float objSize, float width) const
 
std::string ToString () const
 
- Public Member Functions inherited from GridObject< GameObject >
bool IsInGrid () const
 
void AddToGrid (GridRefMgr< GameObject > &m)
 
void RemoveFromGrid ()
 

Static Public Member Functions

static void SetGoArtKit (uint8 artkit, GameObject *go, ObjectGuid::LowType lowguid=0)
 
- Static Public Member Functions inherited from Object
static ObjectGuid GetGUID (Object const *o)
 
- Static Public Member Functions inherited from Position
static float NormalizeOrientation (float o)
 

Public Attributes

Loot loot
 
uint32 m_groupLootTimer
 
uint32 lootingGroupLowGUID
 
GameObjectModelm_model
 
- Public Attributes inherited from WorldObject
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealth
 
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPESm_stealthDetect
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibility
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPESm_invisibilityDetect
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibility
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPESm_serverSideVisibilityDetect
 
uint32 LastUsedScriptID
 
MovementInfo m_movementInfo
 
ALEEventProcessor * ALEEvents
 
EventProcessor m_Events
 
- Public Attributes inherited from Object
DataMap CustomData
 
- Public Attributes inherited from WorldLocation
uint32 m_mapId
 
- Public Attributes inherited from Position
float m_positionX = 0
 
float m_positionY = 0
 
float m_positionZ = 0
 
float m_orientation = 0
 

Static Public Attributes

static std::unordered_map< int, goEventFlaggameObjectToEventFlag = { }
 

Protected Types

typedef std::map< uint32, ObjectGuidChairSlotAndUser
 

Protected Member Functions

bool AIM_Initialize ()
 
GameObjectModelCreateModel ()
 
void UpdateModel ()
 
- Protected Member Functions inherited from WorldObject
 WorldObject ()
 
virtual void ProcessPositionDataChanged (PositionFullTerrainStatus const &data)
 
void SetLocationMapId (uint32 _mapId)
 
void SetLocationInstanceId (uint32 _instanceId)
 
virtual bool IsAlwaysDetectableFor (WorldObject const *) const
 
- Protected Member Functions inherited from Object
 Object ()
 
void _InitValues ()
 
void _Create (ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
 
std::string _ConcatFields (uint16 startIndex, uint16 size) const
 
bool _LoadIntoDataField (std::string const &data, uint32 startOffset, uint32 count)
 
uint32 GetUpdateFieldData (Player const *target, uint32 *&flags) const
 
void BuildMovementUpdate (ByteBuffer *data, uint16 flags) const
 
void AddToObjectUpdateIfNeeded ()
 
- Protected Member Functions inherited from MovableMapObject
 MovableMapObject ()=default
 
Cell const & GetCurrentCell () const
 
- Protected Member Functions inherited from UpdatableMapObject
 UpdatableMapObject ()
 

Protected Attributes

uint32 m_spellId
 
time_t m_respawnTime
 
uint32 m_respawnDelayTime
 
uint32 m_despawnDelay
 
Seconds m_despawnRespawnTime
 
Seconds m_restockTime
 
LootState m_lootState
 
bool m_spawnedByDefault
 
uint32 m_cooldownTime
 
std::unordered_map< ObjectGuid, int32m_SkillupList
 
ObjectGuid m_ritualOwnerGUID
 
GuidSet m_unique_users
 
uint32 m_usetimes
 
ChairSlotAndUser ChairListSlots
 
ObjectGuid::LowType m_spawnId
 For new or temporary gameobjects is 0 for saved it is lowguid.
 
GameObjectTemplate const * m_goInfo
 
GameObjectData const * m_goData
 
GameObjectValue m_goValue
 
bool m_allowModifyDestructibleBuilding
 
int64 m_packedRotation
 
G3D::Quat WorldRotation
 
Position m_stationaryPosition
 
ObjectGuid m_lootRecipient
 
ObjectGuid::LowType m_lootRecipientGroup
 
uint16 m_LootMode
 
uint32 m_lootGenerationTime
 
ObjectGuid m_linkedTrap
 
ObjectGuid _lootStateUnitGUID
 
- Protected Attributes inherited from WorldObject
std::string m_name
 
bool m_isActive
 
VisibilityDistanceType _visibilityDistanceOverrideType
 
ZoneScriptm_zoneScript
 
uint32 _zoneId
 
uint32 _areaId
 
float _floorZ
 
bool _outdoors
 
LiquidData _liquidData
 
bool _updatePositionData
 
Transportm_transport
 
- Protected Attributes inherited from Object
uint16 m_objectType
 
TypeID m_objectTypeId
 
uint16 m_updateFlag
 
union { 
 
   int32 *   m_int32Values 
 
   uint32 *   m_uint32Values 
 
   float *   m_floatValues 
 
};  
 
UpdateMask _changesMask
 
uint16 m_valuesCount
 
uint16 _fieldNotifyFlags
 
bool m_objectUpdated
 

Private Member Functions

void CheckRitualList ()
 
void ClearRitualList ()
 
void RemoveFromOwner ()
 
void SwitchDoorOrButton (bool activate, bool alternative=false)
 
void UpdatePackedRotation ()
 
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.
 

Private Attributes

GameObjectAIm_AI
 
bool m_saveStateOnDb = false
 

Additional Inherited Members

- Public Types inherited from UpdatableMapObject
enum  UpdateState : uint8 {
  NotUpdating ,
  PendingAdd ,
  Updating
}
 

Detailed Description

Member Typedef Documentation

◆ ChairSlotAndUser

typedef std::map<uint32, ObjectGuid> GameObject::ChairSlotAndUser
protected

Constructor & Destructor Documentation

◆ GameObject()

GameObject::GameObject ( )
explicit
47 m_model(nullptr), m_goValue(), m_AI(nullptr)
48{
51
53
55 m_respawnTime = 0;
59 m_restockTime = 0s;
61 m_spawnedByDefault = true;
63 m_usetimes = 0;
64 m_spellId = 0;
66 m_goInfo = nullptr;
67 m_goData = nullptr;
69
70 m_spawnId = 0;
71
76
77 ResetLootMode(); // restore default loot mode
79 m_stationaryPosition.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
80}
@ GO_NOT_READY
Definition GameObject.h:110
@ TYPEID_GAMEOBJECT
Definition ObjectGuid.h:37
@ TYPEMASK_GAMEOBJECT
Definition ObjectGuid.h:51
@ UPDATEFLAG_ROTATION
Definition UpdateData.h:48
@ UPDATEFLAG_POSITION
Definition UpdateData.h:47
@ UPDATEFLAG_LOWGUID
Definition UpdateData.h:43
@ UPDATEFLAG_STATIONARY_POSITION
Definition UpdateData.h:45
@ GAMEOBJECT_END
Definition UpdateFields.h:405
Loot loot
Definition GameObject.h:246
GameObjectValue m_goValue
Definition GameObject.h:393
time_t m_respawnTime
Definition GameObject.h:372
GameObjectData const * m_goData
Definition GameObject.h:392
int64 m_packedRotation
Definition GameObject.h:396
Position m_stationaryPosition
Definition GameObject.h:398
bool m_allowModifyDestructibleBuilding
Definition GameObject.h:394
uint32 m_cooldownTime
Definition GameObject.h:379
uint32 m_spellId
Definition GameObject.h:371
uint32 m_respawnDelayTime
Definition GameObject.h:373
void ResetLootMode()
Definition GameObject.h:232
uint32 m_despawnDelay
Definition GameObject.h:374
Seconds m_despawnRespawnTime
Definition GameObject.h:375
ObjectGuid::LowType m_lootRecipientGroup
Definition GameObject.h:401
GameObjectAI * m_AI
Definition GameObject.h:423
GameObjectModel * m_model
Definition GameObject.h:311
GameObjectTemplate const * m_goInfo
Definition GameObject.h:391
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
Definition GameObject.h:390
uint32 m_groupLootTimer
Definition GameObject.h:254
uint32 lootingGroupLowGUID
Definition GameObject.h:255
bool m_spawnedByDefault
Definition GameObject.h:378
LootState m_lootState
Definition GameObject.h:377
Seconds m_restockTime
Definition GameObject.h:376
uint32 m_usetimes
Definition GameObject.h:385
uint32 m_lootGenerationTime
Definition GameObject.h:403
MovableMapObject()=default
uint16 m_objectType
Definition Object.h:251
uint16 m_valuesCount
Definition Object.h:265
uint16 m_updateFlag
Definition Object.h:254
TypeID m_objectTypeId
Definition Object.h:253
WorldObject()
Definition Object.cpp:1032
GameObject * sourceGameObject
Definition LootMgr.h:331
void Relocate(float x, float y)
Definition Position.h:77

References GAMEOBJECT_END, GO_NOT_READY, loot, lootingGroupLowGUID, m_allowModifyDestructibleBuilding, m_cooldownTime, m_despawnDelay, m_despawnRespawnTime, m_goData, m_goInfo, m_groupLootTimer, m_lootGenerationTime, m_lootRecipientGroup, m_lootState, Object::m_objectType, Object::m_objectTypeId, m_packedRotation, m_respawnDelayTime, m_respawnTime, m_restockTime, m_spawnedByDefault, m_spawnId, m_spellId, m_stationaryPosition, Object::m_updateFlag, m_usetimes, Object::m_valuesCount, Position::Relocate(), ResetLootMode(), Loot::sourceGameObject, TYPEID_GAMEOBJECT, TYPEMASK_GAMEOBJECT, UPDATEFLAG_LOWGUID, UPDATEFLAG_POSITION, UPDATEFLAG_ROTATION, and UPDATEFLAG_STATIONARY_POSITION.

Referenced by Create(), and MotionTransport::CreateGOPassenger().

◆ ~GameObject()

GameObject::~GameObject ( )
override
83{
84 delete m_AI;
85 delete m_model;
86 //if (m_uint32Values) // field array can be not exist if GameOBject not loaded
87 // CleanupsBeforeDelete();
88}

References m_AI, and m_model.

Member Function Documentation

◆ _IsWithinDist()

bool GameObject::_IsWithinDist ( WorldObject const *  obj,
float  dist2compare,
bool  ,
bool  ,
bool   
) const
inlineoverrideprivatevirtual

Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size.

Following check does check 3d distance

Reimplemented from WorldObject.

418 {
420 dist2compare += obj->GetObjectSize();
421 return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
422 }
bool IsInRange(float x, float y, float z, float radius) const
Definition GameObject.cpp:2134

References WorldObject::GetObjectSize(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), and IsInRange().

◆ ActivateToQuest()

bool GameObject::ActivateToQuest ( Player target) const
1293{
1294 if (target->HasQuestForGO(GetEntry()))
1295 return true;
1296
1297 if (!GetGOInfo()->IsGameObjectForQuests())
1298 return false;
1299
1300 switch (GetGoType())
1301 {
1303 {
1304 GameObject* go = const_cast<GameObject*>(this);
1305 QuestGiverStatus questStatus = target->GetQuestDialogStatus(go);
1306 if (questStatus > DIALOG_STATUS_UNAVAILABLE)
1307 return true;
1308 break;
1309 }
1311 {
1312 // scan GO chest with loot including quest items
1314 {
1315 //TODO: fix this hack
1316 //look for battlegroundAV for some objects which are only activated after mine gots captured by own team
1318 if (Battleground* bg = target->GetBattleground())
1319 if (bg->GetBgTypeID(true) == BATTLEGROUND_AV && !bg->ToBattlegroundAV()->PlayerCanDoMineQuest(GetEntry(), target->GetTeamId()))
1320 return false;
1321 return true;
1322 }
1323 break;
1324 }
1326 {
1327 if (GetGOInfo()->_generic.questID == -1 || target->GetQuestStatus(GetGOInfo()->_generic.questID) == QUEST_STATUS_INCOMPLETE)
1328 return true;
1329 break;
1330 }
1332 {
1333 if (GetGOInfo()->spellFocus.questID > 0 && target->GetQuestStatus(GetGOInfo()->spellFocus.questID) == QUEST_STATUS_INCOMPLETE)
1334 return true;
1335 break;
1336 }
1338 {
1339 if (GetGOInfo()->goober.questId == -1 || target->GetQuestStatus(GetGOInfo()->goober.questId) == QUEST_STATUS_INCOMPLETE)
1340 return true;
1341 break;
1342 }
1343 default:
1344 break;
1345 }
1346
1347 return false;
1348}
@ BG_AV_OBJECTID_MINE_N
Definition BattlegroundAV.h:156
@ BG_AV_OBJECTID_MINE_S
Definition BattlegroundAV.h:157
LootStore LootTemplates_Gameobject("gameobject_loot_template", "gameobject entry", true)
QuestGiverStatus
Definition QuestDef.h:111
@ DIALOG_STATUS_UNAVAILABLE
Definition QuestDef.h:113
@ QUEST_STATUS_INCOMPLETE
Definition QuestDef.h:103
@ GAMEOBJECT_TYPE_SPELL_FOCUS
Definition SharedDefines.h:1579
@ GAMEOBJECT_TYPE_GENERIC
Definition SharedDefines.h:1576
@ GAMEOBJECT_TYPE_CHEST
Definition SharedDefines.h:1574
@ GAMEOBJECT_TYPE_QUESTGIVER
Definition SharedDefines.h:1573
@ GAMEOBJECT_TYPE_GOOBER
Definition SharedDefines.h:1581
@ BATTLEGROUND_AV
Definition SharedDefines.h:3737
Definition Battleground.h:294
Definition GameObject.h:120
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
GameobjectTypes GetGoType() const
Definition GameObject.h:202
bool HaveQuestLootForPlayer(uint32 loot_id, Player const *player) const
Definition LootMgr.cpp:228
uint32 GetEntry() const
Definition Object.h:116
bool HasQuestForGO(int32 GOId) const
Definition Player.cpp:12374
TeamId GetTeamId(bool original=false) const
Definition Player.h:2101
QuestGiverStatus GetQuestDialogStatus(Object *questGiver)
Definition PlayerQuest.cpp:1627
Battleground * GetBattleground(bool create=false) const
Definition Player.cpp:12184
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition PlayerQuest.cpp:1462
struct GameObjectTemplate::@234::@245 goober
int32 questID
Definition GameObjectData.h:110
struct GameObjectTemplate::@234::@240 _generic
uint32 questId
Definition GameObjectData.h:91
struct GameObjectTemplate::@234::@243 spellFocus

References GameObjectTemplate::_generic, BATTLEGROUND_AV, BG_AV_OBJECTID_MINE_N, BG_AV_OBJECTID_MINE_S, DIALOG_STATUS_UNAVAILABLE, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_GENERIC, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_SPELL_FOCUS, Player::GetBattleground(), Object::GetEntry(), GetGOInfo(), GetGoType(), Player::GetQuestDialogStatus(), Player::GetQuestStatus(), Player::GetTeamId(), GameObjectTemplate::goober, Player::HasQuestForGO(), LootStore::HaveQuestLootForPlayer(), LootTemplates_Gameobject, QUEST_STATUS_INCOMPLETE, GameObjectTemplate::questId, GameObjectTemplate::questID, and GameObjectTemplate::spellFocus.

Referenced by BuildValuesUpdate().

◆ AddLootMode()

void GameObject::AddLootMode ( uint16  lootMode)
inline
230{ m_LootMode |= lootMode; }
uint16 m_LootMode
Definition GameObject.h:402

References m_LootMode.

◆ AddToSkillupList()

void GameObject::AddToSkillupList ( ObjectGuid const &  playerGuid)
3043{
3044 int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS;
3045 m_SkillupList[playerGuid] = timer;
3046}
constexpr auto IN_MILLISECONDS
Definition Common.h:53
constexpr auto MINUTE
Definition Common.h:47
std::int32_t int32
Definition Define.h:103
std::unordered_map< ObjectGuid, int32 > m_SkillupList
Definition GameObject.h:381
bool IsDungeon() const
Definition Map.h:295
Map * GetMap() const
Definition Object.h:620

References WorldObject::GetMap(), IN_MILLISECONDS, Map::IsDungeon(), m_SkillupList, and MINUTE.

Referenced by Spell::EffectOpenLock().

◆ AddToWorld()

void GameObject::AddToWorld ( )
overridevirtual
  • Register the gameobject for guid lookup

Reimplemented from Object.

146{
148 if (!IsInWorld())
149 {
150 if (m_zoneScript)
152
154 if (m_spawnId)
155 GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
156
157 if (m_model)
158 {
161 }
162
163 EnableCollision(GetGoState() == GO_STATE_READY || IsTransport()); // pussywizard: this startOpen is unneeded here, collision depends entirely on GOState
164
166
168
169 sScriptMgr->OnGameObjectAddWorld(this);
170 }
171}
@ GO_STATE_READY
Definition GameObjectData.h:706
#define sScriptMgr
Definition ScriptMgr.h:719
bool UpdatePosition()
Definition GameObjectModel.cpp:250
GOState GetGoState() const
Definition GameObject.h:204
void EnableCollision(bool enable)
Definition GameObject.cpp:2578
bool IsTransport() const
Definition GameObject.cpp:1191
MapStoredObjectTypesContainer & GetObjectsStore()
Definition Map.h:348
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
Definition Map.h:354
void InsertGameObjectModel(const GameObjectModel &model)
Definition Map.h:392
bool IsInWorld() const
Definition Object.h:108
ObjectGuid GetGUID() const
Definition Object.h:114
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition TypeContainer.h:177
void AddToWorld() override
Definition Object.cpp:1190
ZoneScript * m_zoneScript
Definition Object.h:736
virtual void OnGameObjectCreate(GameObject *)
Definition ZoneScript.h:37
ObjectGuid sourceWorldObjectGUID
Definition LootMgr.h:330

References WorldObject::AddToWorld(), EnableCollision(), Map::GetGameObjectBySpawnIdStore(), GetGoState(), Object::GetGUID(), WorldObject::GetMap(), Map::GetObjectsStore(), GO_STATE_READY, TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Insert(), Map::InsertGameObjectModel(), Object::IsInWorld(), IsTransport(), loot, m_model, m_spawnId, WorldObject::m_zoneScript, ZoneScript::OnGameObjectCreate(), Loot::sourceWorldObjectGUID, sScriptMgr, and GameObjectModel::UpdatePosition().

Referenced by Map::AddToMap().

◆ AddUniqueUse()

void GameObject::AddUniqueUse ( Player player)
911{
912 AddUse();
913 m_unique_users.insert(player->GetGUID());
914}
void AddUse()
Definition GameObject.h:238
GuidSet m_unique_users
Definition GameObject.h:384
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:113

References AddUse(), Object::GetGUID(), and m_unique_users.

Referenced by Spell::EffectTransmitted(), and Use().

◆ AddUse()

◆ AI()

◆ AIM_Initialize()

bool GameObject::AIM_Initialize ( )
protected
91{
92 if (m_AI)
93 delete m_AI;
94
96
97 if (!m_AI)
98 return false;
99
101 return true;
102}
virtual void InitializeAI()
Definition GameObjectAI.h:43
GameObjectAI * SelectGameObjectAI(GameObject *go)
Definition CreatureAISelector.cpp:102

References GameObjectAI::InitializeAI(), m_AI, and FactorySelector::SelectGameObjectAI().

Referenced by Create(), StaticTransport::Create(), MotionTransport::Update(), and Update().

◆ AllowSaveToDB()

◆ BuildValuesUpdate()

void GameObject::BuildValuesUpdate ( uint8  updateType,
ByteBuffer data,
Player target 
)
overridevirtual

Reimplemented from Object.

2715{
2716 if (!target)
2717 return;
2718
2720 bool targetIsGM = target->IsGameMaster() && target->GetSession()->IsGMAccount();
2721
2722 ByteBuffer fieldBuffer;
2723
2724 UpdateMask updateMask;
2725 updateMask.SetCount(m_valuesCount);
2726
2728 uint32 visibleFlag = UF_FLAG_PUBLIC;
2729 if (GetOwnerGUID() == target->GetGUID())
2730 visibleFlag |= UF_FLAG_OWNER;
2731
2732 for (uint16 index = 0; index < m_valuesCount; ++index)
2733 {
2734 if (_fieldNotifyFlags & flags[index] ||
2735 ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
2736 (index == GAMEOBJECT_FLAGS && forcedFlags))
2737 {
2738 updateMask.SetBit(index);
2739
2740 if (index == GAMEOBJECT_DYNAMIC)
2741 {
2742 uint16 dynFlags = 0;
2743 int16 pathProgress = -1;
2744 switch (GetGoType())
2745 {
2747 if (ActivateToQuest(target))
2748 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2749 break;
2752 if (ActivateToQuest(target))
2753 {
2754 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2755 if (sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2756 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2757 }
2758 else if (targetIsGM)
2759 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2760 break;
2763 if (ActivateToQuest(target) && sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2764 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2765 break;
2767 if (const StaticTransport* t = ToStaticTransport())
2768 if (t->GetPauseTime())
2769 {
2770 if (GetGoState() == GO_STATE_READY)
2771 {
2772 if (t->GetPathProgress() >= t->GetPauseTime()) // if not, send 100% progress
2773 pathProgress = int16(float(t->GetPathProgress() - t->GetPauseTime()) / float(t->GetPeriod() - t->GetPauseTime()) * 65535.0f);
2774 }
2775 else
2776 {
2777 if (t->GetPathProgress() <= t->GetPauseTime()) // if not, send 100% progress
2778 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPauseTime()) * 65535.0f);
2779 }
2780 }
2781 // else it's ignored
2782 break;
2784 if (const MotionTransport* t = ToMotionTransport())
2785 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPeriod()) * 65535.0f);
2786 break;
2787 default:
2788 break;
2789 }
2790
2791 fieldBuffer << uint16(dynFlags);
2792 fieldBuffer << int16(pathProgress);
2793 }
2794 else if (index == GAMEOBJECT_FLAGS)
2795 {
2798 {
2800 }
2801
2802 fieldBuffer << goFlags;
2803 }
2804 else
2805 fieldBuffer << m_uint32Values[index]; // other cases
2806 }
2807 }
2808
2809 *data << uint8(updateMask.GetBlockCount());
2810 updateMask.AppendToPacket(data);
2811 data->append(fieldBuffer);
2812}
std::uint8_t uint8
Definition Define.h:109
std::uint32_t uint32
Definition Define.h:107
std::uint16_t uint16
Definition Define.h:108
std::int16_t int16
Definition Define.h:104
@ GAMEOBJECT_TYPE_MO_TRANSPORT
Definition SharedDefines.h:1586
@ GAMEOBJECT_TYPE_TRANSPORT
Definition SharedDefines.h:1582
@ GO_DYNFLAG_LO_ACTIVATE
Definition SharedDefines.h:1629
@ GO_DYNFLAG_LO_SPARKLE
Definition SharedDefines.h:1632
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1618
@ GO_FLAG_LOCKED
Definition SharedDefines.h:1615
@ UPDATETYPE_VALUES
Definition UpdateData.h:28
uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END]
Definition UpdateFieldFlags.cpp:1492
@ UF_FLAG_PUBLIC
Definition UpdateFieldFlags.h:27
@ UF_FLAG_OWNER
Definition UpdateFieldFlags.h:29
@ GAMEOBJECT_DYNAMIC
Definition UpdateFields.h:401
@ GAMEOBJECT_FLAGS
Definition UpdateFields.h:399
@ CONFIG_OBJECT_SPARKLES
Definition WorldConfig.h:138
Definition ByteBuffer.h:70
void append(T value)
Definition ByteBuffer.h:129
MotionTransport * ToMotionTransport()
Definition GameObject.h:326
bool HasLootRecipient() const
Definition GameObject.h:253
ObjectGuid GetOwnerGUID() const
Definition GameObject.h:173
bool ActivateToQuest(Player *target) const
Definition GameObject.cpp:1292
bool IsLootAllowedFor(Player const *player) const
Definition GameObject.cpp:2676
StaticTransport * ToStaticTransport()
Definition GameObject.h:323
Definition Transport.h:51
uint16 _fieldNotifyFlags
Definition Object.h:267
UpdateMask _changesMask
Definition Object.h:263
uint32 * m_uint32Values
Definition Object.h:259
WorldSession * GetSession() const
Definition Player.h:1993
bool IsGameMaster() const
Definition Player.h:1156
Definition Transport.h:115
Definition UpdateMask.h:25
uint32 GetBlockCount() const
Definition UpdateMask.h:62
bool GetBit(uint32 index) const
Definition UpdateMask.h:47
void SetCount(uint32 valuesCount)
Definition UpdateMask.h:65
void SetBit(uint32 index)
Definition UpdateMask.h:45
void AppendToPacket(ByteBuffer *data)
Definition UpdateMask.h:49
bool IsGMAccount() const
Definition WorldSession.cpp:206
#define sWorld
Definition World.h:316
struct GameObjectTemplate::@234::@239 chest
uint32 groupLootRules
Definition GameObjectData.h:98

References Object::_changesMask, Object::_fieldNotifyFlags, ActivateToQuest(), ByteBuffer::append(), UpdateMask::AppendToPacket(), GameObjectTemplate::chest, CONFIG_OBJECT_SPARKLES, GAMEOBJECT_DYNAMIC, GAMEOBJECT_FLAGS, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_GENERIC, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_MO_TRANSPORT, GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_SPELL_FOCUS, GAMEOBJECT_TYPE_TRANSPORT, GameObjectUpdateFieldFlags, UpdateMask::GetBit(), UpdateMask::GetBlockCount(), GetGOInfo(), GetGoState(), GetGoType(), Object::GetGUID(), GetOwnerGUID(), Player::GetSession(), GO_DYNFLAG_LO_ACTIVATE, GO_DYNFLAG_LO_SPARKLE, GO_FLAG_LOCKED, GO_FLAG_NOT_SELECTABLE, GO_STATE_READY, GameObjectTemplate::groupLootRules, HasLootRecipient(), Player::IsGameMaster(), WorldSession::IsGMAccount(), IsLootAllowedFor(), Object::m_uint32Values, Object::m_valuesCount, UpdateMask::SetBit(), UpdateMask::SetCount(), sWorld, ToMotionTransport(), ToStaticTransport(), UF_FLAG_OWNER, UF_FLAG_PUBLIC, and UPDATETYPE_VALUES.

◆ CastSpell()

void GameObject::CastSpell ( Unit target,
uint32  spell 
)
2062{
2063 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2064 if (!spellInfo)
2065 return;
2066
2067 bool self = true;
2068 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2069 {
2070 if (spellInfo->Effects[i].TargetA.GetReferenceType() != TARGET_REFERENCE_TYPE_CASTER || spellInfo->Effects[i].TargetB.GetTarget())
2071 {
2072 self = false;
2073 break;
2074 }
2075 }
2076
2077 if (self && target && target->GetGUID() != GetGUID())
2078 {
2079 target->CastSpell(target, spellInfo, true);
2080 return;
2081 }
2082
2083 //summon world trigger
2084 Creature* trigger = SummonTrigger(GetPositionX(), GetPositionY(), GetPositionZ(), 0, spellInfo->CalcCastTime() + 2000, true);
2085 if (!trigger)
2086 return;
2087
2088 if (Unit* owner = GetOwner())
2089 {
2090 trigger->SetLevel(owner->GetLevel(), false);
2091 trigger->SetFaction(owner->GetFaction());
2092 // needed for GO casts for proper target validation checks
2093 trigger->SetOwnerGUID(owner->GetGUID());
2094 // xinef: fixes some duel bugs with traps]
2095 if (owner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
2097 if (owner->IsFFAPvP())
2098 {
2100 {
2101 sScriptMgr->OnFfaPvpStateUpdate(trigger, true);
2103 }
2104
2105 }
2106 // xinef: Remove Immunity flags
2107 trigger->SetImmuneToNPC(false);
2108 // xinef: set proper orientation, fixes cast against stealthed targets
2109 if (target)
2110 trigger->SetInFront(target);
2111 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID());
2112 }
2113 else
2114 {
2115 // xinef: set faction of gameobject, if no faction - assume hostile
2116 trigger->SetFaction(GetTemplateAddon() && GetTemplateAddon()->faction ? GetTemplateAddon()->faction : 14);
2117 // Set owner guid for target if no owner availble - needed by trigger auras
2118 // - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
2119 // xinef: set proper orientation, fixes cast against stealthed targets
2120 if (target)
2121 trigger->SetInFront(target);
2122 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : ObjectGuid::Empty);
2123 }
2124}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1637
@ TARGET_REFERENCE_TYPE_CASTER
Definition SpellInfo.h:89
#define sSpellMgr
Definition SpellMgr.h:826
@ UNIT_BYTE2_FLAG_FFA_PVP
Definition UnitDefines.h:138
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:257
@ UNIT_FIELD_BYTES_2
Definition UpdateFields.h:161
Definition Creature.h:47
Unit * GetOwner() const
Definition GameObject.cpp:1203
GameObjectTemplateAddon const * GetTemplateAddon() const
Definition GameObject.cpp:895
Definition ObjectGuid.h:118
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition Object.cpp:931
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:893
Definition SpellInfo.h:316
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:393
uint32 CalcCastTime(Unit *caster=nullptr, Spell *spell=nullptr) const
Definition SpellInfo.cpp:2246
Definition Unit.h:655
void SetFaction(uint32 faction)
Definition Unit.cpp:10246
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:13781
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition Unit.cpp:15708
SpellCastResult CastSpell(SpellCastTargets const &targets, SpellInfo const *spellInfo, CustomSpellValues const *value, TriggerCastFlags triggerFlags=TRIGGERED_NONE, Item *castItem=nullptr, AuraEffect const *triggeredByAura=nullptr, ObjectGuid originalCaster=ObjectGuid::Empty)
Definition Unit.cpp:1194
void SetOwnerGUID(ObjectGuid owner)
Definition Unit.cpp:10788
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:738
void SetInFront(WorldObject const *target)
Definition Unit.cpp:20505
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
Definition Object.cpp:2401
float GetPositionZ() const
Definition Position.h:123
float GetPositionX() const
Definition Position.h:121
float GetPositionY() const
Definition Position.h:122

References SpellInfo::CalcCastTime(), Unit::CastSpell(), SpellInfo::Effects, ObjectGuid::Empty, GameObjectTemplateAddon::faction, Object::GetGUID(), Object::GetGUID(), GetOwner(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GetTemplateAddon(), Object::HasByteFlag(), MAX_SPELL_EFFECTS, Object::SetByteFlag(), Unit::SetFaction(), Unit::SetImmuneToNPC(), Unit::SetInFront(), Unit::SetLevel(), Unit::SetOwnerGUID(), Unit::SetUnitFlag(), sScriptMgr, sSpellMgr, WorldObject::SummonTrigger(), TARGET_REFERENCE_TYPE_CASTER, UNIT_BYTE2_FLAG_FFA_PVP, UNIT_FIELD_BYTES_2, and UNIT_FLAG_PLAYER_CONTROLLED.

Referenced by npc_midsummer_ribbon_pole_target::DoFlameCircleChecks(), instance_onyxias_lair::instance_onyxias_lair_InstanceMapScript::OnGameObjectCreate(), go_harpoon_canon::OnGossipHello(), SmartScript::ProcessAction(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::SpellHit(), Update(), go_suppression_device::go_suppression_deviceAI::UpdateAI(), go_witherbark_totem_bundle::go_witherbark_totem_bundleAI::UpdateAI(), and Use().

◆ CheckRitualList()

void GameObject::CheckRitualList ( )
private
207{
208 if (m_unique_users.empty())
209 return;
210
212 if (!animSpell)
213 animSpell = GetSpellId();
214
215 for (GuidSet::iterator itr = m_unique_users.begin(); itr != m_unique_users.end();)
216 {
217 if (*itr == GetOwnerGUID())
218 {
219 ++itr;
220 continue;
221 }
222
223 bool erase = true;
224 if (Player* channeler = ObjectAccessor::GetPlayer(*this, *itr))
225 if (Spell* spell = channeler->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
226 if (spell->m_spellInfo->Id == animSpell)
227 erase = false;
228
229 if (erase)
230 m_unique_users.erase(itr++);
231 else
232 ++itr;
233 }
234}
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:546
uint32 GetSpellId() const
Definition GameObject.h:181
Definition Player.h:1066
Definition Spell.h:295
Player * GetPlayer(Map const *, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:220
uint32 animSpell
Definition GameObjectData.h:233
struct GameObjectTemplate::@234::@250 summoningRitual

References GameObjectTemplate::animSpell, CURRENT_CHANNELED_SPELL, GetGOInfo(), GetOwnerGUID(), ObjectAccessor::GetPlayer(), GetSpellId(), m_unique_users, and GameObjectTemplate::summoningRitual.

Referenced by Update(), and Use().

◆ CleanupsBeforeDelete()

void GameObject::CleanupsBeforeDelete ( bool  finalCleanup = true)
overridevirtual

Reimplemented from WorldObject.

Reimplemented in MotionTransport, and StaticTransport.

110{
111 if (GetTransport() && !ToTransport())
112 {
114 SetTransport(nullptr);
117 }
118
119 if (IsInWorld())
121
122 if (m_uint32Values) // field array can be not exist if GameOBject not loaded
124}
@ MOVEMENTFLAG_ONTRANSPORT
Definition UnitDefines.h:378
void RemoveFromWorld() override
Definition GameObject.cpp:173
void RemoveFromOwner()
Definition GameObject.cpp:126
Transport * ToTransport()
Definition GameObject.h:320
virtual void RemovePassenger(WorldObject *passenger, bool withAll=false)=0
void SetTransport(Transport *t)
Definition Object.h:690
Transport * GetTransport() const
Definition Object.h:682
MovementInfo m_movementInfo
Definition Object.h:692
void Reset()
Definition Object.h:298
void RemoveMovementFlag(uint32 flag)
Definition Object.h:344
struct MovementInfo::TransportInfo transport

References WorldObject::GetTransport(), Object::IsInWorld(), WorldObject::m_movementInfo, Object::m_uint32Values, MOVEMENTFLAG_ONTRANSPORT, RemoveFromOwner(), RemoveFromWorld(), MovementInfo::RemoveMovementFlag(), Transport::RemovePassenger(), MovementInfo::TransportInfo::Reset(), WorldObject::SetTransport(), ToTransport(), and MovementInfo::transport.

Referenced by MotionTransport::CleanupsBeforeDelete(), and StaticTransport::CleanupsBeforeDelete().

◆ ClearRitualList()

void GameObject::ClearRitualList ( )
private
237{
238 if (m_unique_users.empty())
239 return;
240
242 if (!animSpell)
243 animSpell = GetSpellId();
244
245 for (ObjectGuid const& guid : m_unique_users)
246 {
247 if (Player* channeler = ObjectAccessor::GetPlayer(*this, guid))
248 if (Spell* spell = channeler->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
249 if (spell->m_spellInfo->Id == animSpell)
250 {
251 spell->SendChannelUpdate(0);
252 spell->finish();
253 }
254 }
255
256 m_unique_users.clear();
257}

References GameObjectTemplate::animSpell, CURRENT_CHANNELED_SPELL, GetGOInfo(), ObjectAccessor::GetPlayer(), GetSpellId(), m_unique_users, and GameObjectTemplate::summoningRitual.

Referenced by Delete(), and Update().

◆ Create()

bool GameObject::Create ( ObjectGuid::LowType  guidlow,
uint32  name_id,
Map map,
uint32  phaseMask,
float  x,
float  y,
float  z,
float  ang,
G3D::Quat const &  rotation,
uint32  animprogress,
GOState  go_state,
uint32  artKit = 0 
)
virtual

Reimplemented in StaticTransport.

260{
261 ASSERT(map);
262 SetMap(map);
263
264 Relocate(x, y, z, ang);
265 m_stationaryPosition.Relocate(x, y, z, ang);
266 if (!IsPositionValid())
267 {
268 LOG_ERROR("entities.gameobject", "Gameobject (GUID: {} Entry: {}) not created. Suggested coordinates isn't valid (X: {} Y: {})", guidlow, name_id, x, y);
269 return false;
270 }
271
272 SetPhaseMask(phaseMask, false);
273
275
277 if (m_zoneScript)
278 {
279 name_id = m_zoneScript->GetGameObjectEntry(guidlow, name_id);
280 if (!name_id)
281 return false;
282 }
283
284 GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(name_id);
285 if (!goinfo)
286 {
287 LOG_ERROR("sql.sql", "Gameobject (GUID: {} Entry: {}) not created: non-existing entry in `gameobject_template`. Map: {} (X: {} Y: {} Z: {})", guidlow, name_id, map->GetId(), x, y, z);
288 return false;
289 }
290
291 Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject);
292
293 m_goInfo = goinfo;
294
295 if (goinfo->type >= MAX_GAMEOBJECT_TYPE)
296 {
297 LOG_ERROR("sql.sql", "Gameobject (GUID: {} Entry: {}) not created: non-existing GO type '{}' in `gameobject_template`. It will crash client if created.", guidlow, name_id, goinfo->type);
298 return false;
299 }
300
301 SetWorldRotation(rotation);
302
303 GameObjectAddon const* gameObjectAddon = sObjectMgr->GetGameObjectAddon(GetSpawnId());
304 QuaternionData parentRotation;
305 if (gameObjectAddon)
306 parentRotation = gameObjectAddon->ParentRotation;
307
308 SetTransportPathRotation(parentRotation.x, parentRotation.y, parentRotation.z, parentRotation.w);
309
310 SetObjectScale(goinfo->size);
311
312 if (GameObjectTemplateAddon const* templateAddon = GetTemplateAddon())
313 {
314 SetUInt32Value(GAMEOBJECT_FACTION, templateAddon->faction);
315 ReplaceAllGameObjectFlags((GameObjectFlags)templateAddon->flags);
316 }
317
318 SetEntry(goinfo->entry);
319
320 // set name for logs usage, doesn't affect anything ingame
321 SetName(goinfo->name);
322
323 // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
325
327 {
328 if (InstanceScript* instance = GetInstanceScript())
329 {
330 switch (uint8 state = instance->GetStoredGameObjectState(GetSpawnId()))
331 {
332 case 0:
334 SwitchDoorOrButton(true);
335 break;
336 case 1:
337 case 2:
338 SetGoState((GOState)state);
339 break;
340 default:
341 SetGoState(go_state);
342 break;
343 }
344 }
345 }
346 else
347 {
348 SetGoState(go_state);
349 }
350
351 SetGoArtKit(artKit);
352
353 SetDisplayId(goinfo->displayId);
354
355 if (!m_model)
357
358 switch (goinfo->type)
359 {
361 SetGoAnimProgress(animprogress);
363 break;
368 break;
371 break;
373 if (GetGOInfo()->trap.stealthed)
374 {
377 }
378
379 if (GetGOInfo()->trap.invisible)
380 {
383 }
384 break;
385 default:
386 SetGoAnimProgress(animprogress);
387 break;
388 }
389
390 if (gameObjectAddon)
391 {
392 if (gameObjectAddon->InvisibilityValue)
393 {
394 m_invisibility.AddFlag(gameObjectAddon->invisibilityType);
395 m_invisibility.AddValue(gameObjectAddon->invisibilityType, gameObjectAddon->InvisibilityValue);
396 }
397 }
398
401
402 if (uint32 linkedEntry = GetGOInfo()->GetLinkedGameObjectEntry())
403 {
404 GameObject* linkedGO = new GameObject();
405 if (linkedGO->Create(map->GenerateLowGuid<HighGuid::GameObject>(), linkedEntry, map, phaseMask, x, y, z, ang, rotation, 255, GO_STATE_READY))
406 {
407 SetLinkedTrap(linkedGO);
408 map->AddToMap(linkedGO);
409 }
410 else
411 {
412 delete linkedGO;
413 }
414 }
415
416 // Check if GameObject is Large
417 if (goinfo->IsLargeGameObject())
419
420 // Check if GameObject is Infinite
421 if (goinfo->IsInfiniteGameObject())
423
424 return true;
425}
#define ASSERT
Definition Errors.h:68
GOState
Definition GameObjectData.h:704
#define LOG_ERROR(filterType__,...)
Definition Log.h:158
#define sObjectMgr
Definition ObjectMgr.h:1686
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
GameobjectTypes
Definition SharedDefines.h:1570
@ GAMEOBJECT_TYPE_TRAP
Definition SharedDefines.h:1577
@ GAMEOBJECT_TYPE_FISHINGHOLE
Definition SharedDefines.h:1596
@ GAMEOBJECT_TYPE_FISHINGNODE
Definition SharedDefines.h:1588
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
Definition SharedDefines.h:1604
@ STEALTH_TRAP
Definition SharedDefines.h:1259
@ INVISIBILITY_TRAP
Definition SharedDefines.h:1269
#define MAX_GAMEOBJECT_TYPE
Definition SharedDefines.h:1609
GameObjectFlags
Definition SharedDefines.h:1613
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
void AddFlag(FLAG_TYPE flag)
Definition Object.h:390
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:395
GameObject()
Definition GameObject.cpp:46
void SetGoState(GOState state)
Definition GameObject.cpp:2451
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition GameObject.cpp:2221
void SetGoArtKit(uint8 artkit)
Definition GameObject.cpp:1408
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition GameObject.cpp:2570
void SetGoAnimProgress(uint8 animprogress)
Definition GameObject.h:209
virtual bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map *map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const &rotation, uint32 animprogress, GOState go_state, uint32 artKit=0)
Definition GameObject.cpp:259
GameObjectModel * CreateModel()
Definition GameObject.cpp:2930
void SetGoType(GameobjectTypes type)
Definition GameObject.h:203
void SetLinkedTrap(GameObject *linkedTrap)
Definition GameObject.h:260
ObjectGuid::LowType GetSpawnId() const
Definition GameObject.h:144
bool AIM_Initialize()
Definition GameObject.cpp:90
virtual uint32 GetScriptId() const
Definition GameObject.cpp:2173
void SetDisplayId(uint32 displayid)
Definition GameObject.cpp:2564
void ReplaceAllGameObjectFlags(GameObjectFlags flags)
Definition GameObject.h:219
bool IsInstanceGameobject() const
Definition GameObject.cpp:2487
void SwitchDoorOrButton(bool activate, bool alternative=false)
Definition GameObject.cpp:1431
void SetWorldRotation(G3D::Quat const &rot)
Definition GameObject.cpp:2209
Definition InstanceScript.h:143
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:480
uint32 GetId() const
Definition Map.h:229
bool AddToMap(T *, bool checkTransport=false)
Definition Map.cpp:305
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition Object.cpp:123
void SetEntry(uint32 entry)
Definition Object.h:117
virtual void SetObjectScale(float scale)
Definition Object.h:120
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:639
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1214
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition Object.h:609
uint32 LastUsedScriptID
Definition Object.h:679
void SetName(std::string const &newname)
Definition Object.h:525
void SetZoneScript()
Definition Object.cpp:2330
virtual void SetMap(Map *map)
Definition Object.cpp:2108
void UpdatePositionData()
Definition Object.cpp:1155
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition Object.h:606
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition Object.cpp:1084
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType, uint32 entry)
Definition ZoneScript.h:32
Definition GameObjectData.h:696
QuaternionData ParentRotation
Definition GameObjectData.h:697
uint32 InvisibilityValue
Definition GameObjectData.h:699
InvisibilityType invisibilityType
Definition GameObjectData.h:698
Definition GameObjectData.h:666
Definition GameObjectData.h:31
uint32 intactNumHits
Definition GameObjectData.h:351
uint32 stealthed
Definition GameObjectData.h:124
uint32 type
Definition GameObjectData.h:33
uint32 entry
Definition GameObjectData.h:32
bool IsLargeGameObject() const
Definition GameObjectData.h:593
struct GameObjectTemplate::@234::@262 building
bool IsInfiniteGameObject() const
Definition GameObjectData.h:618
uint32 minSuccessOpens
Definition GameObjectData.h:87
uint32 invisible
Definition GameObjectData.h:126
uint32 damagedNumHits
Definition GameObjectData.h:356
std::string name
Definition GameObjectData.h:35
uint32 maxSuccessOpens
Definition GameObjectData.h:88
float size
Definition GameObjectData.h:39
uint32 displayId
Definition GameObjectData.h:34
bool IsPositionValid() const
Definition Position.cpp:183
Definition GameObjectData.h:682
float w
Definition GameObjectData.h:686
float z
Definition GameObjectData.h:685
float y
Definition GameObjectData.h:684
float x
Definition GameObjectData.h:683
uint32 MaxOpens
Definition GameObject.h:60
uint32 MaxHealth
Definition GameObject.h:71
struct GameObjectValue::@233 Building
struct GameObjectValue::@231 FishingHole
uint32 Health
Definition GameObject.h:70

References Object::_Create(), FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::AddFlag(), Map::AddToMap(), FlaggedValuesArray32< T_VALUES, T_FLAGS, FLAG_TYPE, ARRAY_SIZE >::AddValue(), AIM_Initialize(), ASSERT, GameObjectValue::Building, GameObjectTemplate::building, Create(), CreateModel(), GameObjectTemplate::damagedNumHits, GameObjectTemplate::displayId, GameObjectTemplate::entry, GameObjectValue::FishingHole, GameObject(), GameObject, GAMEOBJECT_FACTION, GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GAMEOBJECT_TYPE_FISHINGHOLE, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_TRAP, Map::GenerateLowGuid(), ZoneScript::GetGameObjectEntry(), GetGOInfo(), Map::GetId(), WorldObject::GetInstanceScript(), GetScriptId(), GetSpawnId(), GetTemplateAddon(), GO_STATE_READY, GameObjectValue::Health, Infinite, GameObjectTemplate::intactNumHits, INVISIBILITY_TRAP, GameObjectAddon::invisibilityType, GameObjectAddon::InvisibilityValue, GameObjectTemplate::invisible, GameObjectTemplate::IsInfiniteGameObject(), IsInstanceGameobject(), GameObjectTemplate::IsLargeGameObject(), Position::IsPositionValid(), Large, WorldObject::LastUsedScriptID, LOG_ERROR, m_goInfo, m_goValue, WorldObject::m_invisibility, m_model, m_stationaryPosition, WorldObject::m_stealth, WorldObject::m_zoneScript, MAX_GAMEOBJECT_TYPE, GameObjectValue::MaxHealth, GameObjectValue::MaxOpens, GameObjectTemplate::maxSuccessOpens, GameObjectTemplate::minSuccessOpens, GameObjectTemplate::name, GameObjectAddon::ParentRotation, Position::Relocate(), ReplaceAllGameObjectFlags(), SetDisplayId(), Object::SetEntry(), SetGoAnimProgress(), SetGoArtKit(), SetGoState(), SetGoType(), SetLinkedTrap(), WorldObject::SetMap(), WorldObject::SetName(), Object::SetObjectScale(), SetPhaseMask(), SetTransportPathRotation(), Object::SetUInt32Value(), WorldObject::SetVisibilityDistanceOverride(), SetWorldRotation(), WorldObject::SetZoneScript(), GameObjectTemplate::size, sObjectMgr, STEALTH_TRAP, GameObjectTemplate::stealthed, SwitchDoorOrButton(), GameObjectTemplate::type, WorldObject::UpdatePositionData(), urand(), QuaternionData::w, QuaternionData::x, QuaternionData::y, and QuaternionData::z.

Referenced by Battleground::AddObject(), Create(), Spell::EffectDuel(), Spell::EffectSummonObject(), Spell::EffectSummonObjectWild(), Spell::EffectTransmitted(), OutdoorPvPSI::HandleDropFlag(), gobject_commandscript::HandleGameObjectAddCommand(), LoadGameObjectFromDB(), Battlefield::SpawnGameObject(), Map::SummonGameObject(), and WorldObject::SummonGameObject().

◆ CreateModel()

GameObjectModel * GameObject::CreateModel ( )
protected
2931{
2932 return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
2933}
static GameObjectModel * Create(std::unique_ptr< GameObjectModelOwnerBase > modelOwner, std::string const &dataPath)
Definition GameObjectModel.cpp:168

References GameObjectModel::Create(), and sWorld.

Referenced by Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), and UpdateModel().

◆ Delete()

void GameObject::Delete ( )
963{
966
968
970
971 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
973
974 // Xinef: if ritual gameobject is removed, clear anim spells
977
978 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
979 if (poolid)
980 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
981 else
983}
#define sPoolMgr
Definition PoolMgr.h:163
@ GAMEOBJECT_TYPE_SUMMONING_RITUAL
Definition SharedDefines.h:1589
void SetLootState(LootState s, Unit *unit=nullptr)
Definition GameObject.cpp:2416
void ClearRitualList()
Definition GameObject.cpp:236
void AddObjectToRemoveList()
Definition Object.cpp:2144
void SendObjectDeSpawnAnim(ObjectGuid guid)
Definition Object.cpp:2101

References WorldObject::AddObjectToRemoveList(), ClearRitualList(), GAMEOBJECT_TYPE_SUMMONING_RITUAL, GetGOInfo(), Object::GetGUID(), GetTemplateAddon(), GO_NOT_READY, GO_STATE_READY, m_spawnId, RemoveFromOwner(), ReplaceAllGameObjectFlags(), WorldObject::SendObjectDeSpawnAnim(), SetGoState(), SetLootState(), and sPoolMgr.

Referenced by MotionTransport::DelayedTeleportTransport(), OPvPCapturePoint::DelCapturePoint(), OPvPCapturePoint::DelObject(), npc_overlord_drakuru_betrayal::DoAction(), go_ahune_ice_stone::GossipSelect(), OutdoorPvPSI::HandleCustomSpell(), instance_razorfen_downs::instance_razorfen_downs_InstanceMapScript::OnGameObjectCreate(), go_ulduar_working_harpoon::OnGossipHello(), Unit::RemoveAllGameObjects(), Unit::RemoveGameObject(), Update(), go_blood_drenched_door::go_blood_drenched_doorAI::UpdateAI(), go_celestial_planetarium_access::go_celestial_planetarium_accessAI::UpdateAI(), and Use().

◆ DeleteFromDB()

void GameObject::DeleteFromDB ( )
1153{
1155 sObjectMgr->DeleteGOData(m_spawnId);
1156
1158 stmt->SetData(0, m_spawnId);
1159 WorldDatabase.Execute(stmt);
1160
1161 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
1162 stmt->SetData(0, m_spawnId);
1163 WorldDatabase.Execute(stmt);
1164}
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
@ WORLD_DEL_EVENT_GAMEOBJECT
Definition WorldDatabase.h:38
@ WORLD_DEL_GAMEOBJECT
Definition WorldDatabase.h:37
void RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2449
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition PreparedStatement.h:77
Definition PreparedStatement.h:157

References WorldObject::GetMap(), m_spawnId, Map::RemoveGORespawnTime(), PreparedStatementBase::SetData(), sObjectMgr, WORLD_DEL_EVENT_GAMEOBJECT, WORLD_DEL_GAMEOBJECT, and WorldDatabase.

◆ DespawnOrUnsummon()

void GameObject::DespawnOrUnsummon ( Milliseconds  delay = 0ms,
Seconds  forcedRespawnTime = 0s 
)
917{
918 if (delay > 0ms)
919 {
920 if (!m_despawnDelay || m_despawnDelay > delay.count())
921 {
922 m_despawnDelay = delay.count();
923 m_despawnRespawnTime = forceRespawnTime;
924 }
925 }
926 else
927 {
928 if (m_goData)
929 {
930 int32 const respawnDelay = (forceRespawnTime > 0s) ? forceRespawnTime.count() : m_goData->spawntimesecs;
931 SetRespawnTime(respawnDelay);
932 }
933
934 // Respawn is handled by the gameobject itself.
935 // If we delete it from world, it simply never respawns...
936 // Uncomment this and remove the following lines if dynamic spawn is implemented.
937 // Delete();
938 {
942
943 if (GameObject* trap = GetLinkedTrap())
944 {
945 trap->DespawnOrUnsummon();
946 }
947
948 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
949 {
951 }
952
953 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
954 if (poolid)
955 {
956 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
957 }
958 }
959 }
960}
@ GO_JUST_DEACTIVATED
Definition GameObject.h:113
GameObject * GetLinkedTrap()
Definition GameObject.cpp:2709
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1268
int32 spawntimesecs
Definition GameObjectData.h:722

References Object::GetGUID(), GetLinkedTrap(), GetTemplateAddon(), GO_JUST_DEACTIVATED, GO_STATE_READY, m_despawnDelay, m_despawnRespawnTime, m_goData, m_spawnId, ReplaceAllGameObjectFlags(), WorldObject::SendObjectDeSpawnAnim(), SetGoState(), SetLootState(), SetRespawnTime(), GameObjectData::spawntimesecs, and sPoolMgr.

Referenced by Spell::EffectActivateObject(), instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate(), instance_molten_core::instance_molten_core_InstanceMapScript::OnGameObjectCreate(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnGameObjectCreate(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnGameObjectCreate(), go_strange_pool::OnGossipHello(), go_southfury_moonstone::OnGossipHello(), go_ancient_skull_pile::OnGossipSelect(), SmartScript::ProcessAction(), go_ahune_ice_spear::Reset(), go_skull_pile::SendActionMenu(), go_firework_show::SpawnNextFirework(), npc_midsummer_bonfire::StampOut(), and Update().

◆ EnableCollision()

void GameObject::EnableCollision ( bool  enable)
2579{
2580 if (!m_model)
2581 return;
2582
2583 /*if (enable && !GetMap()->ContainsGameObjectModel(*m_model))
2584 GetMap()->InsertGameObjectModel(*m_model);*/
2585
2586 uint32 phaseMask = 0;
2587 if (enable && !sDisableMgr->IsDisabledFor(DISABLE_TYPE_GO_LOS, GetEntry(), nullptr))
2588 phaseMask = GetPhaseMask();
2589
2590 m_model->enable(phaseMask);
2591}
#define sDisableMgr
Definition DisableMgr.h:88
@ DISABLE_TYPE_GO_LOS
Definition DisableMgr.h:35
void enable(uint32 ph_mask)
Definition GameObjectModel.h:67
uint32 GetPhaseMask() const
Definition Object.h:512

References DISABLE_TYPE_GO_LOS, GameObjectModel::enable(), Object::GetEntry(), WorldObject::GetPhaseMask(), m_model, and sDisableMgr.

Referenced by AddToWorld(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_eye_of_eternity::OnGameObjectCreate(), SetDestructibleState(), SetGoState(), and SetPhaseMask().

◆ EventInform()

void GameObject::EventInform ( uint32  eventId)
2162{
2163 if (!eventId)
2164 return;
2165
2166 if (AI())
2167 AI()->EventInform(eventId);
2168
2169 if (m_zoneScript)
2170 m_zoneScript->ProcessEvent(this, eventId);
2171}
virtual void EventInform(uint32)
Definition GameObjectAI.h:65
GameObjectAI * AI() const
Definition GameObject.h:305
virtual void ProcessEvent(WorldObject *, uint32)
Definition ZoneScript.h:54

References AI(), GameObjectAI::EventInform(), WorldObject::m_zoneScript, and ZoneScript::ProcessEvent().

Referenced by MotionTransport::DoEventIfAny(), SetDestructibleState(), and Use().

◆ GameobjectStateToInt()

uint8 GameObject::GameobjectStateToInt ( GOState state) const
2522{
2523 uint8 m_state = 3;
2524
2525 if (state)
2526 {
2527 switch (*state)
2528 {
2529 case GO_STATE_ACTIVE:
2530 m_state = 0;
2531 return m_state;
2532 case GO_STATE_READY:
2533 m_state = 1;
2534 return m_state;
2536 m_state = 2;
2537 return m_state;
2538 }
2539 }
2540
2541 // Returning any value that is not one of the specified ones
2542 // Which will default into the invalid part of the switch
2543 return m_state;
2544}
@ GO_STATE_ACTIVE
Definition GameObjectData.h:705
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition GameObjectData.h:707

References GO_STATE_ACTIVE, GO_STATE_ACTIVE_ALTERNATIVE, and GO_STATE_READY.

Referenced by SaveStateToDB().

◆ GetAIName()

std::string const & GameObject::GetAIName ( ) const
105{
106 return sObjectMgr->GetGameObjectTemplate(GetEntry())->AIName;
107}

References Object::GetEntry(), and sObjectMgr.

Referenced by GetDebugInfo().

◆ GetDebugInfo()

std::string GameObject::GetDebugInfo ( ) const
overridevirtual

Reimplemented from Object.

Reimplemented in MotionTransport.

3062{
3063 std::stringstream sstr;
3064 sstr << WorldObject::GetDebugInfo() << "\n"
3065 << "SpawnId: " << GetSpawnId() << " GoState: " << std::to_string(GetGoState()) << " ScriptId: " << GetScriptId() << " AIName: " << GetAIName();
3066 return sstr.str();
3067}
std::string const & GetAIName() const
Definition GameObject.cpp:104
std::string GetDebugInfo() const override
Definition Object.cpp:2481

References GetAIName(), WorldObject::GetDebugInfo(), GetGoState(), GetScriptId(), and GetSpawnId().

Referenced by MotionTransport::GetDebugInfo().

◆ GetDestructibleState()

GameObjectDestructibleState GameObject::GetDestructibleState ( ) const
inline
294 {
300 }
@ GO_FLAG_DESTROYED
Definition SharedDefines.h:1622
@ GO_FLAG_DAMAGED
Definition SharedDefines.h:1621
@ GO_DESTRUCTIBLE_DESTROYED
Definition SharedDefines.h:1640
@ GO_DESTRUCTIBLE_INTACT
Definition SharedDefines.h:1638
@ GO_DESTRUCTIBLE_DAMAGED
Definition SharedDefines.h:1639
bool HasGameObjectFlag(GameObjectFlags flags) const
Definition GameObject.h:216

References GO_DESTRUCTIBLE_DAMAGED, GO_DESTRUCTIBLE_DESTROYED, GO_DESTRUCTIBLE_INTACT, GO_FLAG_DAMAGED, GO_FLAG_DESTROYED, and HasGameObjectFlag().

Referenced by ModifyHealth().

◆ GetDisplayId()

uint32 GameObject::GetDisplayId ( ) const
inline
@ GAMEOBJECT_DISPLAYID
Definition UpdateFields.h:398
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:294

References GAMEOBJECT_DISPLAYID, and Object::GetUInt32Value().

Referenced by GameObjectModelOwnerImpl::GetDisplayId(), and spell_zulfarrak_unlocking::HandleOpenLock().

◆ GetDynamicFlags()

uint32 GameObject::GetDynamicFlags ( ) const
inlineoverridevirtual

Reimplemented from Object.

References GAMEOBJECT_DYNAMIC, and Object::GetUInt32Value().

◆ GetFinalWorldRotation()

G3D::Quat GameObject::GetFinalWorldRotation ( ) const
2235{
2236 G3D::Quat worldRotation = GetWorldRotation();
2237 if (Transport* transport = GetTransport())
2238 {
2239 G3D::Quat transportRotation = transport->GetWorldRotation();
2240
2241 G3D::Quat transportRotationQuat(transportRotation.x, transportRotation.y, transportRotation.z, transportRotation.w);
2242 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2243
2244 G3D::Quat resultRotation = worldRotationQuat * transportRotationQuat;
2245
2246 return G3D::Quat(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
2247 }
2248 return worldRotation;
2249}
G3D::Quat const & GetWorldRotation() const
Definition GameObject.h:150
Definition Transport.h:30

References WorldObject::GetTransport(), and GetWorldRotation().

Referenced by IsAtInteractDistance().

◆ GetFishLoot()

void GameObject::GetFishLoot ( Loot fishLoot,
Player lootOwner,
bool  junk = false 
)
986{
987 fishLoot->clear();
988
989 uint32 zone, area;
990 uint32 defaultZone = 1;
991 GetZoneAndAreaId(zone, area);
992
993 uint16 lootMode = junk ? LOOT_MODE_JUNK_FISH : LOOT_MODE_DEFAULT;
994 // Check to fill loot in the order area - zone - defaultZone.
995 // This is because area and zone is not set in some places, like Off the coast of Storm Peaks.
996 uint32 lootZones[] = { area, zone, defaultZone };
997 for (uint32 fillZone : lootZones)
998 {
999 fishLoot->FillLoot(fillZone, LootTemplates_Fishing, lootOwner, true, true, lootMode);
1000
1001 // If the loot is filled and the loot is eligible, then we break out of the loop.
1002 if (!fishLoot->empty() && !fishLoot->isLooted())
1003 break;
1004 }
1005}
LootStore LootTemplates_Fishing("fishing_loot_template", "area id", true)
@ LOOT_MODE_DEFAULT
Definition SharedDefines.h:43
@ LOOT_MODE_JUNK_FISH
Definition SharedDefines.h:48
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition Object.cpp:3072
bool empty() const
Definition LootMgr.h:367
bool isLooted() const
Definition LootMgr.h:368
void clear()
Definition LootMgr.h:343
bool FillLoot(uint32 lootId, LootStore const &store, Player *lootOwner, bool personal, bool noEmptyError=false, uint16 lootMode=LOOT_MODE_DEFAULT, WorldObject *lootSource=nullptr)
Definition LootMgr.cpp:571

References Loot::clear(), Loot::empty(), Loot::FillLoot(), WorldObject::GetZoneAndAreaId(), Loot::isLooted(), LOOT_MODE_DEFAULT, LOOT_MODE_JUNK_FISH, and LootTemplates_Fishing.

Referenced by Player::SendLoot().

◆ GetGameObjectData()

GameObjectData const * GameObject::GetGameObjectData ( ) const
inline

◆ GetGameObjectFlags()

GameObjectFlags GameObject::GetGameObjectFlags ( ) const
inline

◆ GetGoAnimProgress()

uint8 GameObject::GetGoAnimProgress ( ) const
inline
208{ return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
@ GAMEOBJECT_BYTES_1
Definition UpdateFields.h:404
uint8 GetByteValue(uint16 index, uint8 offset) const
Definition Object.cpp:312

References GAMEOBJECT_BYTES_1, and Object::GetByteValue().

Referenced by Spell::EffectDummy(), SaveToDB(), Update(), and Use().

◆ GetGoArtKit()

uint8 GameObject::GetGoArtKit ( ) const
inline
206{ return GetByteValue(GAMEOBJECT_BYTES_1, 2); }

References GAMEOBJECT_BYTES_1, and Object::GetByteValue().

Referenced by SaveToDB().

◆ GetGOInfo()

GameObjectTemplate const * GameObject::GetGOInfo ( ) const
inline
136{ return m_goInfo; }

References m_goInfo.

Referenced by ActivateToQuest(), BuildValuesUpdate(), Spell::CheckCast(), Spell::CheckEffectTarget(), CheckRitualList(), ClearRitualList(), Create(), StaticTransport::Create(), Delete(), WorldSession::DoLootRelease(), Spell::EffectOpenLock(), MotionTransport::EnableMovement(), BattlegroundSA::EventPlayerDamagedGO(), Player::GetDefaultGossipMenuForSource(), GetScriptId(), GetSpellForLock(), GetStationaryO(), GetStationaryX(), GetStationaryY(), GetStationaryZ(), GetTemplateAddon(), go_celestial_planetarium_access::go_celestial_planetarium_accessAI::GossipHello(), WorldSession::HandleAlterAppearance(), OutdoorPvPSI::HandleCustomSpell(), gobject_commandscript::HandleGameObjectMoveCommand(), gobject_commandscript::HandleGameObjectTurnCommand(), OPvPCapturePoint::HandlePlayerEnter(), OPvPCapturePoint::HandlePlayerLeave(), IsAtInteractDistance(), IsAtInteractDistance(), IsDestructibleBuilding(), IsMotionTransport(), IsNeverVisible(), IsStaticTransport(), IsTransport(), LoadGameObjectFromDB(), MotionTransport::LoadStaticPassengers(), ModifyHealth(), instance_naxxramas::OnGameObjectCreate(), instance_naxxramas::OnGameObjectRemove(), icecrown_citadel_teleport::OnGossipHello(), go_simon_cluster::OnGossipHello(), go_apexis_relic::OnGossipHello(), Acore::NearestGameObjectFishingHole::operator()(), Acore::GameObjectInRangeCheck::operator()(), Acore::GameObjectFocusCheck::operator()(), RemoveFromOwner(), Creature::SaveToDB(), SaveToDB(), BfCapturePoint::SendChangePhase(), OPvPCapturePoint::SendChangePhase(), Player::SendLoot(), Spell::SendLoot(), BfCapturePoint::SetCapturePointData(), SetLootState(), ToMotionTransport(), ToMotionTransport(), ToStaticTransport(), ToStaticTransport(), ToTransport(), ToTransport(), BfCapturePoint::Update(), OPvPCapturePoint::Update(), MotionTransport::Update(), OPvPCapturePointNA::Update(), Update(), Use(), and UseDoorOrButton().

◆ GetGoState()

◆ GetGoType()

◆ GetGOValue()

GameObjectValue const * GameObject::GetGOValue ( ) const
inline
139{ return &m_goValue; }

References m_goValue.

Referenced by WorldSession::DoLootRelease(), and Transport::GetPathProgress().

◆ GetInteractionDistance()

float GameObject::GetInteractionDistance ( ) const
2847{
2848 switch (GetGoType())
2849 {
2851 return 0.0f;
2857 return 5.5555553f;
2859 return 10.0f;
2862 return 3.0f;
2864 return 100.0f;
2866 return 20.0f + CONTACT_DISTANCE; // max spell range
2872 return 5.0f;
2873 // Following values are not blizzlike
2876 // Successful mailbox interaction is rather critical to the client, failing it will start a minute-long cooldown until the next mail query may be executed.
2877 // And since movement info update is not sent with mailbox interaction query, server may find the player outside of interaction range. Thus we increase it.
2878 return 10.0f; // 5.0f is blizzlike
2879 default:
2880 return INTERACTION_DISTANCE;
2881 }
2882}
#define INTERACTION_DISTANCE
Definition ObjectDefines.h:24
#define CONTACT_DISTANCE
Definition ObjectDefines.h:23
@ GAMEOBJECT_TYPE_GUILD_BANK
Definition SharedDefines.h:1605
@ GAMEOBJECT_TYPE_MINI_GAME
Definition SharedDefines.h:1598
@ GAMEOBJECT_TYPE_CAMERA
Definition SharedDefines.h:1584
@ GAMEOBJECT_TYPE_MAP_OBJECT
Definition SharedDefines.h:1585
@ GAMEOBJECT_TYPE_FLAGDROP
Definition SharedDefines.h:1597
@ GAMEOBJECT_TYPE_MAILBOX
Definition SharedDefines.h:1590
@ GAMEOBJECT_TYPE_FLAGSTAND
Definition SharedDefines.h:1595
@ GAMEOBJECT_TYPE_CHAIR
Definition SharedDefines.h:1578
@ GAMEOBJECT_TYPE_TEXT
Definition SharedDefines.h:1580
@ GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
Definition SharedDefines.h:1602
@ GAMEOBJECT_TYPE_AREADAMAGE
Definition SharedDefines.h:1583
@ GAMEOBJECT_TYPE_BARBER_CHAIR
Definition SharedDefines.h:1603
@ GAMEOBJECT_TYPE_DOOR
Definition SharedDefines.h:1571
@ GAMEOBJECT_TYPE_BINDER
Definition SharedDefines.h:1575

References CONTACT_DISTANCE, GAMEOBJECT_TYPE_AREADAMAGE, GAMEOBJECT_TYPE_BARBER_CHAIR, GAMEOBJECT_TYPE_BINDER, GAMEOBJECT_TYPE_CAMERA, GAMEOBJECT_TYPE_CHAIR, GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY, GAMEOBJECT_TYPE_FISHINGHOLE, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_FLAGDROP, GAMEOBJECT_TYPE_FLAGSTAND, GAMEOBJECT_TYPE_GUILD_BANK, GAMEOBJECT_TYPE_MAILBOX, GAMEOBJECT_TYPE_MAP_OBJECT, GAMEOBJECT_TYPE_MINI_GAME, GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_TEXT, GetGoType(), and INTERACTION_DISTANCE.

Referenced by IsAtInteractDistance().

◆ getLevelForTarget()

uint8 GameObject::getLevelForTarget ( WorldObject const *  target) const
inlineoverridevirtual

Reimplemented from WorldObject.

276 {
277 if (Unit* owner = GetOwner())
278 return owner->getLevelForTarget(target);
279
280 return 1;
281 }

References GetOwner().

◆ GetLinkedTrap()

GameObject * GameObject::GetLinkedTrap ( )
2710{
2712}
ObjectGuid m_linkedTrap
Definition GameObject.h:405
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:184

References ObjectAccessor::GetGameObject(), and m_linkedTrap.

Referenced by DespawnOrUnsummon(), Spell::EffectSummonObjectWild(), Spell::EffectTransmitted(), RemoveFromWorld(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), TriggeringLinkedGameObject(), and Update().

◆ GetLootGenerationTime()

uint32 GameObject::GetLootGenerationTime ( ) const
inline
257{ return m_lootGenerationTime; }

References m_lootGenerationTime.

Referenced by Player::SendLoot().

◆ GetLootMode()

uint16 GameObject::GetLootMode ( ) const
inline

◆ GetLootRecipient()

Player * GameObject::GetLootRecipient ( ) const
2607{
2608 if (!m_lootRecipient)
2609 return nullptr;
2611}
ObjectGuid m_lootRecipient
Definition GameObject.h:400
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:257

References ObjectAccessor::FindConnectedPlayer(), and m_lootRecipient.

◆ GetLootRecipientGroup()

Group * GameObject::GetLootRecipientGroup ( ) const
2614{
2616 return nullptr;
2617 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
2618}
#define sGroupMgr
Definition GroupMgr.h:51

References m_lootRecipientGroup, and sGroupMgr.

Referenced by IsLootAllowedFor().

◆ getLootState()

◆ GetNameForLocaleIdx()

std::string const & GameObject::GetNameForLocaleIdx ( LocaleConstant  locale_idx) const
overridevirtual

Reimplemented from WorldObject.

2184{
2185 if (loc_idx != DEFAULT_LOCALE)
2186 {
2187 uint8 uloc_idx = uint8(loc_idx);
2188 if (GameObjectLocale const* cl = sObjectMgr->GetGameObjectLocale(GetEntry()))
2189 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
2190 return cl->Name[uloc_idx];
2191 }
2192
2193 return GetName();
2194}
#define DEFAULT_LOCALE
Definition Common.h:131
std::string const & GetName() const
Definition Object.h:524
Definition GameObjectData.h:676

References DEFAULT_LOCALE, Object::GetEntry(), WorldObject::GetName(), and sObjectMgr.

Referenced by gobject_commandscript::HandleGameObjectRespawn().

◆ GetOwner()

Unit * GameObject::GetOwner ( ) const
1204{
1205 return ObjectAccessor::GetUnit(*this, GetOwnerGUID());
1206}
Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:199

References GetOwnerGUID(), and ObjectAccessor::GetUnit().

Referenced by CastSpell(), Spell::EffectOpenLock(), getLevelForTarget(), go_soulwell::go_soulwellAI::GossipHello(), IsAlwaysVisibleFor(), TriggeringLinkedGameObject(), Update(), and Use().

◆ GetOwnerGUID()

◆ GetPackedWorldRotation()

int64 GameObject::GetPackedWorldRotation ( ) const
inline
151{ return m_packedRotation; }

References m_packedRotation.

◆ GetRespawnDelay()

uint32 GameObject::GetRespawnDelay ( ) const
inline

◆ GetRespawnPosition()

void GameObject::GetRespawnPosition ( float &  x,
float &  y,
float &  z,
float *  ori = nullptr 
) const
2815{
2816 if (m_spawnId)
2817 {
2818 if (GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId))
2819 {
2820 x = data->posX;
2821 y = data->posY;
2822 z = data->posZ;
2823 if (ori)
2824 *ori = data->orientation;
2825 return;
2826 }
2827 }
2828
2829 x = GetPositionX();
2830 y = GetPositionY();
2831 z = GetPositionZ();
2832 if (ori)
2833 *ori = GetOrientation();
2834}
Definition GameObjectData.h:712
float GetOrientation() const
Definition Position.h:124

References Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), m_spawnId, and sObjectMgr.

◆ GetRespawnTime()

time_t GameObject::GetRespawnTime ( ) const
inline

◆ GetRespawnTimeEx()

time_t GameObject::GetRespawnTimeEx ( ) const
2898{
2899 time_t now = GameTime::GetGameTime().count();
2900 if (m_respawnTime > now)
2901 return m_respawnTime;
2902 else
2903 return now;
2904}
Seconds GetGameTime()
Definition GameTime.cpp:38

References GameTime::GetGameTime(), and m_respawnTime.

Referenced by gobject_commandscript::HandleGameObjectTargetCommand().

◆ GetScriptId()

◆ GetSpawnId()

◆ GetSpellForLock()

SpellInfo const * GameObject::GetSpellForLock ( Player const *  player) const
2983{
2984 if (!player)
2985 {
2986 return nullptr;
2987 }
2988
2989 uint32 lockId = GetGOInfo()->GetLockId();
2990 if (!lockId)
2991 {
2992 return nullptr;
2993 }
2994
2995 LockEntry const* lock = sLockStore.LookupEntry(lockId);
2996 if (!lock)
2997 {
2998 return nullptr;
2999 }
3000
3001 for (uint8 i = 0; i < MAX_LOCK_CASE; ++i)
3002 {
3003 if (!lock->Type[i])
3004 {
3005 continue;
3006 }
3007
3008 if (lock->Type[i] == LOCK_KEY_SPELL)
3009 {
3010 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(lock->Index[i]))
3011 {
3012 return spell;
3013 }
3014 }
3015
3016 if (lock->Type[i] != LOCK_KEY_SKILL)
3017 {
3018 break;
3019 }
3020
3021 for (auto&& playerSpell : player->GetSpellMap())
3022 {
3023 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(playerSpell.first))
3024 {
3025 for (auto&& effect : spell->Effects)
3026 {
3027 if (effect.Effect == SPELL_EFFECT_OPEN_LOCK && ((uint32) effect.MiscValue) == lock->Index[i])
3028 {
3029 if (effect.CalcValue(player) >= int32(lock->Skill[i]))
3030 {
3031 return spell;
3032 }
3033 }
3034 }
3035 }
3036 }
3037 }
3038
3039 return nullptr;
3040}
DBCStorage< LockEntry > sLockStore(LockEntryfmt)
#define MAX_LOCK_CASE
Definition DBCStructure.h:1305
@ SPELL_EFFECT_OPEN_LOCK
Definition SharedDefines.h:822
@ LOCK_KEY_SKILL
Definition SharedDefines.h:2597
@ LOCK_KEY_SPELL
Definition SharedDefines.h:2598
uint32 GetLockId() const
Definition GameObjectData.h:427
Definition DBCStructure.h:1308
uint32 Type[MAX_LOCK_CASE]
Definition DBCStructure.h:1310
uint32 Index[MAX_LOCK_CASE]
Definition DBCStructure.h:1311
uint32 Skill[MAX_LOCK_CASE]
Definition DBCStructure.h:1312

References GetGOInfo(), GameObjectTemplate::GetLockId(), Player::GetSpellMap(), LockEntry::Index, LOCK_KEY_SKILL, LOCK_KEY_SPELL, MAX_LOCK_CASE, LockEntry::Skill, sLockStore, SPELL_EFFECT_OPEN_LOCK, sSpellMgr, and LockEntry::Type.

Referenced by IsAtInteractDistance().

◆ GetSpellId()

uint32 GameObject::GetSpellId ( ) const
inline

◆ GetStationaryO()

float GameObject::GetStationaryO ( ) const
inlineoverridevirtual

◆ GetStationaryX()

float GameObject::GetStationaryX ( ) const
inlineoverridevirtual

◆ GetStationaryY()

float GameObject::GetStationaryY ( ) const
inlineoverridevirtual

◆ GetStationaryZ()

float GameObject::GetStationaryZ ( ) const
inlineoverridevirtual

◆ GetTemplateAddon()

GameObjectTemplateAddon const * GameObject::GetTemplateAddon ( ) const

◆ GetUniqueUseCount()

uint32 GameObject::GetUniqueUseCount ( ) const
inline
241{ return m_unique_users.size(); }

References m_unique_users.

Referenced by Update(), and Use().

◆ GetUseCount()

uint32 GameObject::GetUseCount ( ) const
inline
240{ return m_usetimes; }

References m_usetimes.

Referenced by WorldSession::DoLootRelease().

◆ GetWorldRotation()

G3D::Quat const & GameObject::GetWorldRotation ( ) const
inline
150{ return WorldRotation; }
G3D::Quat WorldRotation
Definition GameObject.h:397

References WorldRotation.

Referenced by GetFinalWorldRotation().

◆ HasGameObjectFlag()

bool GameObject::HasGameObjectFlag ( GameObjectFlags  flags) const
inline
216{ return HasFlag(GAMEOBJECT_FLAGS, flags) != 0; }
bool HasFlag(uint16 index, uint32 flag) const
Definition Object.cpp:871

References GAMEOBJECT_FLAGS, and Object::HasFlag().

Referenced by GetDestructibleState(), WorldSession::HandleGameobjectReportUse(), and Use().

◆ hasInvolvedQuest()

bool GameObject::hasInvolvedQuest ( uint32  quest_id) const
overridevirtual

Reimplemented from Object.

1181{
1182 QuestRelationBounds qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(GetEntry());
1183 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1184 {
1185 if (itr->second == quest_id)
1186 return true;
1187 }
1188 return false;
1189}
std::pair< QuestRelations::const_iterator, QuestRelations::const_iterator > QuestRelationBounds
Definition ObjectMgr.h:526

References Object::GetEntry(), and sObjectMgr.

◆ HasLootMode()

bool GameObject::HasLootMode ( uint16  lootMode) const
inline
228{ return m_LootMode & lootMode; }

References m_LootMode.

◆ HasLootRecipient()

bool GameObject::HasLootRecipient ( ) const
inline

◆ hasQuest()

bool GameObject::hasQuest ( uint32  quest_id) const
overridevirtual

Reimplemented from Object.

1170{
1171 QuestRelationBounds qr = sObjectMgr->GetGOQuestRelationBounds(GetEntry());
1172 for (QuestRelations::const_iterator itr = qr.first; itr != qr.second; ++itr)
1173 {
1174 if (itr->second == quest_id)
1175 return true;
1176 }
1177 return false;
1178}

References Object::GetEntry(), and sObjectMgr.

◆ IsAllowedToSaveToDB()

bool GameObject::IsAllowedToSaveToDB ( ) const
inline
355{ return m_saveStateOnDb; };

References m_saveStateOnDb.

Referenced by SetGoState().

◆ IsAlwaysVisibleFor()

bool GameObject::IsAlwaysVisibleFor ( WorldObject const *  seer) const
overridevirtual

Reimplemented from WorldObject.

1229{
1231 return true;
1232
1234 return true;
1235
1236 if (!seer)
1237 return false;
1238
1239 // Always seen by owner and friendly units
1240 if (ObjectGuid guid = GetOwnerGUID())
1241 {
1242 if (seer->GetGUID() == guid)
1243 return true;
1244
1245 Unit* owner = GetOwner();
1246 if (owner)
1247 {
1248 if (seer->IsUnit() && owner->IsFriendlyTo(seer->ToUnit()))
1249 return true;
1250 }
1251 }
1252
1253 return false;
1254}
bool IsDestructibleBuilding() const
Definition GameObject.cpp:1196
bool IsFriendlyTo(Unit const *unit) const
Definition Unit.cpp:10431
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition Object.h:756

References Object::GetGUID(), GetOwner(), GetOwnerGUID(), WorldObject::IsAlwaysVisibleFor(), IsDestructibleBuilding(), Unit::IsFriendlyTo(), IsTransport(), Object::IsUnit(), and Object::ToUnit().

◆ IsAtInteractDistance() [1/2]

bool GameObject::IsAtInteractDistance ( Player const *  player,
SpellInfo const *  spell = nullptr 
) const
2936{
2937 if (spell || (spell = GetSpellForLock(player)))
2938 {
2939 float maxRange = spell->GetMaxRange(spell->IsPositive());
2940
2942 {
2943 return maxRange * maxRange >= GetExactDistSq(player);
2944 }
2945
2946 if (sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2947 {
2948 return IsAtInteractDistance(*player, maxRange);
2949 }
2950 }
2951
2953}
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
bool IsAtInteractDistance(Position const &pos, float radius) const
Definition GameObject.cpp:2955
SpellInfo const * GetSpellForLock(Player const *player) const
Definition GameObject.cpp:2982
float GetInteractionDistance() const
Definition GameObject.cpp:2846
float GetExactDistSq(float x, float y, float z) const
Definition Position.h:174

References GAMEOBJECT_TYPE_SPELL_FOCUS, Position::GetExactDistSq(), GetGOInfo(), GetGoType(), GetInteractionDistance(), SpellInfo::GetMaxRange(), GetSpellForLock(), IsAtInteractDistance(), SpellInfo::IsPositive(), and sGameObjectDisplayInfoStore.

◆ IsAtInteractDistance() [2/2]

bool GameObject::IsAtInteractDistance ( Position const &  pos,
float  radius 
) const
2956{
2957 if (GameObjectDisplayInfoEntry const* displayInfo = sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2958 {
2959 float scale = GetObjectScale();
2960
2961 float minX = displayInfo->minX * scale - radius;
2962 float minY = displayInfo->minY * scale - radius;
2963 float minZ = displayInfo->minZ * scale - radius;
2964 float maxX = displayInfo->maxX * scale + radius;
2965 float maxY = displayInfo->maxY * scale + radius;
2966 float maxZ = displayInfo->maxZ * scale + radius;
2967
2968 G3D::Quat finalRotation = GetFinalWorldRotation();
2969 G3D::Quat finalRotationQuat(finalRotation.x, finalRotation.y, finalRotation.z, finalRotation.w);
2970
2971 return G3D::CoordinateFrame {{finalRotationQuat}, {GetPositionX(), GetPositionY(), GetPositionZ()}}.toWorldSpace(G3D::Box {{minX, minY, minZ}, {maxX, maxY, maxZ}}).contains({pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()});
2972 }
2973
2974 return GetExactDist(&pos) <= radius;
2975}
G3D::Quat GetFinalWorldRotation() const
Definition GameObject.cpp:2234
float GetObjectScale() const
Definition Object.h:119
Definition DBCStructure.h:1003
float GetExactDist(float x, float y, float z) const
Definition Position.h:182

References Position::GetExactDist(), GetFinalWorldRotation(), GetGOInfo(), Object::GetObjectScale(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), and sGameObjectDisplayInfoStore.

Referenced by IsAtInteractDistance(), and IsWithinDistInMap().

◆ IsDestructibleBuilding()

bool GameObject::IsDestructibleBuilding ( ) const
1197{
1198 GameObjectTemplate const* gInfo = GetGOInfo();
1199 if (!gInfo) return false;
1201}

References GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GetGOInfo(), and GameObjectTemplate::type.

Referenced by IsAlwaysVisibleFor(), and ModifyHealth().

◆ IsInRange()

bool GameObject::IsInRange ( float  x,
float  y,
float  z,
float  radius 
) const

Check if the distance between the 2 objects is 0, can happen if both objects are on the same position. The code below this check wont crash if dist is 0 because 0/0 in float operations is valid, and returns infinite

2135{
2137 if (!info)
2138 return IsWithinDist3d(x, y, z, radius);
2139
2140 float sinA = std::sin(GetOrientation());
2141 float cosA = cos(GetOrientation());
2142 float dx = x - GetPositionX();
2143 float dy = y - GetPositionY();
2144 float dz = z - GetPositionZ();
2145 float dist = std::sqrt(dx * dx + dy * dy);
2148 if (G3D::fuzzyEq(dist, 0.0f))
2149 return true;
2150
2151 float scale = GetObjectScale();
2152 float sinB = dx / dist;
2153 float cosB = dy / dist;
2154 dx = dist * (cosA * cosB + sinA * sinB);
2155 dy = dist * (cosA * sinB - sinA * cosB);
2156 return dx < (info->maxX * scale) + radius && dx > (info->minX * scale) - radius
2157 && dy < (info->maxY * scale) + radius && dy > (info->minY * scale) - radius
2158 && dz < (info->maxZ * scale) + radius && dz > (info->minZ * scale) - radius;
2159}
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition Object.cpp:1321
float maxX
Definition DBCStructure.h:1010
float maxY
Definition DBCStructure.h:1011
float minY
Definition DBCStructure.h:1008
float minX
Definition DBCStructure.h:1007
float minZ
Definition DBCStructure.h:1009
float maxZ
Definition DBCStructure.h:1012

References GameObjectTemplate::displayId, Object::GetObjectScale(), Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), WorldObject::IsWithinDist3d(), m_goInfo, GameObjectDisplayInfoEntry::maxX, GameObjectDisplayInfoEntry::maxY, GameObjectDisplayInfoEntry::maxZ, GameObjectDisplayInfoEntry::minX, GameObjectDisplayInfoEntry::minY, GameObjectDisplayInfoEntry::minZ, and sGameObjectDisplayInfoStore.

Referenced by _IsWithinDist(), Acore::GameObjectInRangeCheck::operator()(), Acore::AnyPlayerExactPositionInGameObjectRangeCheck::operator()(), and Acore::WorldObjectSpellAreaTargetCheck::operator()().

◆ IsInSkillupList()

bool GameObject::IsInSkillupList ( ObjectGuid const &  playerGuid) const
3049{
3050 for (auto const& itr : m_SkillupList)
3051 {
3052 if (itr.first == playerGuid)
3053 {
3054 return true;
3055 }
3056 }
3057
3058 return false;
3059}

References m_SkillupList.

Referenced by Spell::EffectOpenLock().

◆ IsInstanceGameobject()

bool GameObject::IsInstanceGameobject ( ) const
2488{
2489 // Avoid checking for unecessary gameobjects whose
2490 // states don't matter for the dungeon progression
2492 {
2493 return false;
2494 }
2495
2496 if (auto* map = FindMap())
2497 {
2498 if (map->IsDungeon() || map->IsRaid())
2499 {
2500 return true;
2501 }
2502 }
2503 return false;
2504}
bool ValidateGameobjectType() const
Definition GameObject.cpp:2506
Map * FindMap() const
Definition Object.h:621

References WorldObject::FindMap(), and ValidateGameobjectType().

Referenced by Create(), SaveStateToDB(), and SetGoState().

◆ IsInvisibleDueToDespawn()

bool GameObject::IsInvisibleDueToDespawn ( ) const
overridevirtual

Reimplemented from WorldObject.

1257{
1259 return true;
1260
1261 // Despawned
1262 if (!isSpawned())
1263 return true;
1264
1265 return false;
1266}
bool isSpawned() const
Definition GameObject.h:189
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:757

References WorldObject::IsInvisibleDueToDespawn(), and isSpawned().

◆ IsLootAllowedFor()

bool GameObject::IsLootAllowedFor ( Player const *  player) const
2677{
2679 {
2680 return true;
2681 }
2682
2683 if (player->GetGUID() == m_lootRecipient)
2684 {
2685 return true;
2686 }
2687
2688 if (player->HasPendingBind())
2689 {
2690 return false;
2691 }
2692
2693 // if we dont have a group we arent the recipient
2694 // if go doesnt have group bound it means it was solo killed by someone else
2695 Group const* playerGroup = player->GetGroup();
2696 if (!playerGroup || playerGroup != GetLootRecipientGroup())
2697 {
2698 return false;
2699 }
2700
2701 if (!HasAllowedLooter(player->GetGUID()))
2702 {
2703 return false;
2704 }
2705
2706 return true;
2707}
Group * GetLootRecipientGroup() const
Definition GameObject.cpp:2613
Definition Group.h:169
bool HasAllowedLooter(ObjectGuid guid) const
Definition Object.cpp:3112

References Player::GetGroup(), Object::GetGUID(), GetLootRecipientGroup(), WorldObject::HasAllowedLooter(), Player::HasPendingBind(), m_lootRecipient, and m_lootRecipientGroup.

Referenced by BuildValuesUpdate().

◆ IsMotionTransport()

bool GameObject::IsMotionTransport ( ) const
inline

◆ IsNeverVisible()

bool GameObject::IsNeverVisible ( ) const
overridevirtual

Reimplemented from WorldObject.

1218{
1220 return true;
1221
1222 if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
1223 return true;
1224
1225 return false;
1226}
virtual bool IsNeverVisible() const
Definition Object.h:755
uint32 serverOnly
Definition GameObjectData.h:107

References GAMEOBJECT_TYPE_SPELL_FOCUS, GetGOInfo(), GetGoType(), WorldObject::IsNeverVisible(), and GameObjectTemplate::serverOnly.

◆ isSpawned()

◆ isSpawnedByDefault()

bool GameObject::isSpawnedByDefault ( ) const
inline

◆ IsStaticTransport()

bool GameObject::IsStaticTransport ( ) const
inline

◆ IsTransport()

◆ IsUpdateNeeded()

bool GameObject::IsUpdateNeeded ( )
overridevirtual

Reimplemented from WorldObject.

3071{
3073 return true;
3074
3075 if (GetMap()->isCellMarked(GetCurrentCell().GetCellCoord().GetId()))
3076 return true;
3077
3078 if (!GetObjectVisibilityContainer().GetVisiblePlayersMap().empty())
3079 return true;
3080
3081 if (IsTransport())
3082 return true;
3083
3084 return false;
3085}
Cell const & GetCurrentCell() const
Definition Object.h:418
virtual bool IsUpdateNeeded()
Definition Object.cpp:3132
ObjectVisibilityContainer & GetObjectVisibilityContainer()
Definition Object.h:725
uint32 GetId(std::string const &username)
Definition AccountMgr.cpp:236

References MovableMapObject::GetCurrentCell(), WorldObject::GetMap(), WorldObject::GetObjectVisibilityContainer(), IsTransport(), and WorldObject::IsUpdateNeeded().

◆ IsWithinDistInMap() [1/2]

bool GameObject::IsWithinDistInMap ( Player const *  player) const

◆ IsWithinDistInMap() [2/2]

bool WorldObject::IsWithinDistInMap ( WorldObject const *  obj,
float  dist2compare,
bool  is3D = true,
bool  incOwnRadius = true,
bool  incTargetRadius = true 
) const
1348{
1349 return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
1350}
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...
Definition GameObject.h:417

◆ LoadFromDB()

virtual bool GameObject::LoadFromDB ( ObjectGuid::LowType  guid,
Map map 
)
inlinevirtual

Reimplemented in StaticTransport.

159{ return LoadGameObjectFromDB(guid, map, false); }
virtual bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true)
Definition GameObject.cpp:1088

References LoadGameObjectFromDB().

Referenced by GridObjectLoader::LoadGameObjects().

◆ LoadGameObjectFromDB()

bool GameObject::LoadGameObjectFromDB ( ObjectGuid::LowType  guid,
Map map,
bool  addToMap = true 
)
virtual

Reimplemented in StaticTransport.

1089{
1090 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
1091
1092 if (!data)
1093 {
1094 LOG_ERROR("sql.sql", "Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
1095 return false;
1096 }
1097
1098 uint32 entry = data->id;
1099 //uint32 map_id = data->mapid; // already used before call
1100 uint32 phaseMask = data->phaseMask;
1101 float x = data->posX;
1102 float y = data->posY;
1103 float z = data->posZ;
1104 float ang = data->orientation;
1105
1106 uint32 animprogress = data->animprogress;
1107 GOState go_state = data->go_state;
1108 uint32 artKit = data->artKit;
1109
1110 m_goData = data;
1111 m_spawnId = spawnId;
1112
1113 if (!Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, phaseMask, x, y, z, ang, data->rotation, animprogress, go_state, artKit))
1114 return false;
1115
1116 if (data->spawntimesecs >= 0)
1117 {
1118 m_spawnedByDefault = true;
1119
1120 if (!GetGOInfo()->GetDespawnPossibility() && !GetGOInfo()->IsDespawnAtAction())
1121 {
1124 m_respawnTime = 0;
1125 }
1126 else
1127 {
1130
1131 // ready to respawn
1133 {
1134 m_respawnTime = 0;
1136 }
1137 }
1138 }
1139 else
1140 {
1141 m_spawnedByDefault = false;
1143 m_respawnTime = 0;
1144 }
1145
1146 if (addToMap && !GetMap()->AddToMap(this))
1147 return false;
1148
1149 return true;
1150}
@ GO_FLAG_NODESPAWN
Definition SharedDefines.h:1619
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:217
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:413
float orientation
Definition GameObjectData.h:720
float posZ
Definition GameObjectData.h:719
uint8 artKit
Definition GameObjectData.h:727
G3D::Quat rotation
Definition GameObjectData.h:721
uint32 animprogress
Definition GameObjectData.h:724
float posX
Definition GameObjectData.h:717
uint32 phaseMask
Definition GameObjectData.h:716
float posY
Definition GameObjectData.h:718
uint32 id
Definition GameObjectData.h:714
GOState go_state
Definition GameObjectData.h:725

References GameObjectData::animprogress, GameObjectData::artKit, Create(), GameObject, Map::GenerateLowGuid(), GameTime::GetGameTime(), GetGOInfo(), Map::GetGORespawnTime(), WorldObject::GetMap(), GO_FLAG_NODESPAWN, GameObjectData::go_state, GameObjectData::id, LOG_ERROR, m_goData, m_respawnDelayTime, m_respawnTime, m_spawnedByDefault, m_spawnId, GameObjectData::orientation, GameObjectData::phaseMask, GameObjectData::posX, GameObjectData::posY, GameObjectData::posZ, Map::RemoveGORespawnTime(), GameObjectData::rotation, SetGameObjectFlag(), sObjectMgr, and GameObjectData::spawntimesecs.

Referenced by ObjectMgr::AddGOData(), MotionTransport::CreateGOPassenger(), GameEventMgr::GameEventSpawn(), gobject_commandscript::HandleGameObjectAddCommand(), gobject_commandscript::HandleGameObjectLoadCommand(), gobject_commandscript::HandleGameObjectMoveCommand(), gobject_commandscript::HandleGameObjectTurnCommand(), and LoadFromDB().

◆ LookupFishingHoleAround()

GameObject * GameObject::LookupFishingHoleAround ( float  range)
1374{
1375 GameObject* ok = nullptr;
1376
1377 Acore::NearestGameObjectFishingHole u_check(*this, range);
1379
1380 Cell::VisitObjects(this, checker, range);
1381 return ok;
1382}
Definition GridNotifiers.h:673
Definition GridNotifiers.h:310
static void VisitObjects(WorldObject const *obj, T &visitor, float radius)
Definition CellImpl.h:165

References Cell::VisitObjects().

Referenced by Use().

◆ ModifyHealth()

void GameObject::ModifyHealth ( int32  change,
Unit attackerOrHealer = nullptr,
uint32  spellId = 0 
)
Todo:
: is there any packet for healing?
2252{
2254 return;
2255
2256 // if this building doesn't have health, return
2258 return;
2259
2260 sScriptMgr->OnGameObjectModifyHealth(this, attackerOrHealer, change, sSpellMgr->GetSpellInfo(spellId));
2261
2262 // if the health isn't being changed, return
2263 if (!change)
2264 return;
2265
2267 change = 0;
2268
2269 // prevent double destructions of the same object
2270 if (change < 0 && !m_goValue.Building.Health)
2271 return;
2272
2273 if (int32(m_goValue.Building.Health) + change <= 0)
2277 else
2278 m_goValue.Building.Health += change;
2279
2280 // Set the health bar, value = 255 * healthPct;
2282
2283 Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
2284
2285 // dealing damage, send packet
2287 if (player)
2288 {
2289 WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4);
2290 data << GetPackGUID();
2291 data << attackerOrHealer->GetPackGUID();
2292 data << player->GetPackGUID();
2293 data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event
2294 // change >= 0 triggers SPELL_BUILDING_DAMAGE event
2295 data << uint32(spellId);
2296 player->SendDirectMessage(&data);
2297 }
2298
2300
2302 newState = GO_DESTRUCTIBLE_DESTROYED;
2303 else if (m_goValue.Building.Health <= GetGOInfo()->building.damagedNumHits)
2304 newState = GO_DESTRUCTIBLE_DAMAGED;
2306 newState = GO_DESTRUCTIBLE_INTACT;
2307
2308 if (newState == GetDestructibleState())
2309 return;
2310
2311 SetDestructibleState(newState, player, false);
2312}
GameObjectDestructibleState
Definition SharedDefines.h:1637
void SetDestructibleState(GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
Definition GameObject.cpp:2314
GameObjectDestructibleState GetDestructibleState() const
Definition GameObject.h:293
PackedGuid const & GetPackGUID() const
Definition Object.h:115
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5685
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:10831
Definition WorldPacket.h:26
@ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE
Definition Opcodes.h:80

References GameObjectValue::Building, GameObjectTemplate::damagedNumHits, Unit::GetCharmerOrOwnerPlayerOrPlayerItself(), GetDestructibleState(), GetGOInfo(), Object::GetPackGUID(), GO_DESTRUCTIBLE_DAMAGED, GO_DESTRUCTIBLE_DESTROYED, GO_DESTRUCTIBLE_INTACT, GameObjectValue::Health, IsDestructibleBuilding(), m_allowModifyDestructibleBuilding, m_goValue, GameObjectValue::MaxHealth, Player::SendDirectMessage(), SetDestructibleState(), SetGoAnimProgress(), SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, sScriptMgr, and sSpellMgr.

Referenced by Spell::EffectGameObjectDamage(), Spell::EffectGameObjectRepair(), and instance_eye_of_eternity::OnGameObjectCreate().

◆ Refresh()

void GameObject::Refresh ( )
901{
902 // not refresh despawned not casted GO (despawned casted GO destroyed in all cases anyway)
904 return;
905
906 if (isSpawned())
907 GetMap()->AddToMap(this);
908}

References Map::AddToMap(), WorldObject::GetMap(), isSpawned(), m_respawnTime, and m_spawnedByDefault.

Referenced by BattlegroundSA::ResetObjs().

◆ RemoveFromOwner()

void GameObject::RemoveFromOwner ( )
private
127{
128 ObjectGuid ownerGUID = GetOwnerGUID();
129 if (!ownerGUID)
130 return;
131
132 if (Unit* owner = ObjectAccessor::GetUnit(*this, ownerGUID))
133 {
134 owner->RemoveGameObject(this, false);
136 return;
137 }
138
139 LOG_DEBUG("entities.gameobject", "Delete GameObject ({} Entry: {} SpellId {} LinkedGO {}) that lost references to owner {} GO list.",
140 GetGUID().ToString(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString());
141
143}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:170
void SetOwnerGUID(ObjectGuid owner)
Definition GameObject.h:163
static ObjectGuid const Empty
Definition ObjectGuid.h:120
std::string ToString() const
Definition ObjectGuid.cpp:47
std::string ToString() const
Definition Position.cpp:59

References ASSERT, ObjectGuid::Empty, GetGOInfo(), Object::GetGUID(), GetOwnerGUID(), ObjectAccessor::GetUnit(), LOG_DEBUG, m_spellId, SetOwnerGUID(), ObjectGuid::ToString(), and Position::ToString().

Referenced by CleanupsBeforeDelete(), Delete(), RemoveFromWorld(), and Use().

◆ RemoveFromWorld()

void GameObject::RemoveFromWorld ( )
overridevirtual
  • Remove the gameobject from the accessor

Reimplemented from Object.

174{
176 if (IsInWorld())
177 {
178 sScriptMgr->OnGameObjectRemoveWorld(this);
179
180 if (m_zoneScript)
182
184
185 if (m_model)
186 if (GetMap()->ContainsGameObjectModel(*m_model))
188
189 if (Transport* transport = GetTransport())
190 transport->RemovePassenger(this, true);
191
192 // If linked trap exists, despawn it
193 if (GameObject* linkedTrap = GetLinkedTrap())
194 {
195 linkedTrap->Delete();
196 }
197
199
200 if (m_spawnId)
201 Acore::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this);
203 }
204}
void RemoveGameObjectModel(const GameObjectModel &model)
Definition Map.h:391
bool Remove(KEY_TYPE const &handle)
Definition TypeContainer.h:183
void RemoveFromWorld() override
Definition Object.cpp:1200
virtual void OnGameObjectRemove(GameObject *)
Definition ZoneScript.h:38
void MultimapErasePair(M< K, V, Rest... > &multimap, K const &key, V const &value)
Definition Containers.h:236

References Object::GetGUID(), GetLinkedTrap(), WorldObject::GetMap(), Map::GetObjectsStore(), WorldObject::GetTransport(), Object::IsInWorld(), m_model, m_spawnId, WorldObject::m_zoneScript, Acore::Containers::MultimapErasePair(), ZoneScript::OnGameObjectRemove(), TypeUnorderedMapContainer< OBJECT_TYPES, KEY_TYPE >::Remove(), RemoveFromOwner(), WorldObject::RemoveFromWorld(), Map::RemoveGameObjectModel(), and sScriptMgr.

Referenced by CleanupsBeforeDelete(), BattlegroundIC::PostUpdateImpl(), Map::RemoveFromMap(), and go_bear_trap::go_bear_trapAI::UpdateAI().

◆ RemoveGameObjectFlag()

◆ RemoveLootMode()

void GameObject::RemoveLootMode ( uint16  lootMode)
inline
231{ m_LootMode &= ~lootMode; }

References m_LootMode.

◆ ReplaceAllDynamicFlags()

void GameObject::ReplaceAllDynamicFlags ( uint32  flag)
inlineoverridevirtual

Reimplemented from Object.

References GAMEOBJECT_DYNAMIC, and Object::SetUInt32Value().

◆ ReplaceAllGameObjectFlags()

◆ ResetDoorOrButton()

◆ ResetLootMode()

void GameObject::ResetLootMode ( )
inline

References LOOT_MODE_DEFAULT, and m_LootMode.

Referenced by GameObject().

◆ Respawn()

◆ SaveRespawnTime() [1/2]

void GameObject::SaveRespawnTime ( )
inlineoverridevirtual

Reimplemented from WorldObject.

243{ SaveRespawnTime(0); }
void SaveRespawnTime() override
Definition GameObject.h:243

References SaveRespawnTime().

Referenced by go_strange_pool::OnGossipHello(), Map::RemoveFromMap(), SaveRespawnTime(), and Update().

◆ SaveRespawnTime() [2/2]

void GameObject::SaveRespawnTime ( uint32  forceDelay)
1209{
1210 if (m_goData && m_goData->dbData && (forceDelay || m_respawnTime > GameTime::GetGameTime().count()) && m_spawnedByDefault)
1211 {
1212 time_t respawnTime = forceDelay ? GameTime::GetGameTime().count() + forceDelay : m_respawnTime;
1213 GetMap()->SaveGORespawnTime(m_spawnId, respawnTime);
1214 }
1215}
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition Map.cpp:2426
bool dbData
Definition GameObjectData.h:728

References GameObjectData::dbData, GameTime::GetGameTime(), WorldObject::GetMap(), m_goData, m_respawnTime, m_spawnedByDefault, m_spawnId, and Map::SaveGORespawnTime().

◆ SaveStateToDB()

void GameObject::SaveStateToDB ( )
2547{
2549 {
2550 if (InstanceScript* instance = GetInstanceScript())
2551 {
2552 GOState param = GetGoState();
2553 instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(&param));
2554
2556 stmt->SetData(0, GetInstanceId());
2557 stmt->SetData(1, GetSpawnId());
2558 stmt->SetData(2, GameobjectStateToInt(&param));
2559 CharacterDatabase.Execute(stmt);
2560 }
2561 }
2562}
@ CHAR_INSERT_INSTANCE_SAVED_DATA
Definition CharacterDatabase.h:527
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
uint8 GameobjectStateToInt(GOState *state) const
Definition GameObject.cpp:2521
uint32 GetInstanceId() const
Definition Object.h:509

References CHAR_INSERT_INSTANCE_SAVED_DATA, CharacterDatabase, GameobjectStateToInt(), GetGoState(), WorldObject::GetInstanceId(), WorldObject::GetInstanceScript(), GetSpawnId(), IsInstanceGameobject(), and PreparedStatementBase::SetData().

Referenced by SetGoState().

◆ SaveToDB() [1/2]

void GameObject::SaveToDB ( bool  saveAddon = false)
1008{
1009 // this should only be used when the gameobject has already been loaded
1010 // preferably after adding to map, because mapid may not be valid otherwise
1011 GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId);
1012 if (!data)
1013 {
1014 LOG_ERROR("entities.gameobject", "GameObject::SaveToDB failed, cannot get gameobject data!");
1015 return;
1016 }
1017
1018 SaveToDB(GetMapId(), data->spawnMask, data->phaseMask, saveAddon);
1019}
void SaveToDB(bool saveAddon=false)
Definition GameObject.cpp:1007
uint32 GetMapId() const
Definition Position.h:281
uint8 spawnMask
Definition GameObjectData.h:726

References WorldLocation::GetMapId(), LOG_ERROR, m_spawnId, GameObjectData::phaseMask, SaveToDB(), sObjectMgr, and GameObjectData::spawnMask.

Referenced by SaveToDB().

◆ SaveToDB() [2/2]

void GameObject::SaveToDB ( uint32  mapid,
uint8  spawnMask,
uint32  phaseMask,
bool  saveAddon = false 
)
1022{
1023 const GameObjectTemplate* goI = GetGOInfo();
1024
1025 if (!goI)
1026 return;
1027
1028 if (!m_spawnId)
1029 m_spawnId = sObjectMgr->GenerateGameObjectSpawnId();
1030
1031 // update in loaded data (changing data only in this place)
1032 GameObjectData& data = sObjectMgr->NewGOData(m_spawnId);
1033
1034 data.id = GetEntry();
1035 data.mapid = mapid;
1036 data.phaseMask = phaseMask;
1037 data.posX = GetPositionX();
1038 data.posY = GetPositionY();
1039 data.posZ = GetPositionZ();
1040 data.orientation = GetOrientation();
1041 data.rotation = WorldRotation;
1044 data.go_state = GetGoState();
1045 data.spawnMask = spawnMask;
1046 data.artKit = GetGoArtKit();
1047
1048 // Update in DB
1049 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1050
1051 uint8 index = 0;
1052
1054 stmt->SetData(0, m_spawnId);
1055 trans->Append(stmt);
1056
1057 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT);
1058 stmt->SetData(index++, m_spawnId);
1059 stmt->SetData(index++, GetEntry());
1060 stmt->SetData(index++, uint16(mapid));
1061 stmt->SetData(index++, spawnMask);
1062 stmt->SetData(index++, GetPhaseMask());
1063 stmt->SetData(index++, GetPositionX());
1064 stmt->SetData(index++, GetPositionY());
1065 stmt->SetData(index++, GetPositionZ());
1066 stmt->SetData(index++, GetOrientation());
1067 stmt->SetData(index++, WorldRotation.x);
1068 stmt->SetData(index++, WorldRotation.y);
1069 stmt->SetData(index++, WorldRotation.z);
1070 stmt->SetData(index++, WorldRotation.w);
1071 stmt->SetData(index++, int32(m_respawnDelayTime));
1072 stmt->SetData(index++, GetGoAnimProgress());
1073 stmt->SetData(index++, uint8(GetGoState()));
1074 trans->Append(stmt);
1075
1076 if (saveAddon && !sObjectMgr->GetGameObjectAddon(m_spawnId))
1077 {
1078 index = 0;
1079 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT_ADDON);
1080 stmt->SetData(index++, m_spawnId);
1081 trans->Append(stmt);
1082 }
1083
1084 WorldDatabase.CommitTransaction(trans);
1085 sScriptMgr->OnGameObjectSaveToDB(this);
1086}
SQLTransaction< WorldDatabaseConnection > WorldDatabaseTransaction
Definition DatabaseEnvFwd.h:71
@ WORLD_INS_GAMEOBJECT
Definition WorldDatabase.h:110
@ WORLD_INS_GAMEOBJECT_ADDON
Definition WorldDatabase.h:117
uint8 GetGoAnimProgress() const
Definition GameObject.h:208
uint8 GetGoArtKit() const
Definition GameObject.h:206
uint16 mapid
Definition GameObjectData.h:715

References GameObjectData::animprogress, GameObjectData::artKit, Object::GetEntry(), GetGoAnimProgress(), GetGoArtKit(), GetGOInfo(), GetGoState(), Position::GetOrientation(), WorldObject::GetPhaseMask(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), GameObjectData::go_state, GameObjectData::id, m_respawnDelayTime, m_spawnedByDefault, m_spawnId, GameObjectData::mapid, GameObjectData::orientation, GameObjectData::phaseMask, GameObjectData::posX, GameObjectData::posY, GameObjectData::posZ, GameObjectData::rotation, PreparedStatementBase::SetData(), sObjectMgr, GameObjectData::spawnMask, GameObjectData::spawntimesecs, sScriptMgr, WORLD_DEL_GAMEOBJECT, WORLD_INS_GAMEOBJECT, WORLD_INS_GAMEOBJECT_ADDON, WorldDatabase, and WorldRotation.

◆ SendCustomAnim()

void GameObject::SendCustomAnim ( uint32  anim)
2127{
2129 data << GetGUID();
2130 data << uint32(anim);
2131 SendMessageToSet(&data, true);
2132}
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition Object.cpp:2083
@ SMSG_GAMEOBJECT_CUSTOM_ANIM
Definition Opcodes.h:209

References Object::GetGUID(), WorldObject::SendMessageToSet(), and SMSG_GAMEOBJECT_CUSTOM_ANIM.

Referenced by Spell::EffectActivateObject(), Spell::EffectDummy(), go_gong_of_bethekk::OnGossipHello(), brann_bronzebeard::brann_bronzebeardAI::SwitchHeadVisaul(), Update(), go_suppression_device::go_suppression_deviceAI::UpdateAI(), and Use().

◆ SetDestructibleBuildingModifyState()

void GameObject::SetDestructibleBuildingModifyState ( bool  allow)
inline

◆ SetDestructibleState()

void GameObject::SetDestructibleState ( GameObjectDestructibleState  state,
Player eventInvoker = nullptr,
bool  setHealth = false 
)
2315{
2316 // the user calling this must know he is already operating on destructible gameobject
2318
2319 switch (state)
2320 {
2324 if (setHealth)
2325 {
2327 SetGoAnimProgress(255);
2328 }
2329 EnableCollision(true);
2330 break;
2332 {
2334
2335 sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
2336
2337 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2338 if (Battleground* bg = bgMap->GetBG())
2339 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent);
2340
2343
2346 if (modelData->DamagedDisplayId)
2347 modelId = modelData->DamagedDisplayId;
2348 SetDisplayId(modelId);
2349
2350 if (setHealth)
2351 {
2353 uint32 maxHealth = m_goValue.Building.MaxHealth;
2354 // in this case current health is 0 anyway so just prevent crashing here
2355 if (!maxHealth)
2356 maxHealth = 1;
2357 SetGoAnimProgress(m_goValue.Building.Health * 255 / maxHealth);
2358 }
2359 break;
2360 }
2362 {
2363 sScriptMgr->OnGameObjectDestroyed(this, eventInvoker);
2364
2366
2367 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2368 {
2369 if (Battleground* bg = bgMap->GetBG())
2370 {
2371 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent);
2372 bg->DestroyGate(eventInvoker, this);
2373 }
2374 }
2375
2378
2381 if (modelData->DestroyedDisplayId)
2382 modelId = modelData->DestroyedDisplayId;
2383 SetDisplayId(modelId);
2384
2385 if (setHealth)
2386 {
2389 }
2390 EnableCollision(false);
2391 break;
2392 }
2394 {
2397
2398 uint32 modelId = m_goInfo->displayId;
2400 if (modelData->RebuildingDisplayId)
2401 modelId = modelData->RebuildingDisplayId;
2402 SetDisplayId(modelId);
2403
2404 // restores to full health
2405 if (setHealth)
2406 {
2408 SetGoAnimProgress(255);
2409 }
2410 EnableCollision(true);
2411 break;
2412 }
2413 }
2414}
DBCStorage< DestructibleModelDataEntry > sDestructibleModelDataStore(DestructibleModelDatafmt)
@ GO_DESTRUCTIBLE_REBUILDING
Definition SharedDefines.h:1641
Definition Map.h:680
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:218
void EventInform(uint32 eventId)
Definition GameObject.cpp:2161
Definition DBCStructure.h:843
uint32 destructibleData
Definition GameObjectData.h:369
uint32 rebuildingEvent
Definition GameObjectData.h:370
uint32 destroyedEvent
Definition GameObjectData.h:365
uint32 damagedDisplayId
Definition GameObjectData.h:355
uint32 destroyedDisplayId
Definition GameObjectData.h:361
uint32 damagedEvent
Definition GameObjectData.h:360

References ASSERT, GameObjectValue::Building, GameObjectTemplate::building, GameObjectTemplate::damagedDisplayId, GameObjectTemplate::damagedEvent, GameObjectTemplate::damagedNumHits, GameObjectTemplate::destroyedDisplayId, GameObjectTemplate::destroyedEvent, GameObjectTemplate::destructibleData, GameObjectTemplate::displayId, EnableCollision(), EventInform(), GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GetGoType(), WorldObject::GetMap(), GO_DESTRUCTIBLE_DAMAGED, GO_DESTRUCTIBLE_DESTROYED, GO_DESTRUCTIBLE_INTACT, GO_DESTRUCTIBLE_REBUILDING, GO_FLAG_DAMAGED, GO_FLAG_DESTROYED, GameObjectValue::Health, m_goInfo, m_goValue, GameObjectValue::MaxHealth, GameObjectTemplate::rebuildingEvent, RemoveGameObjectFlag(), sDestructibleModelDataStore, SetDisplayId(), SetGameObjectFlag(), SetGoAnimProgress(), and sScriptMgr.

Referenced by Spell::EffectGameObjectSetDestructionState(), BfWGGameObjectBuilding::Init(), ModifyHealth(), instance_trial_of_the_crusader::instance_trial_of_the_crusader_InstanceMapScript::OnGameObjectCreate(), FrozenThroneResetWorker::operator()(), BattlegroundIC::PostUpdateImpl(), and BfWGGameObjectBuilding::Rebuild().

◆ SetDisplayId()

void GameObject::SetDisplayId ( uint32  displayid)

◆ SetGameObjectFlag()

void GameObject::SetGameObjectFlag ( GameObjectFlags  flags)
inline
217{ SetFlag(GAMEOBJECT_FLAGS, flags); }
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:827

References GAMEOBJECT_FLAGS, and Object::SetFlag().

Referenced by go_suppression_device::go_suppression_deviceAI::Deactivate(), go_chromaggus_lever::go_chromaggus_leverAI::GossipHello(), go_gilded_brazier::go_gilded_brazierAI::GossipHello(), go_blood_drenched_door::go_blood_drenched_doorAI::GossipHello(), go_celestial_planetarium_access::go_celestial_planetarium_accessAI::GossipHello(), go_magtheridons_head::InitializeAI(), LoadGameObjectFromDB(), BattlefieldWG::OnBattleStart(), instance_uldaman::instance_uldaman_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_razorfen_downs::instance_razorfen_downs_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_zulgurub::instance_zulgurub_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_violet_hold::instance_violet_hold_InstanceMapScript::OnGameObjectCreate(), go_gong_of_bethekk::OnGossipHello(), go_elune_fire::OnGossipHello(), go_palehoof_sphere::OnGossipHello(), go_vh_activation_crystal::OnGossipHello(), go_main_chambers_access_panel::OnGossipHello(), SetDestructibleState(), SwitchDoorOrButton(), and Use().

◆ SetGoAnimProgress()

void GameObject::SetGoAnimProgress ( uint8  animprogress)
inline
209{ SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
void SetByteValue(uint16 index, uint8 offset, uint8 value)
Definition Object.cpp:739

References GAMEOBJECT_BYTES_1, and Object::SetByteValue().

Referenced by Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), ModifyHealth(), and SetDestructibleState().

◆ SetGoArtKit() [1/2]

void GameObject::SetGoArtKit ( uint8  artkit)
1409{
1411 GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGameObjectData(m_spawnId));
1412 if (data)
1413 data->artKit = kit;
1414}

References GameObjectData::artKit, GAMEOBJECT_BYTES_1, m_spawnId, Object::SetByteValue(), and sObjectMgr.

Referenced by Create(), StaticTransport::Create(), Spell::EffectActivateObject(), and SetGoArtKit().

◆ SetGoArtKit() [2/2]

void GameObject::SetGoArtKit ( uint8  artkit,
GameObject go,
ObjectGuid::LowType  lowguid = 0 
)
static
1417{
1418 const GameObjectData* data = nullptr;
1419 if (go)
1420 {
1421 go->SetGoArtKit(artkit);
1422 data = go->GetGameObjectData();
1423 }
1424 else if (lowguid)
1425 data = sObjectMgr->GetGameObjectData(lowguid);
1426
1427 if (data)
1428 const_cast<GameObjectData*>(data)->artKit = artkit;
1429}

References GetGameObjectData(), SetGoArtKit(), and sObjectMgr.

◆ SetGoState()

void GameObject::SetGoState ( GOState  state)
2452{
2454
2455 sScriptMgr->OnGameObjectStateChanged(this, state);
2456
2457 if (m_model)
2458 {
2459 if (!IsInWorld())
2460 return;
2461
2462 // pussywizard: this startOpen is unneeded here, collision depends entirely on current GOState
2464 // pussywizard: commented out everything below
2465
2466 // startOpen determines whether we are going to add or remove the LoS on activation
2467 /*bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2468
2469 if (GetGameObjectData() && GetGameObjectData()->go_state == GO_STATE_READY)
2470 startOpen = !startOpen;
2471
2472 if (state == GO_STATE_ACTIVE || state == GO_STATE_ACTIVE_ALTERNATIVE)
2473 EnableCollision(startOpen);
2474 else if (state == GO_STATE_READY)
2475 EnableCollision(!startOpen);*/
2476 }
2477 /* Whenever a gameobject inside an instance changes
2478 * save it's state on the database to be loaded properly
2479 * on server restart or crash.
2480 */
2482 {
2483 SaveStateToDB();
2484 }
2485}
bool IsAllowedToSaveToDB() const
Definition GameObject.h:355
void SaveStateToDB()
Definition GameObject.cpp:2546

References EnableCollision(), GAMEOBJECT_BYTES_1, GO_STATE_READY, IsAllowedToSaveToDB(), IsInstanceGameobject(), Object::IsInWorld(), IsTransport(), m_model, SaveStateToDB(), Object::SetByteValue(), and sScriptMgr.

Referenced by go_suppression_device::go_suppression_deviceAI::Activate(), instance_naxxramas::ActivateWingPortal(), boss_thorim::boss_thorimAI::CloseDoors(), Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), boss_thorim::boss_thorimAI::DamageTaken(), go_suppression_device::go_suppression_deviceAI::Deactivate(), Delete(), DespawnOrUnsummon(), go_chromaggus_lever::go_chromaggus_leverAI::GossipHello(), InstanceScript::HandleGameObject(), npc_midsummer_bonfire::Ignite(), go_magtheridons_head::InitializeAI(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnGameObjectCreate(), instance_gundrak::instance_gundrak_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_stratholme::instance_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_naxxramas::OnGameObjectCreate(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::OnGameObjectCreate(), go_palehoof_sphere::OnGossipHello(), go_bristlelimb_cage::OnGossipHello(), instance_ulduar::instance_ulduar_InstanceMapScript::OpenIfDone(), FrozenThroneResetWorker::operator()(), npc_wounded_blood_elf::npc_wounded_blood_elfAI::Reset(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::SetData(), BattlegroundIC::StartingEventOpenDoors(), SwitchDoorOrButton(), brann_bronzebeard::brann_bronzebeardAI::SwitchHeadVisaul(), boss_flame_leviathan::boss_flame_leviathanAI::TurnGates(), MotionTransport::Update(), Update(), InstanceScript::UpdateDoorState(), BattlegroundRV::UpdatePillars(), Use(), and npc_wounded_blood_elf::npc_wounded_blood_elfAI::WaypointReached().

◆ SetGoType()

void GameObject::SetGoType ( GameobjectTypes  type)
inline

◆ SetLinkedTrap()

void GameObject::SetLinkedTrap ( GameObject linkedTrap)
inline
260{ m_linkedTrap = linkedTrap->GetGUID(); }

References Object::GetGUID(), and m_linkedTrap.

Referenced by Create().

◆ SetLootGenerationTime()

void GameObject::SetLootGenerationTime ( )
2907{
2909}

References GameTime::GetGameTime(), and m_lootGenerationTime.

Referenced by Player::SendLoot().

◆ SetLootMode()

void GameObject::SetLootMode ( uint16  lootMode)
inline

◆ SetLootRecipient() [1/2]

void GameObject::SetLootRecipient ( Creature creature)
2621{
2622 // set the player whose group should receive the right
2623 // to loot the creature after it dies
2624 // should be set to nullptr after the loot disappears
2625 if (!creature)
2626 {
2630 return;
2631 }
2632
2636}
ObjectGuid GetLootRecipientGUID() const
Definition Creature.h:229
ObjectGuid::LowType GetLootRecipientGroupGUID() const
Definition Creature.h:231
void Clear()
Definition ObjectGuid.h:138
void ResetAllowedLooters()
Definition Object.cpp:3107
void SetAllowedLooters(GuidUnorderedSet const looters)
Definition Object.cpp:3102
GuidUnorderedSet const & GetAllowedLooters() const
Definition Object.cpp:3122

References ObjectGuid::Clear(), WorldObject::GetAllowedLooters(), Creature::GetLootRecipientGroupGUID(), Creature::GetLootRecipientGUID(), m_lootRecipient, m_lootRecipientGroup, WorldObject::ResetAllowedLooters(), and WorldObject::SetAllowedLooters().

Referenced by boss_thorim::boss_thorimAI::DamageTaken(), and instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate().

◆ SetLootRecipient() [2/2]

void GameObject::SetLootRecipient ( Map map)
2639{
2640 Group* group = nullptr;
2641 Map::PlayerList const& PlayerList = map->GetPlayers();
2642 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
2643 {
2644 if (Player* groupMember = i->GetSource())
2645 {
2646 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
2647 {
2648 continue;
2649 }
2650
2651 if (!m_lootRecipient)
2652 {
2653 m_lootRecipient = groupMember->GetGUID();
2654 }
2655
2656 Group* memberGroup = groupMember->GetGroup();
2657 if (memberGroup && !group)
2658 {
2659 group = memberGroup;
2661 }
2662
2663 if (memberGroup == group)
2664 {
2665 AddAllowedLooter(groupMember->GetGUID());
2666 }
2667 }
2668 }
2669
2670 if (!group)
2671 {
2673 }
2674}
ObjectGuid GetGUID() const
Definition Group.cpp:2316
Definition LinkedList.h:139
Definition MapRefMgr.h:26
iterator begin()
Definition MapRefMgr.h:36
iterator end()
Definition MapRefMgr.h:37
PlayerList const & GetPlayers() const
Definition Map.h:326
LowType GetCounter() const
Definition ObjectGuid.h:145
void AddAllowedLooter(ObjectGuid guid)
Definition Object.cpp:3097

References WorldObject::AddAllowedLooter(), MapRefMgr::begin(), MapRefMgr::end(), ObjectGuid::GetCounter(), Group::GetGUID(), Map::GetPlayers(), m_lootRecipient, and m_lootRecipientGroup.

◆ SetLootState()

void GameObject::SetLootState ( LootState  s,
Unit unit = nullptr 
)
2417{
2418 m_lootState = state;
2419
2420 if (unit)
2421 _lootStateUnitGUID = unit->GetGUID();
2422 else
2424
2425 AI()->OnStateChanged(state, unit);
2426 sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
2427
2428 // Start restock timer if the chest is partially looted or not looted at all
2429 if (GetGoType() == GAMEOBJECT_TYPE_CHEST && state == GO_ACTIVATED && GetGOInfo()->chest.chestRestockTime > 0 && m_restockTime == 0s)
2430 {
2432 }
2433
2434 // pussywizard: lootState has nothing to do with collision, it depends entirely on GOState. Loot state is for timed close/open door and respawning, which then sets GOState
2435 /*if (m_model)
2436 {
2437 // startOpen determines whether we are going to add or remove the LoS on activation
2438 bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2439
2440 // Use the current go state
2441 if (GetGoState() == GO_STATE_ACTIVE)
2442 startOpen = !startOpen;
2443
2444 if (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED)
2445 EnableCollision(startOpen);
2446 else if (state == GO_READY)
2447 EnableCollision(!startOpen);
2448 }*/
2449}
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition Duration.h:30
@ GO_ACTIVATED
Definition GameObject.h:112
virtual void OnStateChanged(uint32, Unit *)
Definition GameObjectAI.h:64
ObjectGuid _lootStateUnitGUID
Definition GameObject.h:407
uint32 chestRestockTime
Definition GameObjectData.h:85

References _lootStateUnitGUID, AI(), GameObjectTemplate::chestRestockTime, ObjectGuid::Clear(), GAMEOBJECT_TYPE_CHEST, GameTime::GetGameTime(), GetGOInfo(), GetGoType(), Object::GetGUID(), GO_ACTIVATED, m_lootState, m_restockTime, GameObjectAI::OnStateChanged(), and sScriptMgr.

Referenced by go_suppression_device::go_suppression_deviceAI::Activate(), Delete(), DespawnOrUnsummon(), WorldSession::DoLootRelease(), Spell::EffectOpenLock(), spell_q9452_cast_net::HandleActiveObject(), spell_q10612_10613_the_fel_and_the_furious::HandleScriptEffect(), go_eredar_twins_blaze::InitializeAI(), instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_oculus::instance_oculus_InstanceMapScript::OnGameObjectCreate(), go_massive_seaforium_charge::OnGossipHello(), go_ulduar_working_harpoon::OnGossipHello(), go_suppression_device::OnLootStateChanged(), SmartScript::ProcessAction(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), ResetDoorOrButton(), Map::ScriptsProcess(), Player::SendLoot(), boss_flame_leviathan::boss_flame_leviathanAI::TurnHealStations(), Update(), Use(), and UseDoorOrButton().

◆ SetOwnerGUID()

void GameObject::SetOwnerGUID ( ObjectGuid  owner)
inline
164 {
165 // Owner already found and different than expected owner - remove object from old owner
166 if (owner && GetOwnerGUID() && GetOwnerGUID() != owner)
167 {
168 ABORT();
169 }
170 m_spawnedByDefault = false; // all object with owner is despawned after delay
172 }
#define ABORT
Definition Errors.h:76
void SetGuidValue(uint16 index, ObjectGuid value)
Definition Object.cpp:712

References ABORT, GetOwnerGUID(), m_spawnedByDefault, OBJECT_FIELD_CREATED_BY, and Object::SetGuidValue().

Referenced by Unit::AddGameObject(), Spell::EffectTransmitted(), go_eredar_twins_blaze::InitializeAI(), Unit::RemoveAllGameObjects(), RemoveFromOwner(), Unit::RemoveGameObject(), and Use().

◆ SetPhaseMask()

void GameObject::SetPhaseMask ( uint32  newPhaseMask,
bool  update 
)
overridevirtual

◆ SetPosition() [1/2]

void GameObject::SetPosition ( const Position pos)
inline
315{ SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); }
void SetPosition(float x, float y, float z, float o)
Definition GameObject.cpp:2836

References Position::GetOrientation(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), and SetPosition().

Referenced by SetPosition().

◆ SetPosition() [2/2]

void GameObject::SetPosition ( float  x,
float  y,
float  z,
float  o 
)
2837{
2838 // pussywizard: do not call for MotionTransport and other gobjects not in grid
2839
2840 if (!Acore::IsValidMapCoord(x, y, z, o))
2841 return;
2842
2843 GetMap()->GameObjectRelocation(this, x, y, z, o);
2844}
void GameObjectRelocation(GameObject *go, float x, float y, float z, float o)
Definition Map.cpp:828
bool IsValidMapCoord(float c)
Definition GridDefines.h:210

References Map::GameObjectRelocation(), WorldObject::GetMap(), and Acore::IsValidMapCoord().

Referenced by instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate().

◆ SetRespawnDelay()

void GameObject::SetRespawnDelay ( int32  respawn)
1279{
1280 m_respawnDelayTime = respawn > 0 ? respawn : 0;
1281}

References m_respawnDelayTime.

Referenced by go_strange_pool::OnGossipHello(), and SetRespawnTime().

◆ SetRespawnTime()

◆ SetSpawnedByDefault()

void GameObject::SetSpawnedByDefault ( bool  b)
inline

◆ SetSpellId()

void GameObject::SetSpellId ( uint32  id)
inline

◆ SetTransportPathRotation()

void GameObject::SetTransportPathRotation ( float  qx,
float  qy,
float  qz,
float  qw 
)
2222{
2227}
@ GAMEOBJECT_PARENTROTATION
Definition UpdateFields.h:400
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:726

References GAMEOBJECT_PARENTROTATION, and Object::SetFloatValue().

Referenced by Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), and BattlegroundSA::ResetObjs().

◆ SetWorldRotation()

void GameObject::SetWorldRotation ( G3D::Quat const &  rot)
2210{
2211 G3D::Quat rotation = rot;
2212 // If the quaternion is zero (e.g. dynamically spawned GOs with no rotation),
2213 // fall back to computing rotation from orientation to avoid NaN from unitize()
2214 if (G3D::fuzzyEq(rotation.magnitude(), 0.0f))
2215 rotation = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), GetOrientation());
2216 rotation.unitize();
2217 WorldRotation = rotation;
2219}
void UpdatePackedRotation()
Definition GameObject.cpp:2196

References Position::GetOrientation(), UpdatePackedRotation(), and WorldRotation.

Referenced by Create(), MotionTransport::CreateMoTrans(), and SetWorldRotationAngles().

◆ SetWorldRotationAngles()

void GameObject::SetWorldRotationAngles ( float  z_rot,
float  y_rot,
float  x_rot 
)
2230{
2231 SetWorldRotation(G3D::Quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot)));
2232}

References SetWorldRotation().

Referenced by StaticTransport::Create().

◆ SwitchDoorOrButton()

void GameObject::SwitchDoorOrButton ( bool  activate,
bool  alternative = false 
)
private
1432{
1433 if (activate)
1435 else
1437
1438 if (GetGoState() == GO_STATE_READY) //if closed -> open
1440 else //if open -> close
1442}
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1614

References GetGoState(), GO_FLAG_IN_USE, GO_STATE_ACTIVE, GO_STATE_ACTIVE_ALTERNATIVE, GO_STATE_READY, RemoveGameObjectFlag(), SetGameObjectFlag(), and SetGoState().

Referenced by Create(), ResetDoorOrButton(), and UseDoorOrButton().

◆ ToMotionTransport() [1/2]

◆ ToMotionTransport() [2/2]

MotionTransport const * GameObject::ToMotionTransport ( ) const
inline
327{ if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<MotionTransport const*>(this); else return nullptr; }

References GAMEOBJECT_TYPE_MO_TRANSPORT, and GetGOInfo().

◆ ToStaticTransport() [1/2]

◆ ToStaticTransport() [2/2]

StaticTransport const * GameObject::ToStaticTransport ( ) const
inline
324{ if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<StaticTransport const*>(this); else return nullptr; }

References GAMEOBJECT_TYPE_TRANSPORT, and GetGOInfo().

◆ ToTransport() [1/2]

◆ ToTransport() [2/2]

Transport const * GameObject::ToTransport ( ) const
inline
321{ if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT || GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<Transport const*>(this); else return nullptr; }

References GAMEOBJECT_TYPE_MO_TRANSPORT, GAMEOBJECT_TYPE_TRANSPORT, and GetGOInfo().

◆ TriggeringLinkedGameObject()

void GameObject::TriggeringLinkedGameObject ( uint32  trapEntry,
Unit target 
)
1351{
1352 GameObjectTemplate const* trapInfo = sObjectMgr->GetGameObjectTemplate(trapEntry);
1353 if (!trapInfo || trapInfo->type != GAMEOBJECT_TYPE_TRAP)
1354 return;
1355
1356 SpellInfo const* trapSpell = sSpellMgr->GetSpellInfo(trapInfo->trap.spellId);
1357 if (!trapSpell) // checked at load already
1358 return;
1359
1360 // xinef: many spells have range 0 but radius > 0
1361 float range = float(target->GetSpellMaxRangeForTarget(GetOwner(), trapSpell));
1362 if (range < 1.0f)
1363 range = 5.0f;
1364
1365 // found correct GO
1366 // xinef: we should use the trap (checks for despawn type)
1367 if (GameObject* trapGO = GetLinkedTrap())
1368 {
1369 trapGO->Use(target); // trapGO->CastSpell(target, trapInfo->trap.spellId);
1370 }
1371}
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition Unit.cpp:15265
uint32 spellId
Definition GameObjectData.h:118
struct GameObjectTemplate::@234::@241 trap

References GAMEOBJECT_TYPE_TRAP, GetLinkedTrap(), GetOwner(), Unit::GetSpellMaxRangeForTarget(), sObjectMgr, GameObjectTemplate::spellId, sSpellMgr, GameObjectTemplate::trap, and GameObjectTemplate::type.

Referenced by Spell::SendLoot(), and Use().

◆ Update()

void GameObject::Update ( uint32  p_time)
overridevirtual
Todo:
This is activation radius. Casting radius must be selected from spell data.
Todo:
Todo:
Move activated state code to GO_ACTIVATED, in this place just check for activation and set state.

Reimplemented from WorldObject.

Reimplemented in MotionTransport, and StaticTransport.

428{
430
431 if (AI())
432 AI()->UpdateAI(diff);
433 else if (!AIM_Initialize())
434 LOG_ERROR("entities.gameobject", "Could not initialize GameObjectAI");
435
436 if (m_despawnDelay)
437 {
438 if (m_despawnDelay > diff)
439 {
440 m_despawnDelay -= diff;
441 }
442 else
443 {
444 m_despawnDelay = 0;
446 }
447 }
448
449 for (std::unordered_map<ObjectGuid, int32>::iterator itr = m_SkillupList.begin(); itr != m_SkillupList.end();)
450 {
451 if (itr->second > 0)
452 {
453 if (itr->second > static_cast<int32>(diff))
454 {
455 itr->second -= static_cast<int32>(diff);
456 ++itr;
457 }
458 else
459 {
460 itr = m_SkillupList.erase(itr);
461 }
462 }
463 else
464 {
465 ++itr;
466 }
467 }
468
469 switch (m_lootState)
470 {
471 case GO_NOT_READY:
472 {
473 switch (GetGoType())
474 {
476 {
477 // Arming Time for GAMEOBJECT_TYPE_TRAP (6)
478 GameObjectTemplate const* goInfo = GetGOInfo();
479 // Bombs
480 if (goInfo->trap.type == 2)
481 m_cooldownTime = GameTime::GetGameTimeMS().count() + 10 * IN_MILLISECONDS; // Hardcoded tooltip value
482 else if (GetOwner())
484
486 break;
487 }
489 {
490 // fishing code (bobber ready)
492 {
493 // splash bobber (bobber ready now)
494 Unit* caster = GetOwner();
495 if (caster && caster->IsPlayer())
496 {
499
500 UpdateData udata;
501 WorldPacket packet;
502 BuildValuesUpdateBlockForPlayer(&udata, caster->ToPlayer());
503 udata.BuildPacket(packet);
504 caster->ToPlayer()->SendDirectMessage(&packet);
505
507 }
508
509 m_lootState = GO_READY; // can be successfully open with some chance
510 }
511 return;
512 }
514 {
516 return;
517 GameObjectTemplate const* info = GetGOInfo();
518
520
522 {
524 return;
525 }
526
527 Unit* owner = GetOwner();
528 Unit* spellCaster = owner ? owner : ObjectAccessor::GetPlayer(*this, m_ritualOwnerGUID);
529 if (!spellCaster)
530 {
532 return;
533 }
534
535 uint32 spellId = info->summoningRitual.spellId;
536
537 if (spellId == 62330) // GO store nonexistent spell, replace by expected
538 {
539 // spell have reagent and mana cost but it not expected use its
540 // it triggered spell in fact casted at currently channeled GO
541 spellId = 61993;
542 }
543
544 // Cast casterTargetSpell at a random GO user
545 // on the current DB there is only one gameobject that uses this (Ritual of Doom)
546 // and its required target number is 1 (outter for loop will run once)
547 if (info->summoningRitual.casterTargetSpell && info->summoningRitual.casterTargetSpell != 1) // No idea why this field is a bool in some cases
548 for (uint32 i = 0; i < info->summoningRitual.casterTargetSpellTargets; i++)
549 // m_unique_users can contain only player GUIDs
551 spellCaster->CastSpell(target, info->summoningRitual.casterTargetSpell, true);
552
553 // finish owners spell
554 // xinef: properly process event cooldowns
555 if (owner)
556 {
557 if (Spell* spell = owner->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
558 {
559 spell->SendChannelUpdate(0);
560 spell->finish(false);
561 }
562 }
563
564 // can be deleted now
567 else
569
571 spellCaster->CastSpell(spellCaster, spellId, true);
572 return;
573 }
576 {
577 return;
578 }
579 // If there is no restock timer, or if the restock timer passed, the chest becomes ready to loot
580 m_restockTime = 0s;
583 break;
584 default:
585 m_lootState = GO_READY; // for other GOis same switched without delay to GO_READY
586 break;
587 }
588 [[fallthrough]];
589 }
590 case GO_READY:
591 {
592 if (m_respawnTime > 0) // timer on
593 {
594 time_t now = GameTime::GetGameTime().count();
595 if (m_respawnTime <= now) // timer expired
596 {
597 ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::GameObject>(GetEntry(), m_spawnId);
598 time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
599 if (linkedRespawntime) // Can't respawn, the master is dead
600 {
601 ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
602 if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
604 else
605 m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
606 SaveRespawnTime(); // also save to DB immediately
607 return;
608 }
609
610 m_respawnTime = 0;
611 m_SkillupList.clear();
612 m_usetimes = 0;
613
614 switch (GetGoType())
615 {
616 case GAMEOBJECT_TYPE_FISHINGNODE: // can't fish now
617 {
618 Unit* caster = GetOwner();
619 if (caster && caster->IsPlayer())
620 {
621 caster->ToPlayer()->RemoveGameObject(this, false);
622
624 caster->ToPlayer()->SendDirectMessage(&data);
625 }
626 // can be delete
628 return;
629 }
632 //we need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds)
633 if (GetGoState() != GO_STATE_READY)
635 break;
637 // Initialize a new max fish count on respawn
639 break;
640 default:
641 break;
642 }
643
644 if (!m_spawnedByDefault) // despawn timer
645 {
646 // can be despawned or destroyed
648 return;
649 }
650
651 // Xinef: Call AI Reset (required for example in SmartAI to clear one time events)
652 if (AI())
653 AI()->Reset();
654
655 // respawn timer
656 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
657 if (poolid)
658 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
659 else
660 GetMap()->AddToMap(this);
661 }
662 }
663
664 if (isSpawned())
665 {
666 // traps can have time and can not have
667 GameObjectTemplate const* goInfo = GetGOInfo();
668 if (goInfo->type == GAMEOBJECT_TYPE_TRAP)
669 {
671 break;
672
673 // Type 2 - Bomb (will go away after casting it's spell)
674 if (goInfo->trap.type == 2)
675 {
677 break;
678 }
679
682 float radius = float(goInfo->trap.diameter) * 0.5f;
683 if (!goInfo->trap.diameter)
684 {
685 // Cast in other case (at some triggering/linked go/etc explicit call)
686 if (goInfo->trap.cooldown != 3 || m_respawnTime > 0)
687 {
688 break;
689 }
690
691 radius = 3.f;
692 }
693
694 // Type 0 and 1 - trap (type 0 will not get removed after casting a spell)
695 Unit* owner = GetOwner();
696 Unit* target = nullptr; // pointer to appropriate target if found any
697
698 // Note: this hack with search required until GO casting not implemented
699 // search unfriendly creature
700 if (owner && goInfo->trap.autoCloseTime != -1) // hunter trap
701 {
704 Cell::VisitObjects(this, searcher, radius);
705 }
706 else // environmental trap
707 {
708 // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support
709 // affect only players
710 Player* player = nullptr;
711 Acore::AnyPlayerInObjectRangeCheck checker(this, radius, true, true);
712 Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
713 Cell::VisitObjects(this, searcher, radius);
714 target = player;
715 }
716
717 if (target)
718 {
719 SetLootState(GO_ACTIVATED, target);
720 }
721 }
722 else if (uint32 max_charges = goInfo->GetCharges())
723 {
724 if (m_usetimes >= max_charges)
725 {
726 m_usetimes = 0;
727 SetLootState(GO_JUST_DEACTIVATED); // can be despawned or destroyed
728 }
729 }
730 }
731
732 break;
733 }
734 case GO_ACTIVATED:
735 {
736 switch (GetGoType())
737 {
740 if (GetGOInfo()->GetAutoCloseTime() && GameTime::GetGameTimeMS().count() >= m_cooldownTime)
742 break;
745 {
747
749 }
750 break;
753 {
754 if (m_groupLootTimer <= diff)
755 {
756 Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
757 if (group)
758 group->EndRoll(&loot, GetMap());
761 }
762 else
763 {
764 m_groupLootTimer -= diff;
765 }
766 }
767
768 // Non-consumable chest was partially looted and restock time passed, restock all loot now
770 {
771 m_restockTime = 0s;
774 }
775 break;
777 {
778 GameObjectTemplate const* goInfo = GetGOInfo();
779 if (goInfo->trap.type == 2)
780 {
781 if (goInfo->trap.spellId)
782 CastSpell(nullptr, goInfo->trap.spellId); // FIXME: null target won't work for target type 1
784 }
785 else if (Unit* target = ObjectAccessor::GetUnit(*this, _lootStateUnitGUID))
786 {
787 if (goInfo->trap.spellId)
788 CastSpell(target, goInfo->trap.spellId);
789
790 m_cooldownTime = GameTime::GetGameTimeMS().count() + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)) * IN_MILLISECONDS; // template or 4 seconds
791
792 if (goInfo->trap.type == 1)
794 else if (!goInfo->trap.type)
796
797 // Battleground gameobjects have data2 == 0 && data5 == 3
798 if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3)
799 if (Player* player = target->ToPlayer())
800 if (Battleground* bg = player->GetBattleground())
801 bg->HandleTriggerBuff(this);
802 }
803 break;
804 }
805 default:
806 break;
807 }
808 break;
809 }
811 {
812 // If nearby linked trap exists, despawn it
813 if (GameObject* linkedTrap = GetLinkedTrap())
814 {
815 linkedTrap->DespawnOrUnsummon();
816 }
817
818 //if Gameobject should cast spell, then this, but some GOs (type = 10) should be destroyed
820 {
822
823 //any return here in case battleground traps
824 // Xinef: Do not return here for summoned gos that should be deleted few lines below
825 // Xinef: Battleground objects are treated as spawned by default
826 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
827 if ((addon->flags & GO_FLAG_NODESPAWN) && isSpawnedByDefault())
828 return;
829 }
830
831 loot.clear();
832
833 // Do not delete chests or goobers that are not consumed on loot, while still allowing them to despawn when they expire if summoned
834 bool isSummonedAndExpired = (GetOwner() || GetSpellId()) && m_respawnTime == 0;
835 if ((GetGoType() == GAMEOBJECT_TYPE_CHEST || GetGoType() == GAMEOBJECT_TYPE_GOOBER) && !GetGOInfo()->IsDespawnAtAction() && !isSummonedAndExpired)
836 {
838 {
839 // Start restock timer when the chest is fully looted
843 }
844 else
845 {
847 }
848
850 return;
851 }
852 else if (GetOwnerGUID() || GetSpellId())
853 {
855 Delete();
856 return;
857 }
858
860
861 //burning flags in some battlegrounds, if you find better condition, just add it
862 if (GetGOInfo()->IsDespawnAtAction() || GetGoAnimProgress() > 0)
863 {
865 //reset flags
866 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
868 }
869
871 return;
872
874 {
875 m_respawnTime = 0;
876 DestroyForVisiblePlayers(); // xinef: old UpdateObjectVisibility();
877 return;
878 }
879
880 uint32 dynamicRespawnDelay = GetMap()->ApplyDynamicModeRespawnScaling(this, m_respawnDelayTime);
881 m_respawnTime = GameTime::GetGameTime().count() + dynamicRespawnDelay;
882
883 // if option not set then object will be saved at grid unload
884 if (GetMap()->IsDungeon())
886
887 DestroyForVisiblePlayers(); // xinef: old UpdateObjectVisibility();
888 break;
889 }
890 }
891
892 sScriptMgr->OnGameObjectUpdate(this, diff);
893}
constexpr auto DAY
Definition Common.h:49
#define FISHING_BOBBER_READY_TIME
Definition GameObject.h:117
@ GAMEOBJECT_TYPE_BUTTON
Definition SharedDefines.h:1572
Definition GridNotifiers.h:1348
virtual void UpdateAI(uint32)
Definition GameObjectAI.h:41
virtual void Reset()
Definition GameObjectAI.h:45
void CheckRitualList()
Definition GameObject.cpp:206
void Delete()
Definition GameObject.cpp:962
uint32 GetUniqueUseCount() const
Definition GameObject.h:241
bool isSpawnedByDefault() const
Definition GameObject.h:195
void SendCustomAnim(uint32 anim)
Definition GameObject.cpp:2126
void ResetDoorOrButton()
Definition GameObject.cpp:1384
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition GameObject.cpp:916
void CastSpell(Unit *target, uint32 spell)
Definition GameObject.cpp:2061
ObjectGuid m_ritualOwnerGUID
Definition GameObject.h:383
void EndRoll(Loot *loot, Map *allowedMap)
Definition Group.cpp:1411
time_t GetLinkedRespawnTime(ObjectGuid guid) const
Definition Map.cpp:2624
uint32 ApplyDynamicModeRespawnScaling(WorldObject const *obj, uint32 respawnDelay) const
Definition Map.cpp:1731
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:246
bool IsPlayer() const
Definition Object.h:200
Player * ToPlayer()
Definition Object.h:201
void AddToObjectUpdateIfNeeded()
Definition Object.cpp:513
void RemoveGameObject(GameObject *gameObj, bool del)
Definition Unit.cpp:6435
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition Unit.h:1561
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48
void DestroyForVisiblePlayers()
Definition Object.cpp:2940
virtual void Update(uint32 diff)
Definition Object.cpp:1044
@ SMSG_FISH_ESCAPED
Definition Opcodes.h:487
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition Containers.h:133
Milliseconds GetGameTimeMS()
Definition GameTime.cpp:43
Definition GridNotifiers.h:501
Definition GridNotifiers.h:380
uint32 startDelay
Definition GameObjectData.h:122
uint32 casterTargetSpell
Definition GameObjectData.h:235
bool IsDespawnAtAction() const
Definition GameObjectData.h:397
uint32 GetCharges() const
Definition GameObjectData.h:479
uint32 reqParticipants
Definition GameObjectData.h:231
uint32 consumable
Definition GameObjectData.h:86
uint32 cooldown
Definition GameObjectData.h:120
uint32 ritualPersistent
Definition GameObjectData.h:234
uint32 autoCloseTime
Definition GameObjectData.h:47
uint32 casterTargetSpellTargets
Definition GameObjectData.h:236
uint32 diameter
Definition GameObjectData.h:117

References _lootStateUnitGUID, Map::AddToMap(), Object::AddToObjectUpdateIfNeeded(), AI(), AIM_Initialize(), Map::ApplyDynamicModeRespawnScaling(), GameObjectTemplate::autoCloseTime, UpdateData::BuildPacket(), Object::BuildValuesUpdateBlockForPlayer(), GameObjectTemplate::casterTargetSpell, GameObjectTemplate::casterTargetSpellTargets, Unit::CastSpell(), CastSpell(), CheckRitualList(), GameObjectTemplate::chest, GameObjectTemplate::chestRestockTime, Loot::clear(), ClearRitualList(), GameObjectTemplate::consumable, GameObjectTemplate::cooldown, CURRENT_CHANNELED_SPELL, DAY, Delete(), DespawnOrUnsummon(), WorldObject::DestroyForVisiblePlayers(), GameObjectTemplate::diameter, Group::EndRoll(), FISHING_BOBBER_READY_TIME, GameObjectValue::FishingHole, GAMEOBJECT_TYPE_BUTTON, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_FISHINGHOLE, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_SUMMONING_RITUAL, GAMEOBJECT_TYPE_TRAP, GameObjectTemplate::GetCharges(), Unit::GetCurrentSpell(), Object::GetEntry(), GameTime::GetGameTime(), GameTime::GetGameTimeMS(), GetGoAnimProgress(), GetGOInfo(), GetGoState(), GetGoType(), Object::GetGUID(), Map::GetLinkedRespawnTime(), GetLinkedTrap(), WorldObject::GetMap(), GetOwner(), GetOwnerGUID(), ObjectAccessor::GetPlayer(), GetSpellId(), GetTemplateAddon(), GetUniqueUseCount(), ObjectAccessor::GetUnit(), GO_ACTIVATED, GO_FLAG_IN_USE, GO_FLAG_NODESPAWN, GO_JUST_DEACTIVATED, GO_NOT_READY, GO_READY, GO_STATE_ACTIVE, GO_STATE_READY, IN_MILLISECONDS, GameObjectTemplate::IsDespawnAtAction(), Object::IsPlayer(), isSpawned(), isSpawnedByDefault(), LOG_ERROR, loot, lootingGroupLowGUID, m_cooldownTime, m_despawnDelay, m_despawnRespawnTime, m_goValue, m_groupLootTimer, m_lootState, m_respawnDelayTime, m_respawnTime, m_restockTime, m_ritualOwnerGUID, m_SkillupList, m_spawnedByDefault, m_spawnId, m_unique_users, m_usetimes, GameObjectValue::MaxOpens, GameObjectTemplate::maxSuccessOpens, GameObjectTemplate::minSuccessOpens, MINUTE, Unit::RemoveGameObject(), RemoveGameObjectFlag(), ReplaceAllGameObjectFlags(), GameObjectTemplate::reqParticipants, GameObjectAI::Reset(), ResetDoorOrButton(), GameObjectTemplate::ritualPersistent, SaveRespawnTime(), Acore::Containers::SelectRandomContainerElement(), SendCustomAnim(), Player::SendDirectMessage(), WorldObject::SendObjectDeSpawnAnim(), SetGoState(), SetLootState(), SetRespawnTime(), sGroupMgr, SMSG_FISH_ESCAPED, sObjectMgr, GameObjectTemplate::spellId, sPoolMgr, sScriptMgr, GameObjectTemplate::startDelay, GameObjectTemplate::summoningRitual, Object::ToPlayer(), GameObjectTemplate::trap, GameObjectTemplate::type, WorldObject::Update(), GameObjectAI::UpdateAI(), WorldObject::UpdateObjectVisibility(), urand(), and Cell::VisitObjects().

Referenced by StaticTransport::Update().

◆ UpdateModel()

void GameObject::UpdateModel ( )
protected
2594{
2595 if (!IsInWorld())
2596 return;
2597 if (m_model)
2598 if (GetMap()->ContainsGameObjectModel(*m_model))
2600 delete m_model;
2601 m_model = CreateModel();
2602 if (m_model)
2604}

References CreateModel(), WorldObject::GetMap(), Map::InsertGameObjectModel(), Object::IsInWorld(), m_model, and Map::RemoveGameObjectModel().

Referenced by SetDisplayId().

◆ UpdateModelPosition()

void GameObject::UpdateModelPosition ( )

◆ UpdatePackedRotation()

void GameObject::UpdatePackedRotation ( )
private
2197{
2198 static const int32 PACK_YZ = 1 << 20;
2199 static const int32 PACK_X = PACK_YZ << 1;
2200 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
2201 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
2202 int8 w_sign = (WorldRotation.w >= 0.f ? 1 : -1);
2203 int64 x = int32(WorldRotation.x * PACK_X) * w_sign & PACK_X_MASK;
2204 int64 y = int32(WorldRotation.y * PACK_YZ) * w_sign & PACK_YZ_MASK;
2205 int64 z = int32(WorldRotation.z * PACK_YZ) * w_sign & PACK_YZ_MASK;
2206 m_packedRotation = z | (y << 21) | (x << 42);
2207}
std::int8_t int8
Definition Define.h:105
std::int64_t int64
Definition Define.h:102

References m_packedRotation, and WorldRotation.

Referenced by SetWorldRotation().

◆ Use()

void GameObject::Use ( Unit user)
1445{
1446 // Xinef: we cannot use go with not selectable flags
1448 return;
1449
1450 // by default spell caster is user
1451 Unit* spellCaster = user;
1452 uint32 spellId = 0;
1453 uint32 triggeredFlags = TRIGGERED_NONE;
1454
1455 if (Player* playerUser = user->ToPlayer())
1456 {
1457 if (sScriptMgr->OnGossipHello(playerUser, this))
1458 return;
1459
1460 if (AI()->GossipHello(playerUser, false))
1461 return;
1462 }
1463
1464 // If cooldown data present in template
1465 if (uint32 cooldown = GetGOInfo()->GetCooldown())
1466 {
1468 return;
1469
1471 }
1472
1473 if (user->IsPlayer() && GetGoType() != GAMEOBJECT_TYPE_TRAP) // workaround for GO casting
1474 if (!m_goInfo->IsUsableMounted())
1476
1477 switch (GetGoType())
1478 {
1479 case GAMEOBJECT_TYPE_DOOR: //0
1480 //doors/buttons never really despawn, only reset to default state/flags
1481 UseDoorOrButton(0, false, user);
1482 return;
1483 case GAMEOBJECT_TYPE_BUTTON: //1
1484 //doors/buttons never really despawn, only reset to default state/flags
1485 UseDoorOrButton(0, false, user);
1486
1487 // Xinef: properly link possible traps
1488 if (uint32 trapEntry = GetGOInfo()->button.linkedTrap)
1489 TriggeringLinkedGameObject(trapEntry, user);
1490 return;
1492 {
1493 if (!user->IsPlayer())
1494 return;
1495
1496 Player* player = user->ToPlayer();
1497
1498 player->PrepareGossipMenu(this, GetGOInfo()->questgiver.gossipID, true);
1499 player->SendPreparedGossip(this);
1500 return;
1501 }
1502 case GAMEOBJECT_TYPE_TRAP: //6
1503 {
1504 GameObjectTemplate const* goInfo = GetGOInfo();
1505 if (goInfo->trap.spellId)
1506 CastSpell(user, goInfo->trap.spellId);
1507
1508 m_cooldownTime = GameTime::GetGameTimeMS().count() + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)) * IN_MILLISECONDS; // template or 4 seconds
1509
1510 if (goInfo->trap.type == 1) // Deactivate after trigger
1512
1513 return;
1514 }
1515 //Sitting: Wooden bench, chairs enzz
1516 case GAMEOBJECT_TYPE_CHAIR: //7
1517 {
1518 GameObjectTemplate const* info = GetGOInfo();
1519 if (!info)
1520 return;
1521
1522 if (!user->IsPlayer())
1523 return;
1524
1525 if (ChairListSlots.empty()) // this is called once at first chair use to make list of available slots
1526 {
1527 if (info->chair.slots > 0) // sometimes chairs in DB have error in fields and we dont know number of slots
1528 for (uint32 i = 0; i < info->chair.slots; ++i)
1529 ChairListSlots[i].Clear(); // Last user of current slot set to 0 (none sit here yet)
1530 else
1531 ChairListSlots[0].Clear(); // error in DB, make one default slot
1532 }
1533
1534 Player* player = user->ToPlayer();
1535
1536 // a chair may have n slots. we have to calculate their positions and teleport the player to the nearest one
1537
1538 float lowestDist = DEFAULT_VISIBILITY_DISTANCE;
1539
1540 uint32 nearest_slot = 0;
1541 float x_lowest = GetPositionX();
1542 float y_lowest = GetPositionY();
1543
1544 // the object orientation + 1/2 pi
1545 // every slot will be on that straight line
1546 float orthogonalOrientation = GetOrientation() + M_PI * 0.5f;
1547 // find nearest slot
1548 bool found_free_slot = false;
1549 for (ChairSlotAndUser::iterator itr = ChairListSlots.begin(); itr != ChairListSlots.end(); ++itr)
1550 {
1551 // the distance between this slot and the center of the go - imagine a 1D space
1552 float relativeDistance = (info->size * itr->first) - (info->size * (info->chair.slots - 1) / 2.0f);
1553
1554 float x_i = GetPositionX() + relativeDistance * cos(orthogonalOrientation);
1555 float y_i = GetPositionY() + relativeDistance * std::sin(orthogonalOrientation);
1556
1557 if (itr->second)
1558 {
1559 if (Player* ChairUser = ObjectAccessor::GetPlayer(*this, itr->second))
1560 {
1561 if (ChairUser->IsSitState() && ChairUser->getStandState() != UNIT_STAND_STATE_SIT && ChairUser->GetExactDist2d(x_i, y_i) < 0.1f)
1562 continue; // This seat is already occupied by ChairUser. NOTE: Not sure if the ChairUser->getStandState() != UNIT_STAND_STATE_SIT check is required.
1563 else
1564 itr->second.Clear(); // This seat is unoccupied.
1565 }
1566 else
1567 itr->second.Clear(); // The seat may of had an occupant, but they're offline.
1568 }
1569
1570 found_free_slot = true;
1571
1572 // calculate the distance between the player and this slot
1573 float thisDistance = player->GetDistance2d(x_i, y_i);
1574
1575 if (thisDistance <= lowestDist)
1576 {
1577 nearest_slot = itr->first;
1578 lowestDist = thisDistance;
1579 x_lowest = x_i;
1580 y_lowest = y_i;
1581 }
1582 }
1583
1584 if (found_free_slot)
1585 {
1586 ChairSlotAndUser::iterator itr = ChairListSlots.find(nearest_slot);
1587 if (itr != ChairListSlots.end())
1588 {
1589 itr->second = player->GetGUID(); //this slot in now used by player
1592 return;
1593 }
1594 }
1595
1596 return;
1597 }
1598 //big gun, its a spell/aura
1599 case GAMEOBJECT_TYPE_GOOBER: //10
1600 {
1601 GameObjectTemplate const* info = GetGOInfo();
1602
1603 // xinef: Goober cannot be used with this flag, skip
1605 return;
1606
1607 if (user->IsPlayer())
1608 {
1609 Player* player = user->ToPlayer();
1610
1611 if (info->goober.pageId) // show page...
1612 {
1614 data << GetGUID();
1615 player->SendDirectMessage(&data);
1616 }
1617 else if (info->goober.gossipID)
1618 {
1619 player->PrepareGossipMenu(this, info->goober.gossipID);
1620 player->SendPreparedGossip(this);
1621 }
1622
1623 if (info->goober.eventId)
1624 {
1625 LOG_DEBUG("maps.script", "Goober ScriptStart id {} for GO entry {} (spawnId {}).", info->goober.eventId, GetEntry(), m_spawnId);
1626 GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this);
1627 EventInform(info->goober.eventId);
1628 }
1629
1630 // possible quest objective for active quests
1631 if (info->goober.questId && sObjectMgr->GetQuestTemplate(info->goober.questId))
1632 {
1633 //Quest require to be active for GO using
1635 break;
1636 }
1637
1638 if (Battleground* bg = player->GetBattleground())
1639 bg->EventPlayerUsedGO(player, this);
1640
1641 if (Group* group = player->GetGroup())
1642 {
1643 for (GroupReference const* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
1644 {
1645 if (Player* member = itr->GetSource())
1646 {
1647 if (member->IsAtGroupRewardDistance(this))
1648 {
1649 member->KillCreditGO(info->entry, GetGUID());
1650 }
1651 }
1652 }
1653 }
1654 else
1655 {
1656 player->KillCreditGO(info->entry, GetGUID());
1657 }
1658 }
1659
1660 if (uint32 trapEntry = info->goober.linkedTrapId)
1661 TriggeringLinkedGameObject(trapEntry, user);
1662
1663 if (info->GetAutoCloseTime())
1664 {
1667 if (!info->goober.customAnim)
1669 }
1670
1671 // this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389)
1672 if (info->goober.customAnim)
1674
1676
1677 // cast this spell later if provided
1678 spellId = info->goober.spellId;
1679 spellCaster = user;
1680
1681 break;
1682 }
1683 case GAMEOBJECT_TYPE_CAMERA: //13
1684 {
1685 GameObjectTemplate const* info = GetGOInfo();
1686 if (!info)
1687 return;
1688
1689 if (!user->IsPlayer())
1690 return;
1691
1692 Player* player = user->ToPlayer();
1693
1694 if (info->camera.cinematicId)
1695 player->SendCinematicStart(info->camera.cinematicId);
1696
1697 if (info->camera.eventID)
1698 {
1699 GetMap()->ScriptsStart(sEventScripts, info->camera.eventID, player, this);
1700 EventInform(info->camera.eventID);
1701 }
1702
1703 return;
1704 }
1705 //fishing bobber
1707 {
1708 Player* player = user->ToPlayer();
1709 if (!player)
1710 return;
1711
1712 if (player->GetGUID() != GetOwnerGUID())
1713 return;
1714
1715 switch (getLootState())
1716 {
1717 case GO_READY: // ready for loot
1718 {
1719 uint32 zone, subzone;
1720 GetZoneAndAreaId(zone, subzone);
1721
1722 int32 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(subzone);
1723 if (!zoneSkill)
1724 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(zone);
1725
1726 //provide error, no fishable zone or area should be 0
1727 if (!zoneSkill)
1728 LOG_ERROR("sql.sql", "Fishable areaId {} are not properly defined in `skill_fishing_base_level`.", subzone);
1729
1730 // no miss skill is zone skill + 95 since at least patch 2.1
1731 int32 const noMissSkill = zoneSkill + 95;
1732
1733 int32 const skill = player->GetSkillValue(SKILL_FISHING);
1734
1735 int32 chance;
1736 // fishing pool catches are 100%
1737 //TODO: find reasonable value for fishing hole search
1738 GameObject* fishingHole = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE);
1739 if (fishingHole)
1740 chance = 100;
1741 else if (skill < noMissSkill)
1742 {
1743 chance = int32(pow((double)skill / noMissSkill, 2) * 100);
1744 if (chance < 1)
1745 chance = 1;
1746 }
1747 else
1748 chance = 100;
1749
1750 int32 const roll = irand(1, 100);
1751
1752 LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} no-miss skill: {} chance {} roll: {})", skill, zoneSkill, noMissSkill, chance, roll);
1753
1754 if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zoneSkill, chance, roll))
1755 player->UpdateFishingSkill();
1756 // but you will likely cause junk in areas that require a high fishing skill (not yet implemented)
1757 if (chance >= roll)
1758 {
1759 //TODO: I do not understand this hack. Need some explanation.
1760 // prevent removing GO at spell cancel
1762 SetOwnerGUID(player->GetGUID());
1763 SetSpellId(0); // prevent removing unintended auras at Unit::RemoveGameObject
1764
1765 // fishing pool catch
1766 if (fishingHole)
1767 {
1768 fishingHole->Use(player);
1770 }
1771 else
1772 player->SendLoot(GetGUID(), LOOT_FISHING);
1773 }
1774 else // else: junk
1776 break;
1777 }
1778 case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update
1779 break;
1780 default:
1781 {
1783
1785 player->SendDirectMessage(&data);
1786 break;
1787 }
1788 }
1789 player->FinishSpell(CURRENT_CHANNELED_SPELL, true);
1790 return;
1791 }
1792
1794 {
1795 if (!user->IsPlayer())
1796 return;
1797
1798 Player* player = user->ToPlayer();
1799 Unit* owner = GetOwner();
1800 GameObjectTemplate const* info = GetGOInfo();
1801
1802 // ritual owner is set for GO's without owner (not summoned)
1803 if (!m_ritualOwnerGUID && !owner)
1804 m_ritualOwnerGUID = player->GetGUID();
1805
1806 if (owner)
1807 {
1808 if (!owner->IsPlayer())
1809 return;
1810
1811 // accept only use by player from same group as owner, excluding owner itself (unique use already added in spell effect)
1812 if (player == owner->ToPlayer() || (info->summoningRitual.castersGrouped && !player->IsInSameRaidWith(owner->ToPlayer())))
1813 return;
1814
1815 // expect owner to already be channeling, so if not...
1817 return;
1818 }
1819 else
1820 {
1821 Player* ritualOwner = ObjectAccessor::GetPlayer(*this, m_ritualOwnerGUID);
1822 if (!ritualOwner)
1823 return;
1824 if (player != ritualOwner && (info->summoningRitual.castersGrouped && !player->IsInSameRaidWith(ritualOwner)))
1825 return;
1826 }
1827
1829
1831 return;
1832
1833 if (info->summoningRitual.animSpell)
1834 player->CastSpell(player, info->summoningRitual.animSpell, true);
1835 else
1836 player->CastSpell(player, GetSpellId(),
1840
1841 AddUniqueUse(player);
1842
1843 // full amount unique participants including original summoner
1845 {
1847
1848 // channel ready, maintain this
1850 }
1851
1852 return;
1853 }
1855 {
1856 GameObjectTemplate const* info = GetGOInfo();
1857 if (!info)
1858 return;
1859
1860 if (info->spellcaster.partyOnly)
1861 {
1862 if (!user->IsPlayer())
1863 return;
1864 if (ObjectGuid ownerGuid = GetOwnerGUID())
1865 {
1866 if (user->GetGUID() != ownerGuid)
1867 {
1868 Group* group = user->ToPlayer()->GetGroup();
1869 if (!group)
1870 return;
1871 if (!group->IsMember(ownerGuid))
1872 return;
1873 }
1874 }
1875 }
1876
1877 spellId = info->spellcaster.spellId;
1878 break;
1879 }
1881 {
1882 GameObjectTemplate const* info = GetGOInfo();
1883
1884 if (!user->IsPlayer())
1885 return;
1886
1887 Player* player = user->ToPlayer();
1888
1889 Player* targetPlayer = ObjectAccessor::FindPlayer(player->GetTarget());
1890
1891 // accept only use by player from same raid as caster
1892 if (!targetPlayer || !targetPlayer->IsInSameRaidWith(player))
1893 return;
1894
1895 //required lvl checks!
1896 uint8 level = player->GetLevel();
1897 if (level < info->meetingstone.minLevel)
1898 return;
1899 level = targetPlayer->GetLevel();
1900 if (level < info->meetingstone.minLevel)
1901 return;
1902
1903 spellId = 23598; // Meeting Stone Summon
1904
1905 break;
1906 }
1907
1908 case GAMEOBJECT_TYPE_FLAGSTAND: // 24
1909 {
1910 if (!user->IsPlayer())
1911 return;
1912
1913 Player* player = user->ToPlayer();
1914
1915 if (player->CanUseBattlegroundObject(this))
1916 {
1917 // in battleground check
1918 Battleground* bg = player->GetBattleground();
1919 if (!bg)
1920 return;
1921
1922 if (player->GetVehicle())
1923 return;
1924
1927 // BG flag click
1928 // AB:
1929 // 15001
1930 // 15002
1931 // 15003
1932 // 15004
1933 // 15005
1934 bg->EventPlayerClickedOnFlag(player, this);
1935 return; //we don;t need to delete flag ... it is despawned!
1936 }
1937 break;
1938 }
1939
1940 case GAMEOBJECT_TYPE_FISHINGHOLE: // 25
1941 {
1942 if (!user->IsPlayer())
1943 return;
1944
1945 Player* player = user->ToPlayer();
1946
1947 player->SendLoot(GetGUID(), LOOT_FISHINGHOLE);
1949 return;
1950 }
1951
1952 case GAMEOBJECT_TYPE_FLAGDROP: // 26
1953 {
1954 if (!user->IsPlayer())
1955 return;
1956
1957 Player* player = user->ToPlayer();
1958
1959 if (player->CanUseBattlegroundObject(this))
1960 {
1961 // in battleground check
1962 Battleground* bg = player->GetBattleground();
1963 if (!bg)
1964 return;
1965
1966 if (player->GetVehicle())
1967 return;
1968
1971 // BG flag dropped
1972 // WS:
1973 // 179785 - Silverwing Flag
1974 // 179786 - Warsong Flag
1975 // EotS:
1976 // 184142 - Netherstorm Flag
1977 GameObjectTemplate const* info = GetGOInfo();
1978 if (info)
1979 {
1981 {
1982 GameObject::gameObjectToEventFlag[info->entry](player, this, bg);
1983 }
1984 else
1985 {
1986 switch (info->entry)
1987 {
1988 case 179785: // Silverwing Flag
1989 case 179786: // Warsong Flag
1990 if (bg->GetBgTypeID(true) == BATTLEGROUND_WS)
1991 bg->EventPlayerClickedOnFlag(player, this);
1992 break;
1993 case 184142: // Netherstorm Flag
1994 if (bg->GetBgTypeID(true) == BATTLEGROUND_EY)
1995 bg->EventPlayerClickedOnFlag(player, this);
1996 break;
1997 }
1998 }
1999 }
2000 //this cause to call return, all flags must be deleted here!!
2001 spellId = 0;
2002 Delete();
2003 }
2004 break;
2005 }
2007 {
2008 GameObjectTemplate const* info = GetGOInfo();
2009 if (!info)
2010 return;
2011
2012 if (!user->IsPlayer())
2013 return;
2014
2015 Player* player = user->ToPlayer();
2016
2017 // fallback, will always work
2019
2021 player->SendDirectMessage(&data);
2022
2024 return;
2025 }
2026 default:
2028 LOG_ERROR("entities.gameobject", "GameObject::Use(): unit ({}, name: {}) tries to use object ({}, name: {}) of unknown type ({})",
2029 user->GetGUID().ToString(), user->GetName(), GetGUID().ToString(), GetGOInfo()->name, GetGoType());
2030 break;
2031 }
2032
2033 if (!spellId)
2034 return;
2035
2036 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2037 if (!spellInfo)
2038 {
2039 if (!user->IsPlayer() || !sOutdoorPvPMgr->HandleCustomSpell(user->ToPlayer(), spellId, this))
2040 LOG_ERROR("entities.gameobject", "WORLD: unknown spell id {} at use action for gameobject (Entry: {} GoType: {})", spellId, GetEntry(), GetGoType());
2041 else
2042 LOG_DEBUG("outdoorpvp", "WORLD: {} non-dbc spell was handled by OutdoorPvP", spellId);
2043 return;
2044 }
2045
2048
2049 if (Player* player = user->ToPlayer())
2050 sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
2051
2052 if (spellCaster)
2053 {
2054 if ((spellCaster->CastSpell(user, spellInfo, TriggerCastFlags(triggeredFlags)) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER)
2055 AddUse();
2056 }
2057 else
2058 CastSpell(user, spellId);
2059}
@ ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT
Definition DBCEnums.h:183
@ LOOT_FISHING_JUNK
Definition LootMgr.h:91
@ LOOT_FISHING
Definition LootMgr.h:82
@ LOOT_FISHINGHOLE
Definition LootMgr.h:89
#define DEFAULT_VISIBILITY_DISTANCE
Definition ObjectDefines.h:39
ScriptMapMap sEventScripts
Definition ObjectMgr.cpp:60
#define sOutdoorPvPMgr
Definition OutdoorPvPMgr.h:102
@ TELE_TO_NOT_LEAVE_COMBAT
Definition Player.h:810
@ TELE_TO_NOT_UNSUMMON_PET
Definition Player.h:811
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition Player.h:809
int32 irand(int32 min, int32 max)
Definition Random.cpp:37
@ GAMEOBJECT_TYPE_MEETINGSTONE
Definition SharedDefines.h:1594
@ GAMEOBJECT_TYPE_SPELLCASTER
Definition SharedDefines.h:1593
@ BATTLEGROUND_WS
Definition SharedDefines.h:3738
@ BATTLEGROUND_EY
Definition SharedDefines.h:3743
@ SPELL_CAST_OK
Definition SharedDefines.h:1149
@ SKILL_FISHING
Definition SharedDefines.h:3197
@ SPELL_AURA_MOD_INVISIBILITY
Definition SpellAuraDefines.h:81
@ SPELL_AURA_MOUNTED
Definition SpellAuraDefines.h:141
@ SPELL_AURA_MOD_STEALTH
Definition SpellAuraDefines.h:79
TriggerCastFlags
Definition SpellDefines.h:132
@ TRIGGERED_IGNORE_POWER_AND_REAGENT_COST
Will ignore Spell and Category cooldowns.
Definition SpellDefines.h:136
@ TRIGGERED_CAST_DIRECTLY
Will ignore combo point requirement.
Definition SpellDefines.h:141
@ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE
Will ignore caster aura states including combat requirements and death state.
Definition SpellDefines.h:146
@ TRIGGERED_IGNORE_EFFECTS
Periodic aura tick wont be reset on override.
Definition SpellDefines.h:153
@ TRIGGERED_NONE
Definition SpellDefines.h:133
@ UNIT_STAND_STATE_SIT_LOW_CHAIR
Definition UnitDefines.h:36
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:33
virtual void EventPlayerClickedOnFlag(Player *, GameObject *)
Definition Battleground.h:515
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:320
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
Definition GameObject.cpp:1394
static std::unordered_map< int, goEventFlag > gameObjectToEventFlag
Definition GameObject.h:2911
LootState getLootState() const
Definition GameObject.h:223
ChairSlotAndUser ChairListSlots
Definition GameObject.h:388
void TriggeringLinkedGameObject(uint32 trapEntry, Unit *target)
Definition GameObject.cpp:1350
GameObject * LookupFishingHoleAround(float range)
Definition GameObject.cpp:1373
void Use(Unit *user)
Definition GameObject.cpp:1444
void AddUniqueUse(Player *player)
Definition GameObject.cpp:910
void SetSpellId(uint32 id)
Definition GameObject.h:176
Definition GroupReference.h:27
bool IsMember(ObjectGuid guid) const
Definition Group.cpp:2346
void ScriptsStart(std::map< uint32, std::multimap< uint32, ScriptInfo > > const &scripts, uint32 id, Object *source, Object *target)
Put scripts in the execution queue.
Definition MapScripts.cpp:31
void UpdateAchievementCriteria(AchievementCriteriaTypes type, uint32 miscValue1=0, uint32 miscValue2=0, Unit *unit=nullptr)
Definition PlayerUpdates.cpp:2169
bool IsInSameRaidWith(Player const *p) const
Definition Player.h:1876
bool UpdateFishingSkill()
Definition PlayerUpdates.cpp:892
uint16 GetSkillValue(uint32 skill) const
Definition Player.cpp:5443
bool CanUseBattlegroundObject(GameObject *gameobject) const
Definition Player.cpp:13220
void SendPreparedGossip(WorldObject *source)
Definition PlayerGossip.cpp:214
void SendLoot(ObjectGuid guid, LootType loot_type)
Definition Player.cpp:7799
Group * GetGroup()
Definition Player.h:2477
void SendCinematicStart(uint32 CinematicSequenceId) const
Definition Player.cpp:5690
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1353
void KillCreditGO(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition PlayerQuest.cpp:2088
void PrepareGossipMenu(WorldObject *source, uint32 menuId=0, bool showQuests=false)
Definition PlayerGossip.cpp:32
Vehicle * GetVehicle() const
Definition Unit.h:1905
void FinishSpell(CurrentSpellTypes spellType, bool ok=true)
Definition Unit.cpp:4138
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5240
void SetStandState(uint8 state)
Definition Unit.cpp:16971
ObjectGuid GetTarget() const
Definition Unit.h:851
uint8 GetLevel() const
Definition Unit.h:1088
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1289
@ SMSG_GAMEOBJECT_PAGETEXT
Definition Opcodes.h:509
@ SMSG_ENABLE_BARBER_SHOP
Definition Opcodes.h:1093
@ SMSG_FISH_NOT_HOOKED
Definition Opcodes.h:486
Player * FindPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:245
uint32 castersGrouped
Definition GameObjectData.h:237
struct GameObjectTemplate::@234::@248 camera
uint32 height
Definition GameObjectData.h:135
uint32 gossipID
Definition GameObjectData.h:72
uint32 GetAutoCloseTime() const
Definition GameObjectData.h:510
uint32 linkedTrap
Definition GameObjectData.h:59
uint32 slots
Definition GameObjectData.h:134
bool IsUsableMounted() const
Definition GameObjectData.h:410
struct GameObjectTemplate::@234::@252 spellcaster
uint32 partyOnly
Definition GameObjectData.h:253
struct GameObjectTemplate::@234::@242 chair
uint32 chairheight
Definition GameObjectData.h:345
uint32 eventId
Definition GameObjectData.h:89
uint32 pageId
Definition GameObjectData.h:168
uint32 eventID
Definition GameObjectData.h:209
struct GameObjectTemplate::@234::@261 barberChair
uint32 cinematicId
Definition GameObjectData.h:208
uint32 customAnim
Definition GameObjectData.h:73
uint32 linkedTrapId
Definition GameObjectData.h:90

References ACHIEVEMENT_CRITERIA_TYPE_FISH_IN_GAMEOBJECT, AddUniqueUse(), AddUse(), AI(), GameObjectTemplate::animSpell, GameObjectTemplate::barberChair, BATTLEGROUND_EY, BATTLEGROUND_WS, GameObjectTemplate::camera, Player::CanUseBattlegroundObject(), GameObjectTemplate::castersGrouped, Unit::CastSpell(), CastSpell(), GameObjectTemplate::chair, GameObjectTemplate::chairheight, ChairListSlots, CheckRitualList(), GameObjectTemplate::cinematicId, CONTACT_DISTANCE, GameObjectTemplate::cooldown, CURRENT_CHANNELED_SPELL, GameObjectTemplate::customAnim, DEFAULT_VISIBILITY_DISTANCE, Delete(), GameObjectTemplate::entry, GameObjectTemplate::eventId, GameObjectTemplate::eventID, EventInform(), Battleground::EventPlayerClickedOnFlag(), ObjectAccessor::FindPlayer(), Unit::FinishSpell(), GAMEOBJECT_TYPE_BARBER_CHAIR, GAMEOBJECT_TYPE_BUTTON, GAMEOBJECT_TYPE_CAMERA, GAMEOBJECT_TYPE_CHAIR, GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_FISHINGHOLE, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_FLAGDROP, GAMEOBJECT_TYPE_FLAGSTAND, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_MEETINGSTONE, GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_SPELLCASTER, GAMEOBJECT_TYPE_SUMMONING_RITUAL, GAMEOBJECT_TYPE_TRAP, gameObjectToEventFlag, GameObjectTemplate::GetAutoCloseTime(), Player::GetBattleground(), Battleground::GetBgTypeID(), Unit::GetCurrentSpell(), WorldObject::GetDistance2d(), Object::GetEntry(), GameTime::GetGameTimeMS(), GetGoAnimProgress(), GetGOInfo(), GetGoType(), Player::GetGroup(), Object::GetGUID(), Object::GetGUID(), Unit::GetLevel(), getLootState(), WorldObject::GetMap(), WorldLocation::GetMapId(), WorldObject::GetName(), Position::GetOrientation(), GetOwner(), GetOwnerGUID(), ObjectAccessor::GetPlayer(), Position::GetPositionX(), Position::GetPositionY(), Position::GetPositionZ(), Player::GetQuestStatus(), Player::GetSkillValue(), GetSpellId(), Unit::GetTarget(), GetUniqueUseCount(), Unit::GetVehicle(), WorldObject::GetZoneAndAreaId(), GO_ACTIVATED, GO_FLAG_IN_USE, GO_FLAG_NOT_SELECTABLE, GO_JUST_DEACTIVATED, GO_NOT_READY, GO_READY, GO_STATE_ACTIVE, GameObjectTemplate::goober, GameObjectTemplate::gossipID, HasGameObjectFlag(), GameObjectTemplate::height, IN_MILLISECONDS, irand(), Player::IsInSameRaidWith(), Group::IsMember(), Object::IsPlayer(), GameObjectTemplate::IsUsableMounted(), Player::KillCreditGO(), GameObjectTemplate::linkedTrap, GameObjectTemplate::linkedTrapId, LOG_DEBUG, LOG_ERROR, LookupFishingHoleAround(), LOOT_FISHING, LOOT_FISHING_JUNK, LOOT_FISHINGHOLE, m_cooldownTime, m_goInfo, m_ritualOwnerGUID, m_spawnId, MAX_GAMEOBJECT_TYPE, GameObjectTemplate::pageId, GameObjectTemplate::partyOnly, Player::PrepareGossipMenu(), QUEST_STATUS_INCOMPLETE, GameObjectTemplate::questId, Unit::RemoveAurasByType(), RemoveFromOwner(), GameObjectTemplate::reqParticipants, Map::ScriptsStart(), Player::SendCinematicStart(), SendCustomAnim(), Player::SendDirectMessage(), Player::SendLoot(), Player::SendPreparedGossip(), SetGameObjectFlag(), SetGoState(), SetLootState(), SetOwnerGUID(), SetSpellId(), Unit::SetStandState(), sEventScripts, GameObjectTemplate::size, SKILL_FISHING, GameObjectTemplate::slots, SMSG_ENABLE_BARBER_SHOP, SMSG_FISH_NOT_HOOKED, SMSG_GAMEOBJECT_PAGETEXT, sObjectMgr, sOutdoorPvPMgr, SPELL_AURA_MOD_INVISIBILITY, SPELL_AURA_MOD_STEALTH, SPELL_AURA_MOUNTED, SPELL_CAST_OK, GameObjectTemplate::spellcaster, GameObjectTemplate::spellId, sScriptMgr, sSpellMgr, GameObjectTemplate::summoningRitual, TELE_TO_NOT_LEAVE_COMBAT, TELE_TO_NOT_LEAVE_TRANSPORT, TELE_TO_NOT_UNSUMMON_PET, Player::TeleportTo(), Object::ToPlayer(), ObjectGuid::ToString(), Position::ToString(), GameObjectTemplate::trap, TRIGGERED_CAST_DIRECTLY, TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE, TRIGGERED_IGNORE_EFFECTS, TRIGGERED_IGNORE_POWER_AND_REAGENT_COST, TRIGGERED_NONE, TriggeringLinkedGameObject(), GameObjectTemplate::type, UNIT_STAND_STATE_SIT, UNIT_STAND_STATE_SIT_LOW_CHAIR, Player::UpdateAchievementCriteria(), Player::UpdateFishingSkill(), Use(), and UseDoorOrButton().

Referenced by Spell::EffectActivateObject(), spell_q9452_cast_net::HandleActiveObject(), go_sand_trap::Reset(), Spell::SendLoot(), npc_valiance_keep_cannoneer::npc_valiance_keep_cannoneerAI::UpdateAI(), and Use().

◆ UseDoorOrButton()

◆ ValidateGameobjectType()

bool GameObject::ValidateGameobjectType ( ) const
2507{
2508 switch (m_goInfo->type)
2509 {
2515 return true;
2516 default:
2517 return false;
2518 }
2519}
@ GAMEOBJECT_TYPE_TRAPDOOR
Definition SharedDefines.h:1606

References GAMEOBJECT_TYPE_BUTTON, GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GAMEOBJECT_TYPE_DOOR, GAMEOBJECT_TYPE_TRAP, GAMEOBJECT_TYPE_TRAPDOOR, m_goInfo, and GameObjectTemplate::type.

Referenced by IsInstanceGameobject().

Member Data Documentation

◆ _lootStateUnitGUID

ObjectGuid GameObject::_lootStateUnitGUID
protected

Referenced by SetLootState(), and Update().

◆ ChairListSlots

ChairSlotAndUser GameObject::ChairListSlots
protected

Referenced by Use().

◆ gameObjectToEventFlag

std::unordered_map< int, goEventFlag > GameObject::gameObjectToEventFlag = { }
static
2960{
2961 //11 GAMEOBJECT_TYPE_TRANSPORT
2962 struct
2963 {
2964 uint32 PathProgress;
2965 TransportAnimation const* AnimationInfo;
2966 } Transport;
2967 //25 GAMEOBJECT_TYPE_FISHINGHOLE
2968 struct
2969 {
2970 uint32 MaxOpens;
2971 } FishingHole;
2972 //29 GAMEOBJECT_TYPE_CAPTURE_POINT
2973 struct
2974 {
2975 OPvPCapturePoint* OPvPObj;
2976 } CapturePoint;
2977 //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
2978 struct
2979 {
2980 uint32 Health;
2981 uint32 MaxHealth;
2982 } Building;
2983};
2984
2985enum class GameObjectActions : uint32
2986{
2987 // Name from client executable // Comments
2988 None, // -NONE-
2989 AnimateCustom0, // Animate Custom0
2990 AnimateCustom1, // Animate Custom1
2991 AnimateCustom2, // Animate Custom2
2992 AnimateCustom3, // Animate Custom3
2993 Disturb, // Disturb // Triggers trap
2994 Unlock, // Unlock // Resets GO_FLAG_LOCKED
2995 Lock, // Lock // Sets GO_FLAG_LOCKED
2996 Open, // Open // Sets GO_STATE_ACTIVE
2997 OpenAndUnlock, // Open + Unlock // Sets GO_STATE_ACTIVE and resets GO_FLAG_LOCKED
2998 Close, // Close // Sets GO_STATE_READY
2999 ToggleOpen, // Toggle Open
3000 Destroy, // Destroy // Sets GO_STATE_DESTROYED
3001 Rebuild, // Rebuild // Resets from GO_STATE_DESTROYED
3002 Creation, // Creation
3003 Despawn, // Despawn
3004 MakeInert, // Make Inert // Disables interactions
3005 MakeActive, // Make Active // Enables interactions
3006 CloseAndLock, // Close + Lock // Sets GO_STATE_READY and sets GO_FLAG_LOCKED
3007 UseArtKit0, // Use ArtKit0 // 46904: 121
3008 UseArtKit1, // Use ArtKit1 // 36639: 81, 46903: 122
3009 UseArtKit2, // Use ArtKit2
3010 UseArtKit3, // Use ArtKit3
3011 SetTapList, // Set Tap List
3012};
3013
3014// For containers: [GO_NOT_READY]->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED->GO_READY -> ...
3015// For bobber: GO_NOT_READY ->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED-><deleted>
3016// For door(closed):[GO_NOT_READY]->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED->GO_READY(close) -> ...
3017// For door(open): [GO_NOT_READY]->GO_READY (open) ->GO_ACTIVATED (close)->GO_JUST_DEACTIVATED->GO_READY(open) -> ...
3018enum LootState
3019{
3021 GO_READY, // can be ready but despawned, and then not possible activate until spawn
3024};
3025
3026// 5 sec for bobber catch
3027#define FISHING_BOBBER_READY_TIME 5
3028
3029class GameObject : public WorldObject, public GridObject<GameObject>, public MovableMapObject, public UpdatableMapObject
3030{
3031public:
3032 explicit GameObject();
3033 ~GameObject() override;
3034
3035 void BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) override;
3036
3037 void AddToWorld() override;
3038 void RemoveFromWorld() override;
3039 void CleanupsBeforeDelete(bool finalCleanup = true) override;
3040
3041 uint32 GetDynamicFlags() const override { return GetUInt32Value(GAMEOBJECT_DYNAMIC); }
3042 void ReplaceAllDynamicFlags(uint32 flag) override { SetUInt32Value(GAMEOBJECT_DYNAMIC, flag); }
3043
3044 virtual bool Create(ObjectGuid::LowType guidlow, uint32 name_id, Map* map, uint32 phaseMask, float x, float y, float z, float ang, G3D::Quat const& rotation, uint32 animprogress, GOState go_state, uint32 artKit = 0);
3045 void Update(uint32 p_time) override;
3046 [[nodiscard]] GameObjectTemplate const* GetGOInfo() const { return m_goInfo; }
3047 [[nodiscard]] GameObjectTemplateAddon const* GetTemplateAddon() const;
3048 [[nodiscard]] GameObjectData const* GetGameObjectData() const { return m_goData; }
3049 [[nodiscard]] GameObjectValue const* GetGOValue() const { return &m_goValue; }
3050
3051 [[nodiscard]] bool IsTransport() const;
3052 [[nodiscard]] bool IsDestructibleBuilding() const;
3053
3054 [[nodiscard]] ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
3055
3056 // z_rot, y_rot, x_rot - rotation angles around z, y and x axes
3057 void SetWorldRotationAngles(float z_rot, float y_rot, float x_rot);
3058 void SetWorldRotation(G3D::Quat const& rot);
3059 void SetTransportPathRotation(float qx, float qy, float qz, float qw);
3060 [[nodiscard]] G3D::Quat const& GetWorldRotation() const { return WorldRotation; }
3061 [[nodiscard]] int64 GetPackedWorldRotation() const { return m_packedRotation; }
3062 [[nodiscard]] G3D::Quat GetFinalWorldRotation() const;
3063
3064 // overwrite WorldObject function for proper name localization
3065 [[nodiscard]] std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
3066
3067 void SaveToDB(bool saveAddon = false);
3068 void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask, bool saveAddon = false);
3069 virtual bool LoadFromDB(ObjectGuid::LowType guid, Map* map) { return LoadGameObjectFromDB(guid, map, false); }
3070 virtual bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map* map, bool addToMap = true);
3071 void DeleteFromDB();
3072
3073 void SetOwnerGUID(ObjectGuid owner)
3074 {
3075 // Owner already found and different than expected owner - remove object from old owner
3076 if (owner && GetOwnerGUID() && GetOwnerGUID() != owner)
3077 {
3078 ABORT();
3079 }
3080 m_spawnedByDefault = false; // all object with owner is despawned after delay
3082 }
3083 [[nodiscard]] ObjectGuid GetOwnerGUID() const { return GetGuidValue(OBJECT_FIELD_CREATED_BY); }
3084 [[nodiscard]] Unit* GetOwner() const;
3085
3086 void SetSpellId(uint32 id)
3087 {
3088 m_spawnedByDefault = false; // all summoned object is despawned after delay
3089 m_spellId = id;
3090 }
3091 [[nodiscard]] uint32 GetSpellId() const { return m_spellId;}
3092
3093 [[nodiscard]] time_t GetRespawnTime() const { return m_respawnTime; }
3094 [[nodiscard]] time_t GetRespawnTimeEx() const;
3095
3096 void SetRespawnTime(int32 respawn);
3097 void SetRespawnDelay(int32 respawn);
3098 void Respawn();
3099 [[nodiscard]] bool isSpawned() const
3100 {
3101 return m_respawnDelayTime == 0 ||
3104 }
3105 [[nodiscard]] bool isSpawnedByDefault() const { return m_spawnedByDefault; }
3106 void SetSpawnedByDefault(bool b) { m_spawnedByDefault = b; }
3107 [[nodiscard]] uint32 GetRespawnDelay() const { return m_respawnDelayTime; }
3108 void Refresh();
3109 void DespawnOrUnsummon(Milliseconds delay = 0ms, Seconds forcedRespawnTime = 0s);
3110 void Delete();
3111 void GetFishLoot(Loot* fishLoot, Player* lootOwner, bool junk = false);
3112 [[nodiscard]] GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
3114 [[nodiscard]] GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
3115 void SetGoState(GOState state);
3116 [[nodiscard]] uint8 GetGoArtKit() const { return GetByteValue(GAMEOBJECT_BYTES_1, 2); }
3117 void SetGoArtKit(uint8 artkit);
3118 [[nodiscard]] uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
3119 void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
3120 static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = 0);
3121
3122 void SetPhaseMask(uint32 newPhaseMask, bool update) override;
3123 void EnableCollision(bool enable);
3124
3126 bool HasGameObjectFlag(GameObjectFlags flags) const { return HasFlag(GAMEOBJECT_FLAGS, flags) != 0; }
3130
3131 void Use(Unit* user);
3132
3133 [[nodiscard]] LootState getLootState() const { return m_lootState; }
3134 // Note: unit is only used when s = GO_ACTIVATED
3135 void SetLootState(LootState s, Unit* unit = nullptr);
3136
3137 [[nodiscard]] uint16 GetLootMode() const { return m_LootMode; }
3138 [[nodiscard]] bool HasLootMode(uint16 lootMode) const { return m_LootMode & lootMode; }
3139 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
3140 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
3141 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
3143
3144 void AddToSkillupList(ObjectGuid const& playerGuid);
3145 [[nodiscard]] bool IsInSkillupList(ObjectGuid const& playerGuid) const;
3146
3147 void AddUniqueUse(Player* player);
3148 void AddUse() { ++m_usetimes; }
3149
3150 [[nodiscard]] uint32 GetUseCount() const { return m_usetimes; }
3151 [[nodiscard]] uint32 GetUniqueUseCount() const { return m_unique_users.size(); }
3152
3153 void SaveRespawnTime() override { SaveRespawnTime(0); }
3154 void SaveRespawnTime(uint32 forceDelay);
3155
3156 Loot loot;
3157
3158 [[nodiscard]] Player* GetLootRecipient() const;
3159 [[nodiscard]] Group* GetLootRecipientGroup() const;
3160 void SetLootRecipient(Creature* creature);
3161 void SetLootRecipient(Map* map);
3162 bool IsLootAllowedFor(Player const* player) const;
3163 [[nodiscard]] bool HasLootRecipient() const { return m_lootRecipient || m_lootRecipientGroup; }
3164 uint32 m_groupLootTimer; // (msecs)timer used for group loot
3165 uint32 lootingGroupLowGUID; // used to find group which is looting
3166 void SetLootGenerationTime();
3167 [[nodiscard]] uint32 GetLootGenerationTime() const { return m_lootGenerationTime; }
3168
3169 [[nodiscard]] GameObject* GetLinkedTrap();
3170 void SetLinkedTrap(GameObject* linkedTrap) { m_linkedTrap = linkedTrap->GetGUID(); }
3171
3172 [[nodiscard]] bool hasQuest(uint32 quest_id) const override;
3173 [[nodiscard]] bool hasInvolvedQuest(uint32 quest_id) const override;
3174 bool ActivateToQuest(Player* target) const;
3175 void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = nullptr);
3176 // 0 = use `gameobject`.`spawntimesecs`
3177 void ResetDoorOrButton();
3178
3179 void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
3180
3181 [[nodiscard]] bool IsNeverVisible() const override;
3182 bool IsAlwaysVisibleFor(WorldObject const* seer) const override;
3183 [[nodiscard]] bool IsInvisibleDueToDespawn() const override;
3184
3185 uint8 getLevelForTarget(WorldObject const* target) const override
3186 {
3187 if (Unit* owner = GetOwner())
3188 return owner->getLevelForTarget(target);
3189
3190 return 1;
3191 }
3192
3193 GameObject* LookupFishingHoleAround(float range);
3194
3195 void CastSpell(Unit* target, uint32 spell);
3196 void SendCustomAnim(uint32 anim);
3197 [[nodiscard]] bool IsInRange(float x, float y, float z, float radius) const;
3198
3199 void ModifyHealth(int32 change, Unit* attackerOrHealer = nullptr, uint32 spellId = 0);
3201 // sets GameObject type 33 destruction flags and optionally default health for that state
3202 void SetDestructibleState(GameObjectDestructibleState state, Player* eventInvoker = nullptr, bool setHealth = false);
3204 {
3210 }
3211
3212 void EventInform(uint32 eventId);
3213
3214 [[nodiscard]] virtual uint32 GetScriptId() const;
3215 [[nodiscard]] GameObjectAI* AI() const { return m_AI; }
3216
3217 [[nodiscard]] std::string const& GetAIName() const;
3218 void SetDisplayId(uint32 displayid);
3219 [[nodiscard]] uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); }
3220
3222 void GetRespawnPosition(float& x, float& y, float& z, float* ori = nullptr) const;
3223
3224 void SetPosition(float x, float y, float z, float o);
3225 void SetPosition(const Position& pos) { SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); }
3226
3227 [[nodiscard]] bool IsStaticTransport() const { return GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT; }
3228 [[nodiscard]] bool IsMotionTransport() const { return GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT; }
3229
3230 Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT || GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<Transport*>(this); else return nullptr; }
3231 [[nodiscard]] Transport const* ToTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT || GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<Transport const*>(this); else return nullptr; }
3232
3233 StaticTransport* ToStaticTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<StaticTransport*>(this); else return nullptr; }
3234 [[nodiscard]] StaticTransport const* ToStaticTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<StaticTransport const*>(this); else return nullptr; }
3235
3236 MotionTransport* ToMotionTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<MotionTransport*>(this); else return nullptr; }
3237 [[nodiscard]] MotionTransport const* ToMotionTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<MotionTransport const*>(this); else return nullptr; }
3238
3239 [[nodiscard]] float GetStationaryX() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); }
3240 [[nodiscard]] float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); }
3241 [[nodiscard]] float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); }
3242 [[nodiscard]] float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); }
3243
3244 [[nodiscard]] float GetInteractionDistance() const;
3245
3246 void UpdateModelPosition();
3247
3248 [[nodiscard]] bool IsAtInteractDistance(Position const& pos, float radius) const;
3249 [[nodiscard]] bool IsAtInteractDistance(Player const* player, SpellInfo const* spell = nullptr) const;
3250
3251 [[nodiscard]] bool IsWithinDistInMap(Player const* player) const;
3253
3254 [[nodiscard]] SpellInfo const* GetSpellForLock(Player const* player) const;
3255
3256 static std::unordered_map<int, goEventFlag> gameObjectToEventFlag; // Gameobject -> event flag
3257
3258 [[nodiscard]] bool ValidateGameobjectType() const;
3259 [[nodiscard]] bool IsInstanceGameobject() const;
3260 [[nodiscard]] uint8 GameobjectStateToInt(GOState* state) const;
3261
3262 /* A check to verify if this object is available to be saved on the DB when
3263 * a state change occurs
3264 */
3265 [[nodiscard]] bool IsAllowedToSaveToDB() const { return m_saveStateOnDb; };
3266
3267 /* Enable or Disable the ability to save on the database this gameobject's state
3268 * whenever it changes
3269 */
3270 void AllowSaveToDB(bool enable) { m_saveStateOnDb = enable; };
3271
3272 void SaveStateToDB();
3273
3274 std::string GetDebugInfo() const override;
3275
3276 bool IsUpdateNeeded() override;
3277protected:
3278 bool AIM_Initialize();
3280 void UpdateModel(); // updates model in case displayId were changed
3282 time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()),
3283 uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer
3285 Seconds m_despawnRespawnTime; // override respawn time after delayed despawn
3288 bool m_spawnedByDefault;
3289 uint32 m_cooldownTime; // used as internal reaction delay time store (not state change reaction).
3290 // For traps this: spell casting cooldown, for doors/buttons: reset time.
3291 std::unordered_map<ObjectGuid, int32> m_SkillupList;
3292
3293 ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner)
3296
3297 typedef std::map<uint32, ObjectGuid> ChairSlotAndUser;
3299
3302 GameObjectData const* m_goData;
3305
3307 G3D::Quat WorldRotation;
3309
3312 uint16 m_LootMode; // bitmask, default LOOT_MODE_DEFAULT, determines what loot will be lootable
3314
3316
3318
3319private:
3320 void CheckRitualList();
3321 void ClearRitualList();
3322 void RemoveFromOwner();
3323 void SwitchDoorOrButton(bool activate, bool alternative = false);
3324 void UpdatePackedRotation();
3325
3327 bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius = true*/, bool /*incTargetRadius = true*/) const override
3328 {
3330 dist2compare += obj->GetObjectSize();
3331 return IsInRange(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
3332 }
3334
3335 bool m_saveStateOnDb = false;
3336};
3337#endif
LocaleConstant
Definition Common.h:117
std::chrono::milliseconds Milliseconds
Milliseconds shorthand typedef.
Definition Duration.h:27
LootState
Definition GameObject.h:109
GameObjectActions
Definition GameObject.h:76
std::set< ObjectGuid > GuidSet
Definition ObjectGuid.h:253
Definition GameObjectAI.h:33
Definition GameObjectModel.h:53
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr) const
Definition GameObject.cpp:2814
uint32 GetRespawnDelay() const
Definition GameObject.h:197
bool IsWithinDistInMap(Player const *player) const
Definition GameObject.cpp:2977
void AddLootMode(uint16 lootMode)
Definition GameObject.h:230
~GameObject() override
Definition GameObject.cpp:82
bool IsUpdateNeeded() override
Definition GameObject.cpp:3070
void DeleteFromDB()
Definition GameObject.cpp:1152
std::string GetDebugInfo() const override
Definition GameObject.cpp:3061
bool hasInvolvedQuest(uint32 quest_id) const override
Definition GameObject.cpp:1180
float GetStationaryZ() const override
Definition GameObject.h:331
uint32 GetDynamicFlags() const override
Definition GameObject.h:131
uint8 getLevelForTarget(WorldObject const *target) const override
Definition GameObject.h:275
float GetStationaryY() const override
Definition GameObject.h:330
void GetFishLoot(Loot *fishLoot, Player *lootOwner, bool junk=false)
Definition GameObject.cpp:985
bool HasLootMode(uint16 lootMode) const
Definition GameObject.h:228
GameObjectValue const * GetGOValue() const
Definition GameObject.h:139
Player * GetLootRecipient() const
Definition GameObject.cpp:2606
bool IsAlwaysVisibleFor(WorldObject const *seer) const override
Definition GameObject.cpp:1228
time_t GetRespawnTime() const
Definition GameObject.h:183
uint32 GetLootGenerationTime() const
Definition GameObject.h:257
float GetStationaryX() const override
Definition GameObject.h:329
void RemoveLootMode(uint16 lootMode)
Definition GameObject.h:231
void SetSpawnedByDefault(bool b)
Definition GameObject.h:196
bool IsInSkillupList(ObjectGuid const &playerGuid) const
Definition GameObject.cpp:3048
void SetLootRecipient(Creature *creature)
Definition GameObject.cpp:2620
int64 GetPackedWorldRotation() const
Definition GameObject.h:151
void SetDestructibleBuildingModifyState(bool allow)
Definition GameObject.h:290
bool IsMotionTransport() const
Definition GameObject.h:318
void Respawn()
Definition GameObject.cpp:1283
void Refresh()
Definition GameObject.cpp:900
time_t GetRespawnTimeEx() const
Definition GameObject.cpp:2897
bool hasQuest(uint32 quest_id) const override
Definition GameObject.cpp:1169
GameObjectFlags GetGameObjectFlags() const
Definition GameObject.h:215
uint32 GetDisplayId() const
Definition GameObject.h:309
void UpdateModelPosition()
Definition GameObject.cpp:2884
bool IsStaticTransport() const
Definition GameObject.h:317
void SetLootMode(uint16 lootMode)
Definition GameObject.h:229
uint32 GetUseCount() const
Definition GameObject.h:240
void SetWorldRotationAngles(float z_rot, float y_rot, float x_rot)
Definition GameObject.cpp:2229
void SetLootGenerationTime()
Definition GameObject.cpp:2906
std::map< uint32, ObjectGuid > ChairSlotAndUser
Definition GameObject.h:387
bool IsNeverVisible() const override
Definition GameObject.cpp:1217
virtual bool LoadFromDB(ObjectGuid::LowType guid, Map *map)
Definition GameObject.h:159
std::string const & GetNameForLocaleIdx(LocaleConstant locale_idx) const override
Definition GameObject.cpp:2183
void BuildValuesUpdate(uint8 updateType, ByteBuffer *data, Player *target) override
Definition GameObject.cpp:2714
void AddToSkillupList(ObjectGuid const &playerGuid)
Definition GameObject.cpp:3042
void CleanupsBeforeDelete(bool finalCleanup=true) override
Definition GameObject.cpp:109
uint16 GetLootMode() const
Definition GameObject.h:227
bool IsInvisibleDueToDespawn() const override
Definition GameObject.cpp:1256
void AddToWorld() override
Definition GameObject.cpp:145
void Update(uint32 p_time) override
Definition GameObject.cpp:427
float GetStationaryO() const override
Definition GameObject.h:332
void ModifyHealth(int32 change, Unit *attackerOrHealer=nullptr, uint32 spellId=0)
Definition GameObject.cpp:2251
void AllowSaveToDB(bool enable)
Definition GameObject.h:360
void ReplaceAllDynamicFlags(uint32 flag) override
Definition GameObject.h:132
Definition Object.h:358
Definition Map.h:163
Definition Object.h:410
Definition OutdoorPvP.h:91
uint32 LowType
Definition ObjectGuid.h:122
Definition Object.h:428
Definition Object.h:471
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1347
float GetObjectSize() const
Definition Object.cpp:2782
Definition LootMgr.h:313
Definition Position.h:27
Definition TransportMgr.h:88
Definition GameObject.h:50

Referenced by Use().

◆ loot

◆ lootingGroupLowGUID

uint32 GameObject::lootingGroupLowGUID

Referenced by GameObject(), and Update().

◆ m_AI

GameObjectAI* GameObject::m_AI
private

Referenced by AI(), AIM_Initialize(), and ~GameObject().

◆ m_allowModifyDestructibleBuilding

bool GameObject::m_allowModifyDestructibleBuilding
protected

◆ m_cooldownTime

uint32 GameObject::m_cooldownTime
protected

◆ m_despawnDelay

uint32 GameObject::m_despawnDelay
protected

◆ m_despawnRespawnTime

Seconds GameObject::m_despawnRespawnTime
protected

◆ m_goData

◆ m_goInfo

◆ m_goValue

◆ m_groupLootTimer

uint32 GameObject::m_groupLootTimer

Referenced by GameObject(), and Update().

◆ m_linkedTrap

ObjectGuid GameObject::m_linkedTrap
protected

Referenced by GetLinkedTrap(), and SetLinkedTrap().

◆ m_lootGenerationTime

uint32 GameObject::m_lootGenerationTime
protected

◆ m_LootMode

uint16 GameObject::m_LootMode
protected

◆ m_lootRecipient

ObjectGuid GameObject::m_lootRecipient
protected

◆ m_lootRecipientGroup

◆ m_lootState

LootState GameObject::m_lootState
protected

◆ m_model

◆ m_packedRotation

int64 GameObject::m_packedRotation
protected

◆ m_respawnDelayTime

uint32 GameObject::m_respawnDelayTime
protected

◆ m_respawnTime

◆ m_restockTime

Seconds GameObject::m_restockTime
protected

Referenced by GameObject(), SetLootState(), and Update().

◆ m_ritualOwnerGUID

ObjectGuid GameObject::m_ritualOwnerGUID
protected

Referenced by Update(), and Use().

◆ m_saveStateOnDb

bool GameObject::m_saveStateOnDb = false
private

◆ m_SkillupList

std::unordered_map<ObjectGuid, int32> GameObject::m_SkillupList
protected

◆ m_spawnedByDefault

◆ m_spawnId

◆ m_spellId

uint32 GameObject::m_spellId
protected

◆ m_stationaryPosition

◆ m_unique_users

GuidSet GameObject::m_unique_users
protected

◆ m_usetimes

uint32 GameObject::m_usetimes
protected

◆ WorldRotation

G3D::Quat GameObject::WorldRotation
protected

The documentation for this class was generated from the following files: