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)
 
bool IsRespawnCompatibilityMode () const
 
void DeleteFromDB ()
 
void SetOwnerGUID (ObjectGuid owner)
 
ObjectGuid GetOwnerGUID () const override
 
uint32 GetFaction () const override
 
Unit * GetOwner () 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)
 
Player * GetLootRecipient () const
 
Group * GetLootRecipientGroup () const
 
void SetLootRecipient (Creature *creature)
 
void SetLootRecipient (Map *map)
 
bool IsLootAllowedFor (Player const *player) const
 
bool HasLootRecipient () const
 
void SetLootGenerationTime ()
 
uint32 GetLootGenerationTime () const
 
GameObject * GetLinkedTrap ()
 
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
 
GameObject * LookupFishingHoleAround (float range)
 
void CastSpell (Unit *target, uint32 spell)
 
void SendCustomAnim (uint32 anim)
 
bool IsInRange2d (float x, float y, float radius) const
 
bool IsInRange3d (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
 
GameObjectAI * AI () 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 (Position const &pos)
 
bool IsStaticTransport () const
 
bool IsMotionTransport () const
 
Transport * ToTransport ()
 
Transport const * ToTransport () const
 
StaticTransport * ToStaticTransport ()
 
StaticTransport const * ToStaticTransport () const
 
MotionTransport * ToMotionTransport ()
 
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 (Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (Position const &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
 
InstanceScript * GetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string const &newname)
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (Position const &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 (Position const *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (Position const *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
 
float GetLeewayBonusRange (Unit const *target) const
 
float GetLeewayBonusRadius () 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 ()
 
Map * GetMap () const
 
Map * FindMap () const
 
void SetZoneScript ()
 
void ClearZoneScript ()
 
ZoneScript * GetZoneScript () const
 
TempSummon * SummonCreature (uint32 id, Position const &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
 
TempSummon * SummonCreature (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)
 
GameObject * SummonGameObject (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)
 
Creature * SummonTrigger (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)
 
void SummonGameObjectGroup (uint8 group, std::list< GameObject * > *list=nullptr)
 
Creature * FindNearestCreature (uint32 entry, float range, bool alive=true) const
 
GameObject * FindNearestGameObject (uint32 entry, float range, bool onlySpawned=false) const
 
GameObject * FindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
Player * SelectNearestPlayer (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 ()
 
bool IsPositionDataUpdatePending () const
 
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
 
Transport * GetTransport () 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
 
ObjectVisibilityContainer & GetObjectVisibilityContainer ()
 
ObjectVisibilityContainer const & GetObjectVisibilityContainer () const
 
SpellCastResult CastSpell (CastSpellTargetArg const &targets, uint32 spellId, CastSpellExtraArgs const &args={})
 
SpellCastResult CastSpell (CastSpellTargetArg const &targets, SpellInfo const *info, CastSpellExtraArgs const &args={})
 
virtual ObjectGuid GetCharmerOrOwnerGUID () const
 
Unit * GetOwnerUnit () const
 
Unit * GetCharmerOrOwnerUnit () const
 
Unit * GetCharmerOrOwnerOrSelfUnit () const
 
Player * GetCharmerOrOwnerPlayerOrPlayerItself () const
 
Player * GetAffectingPlayer () const
 
virtual Player * GetSpellModOwner () const
 
FactionTemplateEntry const * GetFactionTemplateEntry () const
 
ReputationRank GetReactionTo (WorldObject const *target) const
 
bool IsHostileTo (WorldObject const *target) const
 
bool IsFriendlyTo (WorldObject const *target) const
 
float GetSpellMaxRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
float GetSpellMinRangeForTarget (Unit const *target, SpellInfo const *spellInfo) const
 
bool IsValidAttackTarget (WorldObject const *target, SpellInfo const *bySpell=nullptr) const
 
bool IsValidAssistTarget (WorldObject const *target, SpellInfo const *bySpell=nullptr) const
 
Unit * GetMagicHitRedirectTarget (Unit *victim, SpellInfo const *spellInfo)
 
Unit * GetMeleeHitRedirectTarget (Unit *victim, SpellInfo const *spellInfo)
 
int32 CalculateSpellDamage (Unit const *target, SpellInfo const *spellProto, uint8 effect_index, int32 const *basePoints=nullptr) const
 
int32 CalcSpellDuration (SpellInfo const *spellProto) const
 
int32 ModSpellDuration (SpellInfo const *spellProto, Unit const *target, int32 duration, bool positive, uint32 effectMask) const
 
void ModSpellCastTime (SpellInfo const *spellProto, int32 &castTime, Spell *spell=nullptr) const
 
virtual SpellMissInfo MeleeSpellHitResult (Unit *, SpellInfo const *)
 
SpellMissInfo MagicSpellHitResult (Unit *victim, SpellInfo const *spellInfo)
 
SpellMissInfo SpellHitResult (Unit *victim, SpellInfo const *spellInfo, bool canReflect=false)
 
SpellMissInfo SpellHitResult (Unit *victim, Spell const *spell, bool canReflect=false)
 
void SendSpellMiss (Unit *target, uint32 spellID, SpellMissInfo missInfo)
 
void SendSpellNonMeleeDamageLog (Unit *target, SpellInfo const *spellInfo, uint32 damage, SpellSchoolMask schoolMask, uint32 absorb, uint32 resist)
 
- 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
 
Player * ToPlayer ()
 
Player const * ToPlayer () const
 
bool IsCreature () const
 
Creature * ToCreature ()
 
Creature const * ToCreature () const
 
bool IsUnit () const
 
Unit * ToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObject * ToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
Corpse * ToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynamicObject () const
 
DynamicObject * ToDynObject ()
 
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 (WorldLocation const &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
 
Position & operator= (Position const &)=default
 
Position & operator= (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 (Position const &pos)
 
void Relocate (Position const *pos)
 
void RelocatePolarOffset (float angle, float dist, float z=0.0f)
 
void RelocateOffset (Position const &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 (Position const &endPos, Position &retOffset) const
 
Position GetPositionWithOffset (Position const &offset) const
 
float GetAngle (Position const *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 (Position const *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 (Position const *pos, float dist) const
 
bool IsInDist (float x, float y, float z, float dist) const
 
bool IsInDist (Position const *pos, float dist) const
 
bool IsWithinBox (Position const &center, float xradius, float yradius, float zradius) const
 
bool HasInArc (float arcangle, Position const *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 WorldObject
static float GetLeewayBonusRangeForTargets (Player const *player, Unit const *target)
 
static ReputationRank GetFactionReactionTo (FactionTemplateEntry const *factionTemplateEntry, WorldObject const *target)
 
- 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
 
GameObjectModel * m_model
 
- Public Attributes inherited from WorldObject
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
 
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
 
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
 
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_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, goEventFlag > gameObjectToEventFlag = { }
 

Protected Types

typedef std::map< uint32, ObjectGuid > ChairSlotAndUser
 

Protected Member Functions

bool AIM_Initialize ()
 
GameObjectModel * CreateModel ()
 
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)
 
void _Create (ObjectGuid guid)
 
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

bool _respawnCompatibilityMode {true}
 
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, int32 > m_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
 
ZoneScript * m_zoneScript
 
uint32 _zoneId
 
uint32 _areaId
 
float _floorZ
 
bool _outdoors
 
LiquidData _liquidData
 
bool _updatePositionData
 
Transport * m_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.
 
bool IsWithinSightRange (Position const &pos, float dist) const override
 

Private Attributes

GameObjectAI * m_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
59 m_model(nullptr), m_goValue(), m_AI(nullptr)
60{
63
65
67 m_respawnTime = 0;
71 m_restockTime = 0s;
73 m_spawnedByDefault = true;
75 m_usetimes = 0;
76 m_spellId = 0;
78 m_goInfo = nullptr;
79 m_goData = nullptr;
81
82 m_spawnId = 0;
83
88
89 ResetLootMode(); // restore default loot mode
91 m_stationaryPosition.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
92}
@ GO_NOT_READY
Definition GameObject.h:110
@ TYPEID_GAMEOBJECT
Definition ObjectGuid.h:40
@ TYPEMASK_GAMEOBJECT
Definition ObjectGuid.h:54
@ 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:248
GameObjectValue m_goValue
Definition GameObject.h:397
time_t m_respawnTime
Definition GameObject.h:376
GameObjectData const * m_goData
Definition GameObject.h:396
int64 m_packedRotation
Definition GameObject.h:400
Position m_stationaryPosition
Definition GameObject.h:402
bool m_allowModifyDestructibleBuilding
Definition GameObject.h:398
uint32 m_cooldownTime
Definition GameObject.h:383
uint32 m_spellId
Definition GameObject.h:375
uint32 m_respawnDelayTime
Definition GameObject.h:377
void ResetLootMode()
Definition GameObject.h:234
uint32 m_despawnDelay
Definition GameObject.h:378
Seconds m_despawnRespawnTime
Definition GameObject.h:379
ObjectGuid::LowType m_lootRecipientGroup
Definition GameObject.h:405
GameObjectAI * m_AI
Definition GameObject.h:430
GameObjectModel * m_model
Definition GameObject.h:314
GameObjectTemplate const * m_goInfo
Definition GameObject.h:395
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
Definition GameObject.h:394
uint32 m_groupLootTimer
Definition GameObject.h:256
uint32 lootingGroupLowGUID
Definition GameObject.h:257
bool m_spawnedByDefault
Definition GameObject.h:382
LootState m_lootState
Definition GameObject.h:381
Seconds m_restockTime
Definition GameObject.h:380
uint32 m_usetimes
Definition GameObject.h:389
uint32 m_lootGenerationTime
Definition GameObject.h:407
MovableMapObject()=default
uint16 m_objectType
Definition Object.h:259
uint16 m_valuesCount
Definition Object.h:273
uint16 m_updateFlag
Definition Object.h:262
TypeID m_objectTypeId
Definition Object.h:261
WorldObject()
Definition Object.cpp:1065
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
95{
96 delete m_AI;
97 delete m_model;
98 //if (m_uint32Values) // field array can be not exist if GameOBject not loaded
99 // CleanupsBeforeDelete();
100}

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.

422 {
424 dist2compare += obj->GetObjectSize();
425 return IsInRange3d(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
426 }
bool IsInRange3d(float x, float y, float z, float radius) const
Definition GameObject.cpp:2197

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

◆ ActivateToQuest()

bool GameObject::ActivateToQuest ( Player *  target) const
1313{
1314 if (target->HasQuestForGO(GetEntry()))
1315 return true;
1316
1317 if (!GetGOInfo()->IsGameObjectForQuests())
1318 return false;
1319
1320 FactionTemplateEntry const* gameObjectFaction =
1322 FactionTemplateEntry const* playerFaction = target->GetFactionTemplateEntry();
1323 if (gameObjectFaction && playerFaction &&
1324 (gameObjectFaction->IsHostileToAlliancePlayers() || gameObjectFaction->IsHostileToHordePlayers()))
1325 {
1326 // Faction templates 101/102 have no ourMask, so check hostility from the gameobject to the player.
1327 bool isHostile = gameObjectFaction->IsHostileTo(*playerFaction);
1328 if (ReputationRank const* forcedRank = target->GetReputationMgr().GetForcedRankIfAny(gameObjectFaction))
1329 isHostile = *forcedRank <= REP_HOSTILE;
1330
1331 if (isHostile)
1332 return false;
1333 }
1334
1335 switch (GetGoType())
1336 {
1338 {
1339 GameObject* go = const_cast<GameObject*>(this);
1340 QuestGiverStatus questStatus = target->GetQuestDialogStatus(go);
1341 if (questStatus > DIALOG_STATUS_UNAVAILABLE)
1342 return true;
1343 break;
1344 }
1346 {
1347 // scan GO chest with loot including quest items
1349 {
1350 //TODO: fix this hack
1351 //look for battlegroundAV for some objects which are only activated after mine gots captured by own team
1353 if (Battleground* bg = target->GetBattleground())
1354 if (bg->GetBgTypeID(true) == BATTLEGROUND_AV && !bg->ToBattlegroundAV()->PlayerCanDoMineQuest(GetEntry(), target->GetTeamId()))
1355 return false;
1356 return true;
1357 }
1358 break;
1359 }
1361 {
1362 if (GetGOInfo()->_generic.questID == -1 || target->GetQuestStatus(GetGOInfo()->_generic.questID) == QUEST_STATUS_INCOMPLETE)
1363 return true;
1364 break;
1365 }
1367 {
1368 if (GetGOInfo()->spellFocus.questID > 0 && target->GetQuestStatus(GetGOInfo()->spellFocus.questID) == QUEST_STATUS_INCOMPLETE)
1369 return true;
1370 break;
1371 }
1373 {
1374 if (GetGOInfo()->goober.questId == -1 || target->GetQuestStatus(GetGOInfo()->goober.questId) == QUEST_STATUS_INCOMPLETE)
1375 return true;
1376 break;
1377 }
1378 default:
1379 break;
1380 }
1381
1382 return false;
1383}
@ BG_AV_OBJECTID_MINE_N
Definition BattlegroundAV.h:156
@ BG_AV_OBJECTID_MINE_S
Definition BattlegroundAV.h:157
DBCStorage< FactionTemplateEntry > sFactionTemplateStore(FactionTemplateEntryfmt)
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:1572
@ GAMEOBJECT_TYPE_GENERIC
Definition SharedDefines.h:1569
@ GAMEOBJECT_TYPE_CHEST
Definition SharedDefines.h:1567
@ GAMEOBJECT_TYPE_QUESTGIVER
Definition SharedDefines.h:1566
@ GAMEOBJECT_TYPE_GOOBER
Definition SharedDefines.h:1574
ReputationRank
Definition SharedDefines.h:156
@ REP_HOSTILE
Definition SharedDefines.h:158
@ BATTLEGROUND_AV
Definition SharedDefines.h:3737
@ GAMEOBJECT_FACTION
Definition UpdateFields.h:402
Definition Battleground.h:304
Definition GameObject.h:120
GameObjectTemplate const * GetGOInfo() const
Definition GameObject.h:136
GameobjectTypes GetGoType() const
Definition GameObject.h:204
bool HaveQuestLootForPlayer(uint32 loot_id, Player const *player) const
Definition LootMgr.cpp:228
uint32 GetUInt32Value(uint16 index) const
Definition Object.cpp:303
uint32 GetEntry() const
Definition Object.h:123
bool HasQuestForGO(int32 GOId) const
Definition Player.cpp:12667
TeamId GetTeamId(bool original=false) const
Definition Player.h:2139
QuestGiverStatus GetQuestDialogStatus(Object *questGiver)
Definition PlayerQuest.cpp:1669
Battleground * GetBattleground(bool create=false) const
Definition Player.cpp:12461
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition PlayerQuest.cpp:1504
ReputationMgr & GetReputationMgr()
Definition Player.h:2156
ReputationRank const * GetForcedRankIfAny(FactionTemplateEntry const *factionTemplateEntry) const
Definition ReputationMgr.h:106
FactionTemplateEntry const * GetFactionTemplateEntry() const
Definition Unit.cpp:6828
Definition DBCStructure.h:975
bool IsHostileToHordePlayers() const
Definition DBCStructure.h:1019
bool IsHostileTo(FactionTemplateEntry const &entry) const
Definition DBCStructure.h:1004
bool IsHostileToAlliancePlayers() const
Definition DBCStructure.h:1018
struct GameObjectTemplate::@236::@245 spellFocus
struct GameObjectTemplate::@236::@247 goober
int32 questID
Definition GameObjectData.h:111
uint32 questId
Definition GameObjectData.h:92
struct GameObjectTemplate::@236::@242 _generic

References GameObjectTemplate::_generic, BATTLEGROUND_AV, BG_AV_OBJECTID_MINE_N, BG_AV_OBJECTID_MINE_S, DIALOG_STATUS_UNAVAILABLE, GAMEOBJECT_FACTION, GAMEOBJECT_TYPE_CHEST, GAMEOBJECT_TYPE_GENERIC, GAMEOBJECT_TYPE_GOOBER, GAMEOBJECT_TYPE_QUESTGIVER, GAMEOBJECT_TYPE_SPELL_FOCUS, Player::GetBattleground(), Object::GetEntry(), Unit::GetFactionTemplateEntry(), ReputationMgr::GetForcedRankIfAny(), GetGOInfo(), GetGoType(), Player::GetQuestDialogStatus(), Player::GetQuestStatus(), Player::GetReputationMgr(), Player::GetTeamId(), Object::GetUInt32Value(), GameObjectTemplate::goober, Player::HasQuestForGO(), LootStore::HaveQuestLootForPlayer(), FactionTemplateEntry::IsHostileTo(), FactionTemplateEntry::IsHostileToAlliancePlayers(), FactionTemplateEntry::IsHostileToHordePlayers(), LootTemplates_Gameobject, QUEST_STATUS_INCOMPLETE, GameObjectTemplate::questId, GameObjectTemplate::questID, REP_HOSTILE, sFactionTemplateStore, and GameObjectTemplate::spellFocus.

Referenced by BuildValuesUpdate().

◆ AddLootMode()

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

References m_LootMode.

◆ AddToSkillupList()

void GameObject::AddToSkillupList ( ObjectGuid const &  playerGuid)
3112{
3113 int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS;
3114 m_SkillupList[playerGuid] = timer;
3115}
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:385
bool IsDungeon() const
Definition Map.h:299
Map * GetMap() const
Definition Object.h:637

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.

158{
160 if (!IsInWorld())
161 {
162 if (m_zoneScript)
164
166 if (m_spawnId)
167 GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
168
169 if (m_model)
170 {
173 }
174
175 EnableCollision(GetGoState() == GO_STATE_READY || IsTransport()); // pussywizard: this startOpen is unneeded here, collision depends entirely on GOState
176
178
180
181 sScriptMgr->OnGameObjectAddWorld(this);
182 }
183}
@ GO_STATE_READY
Definition GameObjectData.h:709
#define sScriptMgr
Definition ScriptMgr.h:766
bool UpdatePosition()
Definition GameObjectModel.cpp:246
GOState GetGoState() const
Definition GameObject.h:206
void EnableCollision(bool enable)
Definition GameObject.cpp:2646
bool IsTransport() const
Definition GameObject.cpp:1211
MapStoredObjectTypesContainer & GetObjectsStore()
Definition Map.h:358
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
Definition Map.h:364
void InsertGameObjectModel(GameObjectModel const &model)
Definition Map.h:405
bool IsInWorld() const
Definition Object.h:115
ObjectGuid GetGUID() const
Definition Object.h:121
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition TypeContainer.h:177
void AddToWorld() override
Definition Object.cpp:1223
ZoneScript * m_zoneScript
Definition Object.h:802
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)
923{
924 AddUse();
925 m_unique_users.insert(player->GetGUID());
926}
void AddUse()
Definition GameObject.h:240
GuidSet m_unique_users
Definition GameObject.h:388
static ObjectGuid GetGUID(Object const *o)
Definition Object.h:120

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

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

◆ AddUse()

◆ AI()

◆ AIM_Initialize()

bool GameObject::AIM_Initialize ( )
protected
103{
104 if (m_AI)
105 delete m_AI;
106
108
109 if (!m_AI)
110 return false;
111
113 return true;
114}
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.

2783{
2784 if (!target)
2785 return;
2786
2788 bool targetIsGM = target->IsGameMaster() && target->GetSession()->IsGMAccount();
2789
2790 ByteBuffer fieldBuffer;
2791
2792 UpdateMask updateMask;
2793 updateMask.SetCount(m_valuesCount);
2794
2796 uint32 visibleFlag = UF_FLAG_PUBLIC;
2797 if (GetOwnerGUID() == target->GetGUID())
2798 visibleFlag |= UF_FLAG_OWNER;
2799
2800 for (uint16 index = 0; index < m_valuesCount; ++index)
2801 {
2802 if (_fieldNotifyFlags & flags[index] ||
2803 ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
2804 (index == GAMEOBJECT_FLAGS && forcedFlags))
2805 {
2806 updateMask.SetBit(index);
2807
2808 if (index == GAMEOBJECT_DYNAMIC)
2809 {
2810 uint16 dynFlags = 0;
2811 int16 pathProgress = -1;
2812 switch (GetGoType())
2813 {
2815 if (ActivateToQuest(target))
2816 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2817 break;
2820 if (ActivateToQuest(target))
2821 {
2822 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2823 if (sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2824 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2825 }
2826 else if (targetIsGM)
2827 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2828 break;
2831 if (ActivateToQuest(target) && sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2832 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2833 break;
2835 if (StaticTransport const* t = ToStaticTransport())
2836 if (t->GetPauseTime())
2837 {
2838 if (GetGoState() == GO_STATE_READY)
2839 {
2840 if (t->GetPathProgress() >= t->GetPauseTime()) // if not, send 100% progress
2841 pathProgress = int16(float(t->GetPathProgress() - t->GetPauseTime()) / float(t->GetPeriod() - t->GetPauseTime()) * 65535.0f);
2842 }
2843 else
2844 {
2845 if (t->GetPathProgress() <= t->GetPauseTime()) // if not, send 100% progress
2846 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPauseTime()) * 65535.0f);
2847 }
2848 }
2849 // else it's ignored
2850 break;
2852 if (MotionTransport const* t = ToMotionTransport())
2853 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPeriod()) * 65535.0f);
2854 break;
2855 default:
2856 break;
2857 }
2858
2859 fieldBuffer << uint16(dynFlags);
2860 fieldBuffer << int16(pathProgress);
2861 }
2862 else if (index == GAMEOBJECT_FLAGS)
2863 {
2866 {
2868 }
2869
2870 fieldBuffer << goFlags;
2871 }
2872 else
2873 fieldBuffer << m_uint32Values[index]; // other cases
2874 }
2875 }
2876
2877 *data << uint8(updateMask.GetBlockCount());
2878 updateMask.AppendToPacket(data);
2879 data->append(fieldBuffer);
2880}
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:1579
@ GAMEOBJECT_TYPE_TRANSPORT
Definition SharedDefines.h:1575
@ GO_DYNFLAG_LO_ACTIVATE
Definition SharedDefines.h:1622
@ GO_DYNFLAG_LO_SPARKLE
Definition SharedDefines.h:1625
@ GO_FLAG_NOT_SELECTABLE
Definition SharedDefines.h:1611
@ GO_FLAG_LOCKED
Definition SharedDefines.h:1608
@ 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:139
Definition ByteBuffer.h:70
void append(T value)
Definition ByteBuffer.h:129
ObjectGuid GetOwnerGUID() const override
Definition GameObject.h:174
MotionTransport * ToMotionTransport()
Definition GameObject.h:329
bool HasLootRecipient() const
Definition GameObject.h:255
bool ActivateToQuest(Player *target) const
Definition GameObject.cpp:1312
bool IsLootAllowedFor(Player const *player) const
Definition GameObject.cpp:2744
StaticTransport * ToStaticTransport()
Definition GameObject.h:326
Definition Transport.h:51
uint16 _fieldNotifyFlags
Definition Object.h:275
UpdateMask _changesMask
Definition Object.h:271
uint32 * m_uint32Values
Definition Object.h:267
WorldSession * GetSession() const
Definition Player.h:2031
bool IsGameMaster() const
Definition Player.h:1178
Definition Transport.h:120
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:220
#define sWorld
Definition World.h:318
uint32 groupLootRules
Definition GameObjectData.h:99
struct GameObjectTemplate::@236::@241 chest

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 
)
2100{
2101 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2102 if (!spellInfo)
2103 return;
2104
2105 bool self = true;
2106 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2107 {
2108 if (spellInfo->Effects[i].TargetA.GetReferenceType() != TARGET_REFERENCE_TYPE_CASTER || spellInfo->Effects[i].TargetB.GetTarget())
2109 {
2110 self = false;
2111 break;
2112 }
2113 }
2114
2115 if (self && target && target->GetGUID() != GetGUID())
2116 {
2117 target->CastSpell(target, spellInfo, true);
2118 return;
2119 }
2120
2121 //summon world trigger
2122 Creature* trigger = SummonTrigger(GetPositionX(), GetPositionY(), GetPositionZ(), 0, spellInfo->CalcCastTime() + 2000, true);
2123 if (!trigger)
2124 return;
2125
2126 if (Unit* owner = GetOwner())
2127 {
2128 trigger->SetLevel(owner->GetLevel(), false);
2129 trigger->SetFaction(owner->GetFaction());
2130 // needed for GO casts for proper target validation checks
2131 trigger->SetOwnerGUID(owner->GetGUID());
2132 // xinef: fixes some duel bugs with traps]
2133 if (owner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
2135 if (owner->IsFFAPvP())
2136 {
2138 {
2139 sScriptMgr->OnFfaPvpStateUpdate(trigger, true);
2141 }
2142
2143 }
2144 // xinef: Remove Immunity flags
2145 trigger->SetImmuneToNPC(false);
2146 // xinef: set proper orientation, fixes cast against stealthed targets
2147 if (target)
2148 trigger->SetInFront(target);
2149 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID());
2150 }
2151 else
2152 {
2153 // xinef: set faction of gameobject, if no faction - assume hostile
2154 trigger->SetFaction(GetTemplateAddon() && GetTemplateAddon()->faction ? GetTemplateAddon()->faction : 14);
2155 // Set owner guid for target if no owner availble - needed by trigger auras
2156 // - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
2157 // xinef: set proper orientation, fixes cast against stealthed targets
2158 if (target)
2159 trigger->SetInFront(target);
2160 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : ObjectGuid::Empty);
2161 }
2162}
#define MAX_SPELL_EFFECTS
Definition DBCStructure.h:1673
@ TARGET_REFERENCE_TYPE_CASTER
Definition SpellInfo.h:90
#define sSpellMgr
Definition SpellMgr.h:847
@ UNIT_BYTE2_FLAG_FFA_PVP
Definition UnitDefines.h:141
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition UnitDefines.h:260
@ UNIT_FIELD_BYTES_2
Definition UpdateFields.h:161
Definition Creature.h:47
Unit * GetOwner() const
Definition GameObject.cpp:1223
GameObjectTemplateAddon const * GetTemplateAddon() const
Definition GameObject.cpp:907
Definition ObjectGuid.h:121
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition Object.cpp:940
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition Object.cpp:902
Definition SpellInfo.h:340
uint32 CalcCastTime(WorldObject *caster=nullptr, Spell *spell=nullptr) const
Definition SpellInfo.cpp:2778
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition SpellInfo.h:417
Definition Unit.h:665
void SetFaction(uint32 faction)
Definition Unit.cpp:6850
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition Unit.cpp:10400
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition Unit.cpp:11932
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:1372
void SetOwnerGUID(ObjectGuid owner)
Definition Unit.cpp:7460
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition Unit.h:749
void SetInFront(WorldObject const *target)
Definition Unit.cpp:16062
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
Definition Object.cpp:2502
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(), go_empowering_blood_orb::GossipHello(), instance_onyxias_lair::instance_onyxias_lair_InstanceMapScript::OnGameObjectCreate(), SmartScript::ProcessAction(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), go_empowering_blood_orb::SetGUID(), npc_deaths_door_fell_cannon_target_bunny::npc_deaths_door_fell_cannon_target_bunnyAI::SpellHit(), Update(), go_suppression_device::UpdateAI(), go_witherbark_totem_bundle::go_witherbark_totem_bundleAI::UpdateAI(), and Use().

◆ CheckRitualList()

void GameObject::CheckRitualList ( )
private
219{
220 if (m_unique_users.empty())
221 return;
222
224 if (!animSpell)
225 animSpell = GetSpellId();
226
227 for (GuidSet::iterator itr = m_unique_users.begin(); itr != m_unique_users.end();)
228 {
229 if (*itr == GetOwnerGUID())
230 {
231 ++itr;
232 continue;
233 }
234
235 bool erase = true;
236 if (Player* channeler = ObjectAccessor::GetPlayer(*this, *itr))
237 if (Spell* spell = channeler->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
238 if (spell->m_spellInfo->Id == animSpell)
239 erase = false;
240
241 if (erase)
242 m_unique_users.erase(itr++);
243 else
244 ++itr;
245 }
246}
@ CURRENT_CHANNELED_SPELL
Definition Unit.h:558
uint32 GetSpellId() const
Definition GameObject.h:183
Definition Player.h:1086
Definition Spell.h:298
Player * GetPlayer(Map const *, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:244
struct GameObjectTemplate::@236::@252 summoningRitual
uint32 animSpell
Definition GameObjectData.h:234

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.

122{
123 if (GetTransport() && !ToTransport())
124 {
126 SetTransport(nullptr);
129 }
130
131 if (IsInWorld())
133
134 if (m_uint32Values) // field array can be not exist if GameOBject not loaded
136}
@ MOVEMENTFLAG_ONTRANSPORT
Definition UnitDefines.h:381
void RemoveFromWorld() override
Definition GameObject.cpp:185
void RemoveFromOwner()
Definition GameObject.cpp:138
Transport * ToTransport()
Definition GameObject.h:323
virtual void RemovePassenger(WorldObject *passenger, bool withAll=false)=0
void SetTransport(Transport *t)
Definition Object.h:709
Transport * GetTransport() const
Definition Object.h:701
MovementInfo m_movementInfo
Definition Object.h:711
void Reset()
Definition Object.h:306
void RemoveMovementFlag(uint32 flag)
Definition Object.h:352
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
249{
250 if (m_unique_users.empty())
251 return;
252
254 if (!animSpell)
255 animSpell = GetSpellId();
256
257 for (ObjectGuid const& guid : m_unique_users)
258 {
259 if (Player* channeler = ObjectAccessor::GetPlayer(*this, guid))
260 if (Spell* spell = channeler->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
261 if (spell->m_spellInfo->Id == animSpell)
262 {
263 spell->SendChannelUpdate(0);
264 spell->finish();
265 }
266 }
267
268 m_unique_users.clear();
269}

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.

272{
273 ASSERT(map);
274 SetMap(map);
275
276 Relocate(x, y, z, ang);
277 m_stationaryPosition.Relocate(x, y, z, ang);
278 if (!IsPositionValid())
279 {
280 LOG_ERROR("entities.gameobject", "Gameobject (GUID: {} Entry: {}) not created. Suggested coordinates isn't valid (X: {} Y: {})", guidlow, name_id, x, y);
281 return false;
282 }
283
284 SetPhaseMask(phaseMask, false);
285
287
289 if (m_zoneScript)
290 {
291 name_id = m_zoneScript->GetGameObjectEntry(guidlow, name_id);
292 if (!name_id)
293 return false;
294 }
295
296 GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(name_id);
297 if (!goinfo)
298 {
299 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);
300 return false;
301 }
302
303 Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject);
304
305 m_goInfo = goinfo;
306
307 if (goinfo->type >= MAX_GAMEOBJECT_TYPE)
308 {
309 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);
310 return false;
311 }
312
313 SetWorldRotation(rotation);
314
315 GameObjectAddon const* gameObjectAddon = sObjectMgr->GetGameObjectAddon(GetSpawnId());
316 QuaternionData parentRotation;
317 if (gameObjectAddon)
318 parentRotation = gameObjectAddon->ParentRotation;
319
320 SetTransportPathRotation(parentRotation.x, parentRotation.y, parentRotation.z, parentRotation.w);
321
322 SetObjectScale(goinfo->size);
323
324 if (GameObjectTemplateAddon const* templateAddon = GetTemplateAddon())
325 {
326 SetUInt32Value(GAMEOBJECT_FACTION, templateAddon->faction);
327 ReplaceAllGameObjectFlags((GameObjectFlags)templateAddon->flags);
328 }
329
330 SetEntry(goinfo->entry);
331
332 // set name for logs usage, doesn't affect anything ingame
333 SetName(goinfo->name);
334
335 // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
337
339 {
340 if (InstanceScript* instance = GetInstanceScript())
341 {
342 switch (uint8 state = instance->GetStoredGameObjectState(GetSpawnId()))
343 {
344 case 0:
346 SwitchDoorOrButton(true);
347 break;
348 case 1:
349 case 2:
350 SetGoState((GOState)state);
351 break;
352 default:
353 SetGoState(go_state);
354 break;
355 }
356 }
357 }
358 else
359 {
360 SetGoState(go_state);
361 }
362
363 SetGoArtKit(artKit);
364
365 SetDisplayId(goinfo->displayId);
366
367 if (!m_model)
369
370 switch (goinfo->type)
371 {
373 SetGoAnimProgress(animprogress);
375 break;
380 break;
383 break;
385 if (GetGOInfo()->trap.stealthed)
386 {
389 }
390
391 if (GetGOInfo()->trap.invisible)
392 {
395 }
396 break;
397 default:
398 SetGoAnimProgress(animprogress);
399 break;
400 }
401
402 if (gameObjectAddon)
403 {
404 if (gameObjectAddon->InvisibilityValue)
405 {
406 m_invisibility.AddFlag(gameObjectAddon->invisibilityType);
407 m_invisibility.AddValue(gameObjectAddon->invisibilityType, gameObjectAddon->InvisibilityValue);
408 }
409 }
410
413
414 if (uint32 linkedEntry = GetGOInfo()->GetLinkedGameObjectEntry())
415 {
416 GameObject* linkedGO = new GameObject();
417 if (linkedGO->Create(map->GenerateLowGuid<HighGuid::GameObject>(), linkedEntry, map, phaseMask, x, y, z, ang, rotation, 255, GO_STATE_READY))
418 {
419 SetLinkedTrap(linkedGO);
420 map->AddToMap(linkedGO);
421 }
422 else
423 {
424 delete linkedGO;
425 }
426 }
427
428 // Check if GameObject is Large
429 if (goinfo->IsLargeGameObject())
431
432 // Check if GameObject is Infinite
433 if (goinfo->IsInfiniteGameObject())
435
436 return true;
437}
#define ASSERT
Definition Errors.h:68
GOState
Definition GameObjectData.h:707
#define LOG_ERROR(filterType__,...)
Definition Log.h:145
#define sObjectMgr
Definition ObjectMgr.h:1731
uint32 urand(uint32 min, uint32 max)
Definition Random.cpp:44
GameobjectTypes
Definition SharedDefines.h:1563
@ GAMEOBJECT_TYPE_TRAP
Definition SharedDefines.h:1570
@ GAMEOBJECT_TYPE_FISHINGHOLE
Definition SharedDefines.h:1589
@ GAMEOBJECT_TYPE_FISHINGNODE
Definition SharedDefines.h:1581
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
Definition SharedDefines.h:1597
@ STEALTH_TRAP
Definition SharedDefines.h:1236
@ INVISIBILITY_TRAP
Definition SharedDefines.h:1246
#define MAX_GAMEOBJECT_TYPE
Definition SharedDefines.h:1602
GameObjectFlags
Definition SharedDefines.h:1606
void AddFlag(FLAG_TYPE flag)
Definition Object.h:401
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition Object.h:406
GameObject()
Definition GameObject.cpp:58
void SetGoState(GOState state)
Definition GameObject.cpp:2519
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition GameObject.cpp:2289
void SetGoArtKit(uint8 artkit)
Definition GameObject.cpp:1443
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition GameObject.cpp:2638
void SetGoAnimProgress(uint8 animprogress)
Definition GameObject.h:211
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:271
GameObjectModel * CreateModel()
Definition GameObject.cpp:2999
void SetGoType(GameobjectTypes type)
Definition GameObject.h:205
void SetLinkedTrap(GameObject *linkedTrap)
Definition GameObject.h:262
ObjectGuid::LowType GetSpawnId() const
Definition GameObject.h:144
bool AIM_Initialize()
Definition GameObject.cpp:102
virtual uint32 GetScriptId() const
Definition GameObject.cpp:2236
void SetDisplayId(uint32 displayid)
Definition GameObject.cpp:2632
void ReplaceAllGameObjectFlags(GameObjectFlags flags)
Definition GameObject.h:221
bool IsInstanceGameobject() const
Definition GameObject.cpp:2555
void SwitchDoorOrButton(bool activate, bool alternative=false)
Definition GameObject.cpp:1466
void SetWorldRotation(G3D::Quat const &rot)
Definition GameObject.cpp:2277
Definition InstanceScript.h:143
ObjectGuid::LowType GenerateLowGuid()
Definition Map.h:528
uint32 GetId() const
Definition Map.h:234
bool AddToMap(T *, bool checkTransport=false)
Definition Map.cpp:307
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition Object.cpp:128
void SetEntry(uint32 entry)
Definition Object.h:124
virtual void SetObjectScale(float scale)
Definition Object.h:127
void SetUInt32Value(uint16 index, uint32 value)
Definition Object.cpp:648
InstanceScript * GetInstanceScript() const
Definition Object.cpp:1247
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition Object.h:626
uint32 LastUsedScriptID
Definition Object.h:698
void SetName(std::string const &newname)
Definition Object.h:536
void SetZoneScript()
Definition Object.cpp:2431
virtual void SetMap(Map *map)
Definition Object.cpp:2196
void UpdatePositionData()
Definition Object.cpp:1188
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition Object.h:623
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition Object.cpp:1117
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType, uint32 entry)
Definition ZoneScript.h:32
Definition GameObjectData.h:699
QuaternionData ParentRotation
Definition GameObjectData.h:700
uint32 InvisibilityValue
Definition GameObjectData.h:702
InvisibilityType invisibilityType
Definition GameObjectData.h:701
Definition GameObjectData.h:667
Definition GameObjectData.h:32
uint32 intactNumHits
Definition GameObjectData.h:352
uint32 stealthed
Definition GameObjectData.h:125
uint32 type
Definition GameObjectData.h:34
uint32 entry
Definition GameObjectData.h:33
bool IsLargeGameObject() const
Definition GameObjectData.h:594
bool IsInfiniteGameObject() const
Definition GameObjectData.h:619
uint32 minSuccessOpens
Definition GameObjectData.h:88
uint32 invisible
Definition GameObjectData.h:127
uint32 damagedNumHits
Definition GameObjectData.h:357
struct GameObjectTemplate::@236::@264 building
std::string name
Definition GameObjectData.h:36
uint32 maxSuccessOpens
Definition GameObjectData.h:89
float size
Definition GameObjectData.h:40
uint32 displayId
Definition GameObjectData.h:35
bool IsPositionValid() const
Definition Position.cpp:183
Definition GameObjectData.h:683
float w
Definition GameObjectData.h:687
float z
Definition GameObjectData.h:686
float y
Definition GameObjectData.h:685
float x
Definition GameObjectData.h:684
uint32 MaxOpens
Definition GameObject.h:60
struct GameObjectValue::@233 FishingHole
uint32 MaxHealth
Definition GameObject.h:71
struct GameObjectValue::@235 Building
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
3000{
3001 return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
3002}
static GameObjectModel * Create(std::unique_ptr< GameObjectModelOwnerBase > modelOwner, std::string const &dataPath)
Definition GameObjectModel.cpp:161

References GameObjectModel::Create(), and sWorld.

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

◆ Delete()

void GameObject::Delete ( )
978{
981
983
985
986 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
988
989 // Xinef: if ritual gameobject is removed, clear anim spells
992
993 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
994 if (poolid)
995 sPoolMgr->UpdatePool<GameObject>(GetMap()->GetPoolData(), poolid, m_spawnId);
996 else
998}
#define sPoolMgr
Definition PoolMgr.h:216
@ GAMEOBJECT_TYPE_SUMMONING_RITUAL
Definition SharedDefines.h:1582
void SetLootState(LootState s, Unit *unit=nullptr)
Definition GameObject.cpp:2484
void ClearRitualList()
Definition GameObject.cpp:248
SpawnedPoolData & GetPoolData()
Definition Map.h:384
void AddObjectToRemoveList()
Definition Object.cpp:2232
void SendObjectDeSpawnAnim(ObjectGuid guid)
Definition Object.cpp:2189

References WorldObject::AddObjectToRemoveList(), ClearRitualList(), GAMEOBJECT_TYPE_SUMMONING_RITUAL, GetGOInfo(), Object::GetGUID(), WorldObject::GetMap(), Map::GetPoolData(), 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(), go_empowering_blood_orb::HandleObjectUse(), instance_razorfen_downs::instance_razorfen_downs_InstanceMapScript::OnGameObjectCreate(), Unit::RemoveAllGameObjects(), Unit::RemoveGameObject(), go_razorscale_mole_machine::go_razorscale_mole_machineAI::Reset(), 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 ( )
1173{
1175 sObjectMgr->DeleteGOData(m_spawnId);
1176
1178 stmt->SetData(0, m_spawnId);
1179 WorldDatabase.Execute(stmt);
1180
1181 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
1182 stmt->SetData(0, m_spawnId);
1183 WorldDatabase.Execute(stmt);
1184}
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition DatabaseEnv.cpp:20
@ WORLD_DEL_EVENT_GAMEOBJECT
Definition WorldDatabase.h:39
@ WORLD_DEL_GAMEOBJECT
Definition WorldDatabase.h:38
void RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
Definition Map.cpp:2551
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 
)
929{
930 if (delay > 0ms)
931 {
932 if (!m_despawnDelay || m_despawnDelay > delay.count())
933 {
934 m_despawnDelay = delay.count();
935 m_despawnRespawnTime = forceRespawnTime;
936 }
937 }
938 else
939 {
940 if (m_goData)
941 {
942 int32 const respawnDelay = (forceRespawnTime > 0s) ? forceRespawnTime.count() : m_goData->spawntimesecs;
943 SetRespawnTime(respawnDelay);
944 }
945
946 // Respawn is handled by the gameobject itself.
947 // If we delete it from world, it simply never respawns...
948 // Uncomment this and remove the following lines if dynamic spawn is implemented.
949 // Delete();
950 {
954
955 if (GameObject* trap = GetLinkedTrap())
956 {
957 trap->DespawnOrUnsummon();
958 }
959
960 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
961 {
963 }
964
965 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
966
967 // Keep the current pooled gameobject reserved until its respawn timer expires.
968 // GameObject::Update() will update the pool when the object is ready to respawn.
969 if (poolid && !m_respawnTime)
970 {
971 sPoolMgr->UpdatePool<GameObject>(GetMap()->GetPoolData(), poolid, m_spawnId);
972 }
973 }
974 }
975}
@ GO_JUST_DEACTIVATED
Definition GameObject.h:113
GameObject * GetLinkedTrap()
Definition GameObject.cpp:2777
void SetRespawnTime(int32 respawn)
Definition GameObject.cpp:1288
int32 spawntimesecs
Definition GameObjectData.h:719

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

Referenced by Spell::EffectActivateObject(), instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_molten_core::OnGameObjectCreate(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnGameObjectCreate(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_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)
2647{
2648 if (!m_model)
2649 return;
2650
2651 /*if (enable && !GetMap()->ContainsGameObjectModel(*m_model))
2652 GetMap()->InsertGameObjectModel(*m_model);*/
2653
2654 uint32 phaseMask = 0;
2655 if (enable && !sDisableMgr->IsDisabledFor(DISABLE_TYPE_GO_LOS, GetEntry(), nullptr))
2656 phaseMask = GetPhaseMask();
2657
2658 m_model->enable(phaseMask);
2659}
#define sDisableMgr
Definition DisableMgr.h:88
@ DISABLE_TYPE_GO_LOS
Definition DisableMgr.h:35
void enable(uint32 ph_mask)
Definition GameObjectModel.h:69
uint32 GetPhaseMask() const
Definition Object.h:523

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

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

◆ EventInform()

void GameObject::EventInform ( uint32  eventId)
2225{
2226 if (!eventId)
2227 return;
2228
2229 if (AI())
2230 AI()->EventInform(eventId);
2231
2232 if (m_zoneScript)
2233 m_zoneScript->ProcessEvent(this, eventId);
2234}
virtual void EventInform(uint32)
Definition GameObjectAI.h:65
GameObjectAI * AI() const
Definition GameObject.h:308
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
2590{
2591 uint8 m_state = 3;
2592
2593 if (state)
2594 {
2595 switch (*state)
2596 {
2597 case GO_STATE_ACTIVE:
2598 m_state = 0;
2599 return m_state;
2600 case GO_STATE_READY:
2601 m_state = 1;
2602 return m_state;
2604 m_state = 2;
2605 return m_state;
2606 }
2607 }
2608
2609 // Returning any value that is not one of the specified ones
2610 // Which will default into the invalid part of the switch
2611 return m_state;
2612}
@ GO_STATE_ACTIVE
Definition GameObjectData.h:708
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition GameObjectData.h:710

References GO_STATE_ACTIVE, GO_STATE_ACTIVE_ALTERNATIVE, and GO_STATE_READY.

Referenced by SaveStateToDB().

◆ GetAIName()

std::string const & GameObject::GetAIName ( ) const
117{
118 return sObjectMgr->GetGameObjectTemplate(GetEntry())->AIName;
119}

References Object::GetEntry(), and sObjectMgr.

Referenced by GetDebugInfo().

◆ GetDebugInfo()

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

Reimplemented from Object.

Reimplemented in MotionTransport.

3131{
3132 std::stringstream sstr;
3133 sstr << WorldObject::GetDebugInfo() << "\n"
3134 << "SpawnId: " << GetSpawnId() << " GoState: " << std::to_string(GetGoState()) << " ScriptId: " << GetScriptId() << " AIName: " << GetAIName();
3135 return sstr.str();
3136}
std::string const & GetAIName() const
Definition GameObject.cpp:116
std::string GetDebugInfo() const override
Definition Object.cpp:2596

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

Referenced by MotionTransport::GetDebugInfo().

◆ GetDestructibleState()

GameObjectDestructibleState GameObject::GetDestructibleState ( ) const
inline
297 {
303 }
@ GO_FLAG_DESTROYED
Definition SharedDefines.h:1615
@ GO_FLAG_DAMAGED
Definition SharedDefines.h:1614
@ GO_DESTRUCTIBLE_DESTROYED
Definition SharedDefines.h:1633
@ GO_DESTRUCTIBLE_INTACT
Definition SharedDefines.h:1631
@ GO_DESTRUCTIBLE_DAMAGED
Definition SharedDefines.h:1632
bool HasGameObjectFlag(GameObjectFlags flags) const
Definition GameObject.h:218

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

◆ GetDynamicFlags()

uint32 GameObject::GetDynamicFlags ( ) const
inlineoverridevirtual

Reimplemented from Object.

References GAMEOBJECT_DYNAMIC, and Object::GetUInt32Value().

◆ GetFaction()

uint32 GameObject::GetFaction ( ) const
inlineoverridevirtual

Reimplemented from WorldObject.

References GAMEOBJECT_FACTION, and Object::GetUInt32Value().

◆ GetFinalWorldRotation()

G3D::Quat GameObject::GetFinalWorldRotation ( ) const
2303{
2304 G3D::Quat worldRotation = GetWorldRotation();
2305 if (Transport* transport = GetTransport())
2306 {
2307 G3D::Quat transportRotation = transport->GetWorldRotation();
2308
2309 G3D::Quat transportRotationQuat(transportRotation.x, transportRotation.y, transportRotation.z, transportRotation.w);
2310 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2311
2312 G3D::Quat resultRotation = worldRotationQuat * transportRotationQuat;
2313
2314 return G3D::Quat(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
2315 }
2316 return worldRotation;
2317}
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 
)
1001{
1002 fishLoot->clear();
1003
1004 uint32 zone, area;
1005 uint32 defaultZone = 1;
1006 GetZoneAndAreaId(zone, area);
1007
1008 uint16 lootMode = junk ? LOOT_MODE_JUNK_FISH : LOOT_MODE_DEFAULT;
1009 // Check to fill loot in the order area - zone - defaultZone.
1010 // This is because area and zone is not set in some places, like Off the coast of Storm Peaks.
1011 uint32 lootZones[] = { area, zone, defaultZone };
1012 for (uint32 fillZone : lootZones)
1013 {
1014 fishLoot->FillLoot(fillZone, LootTemplates_Fishing, lootOwner, true, true, lootMode);
1015
1016 // If the loot is filled and the loot is eligible, then we break out of the loop.
1017 if (!fishLoot->empty() && !fishLoot->isLooted())
1018 break;
1019 }
1020}
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:3187
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:540

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
210{ return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
@ GAMEOBJECT_BYTES_1
Definition UpdateFields.h:404
uint8 GetByteValue(uint16 index, uint8 offset) const
Definition Object.cpp:321

References GAMEOBJECT_BYTES_1, and Object::GetByteValue().

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

◆ GetGoArtKit()

uint8 GameObject::GetGoArtKit ( ) const
inline
208{ 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
2915{
2916 switch (GetGoType())
2917 {
2919 return 0.0f;
2925 return 5.5555553f;
2927 return 10.0f;
2930 return 3.0f;
2932 return 100.0f;
2934 return 20.0f + CONTACT_DISTANCE; // max spell range
2940 return 5.0f;
2941 // Following values are not blizzlike
2944 // 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.
2945 // 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.
2946 return 10.0f; // 5.0f is blizzlike
2947 default:
2948 return INTERACTION_DISTANCE;
2949 }
2950}
#define INTERACTION_DISTANCE
Definition ObjectDefines.h:24
#define CONTACT_DISTANCE
Definition ObjectDefines.h:23
@ GAMEOBJECT_TYPE_GUILD_BANK
Definition SharedDefines.h:1598
@ GAMEOBJECT_TYPE_MINI_GAME
Definition SharedDefines.h:1591
@ GAMEOBJECT_TYPE_CAMERA
Definition SharedDefines.h:1577
@ GAMEOBJECT_TYPE_MAP_OBJECT
Definition SharedDefines.h:1578
@ GAMEOBJECT_TYPE_FLAGDROP
Definition SharedDefines.h:1590
@ GAMEOBJECT_TYPE_MAILBOX
Definition SharedDefines.h:1583
@ GAMEOBJECT_TYPE_FLAGSTAND
Definition SharedDefines.h:1588
@ GAMEOBJECT_TYPE_CHAIR
Definition SharedDefines.h:1571
@ GAMEOBJECT_TYPE_TEXT
Definition SharedDefines.h:1573
@ GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
Definition SharedDefines.h:1595
@ GAMEOBJECT_TYPE_AREADAMAGE
Definition SharedDefines.h:1576
@ GAMEOBJECT_TYPE_BARBER_CHAIR
Definition SharedDefines.h:1596
@ GAMEOBJECT_TYPE_DOOR
Definition SharedDefines.h:1564
@ GAMEOBJECT_TYPE_BINDER
Definition SharedDefines.h:1568

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.

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

References GetOwner().

◆ GetLinkedTrap()

GameObject * GameObject::GetLinkedTrap ( )
2778{
2780}
ObjectGuid m_linkedTrap
Definition GameObject.h:409
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:208

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
259{ return m_lootGenerationTime; }

References m_lootGenerationTime.

Referenced by Player::SendLoot().

◆ GetLootMode()

uint16 GameObject::GetLootMode ( ) const
inline

◆ GetLootRecipient()

Player * GameObject::GetLootRecipient ( ) const
2675{
2676 if (!m_lootRecipient)
2677 return nullptr;
2679}
ObjectGuid m_lootRecipient
Definition GameObject.h:404
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition ObjectAccessor.cpp:281

References ObjectAccessor::FindConnectedPlayer(), and m_lootRecipient.

◆ GetLootRecipientGroup()

Group * GameObject::GetLootRecipientGroup ( ) const
2682{
2684 return nullptr;
2685 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
2686}
#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.

2247{
2248 if (loc_idx != DEFAULT_LOCALE)
2249 {
2250 uint8 uloc_idx = uint8(loc_idx);
2251 if (GameObjectLocale const* cl = sObjectMgr->GetGameObjectLocale(GetEntry()))
2252 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
2253 return cl->Name[uloc_idx];
2254 }
2255
2256 return GetName();
2257}
#define DEFAULT_LOCALE
Definition Common.h:139
std::string const & GetName() const
Definition Object.h:535
Definition GameObjectData.h:677

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

Referenced by gobject_commandscript::HandleGameObjectRespawn().

◆ GetOwner()

Unit * GameObject::GetOwner ( ) const
1224{
1225 return ObjectAccessor::GetUnit(*this, GetOwnerGUID());
1226}
Unit * GetUnit(WorldObject const &, ObjectGuid const &guid)
Definition ObjectAccessor.cpp:223

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
2883{
2884 if (m_spawnId)
2885 {
2886 if (GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId))
2887 {
2888 x = data->posX;
2889 y = data->posY;
2890 z = data->posZ;
2891 if (ori)
2892 *ori = data->orientation;
2893 return;
2894 }
2895 }
2896
2897 x = GetPositionX();
2898 y = GetPositionY();
2899 z = GetPositionZ();
2900 if (ori)
2901 *ori = GetOrientation();
2902}
Definition GameObjectData.h:715
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
2966{
2967 time_t now = GameTime::GetGameTime().count();
2968 if (m_respawnTime > now)
2969 return m_respawnTime;
2970 else
2971 return now;
2972}
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
3052{
3053 if (!player)
3054 {
3055 return nullptr;
3056 }
3057
3058 uint32 lockId = GetGOInfo()->GetLockId();
3059 if (!lockId)
3060 {
3061 return nullptr;
3062 }
3063
3064 LockEntry const* lock = sLockStore.LookupEntry(lockId);
3065 if (!lock)
3066 {
3067 return nullptr;
3068 }
3069
3070 for (uint8 i = 0; i < MAX_LOCK_CASE; ++i)
3071 {
3072 if (!lock->Type[i])
3073 {
3074 continue;
3075 }
3076
3077 if (lock->Type[i] == LOCK_KEY_SPELL)
3078 {
3079 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(lock->Index[i]))
3080 {
3081 return spell;
3082 }
3083 }
3084
3085 if (lock->Type[i] != LOCK_KEY_SKILL)
3086 {
3087 break;
3088 }
3089
3090 for (auto&& playerSpell : player->GetSpellMap())
3091 {
3092 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(playerSpell.first))
3093 {
3094 for (auto&& effect : spell->Effects)
3095 {
3096 if (effect.Effect == SPELL_EFFECT_OPEN_LOCK && ((uint32) effect.MiscValue) == lock->Index[i])
3097 {
3098 if (effect.CalcValue(player) >= int32(lock->Skill[i]))
3099 {
3100 return spell;
3101 }
3102 }
3103 }
3104 }
3105 }
3106 }
3107
3108 return nullptr;
3109}
DBCStorage< LockEntry > sLockStore(LockEntryfmt)
#define MAX_LOCK_CASE
Definition DBCStructure.h:1341
@ SPELL_EFFECT_OPEN_LOCK
Definition SharedDefines.h:799
@ LOCK_KEY_SKILL
Definition SharedDefines.h:2590
@ LOCK_KEY_SPELL
Definition SharedDefines.h:2591
uint32 GetLockId() const
Definition GameObjectData.h:428
Definition DBCStructure.h:1344
uint32 Type[MAX_LOCK_CASE]
Definition DBCStructure.h:1346
uint32 Index[MAX_LOCK_CASE]
Definition DBCStructure.h:1347
uint32 Skill[MAX_LOCK_CASE]
Definition DBCStructure.h:1348

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
243{ return m_unique_users.size(); }

References m_unique_users.

Referenced by Update(), and Use().

◆ GetUseCount()

uint32 GameObject::GetUseCount ( ) const
inline
242{ 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:401

References WorldRotation.

Referenced by GetFinalWorldRotation().

◆ HasGameObjectFlag()

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

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.

1201{
1202 QuestRelationBounds qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(GetEntry());
1203 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1204 {
1205 if (itr->second == quest_id)
1206 return true;
1207 }
1208 return false;
1209}
std::pair< QuestRelations::const_iterator, QuestRelations::const_iterator > QuestRelationBounds
Definition ObjectMgr.h:531

References Object::GetEntry(), and sObjectMgr.

◆ HasLootMode()

bool GameObject::HasLootMode ( uint16  lootMode) const
inline
230{ 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.

1190{
1191 QuestRelationBounds qr = sObjectMgr->GetGOQuestRelationBounds(GetEntry());
1192 for (QuestRelations::const_iterator itr = qr.first; itr != qr.second; ++itr)
1193 {
1194 if (itr->second == quest_id)
1195 return true;
1196 }
1197 return false;
1198}

References Object::GetEntry(), and sObjectMgr.

◆ IsAllowedToSaveToDB()

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

References m_saveStateOnDb.

Referenced by SetGoState().

◆ IsAlwaysVisibleFor()

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

Reimplemented from WorldObject.

1249{
1251 return true;
1252
1254 return true;
1255
1256 if (!seer)
1257 return false;
1258
1259 // Always seen by owner and friendly units
1260 if (ObjectGuid guid = GetOwnerGUID())
1261 {
1262 if (seer->GetGUID() == guid)
1263 return true;
1264
1265 Unit* owner = GetOwner();
1266 if (owner)
1267 {
1268 if (seer->IsUnit() && owner->IsFriendlyTo(seer->ToUnit()))
1269 return true;
1270 }
1271 }
1272
1273 return false;
1274}
bool IsDestructibleBuilding() const
Definition GameObject.cpp:1216
bool IsFriendlyTo(Unit const *unit) const
Definition Unit.cpp:7043
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition Object.h:822

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
3005{
3006 if (spell || (spell = GetSpellForLock(player)))
3007 {
3008 float maxRange = spell->GetMaxRange(spell->IsPositive());
3009
3011 {
3012 return maxRange * maxRange >= GetExactDistSq(player);
3013 }
3014
3015 if (sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
3016 {
3017 return IsAtInteractDistance(*player, maxRange);
3018 }
3019 }
3020
3022}
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
bool IsAtInteractDistance(Position const &pos, float radius) const
Definition GameObject.cpp:3024
SpellInfo const * GetSpellForLock(Player const *player) const
Definition GameObject.cpp:3051
float GetInteractionDistance() const
Definition GameObject.cpp:2914
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
3025{
3026 if (GameObjectDisplayInfoEntry const* displayInfo = sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
3027 {
3028 float scale = GetObjectScale();
3029
3030 float minX = displayInfo->minX * scale - radius;
3031 float minY = displayInfo->minY * scale - radius;
3032 float minZ = displayInfo->minZ * scale - radius;
3033 float maxX = displayInfo->maxX * scale + radius;
3034 float maxY = displayInfo->maxY * scale + radius;
3035 float maxZ = displayInfo->maxZ * scale + radius;
3036
3037 G3D::Quat finalRotation = GetFinalWorldRotation();
3038 G3D::Quat finalRotationQuat(finalRotation.x, finalRotation.y, finalRotation.z, finalRotation.w);
3039
3040 return G3D::CoordinateFrame {{finalRotationQuat}, {GetPositionX(), GetPositionY(), GetPositionZ()}}.toWorldSpace(G3D::Box {{minX, minY, minZ}, {maxX, maxY, maxZ}}).contains({pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()});
3041 }
3042
3043 return GetExactDist(&pos) <= radius;
3044}
G3D::Quat GetFinalWorldRotation() const
Definition GameObject.cpp:2302
float GetObjectScale() const
Definition Object.h:126
Definition DBCStructure.h:1039
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
1217{
1218 GameObjectTemplate const* gInfo = GetGOInfo();
1219 if (!gInfo) return false;
1221}

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

Referenced by IsAlwaysVisibleFor(), and ModifyHealth().

◆ IsInRange2d()

bool GameObject::IsInRange2d ( float  x,
float  y,
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

2173{
2175 if (!info)
2176 return IsWithinDist2d(x, y, radius);
2177
2178 float sinA = std::sin(GetOrientation());
2179 float cosA = cos(GetOrientation());
2180 float dx = x - GetPositionX();
2181 float dy = y - GetPositionY();
2182 float dist = std::sqrt(dx * dx + dy * dy);
2185 if (G3D::fuzzyEq(dist, 0.0f))
2186 return true;
2187
2188 float scale = GetObjectScale();
2189 float sinB = dx / dist;
2190 float cosB = dy / dist;
2191 dx = dist * (cosA * cosB + sinA * sinB);
2192 dy = dist * (cosA * sinB - sinA * cosB);
2193 return dx < (info->maxX * scale) + radius && dx >(info->minX * scale) - radius
2194 && dy < (info->maxY * scale) + radius && dy >(info->minY * scale) - radius;
2195}
bool IsWithinDist2d(float x, float y, float dist) const
Definition Object.cpp:1364
float maxX
Definition DBCStructure.h:1046
float maxY
Definition DBCStructure.h:1047
float minY
Definition DBCStructure.h:1044
float minX
Definition DBCStructure.h:1043

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

Referenced by IsWithinSightRange().

◆ IsInRange3d()

bool GameObject::IsInRange3d ( 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

2198{
2200 if (!info)
2201 return IsWithinDist3d(x, y, z, radius);
2202
2203 float sinA = std::sin(GetOrientation());
2204 float cosA = cos(GetOrientation());
2205 float dx = x - GetPositionX();
2206 float dy = y - GetPositionY();
2207 float dz = z - GetPositionZ();
2208 float dist = std::sqrt(dx * dx + dy * dy);
2211 if (G3D::fuzzyEq(dist, 0.0f))
2212 return true;
2213
2214 float scale = GetObjectScale();
2215 float sinB = dx / dist;
2216 float cosB = dy / dist;
2217 dx = dist * (cosA * cosB + sinA * sinB);
2218 dy = dist * (cosA * sinB - sinA * cosB);
2219 return dx < (info->maxX * scale) + radius && dx > (info->minX * scale) - radius
2220 && dy < (info->maxY * scale) + radius && dy > (info->minY * scale) - radius
2221 && dz < (info->maxZ * scale) + radius && dz > (info->minZ * scale) - radius;
2222}
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition Object.cpp:1354
float minZ
Definition DBCStructure.h:1045
float maxZ
Definition DBCStructure.h:1048

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
3118{
3119 for (auto const& itr : m_SkillupList)
3120 {
3121 if (itr.first == playerGuid)
3122 {
3123 return true;
3124 }
3125 }
3126
3127 return false;
3128}

References m_SkillupList.

Referenced by Spell::EffectOpenLock().

◆ IsInstanceGameobject()

bool GameObject::IsInstanceGameobject ( ) const
2556{
2557 // Avoid checking for unecessary gameobjects whose
2558 // states don't matter for the dungeon progression
2560 {
2561 return false;
2562 }
2563
2564 if (auto* map = FindMap())
2565 {
2566 if (map->IsDungeon() || map->IsRaid())
2567 {
2568 return true;
2569 }
2570 }
2571 return false;
2572}
bool ValidateGameobjectType() const
Definition GameObject.cpp:2574
Map * FindMap() const
Definition Object.h:638

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

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

◆ IsInvisibleDueToDespawn()

bool GameObject::IsInvisibleDueToDespawn ( ) const
overridevirtual

Reimplemented from WorldObject.

1277{
1279 return true;
1280
1281 // Despawned
1282 if (!isSpawned())
1283 return true;
1284
1285 return false;
1286}
bool isSpawned() const
Definition GameObject.h:191
virtual bool IsInvisibleDueToDespawn() const
Definition Object.h:823

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

◆ IsLootAllowedFor()

bool GameObject::IsLootAllowedFor ( Player const *  player) const
2745{
2747 {
2748 return true;
2749 }
2750
2751 if (player->GetGUID() == m_lootRecipient)
2752 {
2753 return true;
2754 }
2755
2756 if (player->HasPendingBind())
2757 {
2758 return false;
2759 }
2760
2761 // if we dont have a group we arent the recipient
2762 // if go doesnt have group bound it means it was solo killed by someone else
2763 Group const* playerGroup = player->GetGroup();
2764 if (!playerGroup || playerGroup != GetLootRecipientGroup())
2765 {
2766 return false;
2767 }
2768
2769 if (!HasAllowedLooter(player->GetGUID()))
2770 {
2771 return false;
2772 }
2773
2774 return true;
2775}
Group * GetLootRecipientGroup() const
Definition GameObject.cpp:2681
Definition Group.h:177
bool HasAllowedLooter(ObjectGuid guid) const
Definition Object.cpp:3227

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.

1238{
1240 return true;
1241
1242 if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
1243 return true;
1244
1245 return false;
1246}
virtual bool IsNeverVisible() const
Definition Object.h:821
uint32 serverOnly
Definition GameObjectData.h:108

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

◆ IsRespawnCompatibilityMode()

bool GameObject::IsRespawnCompatibilityMode ( ) const
inline
bool _respawnCompatibilityMode
Definition GameObject.h:374

References _respawnCompatibilityMode.

◆ isSpawned()

◆ isSpawnedByDefault()

bool GameObject::isSpawnedByDefault ( ) const
inline

◆ IsStaticTransport()

bool GameObject::IsStaticTransport ( ) const
inline

◆ IsTransport()

◆ IsUpdateNeeded()

bool GameObject::IsUpdateNeeded ( )
overridevirtual

Reimplemented from WorldObject.

3140{
3142 return true;
3143
3144 if (GetMap()->isCellMarked(GetCurrentCell().GetCellCoord().GetId()))
3145 return true;
3146
3147 if (!GetObjectVisibilityContainer().GetVisiblePlayersMap().empty())
3148 return true;
3149
3150 if (IsTransport())
3151 return true;
3152
3153 return false;
3154}
Cell const & GetCurrentCell() const
Definition Object.h:429
virtual bool IsUpdateNeeded()
Definition Object.cpp:3247
ObjectVisibilityContainer & GetObjectVisibilityContainer()
Definition Object.h:744

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
1387{
1388 return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, incOwnRadius, incTargetRadius);
1389}
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:421

◆ IsWithinSightRange()

bool GameObject::IsWithinSightRange ( Position const &  pos,
float  dist 
) const
overrideprivatevirtual

Reimplemented from WorldObject.

2273{
2274 return IsInRange2d(pos.GetPositionX(), pos.GetPositionY(), dist);
2275}
bool IsInRange2d(float x, float y, float radius) const
Definition GameObject.cpp:2172

References Position::GetPositionX(), Position::GetPositionY(), and IsInRange2d().

◆ 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:1103

References LoadGameObjectFromDB().

Referenced by GridObjectLoader::LoadGameObjects().

◆ LoadGameObjectFromDB()

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

Reimplemented in StaticTransport.

1104{
1105 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
1106
1107 if (!data)
1108 {
1109 LOG_ERROR("sql.sql", "Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
1110 return false;
1111 }
1112
1113 uint32 entry = data->id;
1114 //uint32 map_id = data->mapid; // already used before call
1115 uint32 phaseMask = data->phaseMask;
1116 float x = data->posX;
1117 float y = data->posY;
1118 float z = data->posZ;
1119 float ang = data->orientation;
1120
1121 uint32 animprogress = data->animprogress;
1122 GOState go_state = data->go_state;
1123 uint32 artKit = data->artKit;
1124
1125 m_goData = data;
1126 m_spawnId = spawnId;
1127
1128 // Set respawn compatibility mode based on spawn group flags
1129 SpawnGroupTemplateData const* groupData = sObjectMgr->GetSpawnGroupData(data->spawnGroupId);
1131 || !groupData || (groupData->flags & SPAWNGROUP_FLAG_COMPATIBILITY_MODE);
1132
1133 if (!Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, phaseMask, x, y, z, ang, data->rotation, animprogress, go_state, artKit))
1134 return false;
1135
1136 if (data->spawntimesecs >= 0)
1137 {
1138 m_spawnedByDefault = true;
1139
1141 {
1144 m_respawnTime = 0;
1145 }
1146 else
1147 {
1150
1151 // ready to respawn
1153 {
1154 m_respawnTime = 0;
1156 }
1157 }
1158 }
1159 else
1160 {
1161 m_spawnedByDefault = false;
1163 m_respawnTime = 0;
1164 }
1165
1166 if (addToMap && !GetMap()->AddToMap(this))
1167 return false;
1168
1169 return true;
1170}
@ GO_FLAG_NODESPAWN
Definition SharedDefines.h:1612
@ SPAWNGROUP_FLAG_COMPATIBILITY_MODE
Definition SpawnData.h:45
@ CONFIG_RESPAWN_FORCE_COMPATIBILITY_MODE
Definition WorldConfig.h:402
void SetGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:219
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition Map.h:425
uint8 artKit
Definition GameObjectData.h:722
G3D::Quat rotation
Definition GameObjectData.h:718
uint32 animprogress
Definition GameObjectData.h:720
uint32 id
Definition GameObjectData.h:717
GOState go_state
Definition GameObjectData.h:721
bool IsDespawnAtAction() const
Definition GameObjectData.h:398
bool GetDespawnPossibility() const
Definition GameObjectData.h:459
float posX
Definition SpawnData.h:71
float posY
Definition SpawnData.h:72
uint32 phaseMask
Definition SpawnData.h:70
float orientation
Definition SpawnData.h:74
uint32 spawnGroupId
Definition SpawnData.h:78
float posZ
Definition SpawnData.h:73
Definition SpawnData.h:58
SpawnGroupFlags flags
Definition SpawnData.h:62

References _respawnCompatibilityMode, GameObjectData::animprogress, GameObjectData::artKit, CONFIG_RESPAWN_FORCE_COMPATIBILITY_MODE, Create(), SpawnGroupTemplateData::flags, GameObject, Map::GenerateLowGuid(), GameObjectTemplate::GetDespawnPossibility(), GameTime::GetGameTime(), GetGOInfo(), Map::GetGORespawnTime(), WorldObject::GetMap(), GO_FLAG_NODESPAWN, GameObjectData::go_state, GameObjectData::id, GameObjectTemplate::IsDespawnAtAction(), LOG_ERROR, m_goData, m_respawnDelayTime, m_respawnTime, m_spawnedByDefault, m_spawnId, SpawnData::orientation, SpawnData::phaseMask, SpawnData::posX, SpawnData::posY, SpawnData::posZ, Map::RemoveGORespawnTime(), GameObjectData::rotation, SetGameObjectFlag(), sObjectMgr, SPAWNGROUP_FLAG_COMPATIBILITY_MODE, SpawnData::spawnGroupId, GameObjectData::spawntimesecs, and sWorld.

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

◆ LookupFishingHoleAround()

GameObject * GameObject::LookupFishingHoleAround ( float  range)
1409{
1410 GameObject* ok = nullptr;
1411
1412 Acore::NearestGameObjectFishingHole u_check(*this, range);
1414
1415 Cell::VisitObjects(this, checker, range);
1416 return ok;
1417}
Definition GridNotifiers.h:705
Definition GridNotifiers.h:342
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?
2320{
2322 return;
2323
2324 // if this building doesn't have health, return
2326 return;
2327
2328 sScriptMgr->OnGameObjectModifyHealth(this, attackerOrHealer, change, sSpellMgr->GetSpellInfo(spellId));
2329
2330 // if the health isn't being changed, return
2331 if (!change)
2332 return;
2333
2335 change = 0;
2336
2337 // prevent double destructions of the same object
2338 if (change < 0 && !m_goValue.Building.Health)
2339 return;
2340
2341 if (int32(m_goValue.Building.Health) + change <= 0)
2345 else
2346 m_goValue.Building.Health += change;
2347
2348 // Set the health bar, value = 255 * healthPct;
2350
2351 Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
2352
2353 // dealing damage, send packet
2355 if (player)
2356 {
2357 WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4);
2358 data << GetPackGUID();
2359 data << attackerOrHealer->GetPackGUID();
2360 data << player->GetPackGUID();
2361 data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event
2362 // change >= 0 triggers SPELL_BUILDING_DAMAGE event
2363 data << uint32(spellId);
2364 player->SendDirectMessage(&data);
2365 }
2366
2368
2370 newState = GO_DESTRUCTIBLE_DESTROYED;
2371 else if (m_goValue.Building.Health <= GetGOInfo()->building.damagedNumHits)
2372 newState = GO_DESTRUCTIBLE_DAMAGED;
2374 newState = GO_DESTRUCTIBLE_INTACT;
2375
2376 if (newState == GetDestructibleState())
2377 return;
2378
2379 SetDestructibleState(newState, player, false);
2380}
GameObjectDestructibleState
Definition SharedDefines.h:1630
void SetDestructibleState(GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
Definition GameObject.cpp:2382
GameObjectDestructibleState GetDestructibleState() const
Definition GameObject.h:296
PackedGuid const & GetPackGUID() const
Definition Object.h:122
void SendDirectMessage(WorldPacket const *data) const
Definition Player.cpp:5864
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition Unit.cpp:7503
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(), and Spell::EffectGameObjectRepair().

◆ Refresh()

void GameObject::Refresh ( )
913{
914 // not refresh despawned not casted GO (despawned casted GO destroyed in all cases anyway)
916 return;
917
918 if (isSpawned())
919 GetMap()->AddToMap(this);
920}

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

Referenced by BattlegroundSA::ResetObjs().

◆ RemoveFromOwner()

void GameObject::RemoveFromOwner ( )
private
139{
140 ObjectGuid ownerGUID = GetOwnerGUID();
141 if (!ownerGUID)
142 return;
143
144 if (Unit* owner = ObjectAccessor::GetUnit(*this, ownerGUID))
145 {
146 owner->RemoveGameObject(this, false);
148 return;
149 }
150
151 LOG_DEBUG("entities.gameobject", "Delete GameObject ({} Entry: {} SpellId {} LinkedGO {}) that lost references to owner {} GO list.",
152 GetGUID().ToString(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString());
153
155}
#define LOG_DEBUG(filterType__,...)
Definition Log.h:157
void SetOwnerGUID(ObjectGuid owner)
Definition GameObject.h:164
static ObjectGuid const Empty
Definition ObjectGuid.h:123
std::string ToString() const
Definition ObjectGuid.cpp:48
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(), and RemoveFromWorld().

◆ RemoveFromWorld()

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

Reimplemented from Object.

186{
188 if (IsInWorld())
189 {
190 sScriptMgr->OnGameObjectRemoveWorld(this);
191
192 if (m_zoneScript)
194
196
197 if (m_model)
198 if (GetMap()->ContainsGameObjectModel(*m_model))
200
201 if (Transport* transport = GetTransport())
202 transport->RemovePassenger(this, true);
203
204 // If linked trap exists, despawn it
205 if (GameObject* linkedTrap = GetLinkedTrap())
206 {
207 linkedTrap->Delete();
208 }
209
211
212 if (m_spawnId)
213 Acore::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this);
215 }
216}
void RemoveGameObjectModel(GameObjectModel const &model)
Definition Map.h:404
bool Remove(KEY_TYPE const &handle)
Definition TypeContainer.h:183
void RemoveFromWorld() override
Definition Object.cpp:1233
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
233{ 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.

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

References SaveRespawnTime().

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

◆ SaveRespawnTime() [2/2]

void GameObject::SaveRespawnTime ( uint32  forceDelay)
1229{
1230 if (m_goData && m_goData->dbData && (forceDelay || m_respawnTime > GameTime::GetGameTime().count()) && m_spawnedByDefault)
1231 {
1232 time_t respawnTime = forceDelay ? GameTime::GetGameTime().count() + forceDelay : m_respawnTime;
1233 GetMap()->SaveGORespawnTime(m_spawnId, respawnTime);
1234 }
1235}
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition Map.cpp:2522
bool dbData
Definition SpawnData.h:77

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

◆ SaveStateToDB()

void GameObject::SaveStateToDB ( )
2615{
2617 {
2618 if (InstanceScript* instance = GetInstanceScript())
2619 {
2620 GOState param = GetGoState();
2621 instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(&param));
2622
2624 stmt->SetData(0, GetInstanceId());
2625 stmt->SetData(1, GetSpawnId());
2626 stmt->SetData(2, GameobjectStateToInt(&param));
2627 CharacterDatabase.Execute(stmt);
2628 }
2629 }
2630}
@ CHAR_INSERT_INSTANCE_SAVED_DATA
Definition CharacterDatabase.h:542
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition DatabaseEnv.cpp:21
uint8 GameobjectStateToInt(GOState *state) const
Definition GameObject.cpp:2589
uint32 GetInstanceId() const
Definition Object.h:520

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)
1023{
1024 // this should only be used when the gameobject has already been loaded
1025 // preferably after adding to map, because mapid may not be valid otherwise
1026 GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId);
1027 if (!data)
1028 {
1029 LOG_ERROR("entities.gameobject", "GameObject::SaveToDB failed, cannot get gameobject data!");
1030 return;
1031 }
1032
1033 SaveToDB(GetMapId(), data->spawnMask, data->phaseMask, saveAddon);
1034}
void SaveToDB(bool saveAddon=false)
Definition GameObject.cpp:1022
uint32 GetMapId() const
Definition Position.h:281
uint8 spawnMask
Definition SpawnData.h:75

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

Referenced by SaveToDB().

◆ SaveToDB() [2/2]

void GameObject::SaveToDB ( uint32  mapid,
uint8  spawnMask,
uint32  phaseMask,
bool  saveAddon = false 
)
1037{
1038 GameObjectTemplate const* goI = GetGOInfo();
1039
1040 if (!goI)
1041 return;
1042
1043 if (!m_spawnId)
1044 m_spawnId = sObjectMgr->GenerateGameObjectSpawnId();
1045
1046 // update in loaded data (changing data only in this place)
1047 GameObjectData& data = sObjectMgr->NewGOData(m_spawnId);
1048
1049 data.id = GetEntry();
1050 data.mapid = mapid;
1051 data.phaseMask = phaseMask;
1052 data.posX = GetPositionX();
1053 data.posY = GetPositionY();
1054 data.posZ = GetPositionZ();
1055 data.orientation = GetOrientation();
1056 data.rotation = WorldRotation;
1059 data.go_state = GetGoState();
1060 data.spawnMask = spawnMask;
1061 data.artKit = GetGoArtKit();
1062
1063 // Update in DB
1064 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1065
1066 uint8 index = 0;
1067
1069 stmt->SetData(0, m_spawnId);
1070 trans->Append(stmt);
1071
1072 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT);
1073 stmt->SetData(index++, m_spawnId);
1074 stmt->SetData(index++, GetEntry());
1075 stmt->SetData(index++, uint16(mapid));
1076 stmt->SetData(index++, spawnMask);
1077 stmt->SetData(index++, GetPhaseMask());
1078 stmt->SetData(index++, GetPositionX());
1079 stmt->SetData(index++, GetPositionY());
1080 stmt->SetData(index++, GetPositionZ());
1081 stmt->SetData(index++, GetOrientation());
1082 stmt->SetData(index++, WorldRotation.x);
1083 stmt->SetData(index++, WorldRotation.y);
1084 stmt->SetData(index++, WorldRotation.z);
1085 stmt->SetData(index++, WorldRotation.w);
1086 stmt->SetData(index++, int32(m_respawnDelayTime));
1087 stmt->SetData(index++, GetGoAnimProgress());
1088 stmt->SetData(index++, uint8(GetGoState()));
1089 trans->Append(stmt);
1090
1091 if (saveAddon && !sObjectMgr->GetGameObjectAddon(m_spawnId))
1092 {
1093 index = 0;
1094 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT_ADDON);
1095 stmt->SetData(index++, m_spawnId);
1096 trans->Append(stmt);
1097 }
1098
1099 WorldDatabase.CommitTransaction(trans);
1100 sScriptMgr->OnGameObjectSaveToDB(this);
1101}
SQLTransaction< WorldDatabaseConnection > WorldDatabaseTransaction
Definition DatabaseEnvFwd.h:71
@ WORLD_INS_GAMEOBJECT
Definition WorldDatabase.h:112
@ WORLD_INS_GAMEOBJECT_ADDON
Definition WorldDatabase.h:119
uint8 GetGoAnimProgress() const
Definition GameObject.h:210
uint8 GetGoArtKit() const
Definition GameObject.h:208
uint16 mapid
Definition SpawnData.h:69

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, SpawnData::mapid, SpawnData::orientation, SpawnData::phaseMask, SpawnData::posX, SpawnData::posY, SpawnData::posZ, GameObjectData::rotation, PreparedStatementBase::SetData(), sObjectMgr, SpawnData::spawnMask, GameObjectData::spawntimesecs, sScriptMgr, WORLD_DEL_GAMEOBJECT, WORLD_INS_GAMEOBJECT, WORLD_INS_GAMEOBJECT_ADDON, WorldDatabase, and WorldRotation.

◆ SendCustomAnim()

void GameObject::SendCustomAnim ( uint32  anim)
2165{
2167 data << GetGUID();
2168 data << uint32(anim);
2169 SendMessageToSet(&data, true);
2170}
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition Object.cpp:2171
@ 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::SwitchHeadVisual(), Update(), go_suppression_device::UpdateAI(), and Use().

◆ SetDestructibleBuildingModifyState()

void GameObject::SetDestructibleBuildingModifyState ( bool  allow)
inline

◆ SetDestructibleState()

void GameObject::SetDestructibleState ( GameObjectDestructibleState  state,
Player *  eventInvoker = nullptr,
bool  setHealth = false 
)
2383{
2384 // the user calling this must know he is already operating on destructible gameobject
2386
2387 switch (state)
2388 {
2392 if (setHealth)
2393 {
2395 SetGoAnimProgress(255);
2396 }
2397 EnableCollision(true);
2398 break;
2400 {
2402
2403 sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
2404
2405 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2406 if (Battleground* bg = bgMap->GetBG())
2407 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent);
2408
2411
2414 if (modelData->DamagedDisplayId)
2415 modelId = modelData->DamagedDisplayId;
2416 SetDisplayId(modelId);
2417
2418 if (setHealth)
2419 {
2421 uint32 maxHealth = m_goValue.Building.MaxHealth;
2422 // in this case current health is 0 anyway so just prevent crashing here
2423 if (!maxHealth)
2424 maxHealth = 1;
2425 SetGoAnimProgress(m_goValue.Building.Health * 255 / maxHealth);
2426 }
2427 break;
2428 }
2430 {
2431 sScriptMgr->OnGameObjectDestroyed(this, eventInvoker);
2432
2434
2435 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2436 {
2437 if (Battleground* bg = bgMap->GetBG())
2438 {
2439 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent);
2440 bg->DestroyGate(eventInvoker, this);
2441 }
2442 }
2443
2446
2449 if (modelData->DestroyedDisplayId)
2450 modelId = modelData->DestroyedDisplayId;
2451 SetDisplayId(modelId);
2452
2453 if (setHealth)
2454 {
2457 }
2458 EnableCollision(false);
2459 break;
2460 }
2462 {
2465
2466 uint32 modelId = m_goInfo->displayId;
2468 if (modelData->RebuildingDisplayId)
2469 modelId = modelData->RebuildingDisplayId;
2470 SetDisplayId(modelId);
2471
2472 // restores to full health
2473 if (setHealth)
2474 {
2476 SetGoAnimProgress(255);
2477 }
2478 EnableCollision(true);
2479 break;
2480 }
2481 }
2482}
DBCStorage< DestructibleModelDataEntry > sDestructibleModelDataStore(DestructibleModelDatafmt)
@ GO_DESTRUCTIBLE_REBUILDING
Definition SharedDefines.h:1634
Definition Map.h:758
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition GameObject.h:220
void EventInform(uint32 eventId)
Definition GameObject.cpp:2224
Definition DBCStructure.h:870
uint32 destructibleData
Definition GameObjectData.h:370
uint32 rebuildingEvent
Definition GameObjectData.h:371
uint32 destroyedEvent
Definition GameObjectData.h:366
uint32 damagedDisplayId
Definition GameObjectData.h:356
uint32 destroyedDisplayId
Definition GameObjectData.h:362
uint32 damagedEvent
Definition GameObjectData.h:361

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_eye_of_eternity::OnGameObjectCreate(), 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
219{ SetFlag(GAMEOBJECT_FLAGS, flags); }
void SetFlag(uint16 index, uint32 newFlag)
Definition Object.cpp:836

References GAMEOBJECT_FLAGS, and Object::SetFlag().

Referenced by go_suppression_device::Deactivate(), go_chromaggus_lever::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_empowering_blood_orb::HandleObjectUse(), 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_razorscale_harpoon::OnGossipHello(), go_palehoof_sphere::OnGossipHello(), go_main_chambers_access_panel::OnGossipHello(), go_razorscale_mole_machine::go_razorscale_mole_machineAI::Reset(), SetDestructibleState(), SwitchDoorOrButton(), and Use().

◆ SetGoAnimProgress()

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

References GAMEOBJECT_BYTES_1, and Object::SetByteValue().

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

◆ SetGoArtKit() [1/2]

void GameObject::SetGoArtKit ( uint8  artkit)
1444{
1446 GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGameObjectData(m_spawnId));
1447 if (data)
1448 data->artKit = kit;
1449}

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
1452{
1453 GameObjectData const* data = nullptr;
1454 if (go)
1455 {
1456 go->SetGoArtKit(artkit);
1457 data = go->GetGameObjectData();
1458 }
1459 else if (lowguid)
1460 data = sObjectMgr->GetGameObjectData(lowguid);
1461
1462 if (data)
1463 const_cast<GameObjectData*>(data)->artKit = artkit;
1464}

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

◆ SetGoState()

void GameObject::SetGoState ( GOState  state)
2520{
2522
2523 sScriptMgr->OnGameObjectStateChanged(this, state);
2524
2525 if (m_model)
2526 {
2527 if (!IsInWorld())
2528 return;
2529
2530 // pussywizard: this startOpen is unneeded here, collision depends entirely on current GOState
2532 // pussywizard: commented out everything below
2533
2534 // startOpen determines whether we are going to add or remove the LoS on activation
2535 /*bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2536
2537 if (GetGameObjectData() && GetGameObjectData()->go_state == GO_STATE_READY)
2538 startOpen = !startOpen;
2539
2540 if (state == GO_STATE_ACTIVE || state == GO_STATE_ACTIVE_ALTERNATIVE)
2541 EnableCollision(startOpen);
2542 else if (state == GO_STATE_READY)
2543 EnableCollision(!startOpen);*/
2544 }
2545 /* Whenever a gameobject inside an instance changes
2546 * save it's state on the database to be loaded properly
2547 * on server restart or crash.
2548 */
2550 {
2551 SaveStateToDB();
2552 }
2553}
bool IsAllowedToSaveToDB() const
Definition GameObject.h:358
void SaveStateToDB()
Definition GameObject.cpp:2614

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::Activate(), instance_naxxramas::ActivateWingPortal(), boss_thorim::CloseDoors(), Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), boss_thorim::DamageTaken(), go_suppression_device::Deactivate(), Delete(), DespawnOrUnsummon(), go_chromaggus_lever::GossipHello(), InstanceScript::HandleGameObject(), go_empowering_blood_orb::HandleObjectUse(), npc_midsummer_bonfire::Ignite(), go_suppression_device::InitializeAI(), 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_zulfarrak::instance_zulfarrak_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::SwitchHeadVisual(), boss_flame_leviathan::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
262{ m_linkedTrap = linkedTrap->GetGUID(); }

References Object::GetGUID(), and m_linkedTrap.

Referenced by Create().

◆ SetLootGenerationTime()

void GameObject::SetLootGenerationTime ( )
2975{
2977}

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)
2689{
2690 // set the player whose group should receive the right
2691 // to loot the creature after it dies
2692 // should be set to nullptr after the loot disappears
2693 if (!creature)
2694 {
2698 return;
2699 }
2700
2704}
ObjectGuid GetLootRecipientGUID() const
Definition Creature.h:232
ObjectGuid::LowType GetLootRecipientGroupGUID() const
Definition Creature.h:234
void Clear()
Definition ObjectGuid.h:141
void ResetAllowedLooters()
Definition Object.cpp:3222
void SetAllowedLooters(GuidUnorderedSet const looters)
Definition Object.cpp:3217
GuidUnorderedSet const & GetAllowedLooters() const
Definition Object.cpp:3237

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

Referenced by boss_thorim::DamageTaken(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), and instance_the_slave_pens::instance_the_slave_pens_InstanceMapScript::OnGameObjectCreate().

◆ SetLootRecipient() [2/2]

void GameObject::SetLootRecipient ( Map *  map)
2707{
2708 Group* group = nullptr;
2709 Map::PlayerList const& PlayerList = map->GetPlayers();
2710 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
2711 {
2712 if (Player* groupMember = i->GetSource())
2713 {
2714 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
2715 {
2716 continue;
2717 }
2718
2719 if (!m_lootRecipient)
2720 {
2721 m_lootRecipient = groupMember->GetGUID();
2722 }
2723
2724 Group* memberGroup = groupMember->GetGroup();
2725 if (memberGroup && !group)
2726 {
2727 group = memberGroup;
2729 }
2730
2731 if (memberGroup == group)
2732 {
2733 AddAllowedLooter(groupMember->GetGUID());
2734 }
2735 }
2736 }
2737
2738 if (!group)
2739 {
2741 }
2742}
ObjectGuid GetGUID() const
Definition Group.cpp:2525
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:335
LowType GetCounter() const
Definition ObjectGuid.h:149
void AddAllowedLooter(ObjectGuid guid)
Definition Object.cpp:3212

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 
)
2485{
2486 m_lootState = state;
2487
2488 if (unit)
2489 _lootStateUnitGUID = unit->GetGUID();
2490 else
2492
2493 AI()->OnStateChanged(state, unit);
2494 sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
2495
2496 // Start restock timer if the chest is partially looted or not looted at all
2497 if (GetGoType() == GAMEOBJECT_TYPE_CHEST && state == GO_ACTIVATED && GetGOInfo()->chest.chestRestockTime > 0 && m_restockTime == 0s)
2498 {
2500 }
2501
2502 // 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
2503 /*if (m_model)
2504 {
2505 // startOpen determines whether we are going to add or remove the LoS on activation
2506 bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2507
2508 // Use the current go state
2509 if (GetGoState() == GO_STATE_ACTIVE)
2510 startOpen = !startOpen;
2511
2512 if (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED)
2513 EnableCollision(startOpen);
2514 else if (state == GO_READY)
2515 EnableCollision(!startOpen);
2516 }*/
2517}
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:411
uint32 chestRestockTime
Definition GameObjectData.h:86

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::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_oculus::instance_oculus_InstanceMapScript::OnGameObjectCreate(), go_massive_seaforium_charge::OnGossipHello(), go_enchanted_scarlet_thread::OnLootStateChanged(), go_suppression_device::OnStateChanged(), SmartScript::ProcessAction(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), ResetDoorOrButton(), Map::ScriptsProcess(), Player::SendLoot(), boss_flame_leviathan::TurnHealStations(), Update(), Use(), and UseDoorOrButton().

◆ SetOwnerGUID()

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

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(), and Unit::RemoveGameObject().

◆ SetPhaseMask()

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

◆ SetPosition() [1/2]

void GameObject::SetPosition ( float  x,
float  y,
float  z,
float  o 
)
2905{
2906 // pussywizard: do not call for MotionTransport and other gobjects not in grid
2907
2908 if (!Acore::IsValidMapCoord(x, y, z, o))
2909 return;
2910
2911 GetMap()->GameObjectRelocation(this, x, y, z, o);
2912}
void GameObjectRelocation(GameObject *go, float x, float y, float z, float o)
Definition Map.cpp:870
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().

◆ SetPosition() [2/2]

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

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

Referenced by SetPosition().

◆ SetRespawnDelay()

void GameObject::SetRespawnDelay ( int32  respawn)
1299{
1300 m_respawnDelayTime = respawn > 0 ? respawn : 0;
1301}

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 
)
2290{
2295}
@ GAMEOBJECT_PARENTROTATION
Definition UpdateFields.h:400
void SetFloatValue(uint16 index, float value)
Definition Object.cpp:735

References GAMEOBJECT_PARENTROTATION, and Object::SetFloatValue().

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

◆ SetWorldRotation()

void GameObject::SetWorldRotation ( G3D::Quat const &  rot)
2278{
2279 G3D::Quat rotation = rot;
2280 // If the quaternion is zero (e.g. dynamically spawned GOs with no rotation),
2281 // fall back to computing rotation from orientation to avoid NaN from unitize()
2282 if (G3D::fuzzyEq(rotation.magnitude(), 0.0f))
2283 rotation = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), GetOrientation());
2284 rotation.unitize();
2285 WorldRotation = rotation;
2287}
void UpdatePackedRotation()
Definition GameObject.cpp:2259

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 
)
2298{
2299 SetWorldRotation(G3D::Quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot)));
2300}

References SetWorldRotation().

Referenced by StaticTransport::Create().

◆ SwitchDoorOrButton()

void GameObject::SwitchDoorOrButton ( bool  activate,
bool  alternative = false 
)
private
1467{
1468 if (activate)
1470 else
1472
1473 if (GetGoState() == GO_STATE_READY) //if closed -> open
1475 else //if open -> close
1477}
@ GO_FLAG_IN_USE
Definition SharedDefines.h:1607

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
330{ 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
327{ 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
324{ 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 
)
1386{
1387 GameObjectTemplate const* trapInfo = sObjectMgr->GetGameObjectTemplate(trapEntry);
1388 if (!trapInfo || trapInfo->type != GAMEOBJECT_TYPE_TRAP)
1389 return;
1390
1391 SpellInfo const* trapSpell = sSpellMgr->GetSpellInfo(trapInfo->trap.spellId);
1392 if (!trapSpell) // checked at load already
1393 return;
1394
1395 // xinef: many spells have range 0 but radius > 0
1396 float range = float(target->GetSpellMaxRangeForTarget(GetOwner(), trapSpell));
1397 if (range < 1.0f)
1398 range = 5.0f;
1399
1400 // found correct GO
1401 // xinef: we should use the trap (checks for despawn type)
1402 if (GameObject* trapGO = GetLinkedTrap())
1403 {
1404 trapGO->Use(target); // trapGO->CastSpell(target, trapInfo->trap.spellId);
1405 }
1406}
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition Unit.cpp:11489
uint32 spellId
Definition GameObjectData.h:119
struct GameObjectTemplate::@236::@243 trap

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

Referenced by Player::SendLoot(), 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.

440{
442
443 if (AI())
444 AI()->UpdateAI(diff);
445 else if (!AIM_Initialize())
446 LOG_ERROR("entities.gameobject", "Could not initialize GameObjectAI");
447
448 if (m_despawnDelay)
449 {
450 if (m_despawnDelay > diff)
451 {
452 m_despawnDelay -= diff;
453 }
454 else
455 {
456 m_despawnDelay = 0;
458 }
459 }
460
461 for (std::unordered_map<ObjectGuid, int32>::iterator itr = m_SkillupList.begin(); itr != m_SkillupList.end();)
462 {
463 if (itr->second > 0)
464 {
465 if (itr->second > static_cast<int32>(diff))
466 {
467 itr->second -= static_cast<int32>(diff);
468 ++itr;
469 }
470 else
471 {
472 itr = m_SkillupList.erase(itr);
473 }
474 }
475 else
476 {
477 ++itr;
478 }
479 }
480
481 switch (m_lootState)
482 {
483 case GO_NOT_READY:
484 {
485 switch (GetGoType())
486 {
488 {
489 // Arming Time for GAMEOBJECT_TYPE_TRAP (6)
490 GameObjectTemplate const* goInfo = GetGOInfo();
491 // Bombs
492 if (goInfo->trap.type == 2)
493 m_cooldownTime = GameTime::GetGameTimeMS().count() + 10 * IN_MILLISECONDS; // Hardcoded tooltip value
494 else if (GetOwner())
496
498 break;
499 }
501 {
502 // fishing code (bobber ready)
504 {
505 // splash bobber (bobber ready now)
506 Unit* caster = GetOwner();
507 if (caster && caster->IsPlayer())
508 {
511
512 UpdateData udata;
513 WorldPacket packet;
514 BuildValuesUpdateBlockForPlayer(&udata, caster->ToPlayer());
515 udata.BuildPacket(packet);
516 caster->ToPlayer()->SendDirectMessage(&packet);
517
519 }
520
521 m_lootState = GO_READY; // can be successfully open with some chance
522 }
523 return;
524 }
526 {
528 return;
529 GameObjectTemplate const* info = GetGOInfo();
530
532
534 {
536 return;
537 }
538
539 Unit* owner = GetOwner();
540 Unit* spellCaster = owner ? owner : ObjectAccessor::GetPlayer(*this, m_ritualOwnerGUID);
541 if (!spellCaster)
542 {
544 return;
545 }
546
547 uint32 spellId = info->summoningRitual.spellId;
548
549 if (spellId == 62330) // GO store nonexistent spell, replace by expected
550 {
551 // spell have reagent and mana cost but it not expected use its
552 // it triggered spell in fact casted at currently channeled GO
553 spellId = 61993;
554 }
555
556 // Cast casterTargetSpell at a random GO user
557 // on the current DB there is only one gameobject that uses this (Ritual of Doom)
558 // and its required target number is 1 (outter for loop will run once)
559 if (info->summoningRitual.casterTargetSpell && info->summoningRitual.casterTargetSpell != 1) // No idea why this field is a bool in some cases
560 for (uint32 i = 0; i < info->summoningRitual.casterTargetSpellTargets; i++)
561 // m_unique_users can contain only player GUIDs
563 spellCaster->CastSpell(target, info->summoningRitual.casterTargetSpell, true);
564
565 // finish owners spell
566 // xinef: properly process event cooldowns
567 if (owner)
568 {
569 if (Spell* spell = owner->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
570 {
571 spell->SendChannelUpdate(0);
572 spell->finish(false);
573 }
574 }
575
576 // can be deleted now
579 else
581
583 spellCaster->CastSpell(spellCaster, spellId, true);
584 return;
585 }
588 {
589 return;
590 }
591 // If there is no restock timer, or if the restock timer passed, the chest becomes ready to loot
592 m_restockTime = 0s;
595 break;
596 default:
597 m_lootState = GO_READY; // for other GOis same switched without delay to GO_READY
598 break;
599 }
600 [[fallthrough]];
601 }
602 case GO_READY:
603 {
604 if (m_respawnTime > 0) // timer on
605 {
606 time_t now = GameTime::GetGameTime().count();
607 if (m_respawnTime <= now) // timer expired
608 {
609 ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::GameObject>(GetEntry(), m_spawnId);
610 time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
611 if (linkedRespawntime) // Can't respawn, the master is dead
612 {
613 ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
614 if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
616 else
617 m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
618 SaveRespawnTime(); // also save to DB immediately
619 return;
620 }
621
622 m_respawnTime = 0;
623 m_SkillupList.clear();
624 m_usetimes = 0;
625
626 switch (GetGoType())
627 {
628 case GAMEOBJECT_TYPE_FISHINGNODE: // can't fish now
629 {
630 Unit* caster = GetOwner();
631 if (caster && caster->IsPlayer())
632 {
633 caster->ToPlayer()->RemoveGameObject(this, false);
634
636 caster->ToPlayer()->SendDirectMessage(&data);
637 }
638 // can be deleted
640 return;
641 }
644 //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)
645 if (GetGoState() != GO_STATE_READY)
647 break;
649 // Initialize a new max fish count on respawn
651 break;
652 default:
653 break;
654 }
655
656 if (!m_spawnedByDefault) // despawn timer
657 {
658 // can be despawned or destroyed
660 return;
661 }
662
663 // Xinef: Call AI Reset (required for example in SmartAI to clear one time events)
664 if (AI())
665 AI()->Reset();
666
667 // respawn timer
668 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
669 if (poolid)
670 sPoolMgr->UpdatePool<GameObject>(GetMap()->GetPoolData(), poolid, m_spawnId);
671 else
672 GetMap()->AddToMap(this);
673 }
674 }
675
676 if (isSpawned())
677 {
678 // traps can have time and can not have
679 GameObjectTemplate const* goInfo = GetGOInfo();
680 if (goInfo->type == GAMEOBJECT_TYPE_TRAP)
681 {
683 break;
684
685 // Type 2 - Bomb (will go away after casting it's spell)
686 if (goInfo->trap.type == 2)
687 {
689 break;
690 }
691
694 float radius = float(goInfo->trap.diameter) * 0.5f;
695 if (!goInfo->trap.diameter)
696 {
697 // Cast in other case (at some triggering/linked go/etc explicit call)
698 if (goInfo->trap.cooldown != 3 || m_respawnTime > 0)
699 {
700 break;
701 }
702
703 radius = 3.f;
704 }
705
706 // Type 0 and 1 - trap (type 0 will not get removed after casting a spell)
707 Unit* owner = GetOwner();
708 Unit* target = nullptr; // pointer to appropriate target if found any
709
710 // Note: this hack with search required until GO casting not implemented
711 // search unfriendly creature
712 if (owner && goInfo->trap.autoCloseTime != -1) // hunter trap
713 {
716 Cell::VisitObjects(this, searcher, radius);
717 }
718 else // environmental trap
719 {
720 // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support
721 // affect only players
722 Player* player = nullptr;
723 Acore::AnyPlayerInObjectRangeCheck checker(this, radius, true, true);
724 Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
725 Cell::VisitObjects(this, searcher, radius);
726 target = player;
727 }
728
729 if (target)
730 {
731 SetLootState(GO_ACTIVATED, target);
732 }
733 }
734 else if (uint32 max_charges = goInfo->GetCharges())
735 {
736 if (m_usetimes >= max_charges)
737 {
738 m_usetimes = 0;
739 SetLootState(GO_JUST_DEACTIVATED); // can be despawned or destroyed
740 }
741 }
742 }
743
744 break;
745 }
746 case GO_ACTIVATED:
747 {
748 switch (GetGoType())
749 {
752 if (GetGOInfo()->GetAutoCloseTime() && GameTime::GetGameTimeMS().count() >= m_cooldownTime)
754 break;
757 {
759
761 }
762 break;
765 {
766 if (m_groupLootTimer <= diff)
767 {
768 Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
769 if (group)
770 group->EndRoll(&loot);
773 }
774 else
775 {
776 m_groupLootTimer -= diff;
777 }
778 }
779
780 // Non-consumable chest was partially looted and restock time passed, restock all loot now
782 {
783 m_restockTime = 0s;
786 }
787 break;
789 {
790 GameObjectTemplate const* goInfo = GetGOInfo();
791 if (goInfo->trap.type == 2)
792 {
793 if (goInfo->trap.spellId)
794 CastSpell(nullptr, goInfo->trap.spellId); // FIXME: null target won't work for target type 1
796 }
797 else if (Unit* target = ObjectAccessor::GetUnit(*this, _lootStateUnitGUID))
798 {
799 if (goInfo->trap.spellId)
800 CastSpell(target, goInfo->trap.spellId);
801
802 m_cooldownTime = GameTime::GetGameTimeMS().count() + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)) * IN_MILLISECONDS; // template or 4 seconds
803
804 if (goInfo->trap.type == 1)
806 else if (!goInfo->trap.type)
808
809 // Battleground gameobjects have data2 == 0 && data5 == 3
810 if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3)
811 if (Player* player = target->ToPlayer())
812 if (Battleground* bg = player->GetBattleground())
813 bg->HandleTriggerBuff(this);
814 }
815 break;
816 }
817 default:
818 break;
819 }
820 break;
821 }
823 {
824 // If nearby linked trap exists, despawn it
825 if (GameObject* linkedTrap = GetLinkedTrap())
826 {
827 linkedTrap->DespawnOrUnsummon();
828 }
829
830 //if Gameobject should cast spell, then this, but some GOs (type = 10) should be destroyed
832 {
834
835 //any return here in case battleground traps
836 // Xinef: Do not return here for summoned gos that should be deleted few lines below
837 // Xinef: Battleground objects are treated as spawned by default
838 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
839 if ((addon->flags & GO_FLAG_NODESPAWN) && isSpawnedByDefault())
840 return;
841 }
842
843 loot.clear();
844
845 // Do not delete chests or goobers that are not consumed on loot, while still allowing them to despawn when they expire if summoned
846 bool isSummonedAndExpired = (GetOwner() || GetSpellId()) && m_respawnTime == 0;
847 if ((GetGoType() == GAMEOBJECT_TYPE_CHEST || GetGoType() == GAMEOBJECT_TYPE_GOOBER) && !GetGOInfo()->IsDespawnAtAction() && !isSummonedAndExpired)
848 {
850 {
851 // Start restock timer when the chest is fully looted
855 }
856 else
857 {
859 }
860
862 return;
863 }
864 else if (GetOwnerGUID() || GetSpellId())
865 {
867 Delete();
868 return;
869 }
870
872
873 //burning flags in some battlegrounds, if you find better condition, just add it
874 if (GetGOInfo()->IsDespawnAtAction() || GetGoAnimProgress() > 0)
875 {
877 //reset flags
878 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
880 }
881
883 return;
884
886 {
887 m_respawnTime = 0;
888 DestroyForVisiblePlayers(); // xinef: old UpdateObjectVisibility();
889 return;
890 }
891
892 uint32 dynamicRespawnDelay = GetMap()->ApplyDynamicModeRespawnScaling(this, m_respawnDelayTime);
893 m_respawnTime = GameTime::GetGameTime().count() + dynamicRespawnDelay;
894
895 // if option not set then object will be saved at grid unload
896 if (GetMap()->IsDungeon())
898
899 DestroyForVisiblePlayers(); // xinef: old UpdateObjectVisibility();
900 break;
901 }
902 }
903
904 sScriptMgr->OnGameObjectUpdate(this, diff);
905}
constexpr auto DAY
Definition Common.h:49
#define FISHING_BOBBER_READY_TIME
Definition GameObject.h:117
@ GAMEOBJECT_TYPE_BUTTON
Definition SharedDefines.h:1565
Definition GridNotifiers.h:1380
virtual void UpdateAI(uint32)
Definition GameObjectAI.h:41
virtual void Reset()
Definition GameObjectAI.h:45
void CheckRitualList()
Definition GameObject.cpp:218
void Delete()
Definition GameObject.cpp:977
uint32 GetUniqueUseCount() const
Definition GameObject.h:243
bool isSpawnedByDefault() const
Definition GameObject.h:197
void SendCustomAnim(uint32 anim)
Definition GameObject.cpp:2164
void ResetDoorOrButton()
Definition GameObject.cpp:1419
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition GameObject.cpp:928
void CastSpell(Unit *target, uint32 spell)
Definition GameObject.cpp:2099
ObjectGuid m_ritualOwnerGUID
Definition GameObject.h:387
void EndRoll(Loot *loot)
Definition Group.cpp:1547
time_t GetLinkedRespawnTime(ObjectGuid guid) const
Definition Map.cpp:3056
uint32 ApplyDynamicModeRespawnScaling(WorldObject const *obj, uint32 respawnDelay) const
Definition Map.cpp:1758
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition Object.cpp:255
bool IsPlayer() const
Definition Object.h:207
Player * ToPlayer()
Definition Object.h:208
void AddToObjectUpdateIfNeeded()
Definition Object.cpp:522
void RemoveGameObject(GameObject *gameObj, bool del)
Definition Unit.cpp:6348
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition Unit.h:1581
Definition UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition UpdateData.cpp:48
void DestroyForVisiblePlayers()
Definition Object.cpp:3055
virtual void Update(uint32 diff)
Definition Object.cpp:1077
@ 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:533
Definition GridNotifiers.h:412
uint32 startDelay
Definition GameObjectData.h:123
uint32 casterTargetSpell
Definition GameObjectData.h:236
uint32 GetCharges() const
Definition GameObjectData.h:480
uint32 reqParticipants
Definition GameObjectData.h:232
uint32 consumable
Definition GameObjectData.h:87
uint32 cooldown
Definition GameObjectData.h:121
uint32 ritualPersistent
Definition GameObjectData.h:235
uint32 autoCloseTime
Definition GameObjectData.h:48
uint32 casterTargetSpellTargets
Definition GameObjectData.h:237
uint32 diameter
Definition GameObjectData.h:118

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(), Map::GetPoolData(), 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
2662{
2663 if (!IsInWorld())
2664 return;
2665 if (m_model)
2666 if (GetMap()->ContainsGameObjectModel(*m_model))
2668 delete m_model;
2669 m_model = CreateModel();
2670 if (m_model)
2672}

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
2260{
2261 static const int32 PACK_YZ = 1 << 20;
2262 static const int32 PACK_X = PACK_YZ << 1;
2263 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
2264 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
2265 int8 w_sign = (WorldRotation.w >= 0.f ? 1 : -1);
2266 int64 x = int32(WorldRotation.x * PACK_X) * w_sign & PACK_X_MASK;
2267 int64 y = int32(WorldRotation.y * PACK_YZ) * w_sign & PACK_YZ_MASK;
2268 int64 z = int32(WorldRotation.z * PACK_YZ) * w_sign & PACK_YZ_MASK;
2269 m_packedRotation = z | (y << 21) | (x << 42);
2270}
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)
1480{
1481 // Xinef: we cannot use go with not selectable flags
1483 return;
1484
1485 // by default spell caster is user
1486 Unit* spellCaster = user;
1487 uint32 spellId = 0;
1488 uint32 triggeredFlags = TRIGGERED_NONE;
1489
1490 if (Player* playerUser = user->ToPlayer())
1491 {
1492 if (sScriptMgr->OnGossipHello(playerUser, this))
1493 return;
1494
1495 if (AI()->GossipHello(playerUser, false))
1496 return;
1497 }
1498
1499 // If cooldown data present in template
1500 if (uint32 cooldown = GetGOInfo()->GetCooldown())
1501 {
1503 return;
1504
1506 }
1507
1508 if (user->IsPlayer() && GetGoType() != GAMEOBJECT_TYPE_TRAP) // workaround for GO casting
1509 if (!m_goInfo->IsUsableMounted())
1511
1512 switch (GetGoType())
1513 {
1514 case GAMEOBJECT_TYPE_DOOR: //0
1515 //doors/buttons never really despawn, only reset to default state/flags
1516 UseDoorOrButton(0, false, user);
1517 return;
1518 case GAMEOBJECT_TYPE_BUTTON: //1
1519 //doors/buttons never really despawn, only reset to default state/flags
1520 UseDoorOrButton(0, false, user);
1521
1522 // Xinef: properly link possible traps
1523 if (uint32 trapEntry = GetGOInfo()->button.linkedTrap)
1524 TriggeringLinkedGameObject(trapEntry, user);
1525 return;
1527 {
1528 if (!user->IsPlayer())
1529 return;
1530
1531 Player* player = user->ToPlayer();
1532
1533 player->PrepareGossipMenu(this, GetGOInfo()->questgiver.gossipID, true);
1534 player->SendPreparedGossip(this);
1535 return;
1536 }
1537 case GAMEOBJECT_TYPE_TRAP: //6
1538 {
1539 GameObjectTemplate const* goInfo = GetGOInfo();
1540 if (goInfo->trap.spellId)
1541 CastSpell(user, goInfo->trap.spellId);
1542
1543 m_cooldownTime = GameTime::GetGameTimeMS().count() + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)) * IN_MILLISECONDS; // template or 4 seconds
1544
1545 if (goInfo->trap.type == 1) // Deactivate after trigger
1547
1548 return;
1549 }
1550 //Sitting: Wooden bench, chairs enzz
1551 case GAMEOBJECT_TYPE_CHAIR: //7
1552 {
1553 GameObjectTemplate const* info = GetGOInfo();
1554 if (!info)
1555 return;
1556
1557 if (!user->IsPlayer())
1558 return;
1559
1560 if (ChairListSlots.empty()) // this is called once at first chair use to make list of available slots
1561 {
1562 if (info->chair.slots > 0) // sometimes chairs in DB have error in fields and we dont know number of slots
1563 for (uint32 i = 0; i < info->chair.slots; ++i)
1564 ChairListSlots[i].Clear(); // Last user of current slot set to 0 (none sit here yet)
1565 else
1566 ChairListSlots[0].Clear(); // error in DB, make one default slot
1567 }
1568
1569 Player* player = user->ToPlayer();
1570
1571 // a chair may have n slots. we have to calculate their positions and teleport the player to the nearest one
1572
1573 float lowestDist = DEFAULT_VISIBILITY_DISTANCE;
1574
1575 uint32 nearest_slot = 0;
1576 float x_lowest = GetPositionX();
1577 float y_lowest = GetPositionY();
1578
1579 // the object orientation + 1/2 pi
1580 // every slot will be on that straight line
1581 float orthogonalOrientation = GetOrientation() + M_PI * 0.5f;
1582 // find nearest slot
1583 bool found_free_slot = false;
1584 for (ChairSlotAndUser::iterator itr = ChairListSlots.begin(); itr != ChairListSlots.end(); ++itr)
1585 {
1586 // the distance between this slot and the center of the go - imagine a 1D space
1587 float relativeDistance = (info->size * itr->first) - (info->size * (info->chair.slots - 1) / 2.0f);
1588
1589 float x_i = GetPositionX() + relativeDistance * cos(orthogonalOrientation);
1590 float y_i = GetPositionY() + relativeDistance * std::sin(orthogonalOrientation);
1591
1592 if (itr->second)
1593 {
1594 if (Player* ChairUser = ObjectAccessor::GetPlayer(*this, itr->second))
1595 {
1596 if (ChairUser->IsSitState() && ChairUser->getStandState() != UNIT_STAND_STATE_SIT && ChairUser->GetExactDist2d(x_i, y_i) < 0.1f)
1597 continue; // This seat is already occupied by ChairUser. NOTE: Not sure if the ChairUser->getStandState() != UNIT_STAND_STATE_SIT check is required.
1598 else
1599 itr->second.Clear(); // This seat is unoccupied.
1600 }
1601 else
1602 itr->second.Clear(); // The seat may of had an occupant, but they're offline.
1603 }
1604
1605 found_free_slot = true;
1606
1607 // calculate the distance between the player and this slot
1608 float thisDistance = player->GetDistance2d(x_i, y_i);
1609
1610 if (thisDistance <= lowestDist)
1611 {
1612 nearest_slot = itr->first;
1613 lowestDist = thisDistance;
1614 x_lowest = x_i;
1615 y_lowest = y_i;
1616 }
1617 }
1618
1619 if (found_free_slot)
1620 {
1621 ChairSlotAndUser::iterator itr = ChairListSlots.find(nearest_slot);
1622 if (itr != ChairListSlots.end())
1623 {
1624 itr->second = player->GetGUID(); //this slot in now used by player
1627 return;
1628 }
1629 }
1630
1631 return;
1632 }
1633 //big gun, its a spell/aura
1634 case GAMEOBJECT_TYPE_GOOBER: //10
1635 {
1636 GameObjectTemplate const* info = GetGOInfo();
1637
1638 // xinef: Goober cannot be used with this flag, skip
1640 return;
1641
1642 if (user->IsPlayer())
1643 {
1644 Player* player = user->ToPlayer();
1645
1646 if (info->goober.pageId) // show page...
1647 {
1649 data << GetGUID();
1650 player->SendDirectMessage(&data);
1651 }
1652 else if (info->goober.gossipID)
1653 {
1654 player->PrepareGossipMenu(this, info->goober.gossipID);
1655 player->SendPreparedGossip(this);
1656 }
1657
1658 if (info->goober.eventId)
1659 {
1660 LOG_DEBUG("maps.script", "Goober ScriptStart id {} for GO entry {} (spawnId {}).", info->goober.eventId, GetEntry(), m_spawnId);
1661 GetMap()->ScriptsStart(sEventScripts, info->goober.eventId, player, this);
1662 EventInform(info->goober.eventId);
1663 }
1664
1665 // possible quest objective for active quests
1666 if (info->goober.questId && sObjectMgr->GetQuestTemplate(info->goober.questId))
1667 {
1668 //Quest require to be active for GO using
1670 break;
1671 }
1672
1673 if (Battleground* bg = player->GetBattleground())
1674 bg->EventPlayerUsedGO(player, this);
1675
1676 if (Group* group = player->GetGroup())
1677 {
1678 for (GroupReference const* itr = group->GetFirstMember(); itr != nullptr; itr = itr->next())
1679 {
1680 if (Player* member = itr->GetSource())
1681 {
1682 if (member->IsAtGroupRewardDistance(this))
1683 {
1684 member->KillCreditGO(info->entry, GetGUID());
1685 }
1686 }
1687 }
1688 }
1689 else
1690 {
1691 player->KillCreditGO(info->entry, GetGUID());
1692 }
1693 }
1694
1695 if (uint32 trapEntry = info->goober.linkedTrapId)
1696 TriggeringLinkedGameObject(trapEntry, user);
1697
1698 if (info->GetAutoCloseTime())
1699 {
1702 if (!info->goober.customAnim)
1704 }
1705
1706 // this appear to be ok, however others exist in addition to this that should have custom (ex: 190510, 188692, 187389)
1707 if (info->goober.customAnim)
1709
1711
1712 // cast this spell later if provided
1713 spellId = info->goober.spellId;
1714 spellCaster = user;
1715
1716 break;
1717 }
1718 case GAMEOBJECT_TYPE_CAMERA: //13
1719 {
1720 GameObjectTemplate const* info = GetGOInfo();
1721 if (!info)
1722 return;
1723
1724 if (!user->IsPlayer())
1725 return;
1726
1727 Player* player = user->ToPlayer();
1728
1729 if (info->camera.cinematicId)
1731
1732 if (info->camera.eventID)
1733 {
1734 GetMap()->ScriptsStart(sEventScripts, info->camera.eventID, player, this);
1735 EventInform(info->camera.eventID);
1736 }
1737
1738 return;
1739 }
1740 //fishing bobber
1742 {
1743 Player* player = user->ToPlayer();
1744 if (!player)
1745 return;
1746
1747 if (player->GetGUID() != GetOwnerGUID())
1748 return;
1749
1750 switch (getLootState())
1751 {
1752 case GO_READY: // ready for loot
1753 {
1754 uint32 zone, subzone;
1755 GetZoneAndAreaId(zone, subzone);
1756
1757 int32 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(subzone);
1758 if (!zoneSkill)
1759 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(zone);
1760
1761 //provide error, no fishable zone or area should be 0
1762 if (!zoneSkill)
1763 LOG_ERROR("sql.sql", "Fishable areaId {} are not properly defined in `skill_fishing_base_level`.", subzone);
1764
1765 // no miss skill is zone skill + 95 since at least patch 2.1
1766 int32 const noMissSkill = zoneSkill + 95;
1767
1768 int32 const skill = player->GetSkillValue(SKILL_FISHING);
1769
1770 int32 chance;
1771 // fishing pool catches are 100%
1772 //TODO: find reasonable value for fishing hole search
1773 GameObject* fishingHole = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE);
1774 if (fishingHole)
1775 chance = 100;
1776 else if (skill < noMissSkill)
1777 {
1778 chance = int32(pow((double)skill / noMissSkill, 2) * 100);
1779 if (chance < 1)
1780 chance = 1;
1781 }
1782 else
1783 chance = 100;
1784
1785 int32 const roll = irand(1, 100);
1786
1787 LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} no-miss skill: {} chance {} roll: {})", skill, zoneSkill, noMissSkill, chance, roll);
1788
1789 if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zoneSkill, chance, roll))
1790 player->UpdateFishingSkill();
1791 // but you will likely cause junk in areas that require a high fishing skill (not yet implemented)
1792 if (chance >= roll)
1793 {
1794 // Keep the bobber owned while loot is open, but clear the
1795 // spell id so finishing the fishing channel does not delete it.
1796 SetSpellId(0); // prevent removing unintended auras at Unit::RemoveGameObject
1797
1798 // fishing pool catch
1799 if (fishingHole)
1800 {
1801 fishingHole->Use(player);
1803 }
1804 else
1805 player->SendLoot(GetGUID(), LOOT_FISHING);
1806 }
1807 else // else: junk
1809 break;
1810 }
1811 case GO_JUST_DEACTIVATED: // nothing to do, will be deleted at next update
1812 break;
1813 default:
1814 {
1816
1818 player->SendDirectMessage(&data);
1819 break;
1820 }
1821 }
1822 player->FinishSpell(CURRENT_CHANNELED_SPELL, true);
1823 return;
1824 }
1825
1827 {
1828 if (!user->IsPlayer())
1829 return;
1830
1831 Player* player = user->ToPlayer();
1832 Unit* owner = GetOwner();
1833 GameObjectTemplate const* info = GetGOInfo();
1834
1835 // ritual owner is set for GO's without owner (not summoned)
1836 if (!m_ritualOwnerGUID && !owner)
1837 m_ritualOwnerGUID = player->GetGUID();
1838
1839 if (owner)
1840 {
1841 if (!owner->IsPlayer())
1842 return;
1843
1844 // accept only use by player from same group as owner, excluding owner itself (unique use already added in spell effect)
1845 if (player == owner->ToPlayer() || (info->summoningRitual.castersGrouped && !player->IsInSameRaidWith(owner->ToPlayer())))
1846 return;
1847
1848 // expect owner to already be channeling, so if not...
1850 return;
1851 }
1852 else
1853 {
1854 Player* ritualOwner = ObjectAccessor::GetPlayer(*this, m_ritualOwnerGUID);
1855 if (!ritualOwner)
1856 return;
1857 if (player != ritualOwner && (info->summoningRitual.castersGrouped && !player->IsInSameRaidWith(ritualOwner)))
1858 return;
1859 }
1860
1862
1864 return;
1865
1866 SpellCastResult castResult;
1867 if (info->summoningRitual.animSpell)
1868 castResult = player->CastSpell(player, info->summoningRitual.animSpell, true);
1869 else
1870 castResult = player->CastSpell(player, GetSpellId(),
1875
1876 if (castResult != SPELL_CAST_OK)
1877 return;
1878
1879 AddUniqueUse(player);
1880
1881 // full amount unique participants including original summoner
1883 {
1885
1886 // channel ready, maintain this
1888 }
1889
1890 return;
1891 }
1893 {
1894 GameObjectTemplate const* info = GetGOInfo();
1895 if (!info)
1896 return;
1897
1898 if (info->spellcaster.partyOnly)
1899 {
1900 if (!user->IsPlayer())
1901 return;
1902 if (ObjectGuid ownerGuid = GetOwnerGUID())
1903 {
1904 if (user->GetGUID() != ownerGuid)
1905 {
1906 Group* group = user->ToPlayer()->GetGroup();
1907 if (!group)
1908 return;
1909 if (!group->IsMember(ownerGuid))
1910 return;
1911 }
1912 }
1913 }
1914
1915 spellId = info->spellcaster.spellId;
1916 break;
1917 }
1919 {
1920 GameObjectTemplate const* info = GetGOInfo();
1921
1922 if (!user->IsPlayer())
1923 return;
1924
1925 Player* player = user->ToPlayer();
1926
1927 Player* targetPlayer = ObjectAccessor::FindPlayer(player->GetTarget());
1928
1929 // accept only use by player from same raid as caster
1930 if (!targetPlayer || !targetPlayer->IsInSameRaidWith(player))
1931 return;
1932
1933 //required lvl checks!
1934 uint8 level = player->GetLevel();
1935 if (level < info->meetingstone.minLevel)
1936 return;
1937 level = targetPlayer->GetLevel();
1938 if (level < info->meetingstone.minLevel)
1939 return;
1940
1941 spellId = 23598; // Meeting Stone Summon
1942
1943 break;
1944 }
1945
1946 case GAMEOBJECT_TYPE_FLAGSTAND: // 24
1947 {
1948 if (!user->IsPlayer())
1949 return;
1950
1951 Player* player = user->ToPlayer();
1952
1953 if (player->CanUseBattlegroundObject(this))
1954 {
1955 // in battleground check
1956 Battleground* bg = player->GetBattleground();
1957 if (!bg)
1958 return;
1959
1960 if (player->GetVehicle())
1961 return;
1962
1965 // BG flag click
1966 // AB:
1967 // 15001
1968 // 15002
1969 // 15003
1970 // 15004
1971 // 15005
1972 bg->EventPlayerClickedOnFlag(player, this);
1973 return; //we don;t need to delete flag ... it is despawned!
1974 }
1975 break;
1976 }
1977
1978 case GAMEOBJECT_TYPE_FISHINGHOLE: // 25
1979 {
1980 if (!user->IsPlayer())
1981 return;
1982
1983 Player* player = user->ToPlayer();
1984
1985 player->SendLoot(GetGUID(), LOOT_FISHINGHOLE);
1987 return;
1988 }
1989
1990 case GAMEOBJECT_TYPE_FLAGDROP: // 26
1991 {
1992 if (!user->IsPlayer())
1993 return;
1994
1995 Player* player = user->ToPlayer();
1996
1997 if (player->CanUseBattlegroundObject(this))
1998 {
1999 // in battleground check
2000 Battleground* bg = player->GetBattleground();
2001 if (!bg)
2002 return;
2003
2004 if (player->GetVehicle())
2005 return;
2006
2009 // BG flag dropped
2010 // WS:
2011 // 179785 - Silverwing Flag
2012 // 179786 - Warsong Flag
2013 // EotS:
2014 // 184142 - Netherstorm Flag
2015 GameObjectTemplate const* info = GetGOInfo();
2016 if (info)
2017 {
2019 {
2020 GameObject::gameObjectToEventFlag[info->entry](player, this, bg);
2021 }
2022 else
2023 {
2024 switch (info->entry)
2025 {
2026 case 179785: // Silverwing Flag
2027 case 179786: // Warsong Flag
2028 if (bg->GetBgTypeID(true) == BATTLEGROUND_WS)
2029 bg->EventPlayerClickedOnFlag(player, this);
2030 break;
2031 case 184142: // Netherstorm Flag
2032 if (bg->GetBgTypeID(true) == BATTLEGROUND_EY)
2033 bg->EventPlayerClickedOnFlag(player, this);
2034 break;
2035 }
2036 }
2037 }
2038 //this cause to call return, all flags must be deleted here!!
2039 spellId = 0;
2040 Delete();
2041 }
2042 break;
2043 }
2045 {
2046 GameObjectTemplate const* info = GetGOInfo();
2047 if (!info)
2048 return;
2049
2050 if (!user->IsPlayer())
2051 return;
2052
2053 Player* player = user->ToPlayer();
2054
2055 // fallback, will always work
2057
2059 player->SendDirectMessage(&data);
2060
2062 return;
2063 }
2064 default:
2066 LOG_ERROR("entities.gameobject", "GameObject::Use(): unit ({}, name: {}) tries to use object ({}, name: {}) of unknown type ({})",
2067 user->GetGUID().ToString(), user->GetName(), GetGUID().ToString(), GetGOInfo()->name, GetGoType());
2068 break;
2069 }
2070
2071 if (!spellId)
2072 return;
2073
2074 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2075 if (!spellInfo)
2076 {
2077 if (!user->IsPlayer() || !sOutdoorPvPMgr->HandleCustomSpell(user->ToPlayer(), spellId, this))
2078 LOG_ERROR("entities.gameobject", "WORLD: unknown spell id {} at use action for gameobject (Entry: {} GoType: {})", spellId, GetEntry(), GetGoType());
2079 else
2080 LOG_DEBUG("outdoorpvp", "WORLD: {} non-dbc spell was handled by OutdoorPvP", spellId);
2081 return;
2082 }
2083
2086
2087 if (Player* player = user->ToPlayer())
2088 sOutdoorPvPMgr->HandleCustomSpell(player, spellId, this);
2089
2090 if (spellCaster)
2091 {
2092 if ((spellCaster->CastSpell(user, spellInfo, TriggerCastFlags(triggeredFlags)) == SPELL_CAST_OK) && GetGoType() == GAMEOBJECT_TYPE_SPELLCASTER)
2093 AddUse();
2094 }
2095 else
2096 CastSpell(user, spellId);
2097}
@ 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:61
#define sOutdoorPvPMgr
Definition OutdoorPvPMgr.h:102
@ TELE_TO_NOT_LEAVE_COMBAT
Definition Player.h:817
@ TELE_TO_NOT_UNSUMMON_PET
Definition Player.h:818
@ TELE_TO_NOT_LEAVE_TRANSPORT
Definition Player.h:816
int32 irand(int32 min, int32 max)
Definition Random.cpp:37
@ GAMEOBJECT_TYPE_MEETINGSTONE
Definition SharedDefines.h:1587
@ GAMEOBJECT_TYPE_SPELLCASTER
Definition SharedDefines.h:1586
@ BATTLEGROUND_WS
Definition SharedDefines.h:3738
@ BATTLEGROUND_EY
Definition SharedDefines.h:3743
SpellCastResult
Definition SharedDefines.h:936
@ SPELL_CAST_OK
Definition SharedDefines.h:1126
@ SKILL_FISHING
Definition SharedDefines.h:3190
@ 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:140
@ TRIGGERED_IGNORE_POWER_AND_REAGENT_COST
Will ignore Spell and Category cooldowns.
Definition SpellDefines.h:144
@ TRIGGERED_IGNORE_SPELL_AND_CATEGORY_CD
Will ignore GCD.
Definition SpellDefines.h:143
@ TRIGGERED_CAST_DIRECTLY
Will ignore combo point requirement.
Definition SpellDefines.h:149
@ TRIGGERED_IGNORE_CASTER_MOUNTED_OR_ON_VEHICLE
Will ignore caster aura states including combat requirements and death state.
Definition SpellDefines.h:154
@ TRIGGERED_IGNORE_EFFECTS
Periodic aura tick wont be reset on override.
Definition SpellDefines.h:161
@ TRIGGERED_NONE
Definition SpellDefines.h:141
@ UNIT_STAND_STATE_SIT_LOW_CHAIR
Definition UnitDefines.h:39
@ UNIT_STAND_STATE_SIT
Definition UnitDefines.h:36
virtual void EventPlayerClickedOnFlag(Player *, GameObject *)
Definition Battleground.h:521
BattlegroundTypeId GetBgTypeID(bool GetRandom=false) const
Definition Battleground.h:330
void StartCinematic(uint32 const cinematicSequenceId)
Definition CinematicMgr.cpp:31
void UseDoorOrButton(uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
Definition GameObject.cpp:1429
static std::unordered_map< int, goEventFlag > gameObjectToEventFlag
Definition GameObject.h:2979
LootState getLootState() const
Definition GameObject.h:225
ChairSlotAndUser ChairListSlots
Definition GameObject.h:392
void TriggeringLinkedGameObject(uint32 trapEntry, Unit *target)
Definition GameObject.cpp:1385
GameObject * LookupFishingHoleAround(float range)
Definition GameObject.cpp:1408
void Use(Unit *user)
Definition GameObject.cpp:1479
void AddUniqueUse(Player *player)
Definition GameObject.cpp:922
void SetSpellId(uint32 id)
Definition GameObject.h:178
Definition GroupReference.h:27
bool IsMember(ObjectGuid guid) const
Definition Group.cpp:2555
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:2236
bool IsInSameRaidWith(Player const *p) const
Definition Player.h:1914
bool UpdateFishingSkill()
Definition PlayerUpdates.cpp:910
uint16 GetSkillValue(uint32 skill) const
Definition Player.cpp:5622
bool CanUseBattlegroundObject(GameObject *gameobject) const
Definition Player.cpp:13556
CinematicMgr & GetCinematicMgr()
Definition Player.h:1403
void SendPreparedGossip(WorldObject *source)
Definition PlayerGossip.cpp:214
void SendLoot(ObjectGuid guid, LootType loot_type)
Definition Player.cpp:7985
Group * GetGroup()
Definition Player.h:2517
bool TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options=0, Unit *target=nullptr, bool newInstance=false)
Definition Player.cpp:1401
void KillCreditGO(uint32 entry, ObjectGuid guid=ObjectGuid::Empty)
Definition PlayerQuest.cpp:2130
void PrepareGossipMenu(WorldObject *source, uint32 menuId=0, bool showQuests=false)
Definition PlayerGossip.cpp:32
Vehicle * GetVehicle() const
Definition Unit.h:1932
void FinishSpell(CurrentSpellTypes spellType, bool ok=true)
Definition Unit.cpp:4005
void RemoveAurasByType(AuraType auraType, ObjectGuid casterGUID=ObjectGuid::Empty, Aura *except=nullptr, bool negative=true, bool positive=true)
Definition Unit.cpp:5144
void SetStandState(uint8 state)
Definition Unit.cpp:12731
ObjectGuid GetTarget() const
Definition Unit.h:862
uint8 GetLevel() const
Definition Unit.h:1109
float GetDistance2d(WorldObject const *obj) const
Definition Object.cpp:1322
@ 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:269
uint32 castersGrouped
Definition GameObjectData.h:238
struct GameObjectTemplate::@236::@263 barberChair
struct GameObjectTemplate::@236::@250 camera
uint32 height
Definition GameObjectData.h:136
uint32 gossipID
Definition GameObjectData.h:73
uint32 GetAutoCloseTime() const
Definition GameObjectData.h:511
uint32 linkedTrap
Definition GameObjectData.h:60
uint32 slots
Definition GameObjectData.h:135
bool IsUsableMounted() const
Definition GameObjectData.h:411
uint32 partyOnly
Definition GameObjectData.h:254
struct GameObjectTemplate::@236::@254 spellcaster
struct GameObjectTemplate::@236::@244 chair
uint32 chairheight
Definition GameObjectData.h:346
uint32 eventId
Definition GameObjectData.h:90
uint32 pageId
Definition GameObjectData.h:169
uint32 eventID
Definition GameObjectData.h:210
uint32 cinematicId
Definition GameObjectData.h:209
uint32 customAnim
Definition GameObjectData.h:74
uint32 linkedTrapId
Definition GameObjectData.h:91

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(), Player::GetCinematicMgr(), 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(), GameObjectTemplate::reqParticipants, Map::ScriptsStart(), SendCustomAnim(), Player::SendDirectMessage(), Player::SendLoot(), Player::SendPreparedGossip(), SetGameObjectFlag(), SetGoState(), SetLootState(), 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, CinematicMgr::StartCinematic(), 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_IGNORE_SPELL_AND_CATEGORY_CD, 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
2575{
2576 switch (m_goInfo->type)
2577 {
2583 return true;
2584 default:
2585 return false;
2586 }
2587}
@ GAMEOBJECT_TYPE_TRAPDOOR
Definition SharedDefines.h:1599

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().

◆ _respawnCompatibilityMode

bool GameObject::_respawnCompatibilityMode {true}
protected
374{true};

Referenced by IsRespawnCompatibilityMode(), and LoadGameObjectFromDB().

◆ ChairListSlots

ChairSlotAndUser GameObject::ChairListSlots
protected

Referenced by Use().

◆ gameObjectToEventFlag

std::unordered_map< int, goEventFlag > GameObject::gameObjectToEventFlag = { }
static
3028{
3029 //11 GAMEOBJECT_TYPE_TRANSPORT
3030 struct
3031 {
3032 uint32 PathProgress;
3033 TransportAnimation const* AnimationInfo;
3034 } Transport;
3035 //25 GAMEOBJECT_TYPE_FISHINGHOLE
3036 struct
3037 {
3038 uint32 MaxOpens;
3039 } FishingHole;
3040 //29 GAMEOBJECT_TYPE_CAPTURE_POINT
3041 struct
3042 {
3043 OPvPCapturePoint* OPvPObj;
3044 } CapturePoint;
3045 //33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
3046 struct
3047 {
3048 uint32 Health;
3049 uint32 MaxHealth;
3050 } Building;
3051};
3052
3053enum class GameObjectActions : uint32
3054{
3055 // Name from client executable // Comments
3056 None, // -NONE-
3057 AnimateCustom0, // Animate Custom0
3058 AnimateCustom1, // Animate Custom1
3059 AnimateCustom2, // Animate Custom2
3060 AnimateCustom3, // Animate Custom3
3061 Disturb, // Disturb // Triggers trap
3062 Unlock, // Unlock // Resets GO_FLAG_LOCKED
3063 Lock, // Lock // Sets GO_FLAG_LOCKED
3064 Open, // Open // Sets GO_STATE_ACTIVE
3065 OpenAndUnlock, // Open + Unlock // Sets GO_STATE_ACTIVE and resets GO_FLAG_LOCKED
3066 Close, // Close // Sets GO_STATE_READY
3067 ToggleOpen, // Toggle Open
3068 Destroy, // Destroy // Sets GO_STATE_DESTROYED
3069 Rebuild, // Rebuild // Resets from GO_STATE_DESTROYED
3070 Creation, // Creation
3071 Despawn, // Despawn
3072 MakeInert, // Make Inert // Disables interactions
3073 MakeActive, // Make Active // Enables interactions
3074 CloseAndLock, // Close + Lock // Sets GO_STATE_READY and sets GO_FLAG_LOCKED
3075 UseArtKit0, // Use ArtKit0 // 46904: 121
3076 UseArtKit1, // Use ArtKit1 // 36639: 81, 46903: 122
3077 UseArtKit2, // Use ArtKit2
3078 UseArtKit3, // Use ArtKit3
3079 SetTapList, // Set Tap List
3080};
3081
3082// For containers: [GO_NOT_READY]->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED->GO_READY -> ...
3083// For bobber: GO_NOT_READY ->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED-><deleted>
3084// For door(closed):[GO_NOT_READY]->GO_READY (close)->GO_ACTIVATED (open) ->GO_JUST_DEACTIVATED->GO_READY(close) -> ...
3085// For door(open): [GO_NOT_READY]->GO_READY (open) ->GO_ACTIVATED (close)->GO_JUST_DEACTIVATED->GO_READY(open) -> ...
3086enum LootState
3087{
3089 GO_READY, // can be ready but despawned, and then not possible activate until spawn
3092};
3093
3094// 5 sec for bobber catch
3095#define FISHING_BOBBER_READY_TIME 5
3096
3097class GameObject : public WorldObject, public GridObject<GameObject>, public MovableMapObject, public UpdatableMapObject
3098{
3099public:
3100 explicit GameObject();
3101 ~GameObject() override;
3102
3103 void BuildValuesUpdate(uint8 updateType, ByteBuffer* data, Player* target) override;
3104
3105 void AddToWorld() override;
3106 void RemoveFromWorld() override;
3107 void CleanupsBeforeDelete(bool finalCleanup = true) override;
3108
3109 uint32 GetDynamicFlags() const override { return GetUInt32Value(GAMEOBJECT_DYNAMIC); }
3110 void ReplaceAllDynamicFlags(uint32 flag) override { SetUInt32Value(GAMEOBJECT_DYNAMIC, flag); }
3111
3112 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);
3113 void Update(uint32 p_time) override;
3114 [[nodiscard]] GameObjectTemplate const* GetGOInfo() const { return m_goInfo; }
3115 [[nodiscard]] GameObjectTemplateAddon const* GetTemplateAddon() const;
3116 [[nodiscard]] GameObjectData const* GetGameObjectData() const { return m_goData; }
3117 [[nodiscard]] GameObjectValue const* GetGOValue() const { return &m_goValue; }
3118
3119 [[nodiscard]] bool IsTransport() const;
3120 [[nodiscard]] bool IsDestructibleBuilding() const;
3121
3122 [[nodiscard]] ObjectGuid::LowType GetSpawnId() const { return m_spawnId; }
3123
3124 // z_rot, y_rot, x_rot - rotation angles around z, y and x axes
3125 void SetWorldRotationAngles(float z_rot, float y_rot, float x_rot);
3126 void SetWorldRotation(G3D::Quat const& rot);
3127 void SetTransportPathRotation(float qx, float qy, float qz, float qw);
3128 [[nodiscard]] G3D::Quat const& GetWorldRotation() const { return WorldRotation; }
3129 [[nodiscard]] int64 GetPackedWorldRotation() const { return m_packedRotation; }
3130 [[nodiscard]] G3D::Quat GetFinalWorldRotation() const;
3131
3132 // overwrite WorldObject function for proper name localization
3133 [[nodiscard]] std::string const& GetNameForLocaleIdx(LocaleConstant locale_idx) const override;
3134
3135 void SaveToDB(bool saveAddon = false);
3136 void SaveToDB(uint32 mapid, uint8 spawnMask, uint32 phaseMask, bool saveAddon = false);
3137 virtual bool LoadFromDB(ObjectGuid::LowType guid, Map* map) { return LoadGameObjectFromDB(guid, map, false); }
3138 virtual bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map* map, bool addToMap = true);
3139 [[nodiscard]] bool IsRespawnCompatibilityMode() const { return _respawnCompatibilityMode; }
3140 void DeleteFromDB();
3141
3142 void SetOwnerGUID(ObjectGuid owner)
3143 {
3144 // Owner already found and different than expected owner - remove object from old owner
3145 if (owner && GetOwnerGUID() && GetOwnerGUID() != owner)
3146 {
3147 ABORT();
3148 }
3149 m_spawnedByDefault = false; // all object with owner is despawned after delay
3151 }
3152 [[nodiscard]] ObjectGuid GetOwnerGUID() const override { return GetGuidValue(OBJECT_FIELD_CREATED_BY); }
3153 [[nodiscard]] uint32 GetFaction() const override { return GetUInt32Value(GAMEOBJECT_FACTION); }
3154 [[nodiscard]] Unit* GetOwner() const;
3155
3156 void SetSpellId(uint32 id)
3157 {
3158 m_spawnedByDefault = false; // all summoned object is despawned after delay
3159 m_spellId = id;
3160 }
3161 [[nodiscard]] uint32 GetSpellId() const { return m_spellId;}
3162
3163 [[nodiscard]] time_t GetRespawnTime() const { return m_respawnTime; }
3164 [[nodiscard]] time_t GetRespawnTimeEx() const;
3165
3166 void SetRespawnTime(int32 respawn);
3167 void SetRespawnDelay(int32 respawn);
3168 void Respawn();
3169 [[nodiscard]] bool isSpawned() const
3170 {
3171 return m_respawnDelayTime == 0 ||
3174 }
3175 [[nodiscard]] bool isSpawnedByDefault() const { return m_spawnedByDefault; }
3176 void SetSpawnedByDefault(bool b) { m_spawnedByDefault = b; }
3177 [[nodiscard]] uint32 GetRespawnDelay() const { return m_respawnDelayTime; }
3178 void Refresh();
3179 void DespawnOrUnsummon(Milliseconds delay = 0ms, Seconds forcedRespawnTime = 0s);
3180 void Delete();
3181 void GetFishLoot(Loot* fishLoot, Player* lootOwner, bool junk = false);
3182 [[nodiscard]] GameobjectTypes GetGoType() const { return GameobjectTypes(GetByteValue(GAMEOBJECT_BYTES_1, 1)); }
3184 [[nodiscard]] GOState GetGoState() const { return GOState(GetByteValue(GAMEOBJECT_BYTES_1, 0)); }
3185 void SetGoState(GOState state);
3186 [[nodiscard]] uint8 GetGoArtKit() const { return GetByteValue(GAMEOBJECT_BYTES_1, 2); }
3187 void SetGoArtKit(uint8 artkit);
3188 [[nodiscard]] uint8 GetGoAnimProgress() const { return GetByteValue(GAMEOBJECT_BYTES_1, 3); }
3189 void SetGoAnimProgress(uint8 animprogress) { SetByteValue(GAMEOBJECT_BYTES_1, 3, animprogress); }
3190 static void SetGoArtKit(uint8 artkit, GameObject* go, ObjectGuid::LowType lowguid = 0);
3191
3192 void SetPhaseMask(uint32 newPhaseMask, bool update) override;
3193 void EnableCollision(bool enable);
3194
3196 bool HasGameObjectFlag(GameObjectFlags flags) const { return HasFlag(GAMEOBJECT_FLAGS, flags) != 0; }
3200
3201 void Use(Unit* user);
3202
3203 [[nodiscard]] LootState getLootState() const { return m_lootState; }
3204 // Note: unit is only used when s = GO_ACTIVATED
3205 void SetLootState(LootState s, Unit* unit = nullptr);
3206
3207 [[nodiscard]] uint16 GetLootMode() const { return m_LootMode; }
3208 [[nodiscard]] bool HasLootMode(uint16 lootMode) const { return m_LootMode & lootMode; }
3209 void SetLootMode(uint16 lootMode) { m_LootMode = lootMode; }
3210 void AddLootMode(uint16 lootMode) { m_LootMode |= lootMode; }
3211 void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; }
3213
3214 void AddToSkillupList(ObjectGuid const& playerGuid);
3215 [[nodiscard]] bool IsInSkillupList(ObjectGuid const& playerGuid) const;
3216
3217 void AddUniqueUse(Player* player);
3218 void AddUse() { ++m_usetimes; }
3219
3220 [[nodiscard]] uint32 GetUseCount() const { return m_usetimes; }
3221 [[nodiscard]] uint32 GetUniqueUseCount() const { return m_unique_users.size(); }
3222
3223 void SaveRespawnTime() override { SaveRespawnTime(0); }
3224 void SaveRespawnTime(uint32 forceDelay);
3225
3226 Loot loot;
3227
3228 [[nodiscard]] Player* GetLootRecipient() const;
3229 [[nodiscard]] Group* GetLootRecipientGroup() const;
3230 void SetLootRecipient(Creature* creature);
3231 void SetLootRecipient(Map* map);
3232 bool IsLootAllowedFor(Player const* player) const;
3233 [[nodiscard]] bool HasLootRecipient() const { return m_lootRecipient || m_lootRecipientGroup; }
3234 uint32 m_groupLootTimer; // (msecs)timer used for group loot
3235 uint32 lootingGroupLowGUID; // used to find group which is looting
3236 void SetLootGenerationTime();
3237 [[nodiscard]] uint32 GetLootGenerationTime() const { return m_lootGenerationTime; }
3238
3239 [[nodiscard]] GameObject* GetLinkedTrap();
3240 void SetLinkedTrap(GameObject* linkedTrap) { m_linkedTrap = linkedTrap->GetGUID(); }
3241
3242 [[nodiscard]] bool hasQuest(uint32 quest_id) const override;
3243 [[nodiscard]] bool hasInvolvedQuest(uint32 quest_id) const override;
3244 bool ActivateToQuest(Player* target) const;
3245 void UseDoorOrButton(uint32 time_to_restore = 0, bool alternative = false, Unit* user = nullptr);
3246 // 0 = use `gameobject`.`spawntimesecs`
3247 void ResetDoorOrButton();
3248
3249 void TriggeringLinkedGameObject(uint32 trapEntry, Unit* target);
3250
3251 [[nodiscard]] bool IsNeverVisible() const override;
3252 bool IsAlwaysVisibleFor(WorldObject const* seer) const override;
3253 [[nodiscard]] bool IsInvisibleDueToDespawn() const override;
3254
3255 uint8 getLevelForTarget(WorldObject const* target) const override
3256 {
3257 if (Unit* owner = GetOwner())
3258 return owner->getLevelForTarget(target);
3259
3260 return 1;
3261 }
3262
3263 GameObject* LookupFishingHoleAround(float range);
3264
3265 void CastSpell(Unit* target, uint32 spell);
3266 void SendCustomAnim(uint32 anim);
3267 bool IsInRange2d(float x, float y, float radius) const;
3268 bool IsInRange3d(float x, float y, float z, float radius) const;
3269
3270 void ModifyHealth(int32 change, Unit* attackerOrHealer = nullptr, uint32 spellId = 0);
3272 // sets GameObject type 33 destruction flags and optionally default health for that state
3273 void SetDestructibleState(GameObjectDestructibleState state, Player* eventInvoker = nullptr, bool setHealth = false);
3275 {
3281 }
3282
3283 void EventInform(uint32 eventId);
3284
3285 [[nodiscard]] virtual uint32 GetScriptId() const;
3286 [[nodiscard]] GameObjectAI* AI() const { return m_AI; }
3287
3288 [[nodiscard]] std::string const& GetAIName() const;
3289 void SetDisplayId(uint32 displayid);
3290 [[nodiscard]] uint32 GetDisplayId() const { return GetUInt32Value(GAMEOBJECT_DISPLAYID); }
3291
3293 void GetRespawnPosition(float& x, float& y, float& z, float* ori = nullptr) const;
3294
3295 void SetPosition(float x, float y, float z, float o);
3296 void SetPosition(Position const& pos) { SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); }
3297
3298 [[nodiscard]] bool IsStaticTransport() const { return GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT; }
3299 [[nodiscard]] bool IsMotionTransport() const { return GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT; }
3300
3301 Transport* ToTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT || GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<Transport*>(this); else return nullptr; }
3302 [[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; }
3303
3304 StaticTransport* ToStaticTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<StaticTransport*>(this); else return nullptr; }
3305 [[nodiscard]] StaticTransport const* ToStaticTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_TRANSPORT) return reinterpret_cast<StaticTransport const*>(this); else return nullptr; }
3306
3307 MotionTransport* ToMotionTransport() { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<MotionTransport*>(this); else return nullptr; }
3308 [[nodiscard]] MotionTransport const* ToMotionTransport() const { if (GetGOInfo()->type == GAMEOBJECT_TYPE_MO_TRANSPORT) return reinterpret_cast<MotionTransport const*>(this); else return nullptr; }
3309
3310 [[nodiscard]] float GetStationaryX() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionX(); return GetPositionX(); }
3311 [[nodiscard]] float GetStationaryY() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionY(); return GetPositionY(); }
3312 [[nodiscard]] float GetStationaryZ() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetPositionZ(); return GetPositionZ(); }
3313 [[nodiscard]] float GetStationaryO() const override { if (GetGOInfo()->type != GAMEOBJECT_TYPE_MO_TRANSPORT) return m_stationaryPosition.GetOrientation(); return GetOrientation(); }
3314
3315 [[nodiscard]] float GetInteractionDistance() const;
3316
3317 void UpdateModelPosition();
3318
3319 [[nodiscard]] bool IsAtInteractDistance(Position const& pos, float radius) const;
3320 [[nodiscard]] bool IsAtInteractDistance(Player const* player, SpellInfo const* spell = nullptr) const;
3321
3322 [[nodiscard]] bool IsWithinDistInMap(Player const* player) const;
3324
3325 [[nodiscard]] SpellInfo const* GetSpellForLock(Player const* player) const;
3326
3327 static std::unordered_map<int, goEventFlag> gameObjectToEventFlag; // Gameobject -> event flag
3328
3329 [[nodiscard]] bool ValidateGameobjectType() const;
3330 [[nodiscard]] bool IsInstanceGameobject() const;
3331 [[nodiscard]] uint8 GameobjectStateToInt(GOState* state) const;
3332
3333 /* A check to verify if this object is available to be saved on the DB when
3334 * a state change occurs
3335 */
3336 [[nodiscard]] bool IsAllowedToSaveToDB() const { return m_saveStateOnDb; };
3337
3338 /* Enable or Disable the ability to save on the database this gameobject's state
3339 * whenever it changes
3340 */
3341 void AllowSaveToDB(bool enable) { m_saveStateOnDb = enable; };
3342
3343 void SaveStateToDB();
3344
3345 std::string GetDebugInfo() const override;
3346
3347 bool IsUpdateNeeded() override;
3348protected:
3349 bool AIM_Initialize();
3351 void UpdateModel(); // updates model in case displayId were changed
3352 bool _respawnCompatibilityMode{true};
3354 time_t m_respawnTime; // (secs) time of next respawn (or despawn if GO have owner()),
3355 uint32 m_respawnDelayTime; // (secs) if 0 then current GO state no dependent from timer
3357 Seconds m_despawnRespawnTime; // override respawn time after delayed despawn
3360 bool m_spawnedByDefault;
3361 uint32 m_cooldownTime; // used as internal reaction delay time store (not state change reaction).
3362 // For traps this: spell casting cooldown, for doors/buttons: reset time.
3363 std::unordered_map<ObjectGuid, int32> m_SkillupList;
3364
3365 ObjectGuid m_ritualOwnerGUID; // used for GAMEOBJECT_TYPE_SUMMONING_RITUAL where GO is not summoned (no owner)
3368
3369 typedef std::map<uint32, ObjectGuid> ChairSlotAndUser;
3371
3374 GameObjectData const* m_goData;
3377
3379 G3D::Quat WorldRotation;
3381
3384 uint16 m_LootMode; // bitmask, default LOOT_MODE_DEFAULT, determines what loot will be lootable
3386
3388
3390
3391private:
3392 void CheckRitualList();
3393 void ClearRitualList();
3394 void RemoveFromOwner();
3395 void SwitchDoorOrButton(bool activate, bool alternative = false);
3396 void UpdatePackedRotation();
3397
3399 bool _IsWithinDist(WorldObject const* obj, float dist2compare, bool /*is3D*/, bool /*incOwnRadius = true*/, bool /*incTargetRadius = true*/) const override
3400 {
3402 dist2compare += obj->GetObjectSize();
3403 return IsInRange3d(obj->GetPositionX(), obj->GetPositionY(), obj->GetPositionZ(), dist2compare);
3404 }
3405
3406 bool IsWithinSightRange(Position const& pos, float dist) const override;
3407
3409
3410 bool m_saveStateOnDb = false;
3411};
3412#endif
LocaleConstant
Definition Common.h:125
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:257
Definition GameObjectAI.h:33
Definition GameObjectModel.h:55
void GetRespawnPosition(float &x, float &y, float &z, float *ori=nullptr) const
Definition GameObject.cpp:2882
uint32 GetRespawnDelay() const
Definition GameObject.h:199
bool IsWithinDistInMap(Player const *player) const
Definition GameObject.cpp:3046
bool IsRespawnCompatibilityMode() const
Definition GameObject.h:161
void AddLootMode(uint16 lootMode)
Definition GameObject.h:232
~GameObject() override
Definition GameObject.cpp:94
bool IsUpdateNeeded() override
Definition GameObject.cpp:3139
void DeleteFromDB()
Definition GameObject.cpp:1172
std::string GetDebugInfo() const override
Definition GameObject.cpp:3130
bool hasInvolvedQuest(uint32 quest_id) const override
Definition GameObject.cpp:1200
float GetStationaryZ() const override
Definition GameObject.h:334
uint32 GetFaction() const override
Definition GameObject.h:175
uint32 GetDynamicFlags() const override
Definition GameObject.h:131
uint8 getLevelForTarget(WorldObject const *target) const override
Definition GameObject.h:277
float GetStationaryY() const override
Definition GameObject.h:333
void GetFishLoot(Loot *fishLoot, Player *lootOwner, bool junk=false)
Definition GameObject.cpp:1000
bool HasLootMode(uint16 lootMode) const
Definition GameObject.h:230
GameObjectValue const * GetGOValue() const
Definition GameObject.h:139
Player * GetLootRecipient() const
Definition GameObject.cpp:2674
bool IsAlwaysVisibleFor(WorldObject const *seer) const override
Definition GameObject.cpp:1248
time_t GetRespawnTime() const
Definition GameObject.h:185
uint32 GetLootGenerationTime() const
Definition GameObject.h:259
float GetStationaryX() const override
Definition GameObject.h:332
void RemoveLootMode(uint16 lootMode)
Definition GameObject.h:233
void SetSpawnedByDefault(bool b)
Definition GameObject.h:198
bool IsInSkillupList(ObjectGuid const &playerGuid) const
Definition GameObject.cpp:3117
void SetLootRecipient(Creature *creature)
Definition GameObject.cpp:2688
int64 GetPackedWorldRotation() const
Definition GameObject.h:151
void SetDestructibleBuildingModifyState(bool allow)
Definition GameObject.h:293
bool IsMotionTransport() const
Definition GameObject.h:321
bool IsWithinSightRange(Position const &pos, float dist) const override
Definition GameObject.cpp:2272
void Respawn()
Definition GameObject.cpp:1303
void Refresh()
Definition GameObject.cpp:912
time_t GetRespawnTimeEx() const
Definition GameObject.cpp:2965
bool hasQuest(uint32 quest_id) const override
Definition GameObject.cpp:1189
GameObjectFlags GetGameObjectFlags() const
Definition GameObject.h:217
uint32 GetDisplayId() const
Definition GameObject.h:312
void UpdateModelPosition()
Definition GameObject.cpp:2952
bool IsStaticTransport() const
Definition GameObject.h:320
void SetLootMode(uint16 lootMode)
Definition GameObject.h:231
uint32 GetUseCount() const
Definition GameObject.h:242
void SetWorldRotationAngles(float z_rot, float y_rot, float x_rot)
Definition GameObject.cpp:2297
void SetLootGenerationTime()
Definition GameObject.cpp:2974
std::map< uint32, ObjectGuid > ChairSlotAndUser
Definition GameObject.h:391
bool IsNeverVisible() const override
Definition GameObject.cpp:1237
virtual bool LoadFromDB(ObjectGuid::LowType guid, Map *map)
Definition GameObject.h:159
std::string const & GetNameForLocaleIdx(LocaleConstant locale_idx) const override
Definition GameObject.cpp:2246
void BuildValuesUpdate(uint8 updateType, ByteBuffer *data, Player *target) override
Definition GameObject.cpp:2782
void AddToSkillupList(ObjectGuid const &playerGuid)
Definition GameObject.cpp:3111
void CleanupsBeforeDelete(bool finalCleanup=true) override
Definition GameObject.cpp:121
uint16 GetLootMode() const
Definition GameObject.h:229
bool IsInvisibleDueToDespawn() const override
Definition GameObject.cpp:1276
void AddToWorld() override
Definition GameObject.cpp:157
void Update(uint32 p_time) override
Definition GameObject.cpp:439
float GetStationaryO() const override
Definition GameObject.h:335
void ModifyHealth(int32 change, Unit *attackerOrHealer=nullptr, uint32 spellId=0)
Definition GameObject.cpp:2319
void AllowSaveToDB(bool enable)
Definition GameObject.h:363
void ReplaceAllDynamicFlags(uint32 flag) override
Definition GameObject.h:132
Definition Object.h:369
Definition Map.h:168
Definition Object.h:421
Definition OutdoorPvP.h:91
uint32 LowType
Definition ObjectGuid.h:125
Definition Object.h:439
Definition Object.h:482
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true, bool incOwnRadius=true, bool incTargetRadius=true) const
Definition Object.cpp:1386
float GetObjectSize() const
Definition Object.cpp:2897
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: