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 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 SetLocalRotationAngles (float z_rot, float y_rot, float x_rot)
 
void SetLocalRotation (G3D::Quat const &rot)
 
void SetTransportPathRotation (float qx, float qy, float qz, float qw)
 
G3D::Quat const & GetLocalRotation () const
 
int64 GetPackedLocalRotation () const
 
G3D::Quat GetWorldRotation () 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)
 
bool LoadFromDB (ObjectGuid::LowType guid, Map *map)
 
bool LoadGameObjectFromDB (ObjectGuid::LowType guid, Map *map, bool addToMap=true)
 
void DeleteFromDB ()
 
void SetOwnerGUID (ObjectGuid owner)
 
ObjectGuid GetOwnerGUID () const
 
UnitGetOwner () const
 
void SetSpellId (uint32 id)
 
uint32 GetSpellId () const
 
time_t GetRespawnTime () const
 
time_t GetRespawnTimeEx () const
 
void SetRespawnTime (int32 respawn)
 
void SetRespawnDelay (int32 respawn)
 
void Respawn ()
 
bool isSpawned () const
 
bool isSpawnedByDefault () const
 
void SetSpawnedByDefault (bool b)
 
uint32 GetRespawnDelay () const
 
void Refresh ()
 
void DespawnOrUnsummon (Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
 
void Delete ()
 
void GetFishLoot (Loot *loot, Player *loot_owner)
 
void GetFishLootJunk (Loot *loot, Player *loot_owner)
 
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 playerGuid)
 
bool IsInSkillupList (ObjectGuid playerGuid) const
 
void AddUniqueUse (Player *player)
 
void AddUse ()
 
uint32 GetUseCount () const
 
uint32 GetUniqueUseCount () const
 
void SaveRespawnTime () override
 
void SaveRespawnTime (uint32 forceDelay)
 
PlayerGetLootRecipient () const
 
GroupGetLootRecipientGroup () const
 
void SetLootRecipient (Creature *creature)
 
void SetLootRecipient (Map *map)
 
bool IsLootAllowedFor (Player const *player) const
 
bool HasLootRecipient () const
 
void SetLootGenerationTime ()
 
uint32 GetLootGenerationTime () const
 
GameObjectGetLinkedTrap ()
 
void SetLinkedTrap (GameObject *linkedTrap)
 
bool hasQuest (uint32 quest_id) const override
 
bool hasInvolvedQuest (uint32 quest_id) const override
 
bool ActivateToQuest (Player *target) const
 
void UseDoorOrButton (uint32 time_to_restore=0, bool alternative=false, Unit *user=nullptr)
 
void ResetDoorOrButton ()
 
void TriggeringLinkedGameObject (uint32 trapEntry, Unit *target)
 
bool IsNeverVisible () const override
 
bool IsAlwaysVisibleFor (WorldObject const *seer) const override
 
bool IsInvisibleDueToDespawn () const override
 
uint8 getLevelForTarget (WorldObject const *target) const override
 
GameObjectLookupFishingHoleAround (float range)
 
void CastSpell (Unit *target, uint32 spell)
 
void SendCustomAnim (uint32 anim)
 
bool IsInRange (float x, float y, float z, float radius) const
 
void ModifyHealth (int32 change, Unit *attackerOrHealer=nullptr, uint32 spellId=0)
 
void SetDestructibleBuildingModifyState (bool allow)
 
void SetDestructibleState (GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
 
GameObjectDestructibleState GetDestructibleState () const
 
void EventInform (uint32 eventId)
 
virtual uint32 GetScriptId () const
 
GameObjectAIAI () const
 
std::string const & GetAIName () const
 
void SetDisplayId (uint32 displayid)
 
uint32 GetDisplayId () const
 
void GetRespawnPosition (float &x, float &y, float &z, float *ori=nullptr) const
 
void SetPosition (float x, float y, float z, float o)
 
void SetPosition (const Position &pos)
 
bool IsStaticTransport () const
 
bool IsMotionTransport () const
 
TransportToTransport ()
 
Transport const * ToTransport () const
 
StaticTransportToStaticTransport ()
 
StaticTransport const * ToStaticTransport () const
 
MotionTransportToMotionTransport ()
 
MotionTransport const * ToMotionTransport () const
 
float GetStationaryX () const override
 
float GetStationaryY () const override
 
float GetStationaryZ () const override
 
float GetStationaryO () const override
 
float GetInteractionDistance () const
 
void UpdateModelPosition ()
 
bool IsAtInteractDistance (Position const &pos, float radius) const
 
bool IsAtInteractDistance (Player const *player, SpellInfo const *spell=nullptr) const
 
bool IsWithinDistInMap (Player const *player) const
 
SpellInfo const * GetSpellForLock (Player const *player) const
 
bool ValidateGameobjectType () const
 
bool IsInstanceGameobject () const
 
uint8 GameobjectStateToInt (GOState *state) const
 
bool IsAllowedToSaveToDB () const
 
void AllowSaveToDB (bool enable)
 
void SaveStateToDB ()
 
std::string GetDebugInfo () const override
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
 
- Public Member Functions inherited from WorldObject
 ~WorldObject () override
 
virtual void Update (uint32)
 
void _Create (ObjectGuid::LowType guidlow, HighGuid guidhigh, uint32 phaseMask)
 
void AddToWorld () override
 
void RemoveFromWorld () override
 
void GetNearPoint2D (WorldObject const *searcher, float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint2D (float &x, float &y, float distance, float absAngle, Position const *startPos=nullptr) const
 
void GetNearPoint (WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle, float controlZ=0, Position const *startPos=nullptr) const
 
void GetVoidClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float relAngle=0, float controlZ=0) const
 
bool GetClosePoint (float &x, float &y, float &z, float size, float distance2d=0, float angle=0, WorldObject const *forWho=nullptr, bool force=false) const
 
void MovePosition (Position &pos, float dist, float angle)
 
Position GetNearPosition (float dist, float angle)
 
void MovePositionToFirstCollision (Position &pos, float dist, float angle)
 
Position GetFirstCollisionPosition (float startX, float startY, float startZ, float destX, float destY)
 
Position GetFirstCollisionPosition (float destX, float destY, float destZ)
 
Position GetFirstCollisionPosition (float dist, float angle)
 
Position GetRandomNearPosition (float radius)
 
void GetContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
void GetChargeContactPoint (WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
 
float GetObjectSize () const
 
virtual float GetCombatReach () const
 
void UpdateGroundPositionZ (float x, float y, float &z) const
 
void UpdateAllowedPositionZ (float x, float y, float &z, float *groundZ=nullptr) const
 
void GetRandomPoint (const Position &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
 
Position GetRandomPoint (const Position &srcPos, float distance) const
 
uint32 GetInstanceId () const
 
virtual void SetPhaseMask (uint32 newPhaseMask, bool update)
 
uint32 GetPhaseMask () const
 
bool InSamePhase (WorldObject const *obj) const
 
bool InSamePhase (uint32 phasemask) const
 
uint32 GetZoneId () const
 
uint32 GetAreaId () const
 
void GetZoneAndAreaId (uint32 &zoneid, uint32 &areaid) const
 
bool IsOutdoors () const
 
LiquidData const & GetLiquidData () const
 
InstanceScriptGetInstanceScript () const
 
std::string const & GetName () const
 
void SetName (std::string const &newname)
 
virtual std::string const & GetNameForLocaleIdx (LocaleConstant) const
 
float GetDistance (WorldObject const *obj) const
 
float GetDistance (const Position &pos) const
 
float GetDistance (float x, float y, float z) const
 
float GetDistance2d (WorldObject const *obj) const
 
float GetDistance2d (float x, float y) const
 
float GetDistanceZ (WorldObject const *obj) const
 
bool IsSelfOrInSameMap (WorldObject const *obj) const
 
bool IsInMap (WorldObject const *obj) const
 
bool IsWithinDist3d (float x, float y, float z, float dist) const
 
bool IsWithinDist3d (const Position *pos, float dist) const
 
bool IsWithinDist2d (float x, float y, float dist) const
 
bool IsWithinDist2d (const Position *pos, float dist) const
 
bool IsWithinDist (WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=true) const
 
bool IsWithinDistInMap (WorldObject const *obj, float dist2compare, bool is3D=true, bool useBoundingRadius=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 CleanupsBeforeDelete (bool finalCleanup=true)
 
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
 
virtual uint8 getLevelForTarget (WorldObject const *) 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)
 
void SendObjectDeSpawnAnim (ObjectGuid guid)
 
virtual void SaveRespawnTime ()
 
void AddObjectToRemoveList ()
 
float GetGridActivationRange () const
 
float GetVisibilityRange () const
 
virtual float GetSightRange (WorldObject const *target=nullptr) const
 
bool CanSeeOrDetect (WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false, bool checkAlert=false) const
 
void SendPlayMusic (uint32 Music, bool OnlySelf)
 
virtual void SetMap (Map *map)
 
virtual void ResetMap ()
 
MapGetMap () const
 
MapFindMap () const
 
void SetZoneScript ()
 
void ClearZoneScript ()
 
ZoneScriptGetZoneScript () const
 
TempSummonSummonCreature (uint32 id, const Position &pos, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false) const
 
TempSummonSummonCreature (uint32 id, float x, float y, float z, float ang=0, TempSummonType spwtype=TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, SummonPropertiesEntry const *properties=nullptr, bool visibleBySummonerOnly=false)
 
GameObjectSummonGameObject (uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime, bool checkTransport=true, GOSummonType summonType=GO_SUMMON_TIMED_OR_CORPSE_DESPAWN)
 
CreatureSummonTrigger (float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
 
void SummonCreatureGroup (uint8 group, std::list< TempSummon * > *list=nullptr)
 
CreatureFindNearestCreature (uint32 entry, float range, bool alive=true) const
 
GameObjectFindNearestGameObject (uint32 entry, float range, bool onlySpawned=false) const
 
GameObjectFindNearestGameObjectOfType (GameobjectTypes type, float range) const
 
PlayerSelectNearestPlayer (float distance=0) const
 
void GetGameObjectListWithEntryInGrid (std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetCreatureListWithEntryInGrid (std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
 
void GetDeadCreatureListInGrid (std::list< Creature * > &lList, float maxSearchRange, bool alive=false) const
 
void DestroyForNearbyPlayers ()
 
virtual void UpdateObjectVisibility (bool forced=true, bool fromUpdate=false)
 
void BuildUpdate (UpdateDataMapType &data_map, UpdatePlayerSet &player_set) override
 
void GetCreaturesWithEntryInRange (std::list< Creature * > &creatureList, float radius, uint32 entry)
 
void SetPositionDataUpdate ()
 
void UpdatePositionData ()
 
void AddToObjectUpdate () override
 
void RemoveFromObjectUpdate () override
 
void AddToNotify (uint16 f)
 
void RemoveFromNotify (uint16 f)
 
bool isNeedNotify (uint16 f) const
 
uint16 GetNotifyFlags () const
 
bool NotifyExecuted (uint16 f) const
 
void SetNotified (uint16 f)
 
void ResetAllNotifies ()
 
bool isActiveObject () const
 
void setActive (bool isActiveObject)
 
bool IsFarVisible () const
 
bool IsVisibilityOverridden () const
 
void SetVisibilityDistanceOverride (VisibilityDistanceType type)
 
void SetWorldObject (bool apply)
 
bool IsPermanentWorldObject () const
 
bool IsWorldObject () const
 
bool IsInWintergrasp () const
 
TransportGetTransport () const
 
float GetTransOffsetX () const
 
float GetTransOffsetY () const
 
float GetTransOffsetZ () const
 
float GetTransOffsetO () const
 
uint32 GetTransTime () const
 
int8 GetTransSeat () const
 
virtual ObjectGuid GetTransGUID () const
 
void SetTransport (Transport *t)
 
virtual float GetStationaryX () const
 
virtual float GetStationaryY () const
 
virtual float GetStationaryZ () const
 
virtual float GetStationaryO () 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. More...
 
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)
 
std::string GetDebugInfo () const override
 
- Public Member Functions inherited from Object
virtual ~Object ()
 
bool IsInWorld () const
 
virtual void AddToWorld ()
 
virtual void RemoveFromWorld ()
 
ObjectGuid GetGUID () const
 
PackedGuid const & GetPackGUID () const
 
uint32 GetEntry () const
 
void SetEntry (uint32 entry)
 
float GetObjectScale () const
 
virtual void SetObjectScale (float scale)
 
virtual uint32 GetDynamicFlags () const
 
bool HasDynamicFlag (uint32 flag) const
 
virtual void SetDynamicFlag (uint32 flag)
 
virtual void RemoveDynamicFlag (uint32 flag)
 
virtual void ReplaceAllDynamicFlags (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 ApplyPercentModFloatValue (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
 
virtual bool hasQuest (uint32) const
 
virtual bool hasInvolvedQuest (uint32) const
 
virtual void BuildUpdate (UpdateDataMapType &, UpdatePlayerSet &)
 
void BuildFieldsUpdate (Player *, UpdateDataMapType &)
 
void SetFieldNotifyFlag (uint16 flag)
 
void RemoveFieldNotifyFlag (uint16 flag)
 
void ForceValuesUpdateAtIndex (uint32)
 
bool IsPlayer () const
 
PlayerToPlayer ()
 
Player const * ToPlayer () const
 
CreatureToCreature ()
 
Creature const * ToCreature () const
 
UnitToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObjectToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
CorpseToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynamicObject () const
 
DynamicObjectToDynObject ()
 
DynamicObject const * ToDynObject () const
 
bool IsItem () const
 
virtual std::string GetDebugInfo () const
 
- Public Member Functions inherited from WorldLocation
 WorldLocation (uint32 _mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
 WorldLocation (uint32 mapId, Position const &position)
 
void WorldRelocate (const WorldLocation &loc)
 
void WorldRelocate (uint32 mapId=MAPID_INVALID, float x=0.f, float y=0.f, float z=0.f, float o=0.f)
 
void SetMapId (uint32 mapId)
 
uint32 GetMapId () const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z) const
 
void GetWorldLocation (uint32 &mapId, float &x, float &y, float &z, float &o) const
 
void GetWorldLocation (WorldLocation *location) const
 
WorldLocation GetWorldLocation () const
 
std::string GetDebugInfo () const
 
- Public Member Functions inherited from Position
 Position (float x=0, float y=0, float z=0, float o=0)
 
 Position (Position const &loc)
 
 Position (Position &&)=default
 
Positionoperator= (const Position &)=default
 
Positionoperator= (Position &&)=default
 
bool operator== (Position const &a) const
 
bool operator!= (Position const &a)
 
 operator G3D::Vector3 () const
 
void Relocate (float x, float y)
 
void Relocate (float x, float y, float z)
 
void Relocate (float x, float y, float z, float orientation)
 
void Relocate (const Position &pos)
 
void Relocate (const Position *pos)
 
void RelocatePolarOffset (float angle, float dist, float z=0.0f)
 
void RelocateOffset (const Position &offset)
 
void SetOrientation (float orientation)
 
float GetPositionX () const
 
float GetPositionY () const
 
float GetPositionZ () const
 
float GetOrientation () const
 
void GetPosition (float &x, float &y) const
 
void GetPosition (float &x, float &y, float &z) const
 
void GetPosition (float &x, float &y, float &z, float &o) const
 
Position GetPosition () const
 
Position::PositionXYZStreamer PositionXYZStream ()
 
Position::PositionXYZOStreamer PositionXYZOStream ()
 
bool IsPositionValid () const
 
float GetExactDist2dSq (const float x, const float y) const
 
float GetExactDist2dSq (Position const &pos) const
 
float GetExactDist2dSq (Position const *pos) const
 
float GetExactDist2d (const float x, const float y) const
 
float GetExactDist2d (Position const &pos) const
 
float GetExactDist2d (Position const *pos) const
 
float GetExactDistSq (float x, float y, float z) const
 
float GetExactDistSq (Position const &pos) const
 
float GetExactDistSq (Position const *pos) const
 
float GetExactDist (float x, float y, float z) const
 
float GetExactDist (Position const &pos) const
 
float GetExactDist (Position const *pos) const
 
void GetPositionOffsetTo (const Position &endPos, Position &retOffset) const
 
Position GetPositionWithOffset (Position const &offset) const
 
float GetAngle (const Position *pos) const
 
float GetAngle (float x, float y) const
 
float GetAbsoluteAngle (float x, float y) const
 
float GetAbsoluteAngle (Position const &pos) const
 
float GetAbsoluteAngle (Position const *pos) const
 
float GetRelativeAngle (const Position *pos) const
 
float GetRelativeAngle (float x, float y) const
 
float ToAbsoluteAngle (float relAngle) const
 
void GetSinCos (float x, float y, float &vsin, float &vcos) const
 
bool IsInDist2d (float x, float y, float dist) const
 
bool IsInDist2d (const Position *pos, float dist) const
 
bool IsInDist (float x, float y, float z, float dist) const
 
bool IsInDist (const Position *pos, float dist) const
 
bool IsWithinBox (const Position &center, float xradius, float yradius, float zradius) const
 
bool HasInArc (float arcangle, const Position *pos, float targetRadius=0.0f) const
 
bool HasInLine (Position const *pos, float width) const
 
std::string ToString () const
 
- Public Member Functions inherited from GridObject< GameObject >
bool IsInGrid () const
 
void AddToGrid (GridRefMgr< GameObject > &m)
 
void RemoveFromGrid ()
 

Static Public Member Functions

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

Public Attributes

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

Static Public Attributes

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

Protected Types

typedef std::map< uint32, ObjectGuidChairSlotAndUser
 

Protected Member Functions

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

Protected Attributes

uint32 m_spellId
 
time_t m_respawnTime
 
uint32 m_respawnDelayTime
 
uint32 m_despawnDelay
 
Seconds m_despawnRespawnTime
 
Seconds m_restockTime
 
LootState m_lootState
 
bool m_spawnedByDefault
 
uint32 m_cooldownTime
 
std::unordered_map< ObjectGuid, int32m_SkillupList
 
ObjectGuid m_ritualOwnerGUID
 
GuidSet m_unique_users
 
uint32 m_usetimes
 
ChairSlotAndUser ChairListSlots
 
ObjectGuid::LowType m_spawnId
 For new or temporary gameobjects is 0 for saved it is lowguid. More...
 
GameObjectTemplate const * m_goInfo
 
GameObjectData const * m_goData
 
GameObjectValue m_goValue
 
bool m_allowModifyDestructibleBuilding
 
int64 m_packedRotation
 
G3D::Quat m_localRotation
 
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
 
bool m_isFarVisible
 
Optional< float > m_visibilityDistanceOverride
 
const bool m_isWorldObject
 
ZoneScriptm_zoneScript
 
uint32 _zoneId
 
uint32 _areaId
 
float _floorZ
 
bool _outdoors
 
LiquidData _liquidData
 
bool _updatePositionData
 
Transportm_transport
 
- Protected Attributes inherited from Object
uint16 m_objectType
 
TypeID m_objectTypeId
 
uint16 m_updateFlag
 
union {
   int32 *   m_int32Values
 
   uint32 *   m_uint32Values
 
   float *   m_floatValues
 
}; 
 
UpdateMask _changesMask
 
uint16 m_valuesCount
 
uint16 _fieldNotifyFlags
 
bool m_objectUpdated
 

Private Member Functions

void CheckRitualList ()
 
void ClearRitualList ()
 
void RemoveFromOwner ()
 
void SwitchDoorOrButton (bool activate, bool alternative=false)
 
void UpdatePackedRotation ()
 
bool _IsWithinDist (WorldObject const *obj, float dist2compare, bool, bool) const override
 Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size. More...
 

Private Attributes

GameObjectAIm_AI
 
bool m_saveStateOnDb = false
 

Detailed Description

Member Typedef Documentation

◆ ChairSlotAndUser

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

Constructor & Destructor Documentation

◆ GameObject()

GameObject::GameObject ( )
explicit
41 : WorldObject(false), MovableMapObject(),
42 m_model(nullptr), m_goValue(), m_AI(nullptr)
43{
46
48
50 m_respawnTime = 0;
54 m_restockTime = 0s;
56 m_spawnedByDefault = true;
58 m_usetimes = 0;
59 m_spellId = 0;
61 m_goInfo = nullptr;
62 m_goData = nullptr;
64
65 m_spawnId = 0;
66
71
72 ResetLootMode(); // restore default loot mode
74 m_stationaryPosition.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
75}
@ GO_NOT_READY
Definition: GameObject.h:111
@ TYPEID_GAMEOBJECT
Definition: ObjectGuid.h:37
@ TYPEMASK_GAMEOBJECT
Definition: ObjectGuid.h:51
@ GAMEOBJECT_END
Definition: UpdateFields.h:405
@ 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
Loot loot
Definition: GameObject.h:248
GameObjectValue m_goValue
Definition: GameObject.h:393
time_t m_respawnTime
Definition: GameObject.h:372
GameObjectData const * m_goData
Definition: GameObject.h:392
int64 m_packedRotation
Definition: GameObject.h:396
Position m_stationaryPosition
Definition: GameObject.h:398
bool m_allowModifyDestructibleBuilding
Definition: GameObject.h:394
uint32 m_cooldownTime
Definition: GameObject.h:379
uint32 m_spellId
Definition: GameObject.h:371
uint32 m_respawnDelayTime
Definition: GameObject.h:373
void ResetLootMode()
Definition: GameObject.h:234
uint32 m_despawnDelay
Definition: GameObject.h:374
Seconds m_despawnRespawnTime
Definition: GameObject.h:375
ObjectGuid::LowType m_lootRecipientGroup
Definition: GameObject.h:401
GameObjectAI * m_AI
Definition: GameObject.h:423
GameObjectModel * m_model
Definition: GameObject.h:313
GameObjectTemplate const * m_goInfo
Definition: GameObject.h:391
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
Definition: GameObject.h:390
uint32 m_groupLootTimer
Definition: GameObject.h:256
uint32 lootingGroupLowGUID
Definition: GameObject.h:257
bool m_spawnedByDefault
Definition: GameObject.h:378
LootState m_lootState
Definition: GameObject.h:377
Seconds m_restockTime
Definition: GameObject.h:376
uint32 m_usetimes
Definition: GameObject.h:385
uint32 m_lootGenerationTime
Definition: GameObject.h:403
uint16 m_objectType
Definition: Object.h:238
uint16 m_valuesCount
Definition: Object.h:252
uint16 m_updateFlag
Definition: Object.h:241
TypeID m_objectTypeId
Definition: Object.h:240
MovableMapObject()=default
Definition: Object.h:403
void Relocate(float x, float y)
Definition: Position.h:73
GameObject * sourceGameObject
Definition: LootMgr.h:331

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
78{
79 delete m_AI;
80 delete m_model;
81 //if (m_uint32Values) // field array can be not exist if GameOBject not loaded
82 // CleanupsBeforeDelete();
83}

References m_AI, and m_model.

Member Function Documentation

◆ _IsWithinDist()

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

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

Following check does check 3d distance

Reimplemented from WorldObject.

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

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

◆ ActivateToQuest()

bool GameObject::ActivateToQuest ( Player target) const
1328{
1329 if (target->HasQuestForGO(GetEntry()))
1330 return true;
1331
1332 if (!GetGOInfo()->IsGameObjectForQuests())
1333 return false;
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}
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
@ BG_AV_OBJECTID_MINE_N
Definition: BattlegroundAV.h:160
@ BG_AV_OBJECTID_MINE_S
Definition: BattlegroundAV.h:161
@ GAMEOBJECT_TYPE_SPELL_FOCUS
Definition: SharedDefines.h:1568
@ GAMEOBJECT_TYPE_GENERIC
Definition: SharedDefines.h:1565
@ GAMEOBJECT_TYPE_CHEST
Definition: SharedDefines.h:1563
@ GAMEOBJECT_TYPE_QUESTGIVER
Definition: SharedDefines.h:1562
@ GAMEOBJECT_TYPE_GOOBER
Definition: SharedDefines.h:1570
@ BATTLEGROUND_AV
Definition: SharedDefines.h:3481
Definition: Battleground.h:298
Definition: GameObject.h:121
GameObjectTemplate const * GetGOInfo() const
Definition: GameObject.h:137
GameobjectTypes GetGoType() const
Definition: GameObject.h:204
struct GameObjectTemplate::@227::@233 _generic
int32 questID
Definition: GameObjectData.h:111
struct GameObjectTemplate::@227::@236 spellFocus
uint32 questId
Definition: GameObjectData.h:92
struct GameObjectTemplate::@227::@238 goober
uint32 GetEntry() const
Definition: Object.h:112
bool HasQuestForGO(int32 GOId) const
Definition: Player.cpp:12334
TeamId GetTeamId(bool original=false) const
Definition: Player.h:2084
QuestGiverStatus GetQuestDialogStatus(Object *questGiver)
Definition: PlayerQuest.cpp:1589
Battleground * GetBattleground(bool create=false) const
Definition: Player.cpp:12148
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition: PlayerQuest.cpp:1424
bool HaveQuestLootForPlayer(uint32 loot_id, Player const *player) const
Definition: LootMgr.cpp:227

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

Referenced by BuildValuesUpdate().

◆ AddLootMode()

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

References m_LootMode.

◆ AddToSkillupList()

void GameObject::AddToSkillupList ( ObjectGuid  playerGuid)
3060{
3061 int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS;
3062 m_SkillupList[playerGuid] = timer;
3063}
constexpr auto IN_MILLISECONDS
Definition: Common.h:52
constexpr auto MINUTE
Definition: Common.h:46
std::int32_t int32
Definition: Define.h:103
std::unordered_map< ObjectGuid, int32 > m_SkillupList
Definition: GameObject.h:381
Map * GetMap() const
Definition: Object.h:529
bool IsDungeon() const
Definition: Map.h:448

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.

141{
143 if (!IsInWorld())
144 {
145 if (m_zoneScript)
147
149 if (m_spawnId)
150 GetMap()->GetGameObjectBySpawnIdStore().insert(std::make_pair(m_spawnId, this));
151
152 if (m_model)
153 {
156 }
157
158 EnableCollision(GetGoState() == GO_STATE_READY || IsTransport()); // pussywizard: this startOpen is unneeded here, collision depends entirely on GOState
159
161
163
164 sScriptMgr->OnGameObjectAddWorld(this);
165 }
166}
@ GO_STATE_READY
Definition: GameObjectData.h:691
#define sScriptMgr
Definition: ScriptMgr.h:706
bool UpdatePosition()
Definition: GameObjectModel.cpp:269
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition: TypeContainer.h:133
GOState GetGoState() const
Definition: GameObject.h:206
void EnableCollision(bool enable)
Definition: GameObject.cpp:2595
bool IsTransport() const
Definition: GameObject.cpp:1226
bool IsInWorld() const
Definition: Object.h:104
ObjectGuid GetGUID() const
Definition: Object.h:110
void AddToWorld() override
Definition: Object.cpp:1176
ZoneScript * m_zoneScript
Definition: Object.h:641
ObjectGuid sourceWorldObjectGUID
Definition: LootMgr.h:330
MapStoredObjectTypesContainer & GetObjectsStore()
Definition: Map.h:517
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
Definition: Map.h:523
void InsertGameObjectModel(const GameObjectModel &model)
Definition: Map.h:561
virtual void OnGameObjectCreate(GameObject *)
Definition: ZoneScript.h:38

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 AddObjectHelper(), and Map::AddToMap().

◆ AddUniqueUse()

void GameObject::AddUniqueUse ( Player player)
928{
929 AddUse();
930 m_unique_users.insert(player->GetGUID());
931}
void AddUse()
Definition: GameObject.h:240
GuidSet m_unique_users
Definition: GameObject.h:384
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:109

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

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

◆ AddUse()

◆ AI()

◆ AIM_Initialize()

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

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.

2732{
2733 if (!target)
2734 return;
2735
2737 bool targetIsGM = target->IsGameMaster() && target->GetSession()->IsGMAccount();
2738
2739 ByteBuffer fieldBuffer;
2740
2741 UpdateMask updateMask;
2742 updateMask.SetCount(m_valuesCount);
2743
2745 uint32 visibleFlag = UF_FLAG_PUBLIC;
2746 if (GetOwnerGUID() == target->GetGUID())
2747 visibleFlag |= UF_FLAG_OWNER;
2748
2749 for (uint16 index = 0; index < m_valuesCount; ++index)
2750 {
2751 if (_fieldNotifyFlags & flags[index] ||
2752 ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
2753 (index == GAMEOBJECT_FLAGS && forcedFlags))
2754 {
2755 updateMask.SetBit(index);
2756
2757 if (index == GAMEOBJECT_DYNAMIC)
2758 {
2759 uint16 dynFlags = 0;
2760 int16 pathProgress = -1;
2761 switch (GetGoType())
2762 {
2764 if (ActivateToQuest(target))
2765 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2766 break;
2769 if (ActivateToQuest(target))
2770 {
2771 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2772 if (sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2773 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2774 }
2775 else if (targetIsGM)
2776 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2777 break;
2780 if (ActivateToQuest(target) && sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2781 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2782 break;
2784 if (const StaticTransport* t = ToStaticTransport())
2785 if (t->GetPauseTime())
2786 {
2787 if (GetGoState() == GO_STATE_READY)
2788 {
2789 if (t->GetPathProgress() >= t->GetPauseTime()) // if not, send 100% progress
2790 pathProgress = int16(float(t->GetPathProgress() - t->GetPauseTime()) / float(t->GetPeriod() - t->GetPauseTime()) * 65535.0f);
2791 }
2792 else
2793 {
2794 if (t->GetPathProgress() <= t->GetPauseTime()) // if not, send 100% progress
2795 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPauseTime()) * 65535.0f);
2796 }
2797 }
2798 // else it's ignored
2799 break;
2801 if (const MotionTransport* t = ToMotionTransport())
2802 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPeriod()) * 65535.0f);
2803 break;
2804 default:
2805 break;
2806 }
2807
2808 fieldBuffer << uint16(dynFlags);
2809 fieldBuffer << int16(pathProgress);
2810 }
2811 else if (index == GAMEOBJECT_FLAGS)
2812 {
2815 {
2817 }
2818
2819 fieldBuffer << goFlags;
2820 }
2821 else
2822 fieldBuffer << m_uint32Values[index]; // other cases
2823 }
2824 }
2825
2826 *data << uint8(updateMask.GetBlockCount());
2827 updateMask.AppendToPacket(data);
2828 data->append(fieldBuffer);
2829}
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
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
@ UPDATETYPE_VALUES
Definition: UpdateData.h:28
@ CONFIG_OBJECT_SPARKLES
Definition: IWorld.h:183
@ GAMEOBJECT_TYPE_MO_TRANSPORT
Definition: SharedDefines.h:1575
@ GAMEOBJECT_TYPE_TRANSPORT
Definition: SharedDefines.h:1571
@ GO_DYNFLAG_LO_ACTIVATE
Definition: SharedDefines.h:1618
@ GO_DYNFLAG_LO_SPARKLE
Definition: SharedDefines.h:1621
@ GO_FLAG_NOT_SELECTABLE
Definition: SharedDefines.h:1607
@ GO_FLAG_LOCKED
Definition: SharedDefines.h:1604
#define sWorld
Definition: World.h:444
MotionTransport * ToMotionTransport()
Definition: GameObject.h:328
bool HasLootRecipient() const
Definition: GameObject.h:255
ObjectGuid GetOwnerGUID() const
Definition: GameObject.h:174
bool ActivateToQuest(Player *target) const
Definition: GameObject.cpp:1327
bool IsLootAllowedFor(Player const *player) const
Definition: GameObject.cpp:2693
StaticTransport * ToStaticTransport()
Definition: GameObject.h:325
struct GameObjectTemplate::@227::@232 chest
uint32 groupLootRules
Definition: GameObjectData.h:99
uint16 _fieldNotifyFlags
Definition: Object.h:254
UpdateMask _changesMask
Definition: Object.h:250
uint32 * m_uint32Values
Definition: Object.h:246
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
WorldSession * GetSession() const
Definition: Player.h:1974
bool IsGameMaster() const
Definition: Player.h:1157
Definition: Transport.h:48
Definition: Transport.h:112
bool IsGMAccount() const
Definition: WorldSession.cpp:181
Definition: ByteBuffer.h:70
void append(T value)
Definition: ByteBuffer.h:129

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 
)
2077{
2078 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2079 if (!spellInfo)
2080 return;
2081
2082 bool self = true;
2083 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2084 {
2085 if (spellInfo->Effects[i].TargetA.GetReferenceType() != TARGET_REFERENCE_TYPE_CASTER || spellInfo->Effects[i].TargetB.GetTarget())
2086 {
2087 self = false;
2088 break;
2089 }
2090 }
2091
2092 if (self && target && target->GetGUID() != GetGUID())
2093 {
2094 target->CastSpell(target, spellInfo, true);
2095 return;
2096 }
2097
2098 //summon world trigger
2099 Creature* trigger = SummonTrigger(GetPositionX(), GetPositionY(), GetPositionZ(), 0, spellInfo->CalcCastTime() + 2000, true);
2100 if (!trigger)
2101 return;
2102
2103 if (Unit* owner = GetOwner())
2104 {
2105 trigger->SetLevel(owner->GetLevel(), false);
2106 trigger->SetFaction(owner->GetFaction());
2107 // needed for GO casts for proper target validation checks
2108 trigger->SetOwnerGUID(owner->GetGUID());
2109 // xinef: fixes some duel bugs with traps]
2110 if (owner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
2112 if (owner->IsFFAPvP())
2113 {
2115 {
2116 sScriptMgr->OnFfaPvpStateUpdate(trigger, true);
2118 }
2119
2120 }
2121 // xinef: Remove Immunity flags
2122 trigger->SetImmuneToNPC(false);
2123 // xinef: set proper orientation, fixes cast against stealthed targets
2124 if (target)
2125 trigger->SetInFront(target);
2126 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, owner->GetGUID());
2127 }
2128 else
2129 {
2130 // xinef: set faction of gameobject, if no faction - assume hostile
2131 trigger->SetFaction(GetTemplateAddon() && GetTemplateAddon()->faction ? GetTemplateAddon()->faction : 14);
2132 // Set owner guid for target if no owner availble - needed by trigger auras
2133 // - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
2134 // xinef: set proper orientation, fixes cast against stealthed targets
2135 if (target)
2136 trigger->SetInFront(target);
2137 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : ObjectGuid::Empty);
2138 }
2139}
@ UNIT_BYTE2_FLAG_FFA_PVP
Definition: UnitDefines.h:117
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition: UnitDefines.h:232
@ UNIT_FIELD_BYTES_2
Definition: UpdateFields.h:161
@ TARGET_REFERENCE_TYPE_CASTER
Definition: SpellInfo.h:89
#define sSpellMgr
Definition: SpellMgr.h:825
#define MAX_SPELL_EFFECTS
Definition: DBCStructure.h:1637
Definition: Creature.h:46
Unit * GetOwner() const
Definition: GameObject.cpp:1238
GameObjectTemplateAddon const * GetTemplateAddon() const
Definition: GameObject.cpp:912
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
Definition: Object.cpp:949
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
Definition: Object.cpp:911
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, bool setLevel=false, CreatureAI *(*GetAI)(Creature *)=nullptr)
Definition: Object.cpp:2401
static ObjectGuid const Empty
Definition: ObjectGuid.h:120
float GetPositionZ() const
Definition: Position.h:119
float GetPositionX() const
Definition: Position.h:117
float GetPositionY() const
Definition: Position.h:118
Definition: Unit.h:630
void SetFaction(uint32 faction)
Definition: Unit.cpp:9991
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition: Unit.cpp:13537
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition: Unit.cpp:15373
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:1151
void SetOwnerGUID(ObjectGuid owner)
Definition: Unit.cpp:10499
void SetUnitFlag(UnitFlags flags)
Definition: Unit.h:825
void SetInFront(WorldObject const *target)
Definition: Unit.cpp:20410
Definition: SpellInfo.h:316
std::array< SpellEffectInfo, MAX_SPELL_EFFECTS > Effects
Definition: SpellInfo.h:393
uint32 CalcCastTime(Unit *caster=nullptr, Spell *spell=nullptr) const
Definition: SpellInfo.cpp:2351

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

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

◆ CheckRitualList()

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

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.

105{
106 if (GetTransport() && !ToTransport())
107 {
109 SetTransport(nullptr);
112 }
113
114 if (IsInWorld())
116
117 if (m_uint32Values) // field array can be not exist if GameOBject not loaded
119}
@ MOVEMENTFLAG_ONTRANSPORT
Definition: UnitDefines.h:353
void RemoveFromWorld() override
Definition: GameObject.cpp:168
void RemoveFromOwner()
Definition: GameObject.cpp:121
Transport * ToTransport()
Definition: GameObject.h:322
void RemoveMovementFlag(uint32 flag)
Definition: Object.h:331
struct MovementInfo::TransportInfo transport
void Reset()
Definition: Object.h:285
void SetTransport(Transport *t)
Definition: Object.h:605
Transport * GetTransport() const
Definition: Object.h:597
MovementInfo m_movementInfo
Definition: Object.h:607
virtual void RemovePassenger(WorldObject *passenger, bool withAll=false)=0

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
232{
233 if (m_unique_users.empty())
234 return;
235
237 if (!animSpell)
238 animSpell = GetSpellId();
239
240 for (ObjectGuid const& guid : m_unique_users)
241 {
242 if (Player* channeler = ObjectAccessor::GetPlayer(*this, guid))
243 if (Spell* spell = channeler->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
244 if (spell->m_spellInfo->Id == animSpell)
245 {
246 spell->SendChannelUpdate(0);
247 spell->finish();
248 }
249 }
250
251 m_unique_users.clear();
252}
Definition: ObjectGuid.h:118

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.

255{
256 ASSERT(map);
257 SetMap(map);
258
259 Relocate(x, y, z, ang);
260 m_stationaryPosition.Relocate(x, y, z, ang);
261 if (!IsPositionValid())
262 {
263 LOG_ERROR("entities.gameobject", "Gameobject (GUID: {} Entry: {}) not created. Suggested coordinates isn't valid (X: {} Y: {})", guidlow, name_id, x, y);
264 return false;
265 }
266
267 SetPhaseMask(phaseMask, false);
268
270
272 if (m_zoneScript)
273 {
274 name_id = m_zoneScript->GetGameObjectEntry(guidlow, name_id);
275 if (!name_id)
276 return false;
277 }
278
279 GameObjectTemplate const* goinfo = sObjectMgr->GetGameObjectTemplate(name_id);
280 if (!goinfo)
281 {
282 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);
283 return false;
284 }
285
286 Object::_Create(guidlow, goinfo->entry, HighGuid::GameObject);
287
288 m_goInfo = goinfo;
289
290 if (goinfo->type >= MAX_GAMEOBJECT_TYPE)
291 {
292 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);
293 return false;
294 }
295
296 GameObjectAddon const* addon = sObjectMgr->GetGameObjectAddon(GetSpawnId());
297
298 // hackfix for the hackfix down below
299 switch (goinfo->entry)
300 {
301 // excluded ids from the hackfix below
302 // used switch since there should be more
303 case 181233: // maexxna portal effect
304 case 181575: // maexxna portal
305 case 20992: // theramore black shield
306 case 21042: // theramore guard badge
307 SetLocalRotation(rotation);
308 break;
309 default:
310 // xinef: hackfix - but make it possible to use original WorldRotation (using special gameobject addon data)
311 // pussywizard: temporarily calculate WorldRotation from orientation, do so until values in db are correct
312 if (addon && addon->invisibilityType == INVISIBILITY_GENERAL && addon->InvisibilityValue == 0)
313 {
314 SetLocalRotation(rotation);
315 }
316 else
317 {
319 }
320 break;
321 }
322
323 // pussywizard: no PathRotation for normal gameobjects
324 SetTransportPathRotation(0.0f, 0.0f, 0.0f, 1.0f);
325
326 SetObjectScale(goinfo->size);
327
328 if (GameObjectTemplateAddon const* templateAddon = GetTemplateAddon())
329 {
330 SetUInt32Value(GAMEOBJECT_FACTION, templateAddon->faction);
331 ReplaceAllGameObjectFlags((GameObjectFlags)templateAddon->flags);
332 }
333
334 SetEntry(goinfo->entry);
335
336 // set name for logs usage, doesn't affect anything ingame
337 SetName(goinfo->name);
338
339 // GAMEOBJECT_BYTES_1, index at 0, 1, 2 and 3
341
343 {
344 if (InstanceScript* instance = GetInstanceScript())
345 {
346 switch (uint8 state = instance->GetStoredGameObjectState(GetSpawnId()))
347 {
348 case 0:
350 SwitchDoorOrButton(true);
351 break;
352 case 1:
353 case 2:
354 SetGoState((GOState)state);
355 break;
356 default:
357 SetGoState(go_state);
358 break;
359 }
360 }
361 }
362 else
363 {
364 SetGoState(go_state);
365 }
366
367 SetGoArtKit(artKit);
368
369 SetDisplayId(goinfo->displayId);
370
371 if (!m_model)
373
374 switch (goinfo->type)
375 {
377 SetGoAnimProgress(animprogress);
379 break;
384 break;
387 break;
389 if (GetGOInfo()->trap.stealthed)
390 {
393 }
394
395 if (GetGOInfo()->trap.invisible)
396 {
399 }
400 break;
401 default:
402 SetGoAnimProgress(animprogress);
403 break;
404 }
405
406 if (addon)
407 {
408 if (addon->InvisibilityValue)
409 {
412 }
413 }
414
417
418 if (uint32 linkedEntry = GetGOInfo()->GetLinkedGameObjectEntry())
419 {
420 GameObject* linkedGO = new GameObject();
421 if (linkedGO->Create(map->GenerateLowGuid<HighGuid::GameObject>(), linkedEntry, map, phaseMask, x, y, z, ang, rotation, 255, GO_STATE_READY))
422 {
423 SetLinkedTrap(linkedGO);
424 map->AddToMap(linkedGO);
425 }
426 else
427 {
428 delete linkedGO;
429 }
430 }
431
432 // Check if GameObject is Large
433 if (goinfo->IsLargeGameObject())
434 {
435 SetVisibilityDistanceOverride(VisibilityDistanceType::Large);
436 }
437
438 // Check if GameObject is Infinite
439 if (goinfo->IsInfiniteGameObject())
440 {
441 SetVisibilityDistanceOverride(VisibilityDistanceType::Infinite);
442 }
443
444 return true;
445}
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:44
#define LOG_ERROR(filterType__,...)
Definition: Log.h:156
#define ASSERT
Definition: Errors.h:68
GOState
Definition: GameObjectData.h:689
@ GAMEOBJECT_FACTION
Definition: UpdateFields.h:402
#define sObjectMgr
Definition: ObjectMgr.h:1623
GameobjectTypes
Definition: SharedDefines.h:1559
@ GAMEOBJECT_TYPE_TRAP
Definition: SharedDefines.h:1566
@ GAMEOBJECT_TYPE_FISHINGHOLE
Definition: SharedDefines.h:1585
@ GAMEOBJECT_TYPE_FISHINGNODE
Definition: SharedDefines.h:1577
@ GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING
Definition: SharedDefines.h:1593
@ STEALTH_TRAP
Definition: SharedDefines.h:1248
@ INVISIBILITY_GENERAL
Definition: SharedDefines.h:1255
@ INVISIBILITY_TRAP
Definition: SharedDefines.h:1258
#define MAX_GAMEOBJECT_TYPE
Definition: SharedDefines.h:1598
GameObjectFlags
Definition: SharedDefines.h:1602
uint32 MaxOpens
Definition: GameObject.h:61
struct GameObjectValue::@224 FishingHole
struct GameObjectValue::@226 Building
uint32 MaxHealth
Definition: GameObject.h:72
uint32 Health
Definition: GameObject.h:71
void SetLocalRotationAngles(float z_rot, float y_rot, float x_rot)
Definition: GameObject.cpp:2246
GameObject()
Definition: GameObject.cpp:41
void SetGoState(GOState state)
Definition: GameObject.cpp:2468
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition: GameObject.cpp:2238
void SetGoArtKit(uint8 artkit)
Definition: GameObject.cpp:1443
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition: GameObject.cpp:2587
void SetLocalRotation(G3D::Quat const &rot)
Definition: GameObject.cpp:2224
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:254
GameObjectModel * CreateModel()
Definition: GameObject.cpp:2947
void SetGoType(GameobjectTypes type)
Definition: GameObject.h:205
void SetLinkedTrap(GameObject *linkedTrap)
Definition: GameObject.h:262
ObjectGuid::LowType GetSpawnId() const
Definition: GameObject.h:145
bool AIM_Initialize()
Definition: GameObject.cpp:85
virtual uint32 GetScriptId() const
Definition: GameObject.cpp:2188
void SetDisplayId(uint32 displayid)
Definition: GameObject.cpp:2581
void ReplaceAllGameObjectFlags(GameObjectFlags flags)
Definition: GameObject.h:221
bool IsInstanceGameobject() const
Definition: GameObject.cpp:2504
void SwitchDoorOrButton(bool activate, bool alternative=false)
Definition: GameObject.cpp:1466
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
std::string name
Definition: GameObjectData.h:36
uint32 maxSuccessOpens
Definition: GameObjectData.h:89
float size
Definition: GameObjectData.h:40
struct GameObjectTemplate::@227::@255 building
uint32 displayId
Definition: GameObjectData.h:35
Definition: GameObjectData.h:665
Definition: GameObjectData.h:682
uint32 InvisibilityValue
Definition: GameObjectData.h:684
InvisibilityType invisibilityType
Definition: GameObjectData.h:683
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition: Object.cpp:134
void SetEntry(uint32 entry)
Definition: Object.h:113
virtual void SetObjectScale(float scale)
Definition: Object.h:116
void SetUInt32Value(uint16 index, uint32 value)
Definition: Object.cpp:650
void AddFlag(FLAG_TYPE flag)
Definition: Object.h:366
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition: Object.h:371
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1192
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition: Object.h:518
uint32 LastUsedScriptID
Definition: Object.h:594
void SetName(std::string const &newname)
Definition: Object.h:457
void SetZoneScript()
Definition: Object.cpp:2330
virtual void SetMap(Map *map)
Definition: Object.cpp:2105
void UpdatePositionData()
Definition: Object.cpp:1154
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition: Object.h:515
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition: Object.cpp:1122
static float NormalizeOrientation(float o)
Definition: Position.h:233
float GetOrientation() const
Definition: Position.h:120
bool IsPositionValid() const
Definition: Position.cpp:175
Definition: InstanceScript.h:142
ObjectGuid::LowType GenerateLowGuid()
Definition: Map.h:638
uint32 GetId() const
Definition: Map.h:379
bool AddToMap(T *, bool checkTransport=false)
Definition: Map.cpp:555
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType, uint32 entry)
Definition: ZoneScript.h:33

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_FACTION, GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING, GAMEOBJECT_TYPE_FISHINGHOLE, GAMEOBJECT_TYPE_FISHINGNODE, GAMEOBJECT_TYPE_TRAP, Map::GenerateLowGuid(), ZoneScript::GetGameObjectEntry(), GetGOInfo(), Map::GetId(), WorldObject::GetInstanceScript(), Position::GetOrientation(), GetScriptId(), GetSpawnId(), GetTemplateAddon(), GO_STATE_READY, GameObjectValue::Health, GameObjectTemplate::intactNumHits, INVISIBILITY_GENERAL, INVISIBILITY_TRAP, GameObjectAddon::invisibilityType, GameObjectAddon::InvisibilityValue, GameObjectTemplate::invisible, GameObjectTemplate::IsInfiniteGameObject(), IsInstanceGameobject(), GameObjectTemplate::IsLargeGameObject(), Position::IsPositionValid(), 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, Position::NormalizeOrientation(), Position::Relocate(), ReplaceAllGameObjectFlags(), SetDisplayId(), Object::SetEntry(), SetGoAnimProgress(), SetGoArtKit(), SetGoState(), SetGoType(), SetLinkedTrap(), SetLocalRotation(), SetLocalRotationAngles(), WorldObject::SetMap(), WorldObject::SetName(), Object::SetObjectScale(), SetPhaseMask(), SetTransportPathRotation(), Object::SetUInt32Value(), WorldObject::SetVisibilityDistanceOverride(), WorldObject::SetZoneScript(), GameObjectTemplate::size, sObjectMgr, STEALTH_TRAP, GameObjectTemplate::stealthed, SwitchDoorOrButton(), GameObjectTemplate::type, WorldObject::UpdatePositionData(), and urand().

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
2948{
2949 return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
2950}
static GameObjectModel * Create(std::unique_ptr< GameObjectModelOwnerBase > modelOwner, std::string const &dataPath)
Definition: GameObjectModel.cpp:168

References GameObjectModel::Create(), and sWorld.

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

◆ Delete()

void GameObject::Delete ( )
980{
983
985
987
988 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
990
991 // Xinef: if ritual gameobject is removed, clear anim spells
994
995 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
996 if (poolid)
997 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
998 else
1000}
#define sPoolMgr
Definition: PoolMgr.h:163
@ GAMEOBJECT_TYPE_SUMMONING_RITUAL
Definition: SharedDefines.h:1578
void SetLootState(LootState s, Unit *unit=nullptr)
Definition: GameObject.cpp:2433
void ClearRitualList()
Definition: GameObject.cpp:231
void AddObjectToRemoveList()
Definition: Object.cpp:2149
void SendObjectDeSpawnAnim(ObjectGuid guid)
Definition: Object.cpp:2098

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

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

◆ DeleteFromDB()

void GameObject::DeleteFromDB ( )
1188{
1190 sObjectMgr->DeleteGOData(m_spawnId);
1191
1193 stmt->SetData(0, m_spawnId);
1194 WorldDatabase.Execute(stmt);
1195
1196 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
1197 stmt->SetData(0, m_spawnId);
1198 WorldDatabase.Execute(stmt);
1199}
@ WORLD_DEL_EVENT_GAMEOBJECT
Definition: WorldDatabase.h:38
@ WORLD_DEL_GAMEOBJECT
Definition: WorldDatabase.h:37
DatabaseWorkerPool< WorldDatabaseConnection > WorldDatabase
Accessor to the world database.
Definition: DatabaseEnv.cpp:20
Definition: PreparedStatement.h:158
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:78
void RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
Definition: Map.cpp:3406

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 
)
934{
935 if (delay > 0ms)
936 {
937 if (!m_despawnDelay || m_despawnDelay > delay.count())
938 {
939 m_despawnDelay = delay.count();
940 m_despawnRespawnTime = forceRespawnTime;
941 }
942 }
943 else
944 {
945 if (m_goData)
946 {
947 int32 const respawnDelay = (forceRespawnTime > 0s) ? forceRespawnTime.count() : m_goData->spawntimesecs;
948 SetRespawnTime(respawnDelay);
949 }
950
951 // Respawn is handled by the gameobject itself.
952 // If we delete it from world, it simply never respawns...
953 // Uncomment this and remove the following lines if dynamic spawn is implemented.
954 // Delete();
955 {
959
960 if (GameObject* trap = GetLinkedTrap())
961 {
962 trap->DespawnOrUnsummon();
963 }
964
965 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
966 {
968 }
969
970 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
971 if (poolid)
972 {
973 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
974 }
975 }
976 }
977}
@ GO_JUST_DEACTIVATED
Definition: GameObject.h:114
GameObject * GetLinkedTrap()
Definition: GameObject.cpp:2726
void SetRespawnTime(int32 respawn)
Definition: GameObject.cpp:1303
int32 spawntimesecs
Definition: GameObjectData.h:707

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

Referenced by Spell::EffectActivateObject(), instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate(), instance_molten_core::instance_molten_core_InstanceMapScript::OnGameObjectCreate(), instance_hyjal::instance_mount_hyjal_InstanceMapScript::OnGameObjectCreate(), instance_temple_of_ahnqiraj::instance_temple_of_ahnqiraj_InstanceMapScript::OnGameObjectCreate(), go_strange_pool::OnGossipHello(), 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)
2596{
2597 if (!m_model)
2598 return;
2599
2600 /*if (enable && !GetMap()->ContainsGameObjectModel(*m_model))
2601 GetMap()->InsertGameObjectModel(*m_model);*/
2602
2603 uint32 phaseMask = 0;
2604 if (enable && !DisableMgr::IsDisabledFor(DISABLE_TYPE_GO_LOS, GetEntry(), nullptr))
2605 phaseMask = GetPhaseMask();
2606
2607 m_model->enable(phaseMask);
2608}
@ DISABLE_TYPE_GO_LOS
Definition: DisableMgr.h:36
bool IsDisabledFor(DisableType type, uint32 entry, Unit const *unit, uint8 flags)
Definition: DisableMgr.cpp:306
void enable(uint32 ph_mask)
Definition: GameObjectModel.h:67
uint32 GetPhaseMask() const
Definition: Object.h:444

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

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

◆ EventInform()

void GameObject::EventInform ( uint32  eventId)
2177{
2178 if (!eventId)
2179 return;
2180
2181 if (AI())
2182 AI()->EventInform(eventId);
2183
2184 if (m_zoneScript)
2185 m_zoneScript->ProcessEvent(this, eventId);
2186}
virtual void EventInform(uint32)
Definition: GameObjectAI.h:66
GameObjectAI * AI() const
Definition: GameObject.h:307
virtual void ProcessEvent(WorldObject *, uint32)
Definition: ZoneScript.h:55

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

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

◆ GameobjectStateToInt()

uint8 GameObject::GameobjectStateToInt ( GOState state) const
2539{
2540 uint8 m_state = 3;
2541
2542 if (state)
2543 {
2544 switch (*state)
2545 {
2546 case GO_STATE_ACTIVE:
2547 m_state = 0;
2548 return m_state;
2549 case GO_STATE_READY:
2550 m_state = 1;
2551 return m_state;
2553 m_state = 2;
2554 return m_state;
2555 }
2556 }
2557
2558 // Returning any value that is not one of the specified ones
2559 // Which will default into the invalid part of the switch
2560 return m_state;
2561}
@ GO_STATE_ACTIVE
Definition: GameObjectData.h:690
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition: GameObjectData.h:692

References GO_STATE_ACTIVE, GO_STATE_ACTIVE_ALTERNATIVE, and GO_STATE_READY.

Referenced by SaveStateToDB().

◆ GetAIName()

std::string const & GameObject::GetAIName ( ) const
100{
101 return sObjectMgr->GetGameObjectTemplate(GetEntry())->AIName;
102}

References Object::GetEntry(), and sObjectMgr.

Referenced by GetDebugInfo().

◆ GetDebugInfo()

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

Reimplemented from Object.

Reimplemented in MotionTransport.

3079{
3080 std::stringstream sstr;
3081 sstr << WorldObject::GetDebugInfo() << "\n"
3082 << "SpawnId: " << GetSpawnId() << " GoState: " << std::to_string(GetGoState()) << " ScriptId: " << GetScriptId() << " AIName: " << GetAIName();
3083 return sstr.str();
3084}
std::string const & GetAIName() const
Definition: GameObject.cpp:99
std::string GetDebugInfo() const override
Definition: Object.cpp:2481

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

Referenced by MotionTransport::GetDebugInfo().

◆ GetDestructibleState()

GameObjectDestructibleState GameObject::GetDestructibleState ( ) const
inline
296 {
302 }
@ GO_FLAG_DESTROYED
Definition: SharedDefines.h:1611
@ GO_FLAG_DAMAGED
Definition: SharedDefines.h:1610
@ GO_DESTRUCTIBLE_DESTROYED
Definition: SharedDefines.h:1629
@ GO_DESTRUCTIBLE_INTACT
Definition: SharedDefines.h:1627
@ GO_DESTRUCTIBLE_DAMAGED
Definition: SharedDefines.h:1628
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
@ GAMEOBJECT_DISPLAYID
Definition: UpdateFields.h:398
uint32 GetUInt32Value(uint16 index) const
Definition: Object.cpp:305

References GAMEOBJECT_DISPLAYID, and Object::GetUInt32Value().

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

◆ GetDynamicFlags()

uint32 GameObject::GetDynamicFlags ( ) const
inlineoverridevirtual

Reimplemented from Object.

References GAMEOBJECT_DYNAMIC, and Object::GetUInt32Value().

◆ GetFishLoot()

void GameObject::GetFishLoot ( Loot loot,
Player loot_owner 
)
1003{
1004 fishloot->clear();
1005
1006 uint32 zone, subzone;
1007 uint32 defaultzone = 1;
1008 GetZoneAndAreaId(zone, subzone);
1009
1010 // if subzone loot exist use it
1011 fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true);
1012 if (fishloot->empty()) //use this becase if zone or subzone has set LOOT_MODE_JUNK_FISH,Even if no normal drop, fishloot->FillLoot return true. it wrong.
1013 {
1014 //subzone no result,use zone loot
1015 fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true);
1016 //use zone 1 as default, somewhere fishing got nothing,becase subzone and zone not set, like Off the coast of Storm Peaks.
1017 if (fishloot->empty())
1018 fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true);
1019 }
1020}
LootStore LootTemplates_Fishing("fishing_loot_template", "area id", true)
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition: Object.cpp:3157

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

Referenced by Player::SendLoot().

◆ GetFishLootJunk()

void GameObject::GetFishLootJunk ( Loot loot,
Player loot_owner 
)
1023{
1024 fishloot->clear();
1025
1026 uint32 zone, subzone;
1027 uint32 defaultzone = 1;
1028 GetZoneAndAreaId(zone, subzone);
1029
1030 // if subzone loot exist use it
1031 fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1032 if (fishloot->empty()) //use this becase if zone or subzone has normal mask drop, then fishloot->FillLoot return true.
1033 {
1034 //use zone loot
1035 fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1036 if (fishloot->empty())
1037 //use zone 1 as default
1038 fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1039 }
1040}
@ LOOT_MODE_JUNK_FISH
Definition: SharedDefines.h:48

References Loot::clear(), Loot::empty(), Loot::FillLoot(), WorldObject::GetZoneAndAreaId(), 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:323

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
137{ 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(), IsDestructibleBuilding(), IsMotionTransport(), IsNeverVisible(), IsStaticTransport(), IsTransport(), LoadGameObjectFromDB(), MotionTransport::LoadStaticPassengers(), ModifyHealth(), instance_naxxramas::instance_naxxramas_InstanceMapScript::OnGameObjectCreate(), instance_naxxramas::instance_naxxramas_InstanceMapScript::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(), ToStaticTransport(), ToTransport(), BfCapturePoint::Update(), OPvPCapturePoint::Update(), MotionTransport::Update(), OPvPCapturePointNA::Update(), Update(), UpdateVisibilityOf_helper(), Use(), and UseDoorOrButton().

◆ GetGoState()

◆ GetGoType()

◆ GetGOValue()

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

References m_goValue.

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

◆ GetInteractionDistance()

float GameObject::GetInteractionDistance ( ) const
2864{
2865 switch (GetGoType())
2866 {
2868 return 0.0f;
2874 return 5.5555553f;
2876 return 10.0f;
2879 return 3.0f;
2881 return 100.0f;
2883 return 20.0f + CONTACT_DISTANCE; // max spell range
2889 return 5.0f;
2890 // Following values are not blizzlike
2893 // 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.
2894 // 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.
2895 return 10.0f; // 5.0f is blizzlike
2896 default:
2897 return INTERACTION_DISTANCE;
2898 }
2899}
#define INTERACTION_DISTANCE
Definition: ObjectDefines.h:24
#define CONTACT_DISTANCE
Definition: ObjectDefines.h:23
@ GAMEOBJECT_TYPE_GUILD_BANK
Definition: SharedDefines.h:1594
@ GAMEOBJECT_TYPE_MINI_GAME
Definition: SharedDefines.h:1587
@ GAMEOBJECT_TYPE_CAMERA
Definition: SharedDefines.h:1573
@ GAMEOBJECT_TYPE_MAP_OBJECT
Definition: SharedDefines.h:1574
@ GAMEOBJECT_TYPE_FLAGDROP
Definition: SharedDefines.h:1586
@ GAMEOBJECT_TYPE_MAILBOX
Definition: SharedDefines.h:1579
@ GAMEOBJECT_TYPE_FLAGSTAND
Definition: SharedDefines.h:1584
@ GAMEOBJECT_TYPE_CHAIR
Definition: SharedDefines.h:1567
@ GAMEOBJECT_TYPE_TEXT
Definition: SharedDefines.h:1569
@ GAMEOBJECT_TYPE_DUNGEON_DIFFICULTY
Definition: SharedDefines.h:1591
@ GAMEOBJECT_TYPE_AREADAMAGE
Definition: SharedDefines.h:1572
@ GAMEOBJECT_TYPE_BARBER_CHAIR
Definition: SharedDefines.h:1592
@ GAMEOBJECT_TYPE_DOOR
Definition: SharedDefines.h:1560
@ GAMEOBJECT_TYPE_BINDER
Definition: SharedDefines.h:1564

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 ( )
2727{
2729}
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:187
ObjectGuid m_linkedTrap
Definition: GameObject.h:405

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

◆ GetLocalRotation()

G3D::Quat const & GameObject::GetLocalRotation ( ) const
inline
151{ return m_localRotation; }
G3D::Quat m_localRotation
Definition: GameObject.h:397

References m_localRotation.

Referenced by GetWorldRotation().

◆ 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
2624{
2625 if (!m_lootRecipient)
2626 return nullptr;
2628}
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition: ObjectAccessor.cpp:260
ObjectGuid m_lootRecipient
Definition: GameObject.h:400

References ObjectAccessor::FindConnectedPlayer(), and m_lootRecipient.

◆ GetLootRecipientGroup()

Group * GameObject::GetLootRecipientGroup ( ) const
2631{
2633 return nullptr;
2634 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
2635}
#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.

2199{
2200 if (loc_idx != DEFAULT_LOCALE)
2201 {
2202 uint8 uloc_idx = uint8(loc_idx);
2203 if (GameObjectLocale const* cl = sObjectMgr->GetGameObjectLocale(GetEntry()))
2204 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
2205 return cl->Name[uloc_idx];
2206 }
2207
2208 return GetName();
2209}
#define DEFAULT_LOCALE
Definition: Common.h:78
Definition: GameObjectData.h:675
std::string const & GetName() const
Definition: Object.h:456

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

Referenced by gobject_commandscript::HandleGameObjectRespawn().

◆ GetOwner()

Unit * GameObject::GetOwner ( ) const
1239{
1240 return ObjectAccessor::GetUnit(*this, GetOwnerGUID());
1241}
Unit * GetUnit(WorldObject const &, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:202

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

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

◆ GetOwnerGUID()

◆ GetPackedLocalRotation()

int64 GameObject::GetPackedLocalRotation ( ) const
inline
152{ 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
2832{
2833 if (m_spawnId)
2834 {
2835 if (GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId))
2836 {
2837 x = data->posX;
2838 y = data->posY;
2839 z = data->posZ;
2840 if (ori)
2841 *ori = data->orientation;
2842 return;
2843 }
2844 }
2845
2846 x = GetPositionX();
2847 y = GetPositionY();
2848 z = GetPositionZ();
2849 if (ori)
2850 *ori = GetOrientation();
2851}
Definition: GameObjectData.h:697

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
2915{
2916 time_t now = GameTime::GetGameTime().count();
2917 if (m_respawnTime > now)
2918 return m_respawnTime;
2919 else
2920 return now;
2921}
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
3000{
3001 if (!player)
3002 {
3003 return nullptr;
3004 }
3005
3006 uint32 lockId = GetGOInfo()->GetLockId();
3007 if (!lockId)
3008 {
3009 return nullptr;
3010 }
3011
3012 LockEntry const* lock = sLockStore.LookupEntry(lockId);
3013 if (!lock)
3014 {
3015 return nullptr;
3016 }
3017
3018 for (uint8 i = 0; i < MAX_LOCK_CASE; ++i)
3019 {
3020 if (!lock->Type[i])
3021 {
3022 continue;
3023 }
3024
3025 if (lock->Type[i] == LOCK_KEY_SPELL)
3026 {
3027 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(lock->Index[i]))
3028 {
3029 return spell;
3030 }
3031 }
3032
3033 if (lock->Type[i] != LOCK_KEY_SKILL)
3034 {
3035 break;
3036 }
3037
3038 for (auto&& playerSpell : player->GetSpellMap())
3039 {
3040 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(playerSpell.first))
3041 {
3042 for (auto&& effect : spell->Effects)
3043 {
3044 if (effect.Effect == SPELL_EFFECT_OPEN_LOCK && ((uint32) effect.MiscValue) == lock->Index[i])
3045 {
3046 if (effect.CalcValue(player) >= int32(lock->Skill[i]))
3047 {
3048 return spell;
3049 }
3050 }
3051 }
3052 }
3053 }
3054 }
3055
3056 return nullptr;
3057}
DBCStorage< LockEntry > sLockStore(LockEntryfmt)
#define MAX_LOCK_CASE
Definition: DBCStructure.h:1305
@ SPELL_EFFECT_OPEN_LOCK
Definition: SharedDefines.h:811
@ LOCK_KEY_SKILL
Definition: SharedDefines.h:2586
@ LOCK_KEY_SPELL
Definition: SharedDefines.h:2587
uint32 GetLockId() const
Definition: GameObjectData.h:428
Definition: DBCStructure.h:1308
uint32 Type[MAX_LOCK_CASE]
Definition: DBCStructure.h:1310
uint32 Index[MAX_LOCK_CASE]
Definition: DBCStructure.h:1311
uint32 Skill[MAX_LOCK_CASE]
Definition: DBCStructure.h:1312

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

Referenced by IsAtInteractDistance().

◆ GetSpellId()

uint32 GameObject::GetSpellId ( ) const
inline

◆ GetStationaryO()

float GameObject::GetStationaryO ( ) const
inlineoverridevirtual

◆ GetStationaryX()

float GameObject::GetStationaryX ( ) const
inlineoverridevirtual

◆ GetStationaryY()

float GameObject::GetStationaryY ( ) const
inlineoverridevirtual

◆ GetStationaryZ()

float GameObject::GetStationaryZ ( ) const
inlineoverridevirtual

◆ GetTemplateAddon()

GameObjectTemplateAddon const * GameObject::GetTemplateAddon ( ) const

◆ GetUniqueUseCount()

uint32 GameObject::GetUniqueUseCount ( ) const
inline
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 GameObject::GetWorldRotation ( ) const
2252{
2253 G3D::Quat localRotation = GetLocalRotation();
2254 if (Transport* transport = GetTransport())
2255 {
2256 G3D::Quat worldRotation = transport->GetWorldRotation();
2257
2258 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2259 G3D::Quat localRotationQuat(localRotation.x, localRotation.y, localRotation.z, localRotation.w);
2260
2261 G3D::Quat resultRotation = localRotationQuat * worldRotationQuat;
2262
2263 return G3D::Quat(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
2264 }
2265 return localRotation;
2266}
G3D::Quat const & GetLocalRotation() const
Definition: GameObject.h:151
Definition: Transport.h:29

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

Referenced by IsAtInteractDistance().

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

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.

1216{
1217 QuestRelationBounds qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(GetEntry());
1218 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1219 {
1220 if (itr->second == quest_id)
1221 return true;
1222 }
1223 return false;
1224}
std::pair< QuestRelations::const_iterator, QuestRelations::const_iterator > QuestRelationBounds
Definition: ObjectMgr.h:525

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.

1205{
1206 QuestRelationBounds qr = sObjectMgr->GetGOQuestRelationBounds(GetEntry());
1207 for (QuestRelations::const_iterator itr = qr.first; itr != qr.second; ++itr)
1208 {
1209 if (itr->second == quest_id)
1210 return true;
1211 }
1212 return false;
1213}

References Object::GetEntry(), and sObjectMgr.

◆ IsAllowedToSaveToDB()

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

References m_saveStateOnDb.

Referenced by SetGoState().

◆ IsAlwaysVisibleFor()

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

Reimplemented from WorldObject.

1264{
1266 return true;
1267
1269 return true;
1270
1271 if (!seer)
1272 return false;
1273
1274 // Always seen by owner and friendly units
1275 if (ObjectGuid guid = GetOwnerGUID())
1276 {
1277 if (seer->GetGUID() == guid)
1278 return true;
1279
1280 Unit* owner = GetOwner();
1281 if (owner)
1282 {
1283 if (seer->isType(TYPEMASK_UNIT) && owner->IsFriendlyTo(seer->ToUnit()))
1284 return true;
1285 }
1286 }
1287
1288 return false;
1289}
@ TYPEMASK_UNIT
Definition: ObjectGuid.h:49
bool IsDestructibleBuilding() const
Definition: GameObject.cpp:1231
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition: Object.h:661
bool IsFriendlyTo(Unit const *unit) const
Definition: Unit.cpp:10176

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

◆ IsAtInteractDistance() [1/2]

bool GameObject::IsAtInteractDistance ( Player const *  player,
SpellInfo const *  spell = nullptr 
) const
2953{
2954 if (spell || (spell = GetSpellForLock(player)))
2955 {
2956 float maxRange = spell->GetMaxRange(spell->IsPositive());
2957
2959 {
2960 return maxRange * maxRange >= GetExactDistSq(player);
2961 }
2962
2963 if (sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2964 {
2965 return IsAtInteractDistance(*player, maxRange);
2966 }
2967 }
2968
2970}
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
bool IsAtInteractDistance(Position const &pos, float radius) const
Definition: GameObject.cpp:2972
SpellInfo const * GetSpellForLock(Player const *player) const
Definition: GameObject.cpp:2999
float GetInteractionDistance() const
Definition: GameObject.cpp:2863
float GetExactDistSq(float x, float y, float z) const
Definition: Position.h:170

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
2973{
2974 if (GameObjectDisplayInfoEntry const* displayInfo = sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2975 {
2976 float scale = GetObjectScale();
2977
2978 float minX = displayInfo->minX * scale - radius;
2979 float minY = displayInfo->minY * scale - radius;
2980 float minZ = displayInfo->minZ * scale - radius;
2981 float maxX = displayInfo->maxX * scale + radius;
2982 float maxY = displayInfo->maxY * scale + radius;
2983 float maxZ = displayInfo->maxZ * scale + radius;
2984
2985 G3D::Quat worldRotation = GetWorldRotation();
2986 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2987
2988 return G3D::CoordinateFrame {{worldRotationQuat}, {GetPositionX(), GetPositionY(), GetPositionZ()}}.toWorldSpace(G3D::Box {{minX, minY, minZ}, {maxX, maxY, maxZ}}).contains({pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()});
2989 }
2990
2991 return GetExactDist(&pos) <= radius;
2992}
G3D::Quat GetWorldRotation() const
Definition: GameObject.cpp:2251
float GetObjectScale() const
Definition: Object.h:115
float GetExactDist(float x, float y, float z) const
Definition: Position.h:178
Definition: DBCStructure.h:1000

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

Referenced by IsAtInteractDistance(), and IsWithinDistInMap().

◆ IsDestructibleBuilding()

bool GameObject::IsDestructibleBuilding ( ) const
1232{
1233 GameObjectTemplate const* gInfo = GetGOInfo();
1234 if (!gInfo) return false;
1236}

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

Referenced by IsAlwaysVisibleFor(), and ModifyHealth().

◆ IsInRange()

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

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

2150{
2152 if (!info)
2153 return IsWithinDist3d(x, y, z, radius);
2154
2155 float sinA = std::sin(GetOrientation());
2156 float cosA = cos(GetOrientation());
2157 float dx = x - GetPositionX();
2158 float dy = y - GetPositionY();
2159 float dz = z - GetPositionZ();
2160 float dist = std::sqrt(dx * dx + dy * dy);
2163 if (G3D::fuzzyEq(dist, 0.0f))
2164 return true;
2165
2166 float scale = GetObjectScale();
2167 float sinB = dx / dist;
2168 float cosB = dy / dist;
2169 dx = dist * (cosA * cosB + sinA * sinB);
2170 dy = dist * (cosA * sinB - sinA * cosB);
2171 return dx < (info->maxX * scale) + radius && dx > (info->minX * scale) - radius
2172 && dy < (info->maxY * scale) + radius && dy > (info->minY * scale) - radius
2173 && dz < (info->maxZ * scale) + radius && dz > (info->minZ * scale) - radius;
2174}
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition: Object.cpp:1295
float maxX
Definition: DBCStructure.h:1007
float maxY
Definition: DBCStructure.h:1008
float minY
Definition: DBCStructure.h:1005
float minX
Definition: DBCStructure.h:1004
float minZ
Definition: DBCStructure.h:1006
float maxZ
Definition: DBCStructure.h:1009

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  playerGuid) const
3066{
3067 for (auto const& itr : m_SkillupList)
3068 {
3069 if (itr.first == playerGuid)
3070 {
3071 return true;
3072 }
3073 }
3074
3075 return false;
3076}

References m_SkillupList.

Referenced by Spell::EffectOpenLock().

◆ IsInstanceGameobject()

bool GameObject::IsInstanceGameobject ( ) const
2505{
2506 // Avoid checking for unecessary gameobjects whose
2507 // states don't matter for the dungeon progression
2509 {
2510 return false;
2511 }
2512
2513 if (auto* map = FindMap())
2514 {
2515 if (map->IsDungeon() || map->IsRaid())
2516 {
2517 return true;
2518 }
2519 }
2520 return false;
2521}
bool ValidateGameobjectType() const
Definition: GameObject.cpp:2523
Map * FindMap() const
Definition: Object.h:530

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

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

◆ IsInvisibleDueToDespawn()

bool GameObject::IsInvisibleDueToDespawn ( ) const
overridevirtual

Reimplemented from WorldObject.

1292{
1294 return true;
1295
1296 // Despawned
1297 if (!isSpawned())
1298 return true;
1299
1300 return false;
1301}
bool isSpawned() const
Definition: GameObject.h:190
virtual bool IsInvisibleDueToDespawn() const
Definition: Object.h:662

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

◆ IsLootAllowedFor()

bool GameObject::IsLootAllowedFor ( Player const *  player) const
2694{
2696 {
2697 return true;
2698 }
2699
2700 if (player->GetGUID() == m_lootRecipient)
2701 {
2702 return true;
2703 }
2704
2705 if (player->HasPendingBind())
2706 {
2707 return false;
2708 }
2709
2710 // if we dont have a group we arent the recipient
2711 // if go doesnt have group bound it means it was solo killed by someone else
2712 Group const* playerGroup = player->GetGroup();
2713 if (!playerGroup || playerGroup != GetLootRecipientGroup())
2714 {
2715 return false;
2716 }
2717
2718 if (!HasAllowedLooter(player->GetGUID()))
2719 {
2720 return false;
2721 }
2722
2723 return true;
2724}
Group * GetLootRecipientGroup() const
Definition: GameObject.cpp:2630
bool HasAllowedLooter(ObjectGuid guid) const
Definition: Object.cpp:3197
Definition: Group.h:169

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.

1253{
1255 return true;
1256
1257 if (GetGoType() == GAMEOBJECT_TYPE_SPELL_FOCUS && GetGOInfo()->spellFocus.serverOnly == 1)
1258 return true;
1259
1260 return false;
1261}
uint32 serverOnly
Definition: GameObjectData.h:108
virtual bool IsNeverVisible() const
Definition: Object.h:660

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

◆ isSpawned()

◆ isSpawnedByDefault()

bool GameObject::isSpawnedByDefault ( ) const
inline

◆ IsStaticTransport()

bool GameObject::IsStaticTransport ( ) const
inline

◆ IsTransport()

◆ 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  useBoundingRadius = true 
) const
1322{
1323 return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
1324}
bool _IsWithinDist(WorldObject const *obj, float dist2compare, bool, bool) const override
Object distance/size - overridden from Object::_IsWithinDist. Needs to take in account proper GO size...
Definition: GameObject.h:417

◆ LoadFromDB()

bool GameObject::LoadFromDB ( ObjectGuid::LowType  guid,
Map map 
)
inline
160{ return LoadGameObjectFromDB(guid, map, false); }
bool LoadGameObjectFromDB(ObjectGuid::LowType guid, Map *map, bool addToMap=true)
Definition: GameObject.cpp:1123

References LoadGameObjectFromDB().

Referenced by LoadHelper().

◆ LoadGameObjectFromDB()

bool GameObject::LoadGameObjectFromDB ( ObjectGuid::LowType  guid,
Map map,
bool  addToMap = true 
)
1124{
1125 GameObjectData const* data = sObjectMgr->GetGameObjectData(spawnId);
1126
1127 if (!data)
1128 {
1129 LOG_ERROR("sql.sql", "Gameobject (GUID: {}) not found in table `gameobject`, can't load. ", spawnId);
1130 return false;
1131 }
1132
1133 uint32 entry = data->id;
1134 //uint32 map_id = data->mapid; // already used before call
1135 uint32 phaseMask = data->phaseMask;
1136 float x = data->posX;
1137 float y = data->posY;
1138 float z = data->posZ;
1139 float ang = data->orientation;
1140
1141 uint32 animprogress = data->animprogress;
1142 GOState go_state = data->go_state;
1143 uint32 artKit = data->artKit;
1144
1145 m_goData = data;
1146 m_spawnId = spawnId;
1147
1148 if (!Create(map->GenerateLowGuid<HighGuid::GameObject>(), entry, map, phaseMask, x, y, z, ang, data->rotation, animprogress, go_state, artKit))
1149 return false;
1150
1151 if (data->spawntimesecs >= 0)
1152 {
1153 m_spawnedByDefault = true;
1154
1155 if (!GetGOInfo()->GetDespawnPossibility() && !GetGOInfo()->IsDespawnAtAction())
1156 {
1159 m_respawnTime = 0;
1160 }
1161 else
1162 {
1165
1166 // ready to respawn
1168 {
1169 m_respawnTime = 0;
1171 }
1172 }
1173 }
1174 else
1175 {
1176 m_spawnedByDefault = false;
1178 m_respawnTime = 0;
1179 }
1180
1181 if (addToMap && !GetMap()->AddToMap(this))
1182 return false;
1183
1184 return true;
1185}
@ GO_FLAG_NODESPAWN
Definition: SharedDefines.h:1608
void SetGameObjectFlag(GameObjectFlags flags)
Definition: GameObject.h:219
float orientation
Definition: GameObjectData.h:705
float posZ
Definition: GameObjectData.h:704
uint8 artKit
Definition: GameObjectData.h:712
G3D::Quat rotation
Definition: GameObjectData.h:706
uint32 animprogress
Definition: GameObjectData.h:709
float posX
Definition: GameObjectData.h:702
uint32 phaseMask
Definition: GameObjectData.h:701
float posY
Definition: GameObjectData.h:703
uint32 id
Definition: GameObjectData.h:699
GOState go_state
Definition: GameObjectData.h:710
time_t GetGORespawnTime(ObjectGuid::LowType dbGuid) const
Definition: Map.h:582

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

Referenced by ObjectMgr::AddGOData(), MotionTransport::CreateGOPassenger(), GameEventMgr::GameEventSpawn(), gobject_commandscript::HandleGameObjectAddCommand(), gobject_commandscript::HandleGameObjectMoveCommand(), gobject_commandscript::HandleGameObjectTurnCommand(), LoadFromDB(), and PoolGroup< T >::Spawn1Object().

◆ LookupFishingHoleAround()

GameObject * GameObject::LookupFishingHoleAround ( float  range)
1409{
1410 GameObject* ok = nullptr;
1411
1412 Acore::NearestGameObjectFishingHole u_check(*this, range);
1414
1415 Cell::VisitGridObjects(this, checker, range);
1416 return ok;
1417}
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:179
Definition: GridNotifiers.h:319
Definition: GridNotifiers.h:682

References Cell::VisitGridObjects().

Referenced by Use().

◆ ModifyHealth()

void GameObject::ModifyHealth ( int32  change,
Unit attackerOrHealer = nullptr,
uint32  spellId = 0 
)
Todo:
: is there any packet for healing?
2269{
2271 return;
2272
2273 // if this building doesn't have health, return
2275 return;
2276
2277 sScriptMgr->OnGameObjectModifyHealth(this, attackerOrHealer, change, sSpellMgr->GetSpellInfo(spellId));
2278
2279 // if the health isn't being changed, return
2280 if (!change)
2281 return;
2282
2284 change = 0;
2285
2286 // prevent double destructions of the same object
2287 if (change < 0 && !m_goValue.Building.Health)
2288 return;
2289
2290 if (int32(m_goValue.Building.Health) + change <= 0)
2294 else
2295 m_goValue.Building.Health += change;
2296
2297 // Set the health bar, value = 255 * healthPct;
2299
2300 Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
2301
2302 // dealing damage, send packet
2304 if (player)
2305 {
2306 WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4);
2307 data << GetPackGUID();
2308 data << attackerOrHealer->GetPackGUID();
2309 data << player->GetPackGUID();
2310 data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event
2311 // change >= 0 triggers SPELL_BUILDING_DAMAGE event
2312 data << uint32(spellId);
2313 player->GetSession()->SendPacket(&data);
2314 }
2315
2317
2319 newState = GO_DESTRUCTIBLE_DESTROYED;
2320 else if (m_goValue.Building.Health <= GetGOInfo()->building.damagedNumHits)
2321 newState = GO_DESTRUCTIBLE_DAMAGED;
2323 newState = GO_DESTRUCTIBLE_INTACT;
2324
2325 if (newState == GetDestructibleState())
2326 return;
2327
2328 SetDestructibleState(newState, player, false);
2329}
GameObjectDestructibleState
Definition: SharedDefines.h:1626
@ SMSG_DESTRUCTIBLE_BUILDING_DAMAGE
Definition: Opcodes.h:80
void SetDestructibleState(GameObjectDestructibleState state, Player *eventInvoker=nullptr, bool setHealth=false)
Definition: GameObject.cpp:2331
GameObjectDestructibleState GetDestructibleState() const
Definition: GameObject.h:295
PackedGuid const & GetPackGUID() const
Definition: Object.h:111
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition: Unit.cpp:10542
Definition: WorldPacket.h:27
void SendPacket(WorldPacket const *packet)
Send a packet to the client.
Definition: WorldSession.cpp:214

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

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

◆ Refresh()

void GameObject::Refresh ( )
918{
919 // not refresh despawned not casted GO (despawned casted GO destroyed in all cases anyway)
921 return;
922
923 if (isSpawned())
924 GetMap()->AddToMap(this);
925}

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

Referenced by BattlegroundSA::ResetObjs().

◆ RemoveFromOwner()

void GameObject::RemoveFromOwner ( )
private
122{
123 ObjectGuid ownerGUID = GetOwnerGUID();
124 if (!ownerGUID)
125 return;
126
127 if (Unit* owner = ObjectAccessor::GetUnit(*this, ownerGUID))
128 {
129 owner->RemoveGameObject(this, false);
131 return;
132 }
133
134 LOG_DEBUG("entities.gameobject", "Delete GameObject ({} Entry: {} SpellId {} LinkedGO {}) that lost references to owner {} GO list.",
135 GetGUID().ToString(), GetGOInfo()->entry, m_spellId, GetGOInfo()->GetLinkedGameObjectEntry(), ownerGUID.ToString());
136
138}
#define LOG_DEBUG(filterType__,...)
Definition: Log.h:168
void SetOwnerGUID(ObjectGuid owner)
Definition: GameObject.h:164
std::string ToString() const
Definition: ObjectGuid.cpp:47
std::string ToString() const
Definition: Position.cpp:51

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

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

◆ RemoveFromWorld()

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

Reimplemented from Object.

169{
171 if (IsInWorld())
172 {
173 sScriptMgr->OnGameObjectRemoveWorld(this);
174
175 if (m_zoneScript)
177
179
180 if (m_model)
181 if (GetMap()->ContainsGameObjectModel(*m_model))
183
184 if (Transport* transport = GetTransport())
185 transport->RemovePassenger(this, true);
186
187 // If linked trap exists, despawn it
188 if (GameObject* linkedTrap = GetLinkedTrap())
189 {
190 linkedTrap->Delete();
191 }
192
194
195 if (m_spawnId)
196 Acore::Containers::MultimapErasePair(GetMap()->GetGameObjectBySpawnIdStore(), m_spawnId, this);
198 }
199}
void MultimapErasePair(M< K, V, Rest... > &multimap, K const &key, V const &value)
Definition: Containers.h:226
bool Remove(KEY_TYPE const &handle)
Definition: TypeContainer.h:139
void RemoveFromWorld() override
Definition: Object.cpp:1182
void RemoveGameObjectModel(const GameObjectModel &model)
Definition: Map.h:560
virtual void OnGameObjectRemove(GameObject *)
Definition: ZoneScript.h:39

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(), Map::UnloadAll(), 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
@ LOOT_MODE_DEFAULT
Definition: SharedDefines.h:43

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)
1244{
1245 if (m_goData && m_goData->dbData && (forceDelay || m_respawnTime > GameTime::GetGameTime().count()) && m_spawnedByDefault)
1246 {
1247 time_t respawnTime = forceDelay ? GameTime::GetGameTime().count() + forceDelay : m_respawnTime;
1248 GetMap()->SaveGORespawnTime(m_spawnId, respawnTime);
1249 }
1250}
bool dbData
Definition: GameObjectData.h:713
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition: Map.cpp:3383

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

◆ SaveStateToDB()

void GameObject::SaveStateToDB ( )
2564{
2566 {
2567 if (InstanceScript* instance = GetInstanceScript())
2568 {
2569 GOState param = GetGoState();
2570 instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(&param));
2571
2573 stmt->SetData(0, GetInstanceId());
2574 stmt->SetData(1, GetSpawnId());
2575 stmt->SetData(2, GameobjectStateToInt(&param));
2576 CharacterDatabase.Execute(stmt);
2577 }
2578 }
2579}
@ CHAR_INSERT_INSTANCE_SAVED_DATA
Definition: CharacterDatabase.h:520
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
uint8 GameobjectStateToInt(GOState *state) const
Definition: GameObject.cpp:2538
uint32 GetInstanceId() const
Definition: Object.h:441

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)
1043{
1044 // this should only be used when the gameobject has already been loaded
1045 // preferably after adding to map, because mapid may not be valid otherwise
1046 GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId);
1047 if (!data)
1048 {
1049 LOG_ERROR("entities.gameobject", "GameObject::SaveToDB failed, cannot get gameobject data!");
1050 return;
1051 }
1052
1053 SaveToDB(GetMapId(), data->spawnMask, data->phaseMask, saveAddon);
1054}
void SaveToDB(bool saveAddon=false)
Definition: GameObject.cpp:1042
uint8 spawnMask
Definition: GameObjectData.h:711
uint32 GetMapId() const
Definition: Position.h:276

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

Referenced by SaveToDB().

◆ SaveToDB() [2/2]

void GameObject::SaveToDB ( uint32  mapid,
uint8  spawnMask,
uint32  phaseMask,
bool  saveAddon = false 
)
1057{
1058 const GameObjectTemplate* goI = GetGOInfo();
1059
1060 if (!goI)
1061 return;
1062
1063 if (!m_spawnId)
1064 m_spawnId = sObjectMgr->GenerateGameObjectSpawnId();
1065
1066 // update in loaded data (changing data only in this place)
1067 GameObjectData& data = sObjectMgr->NewGOData(m_spawnId);
1068
1069 data.id = GetEntry();
1070 data.mapid = mapid;
1071 data.phaseMask = phaseMask;
1072 data.posX = GetPositionX();
1073 data.posY = GetPositionY();
1074 data.posZ = GetPositionZ();
1075 data.orientation = GetOrientation();
1079 data.go_state = GetGoState();
1080 data.spawnMask = spawnMask;
1081 data.artKit = GetGoArtKit();
1082
1083 // Update in DB
1084 WorldDatabaseTransaction trans = WorldDatabase.BeginTransaction();
1085
1086 uint8 index = 0;
1087
1089 stmt->SetData(0, m_spawnId);
1090 trans->Append(stmt);
1091
1092 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT);
1093 stmt->SetData(index++, m_spawnId);
1094 stmt->SetData(index++, GetEntry());
1095 stmt->SetData(index++, uint16(mapid));
1096 stmt->SetData(index++, spawnMask);
1097 stmt->SetData(index++, GetPhaseMask());
1098 stmt->SetData(index++, GetPositionX());
1099 stmt->SetData(index++, GetPositionY());
1100 stmt->SetData(index++, GetPositionZ());
1101 stmt->SetData(index++, GetOrientation());
1102 stmt->SetData(index++, m_localRotation.x);
1103 stmt->SetData(index++, m_localRotation.y);
1104 stmt->SetData(index++, m_localRotation.z);
1105 stmt->SetData(index++, m_localRotation.w);
1106 stmt->SetData(index++, int32(m_respawnDelayTime));
1107 stmt->SetData(index++, GetGoAnimProgress());
1108 stmt->SetData(index++, uint8(GetGoState()));
1109 trans->Append(stmt);
1110
1111 if (saveAddon && !sObjectMgr->GetGameObjectAddon(m_spawnId))
1112 {
1113 index = 0;
1114 stmt = WorldDatabase.GetPreparedStatement(WORLD_INS_GAMEOBJECT_ADDON);
1115 stmt->SetData(index++, m_spawnId);
1116 trans->Append(stmt);
1117 }
1118
1119 WorldDatabase.CommitTransaction(trans);
1120 sScriptMgr->OnGameObjectSaveToDB(this);
1121}
@ WORLD_INS_GAMEOBJECT
Definition: WorldDatabase.h:95
@ WORLD_INS_GAMEOBJECT_ADDON
Definition: WorldDatabase.h:102
SQLTransaction< WorldDatabaseConnection > WorldDatabaseTransaction
Definition: DatabaseEnvFwd.h:72
uint8 GetGoAnimProgress() const
Definition: GameObject.h:210
uint8 GetGoArtKit() const
Definition: GameObject.h:208
uint16 mapid
Definition: GameObjectData.h:700

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

◆ SendCustomAnim()

void GameObject::SendCustomAnim ( uint32  anim)
2142{
2144 data << GetGUID();
2145 data << uint32(anim);
2146 SendMessageToSet(&data, true);
2147}
@ SMSG_GAMEOBJECT_CUSTOM_ANIM
Definition: Opcodes.h:209
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition: Object.cpp:2080

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

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

◆ SetDestructibleBuildingModifyState()

void GameObject::SetDestructibleBuildingModifyState ( bool  allow)
inline

◆ SetDestructibleState()

void GameObject::SetDestructibleState ( GameObjectDestructibleState  state,
Player eventInvoker = nullptr,
bool  setHealth = false 
)
2332{
2333 // the user calling this must know he is already operating on destructible gameobject
2335
2336 switch (state)
2337 {
2341 if (setHealth)
2342 {
2344 SetGoAnimProgress(255);
2345 }
2346 EnableCollision(true);
2347 break;
2349 {
2351
2352 sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
2353
2354 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2355 if (Battleground* bg = bgMap->GetBG())
2356 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent);
2357
2360
2363 if (modelData->DamagedDisplayId)
2364 modelId = modelData->DamagedDisplayId;
2365 SetDisplayId(modelId);
2366
2367 if (setHealth)
2368 {
2370 uint32 maxHealth = m_goValue.Building.MaxHealth;
2371 // in this case current health is 0 anyway so just prevent crashing here
2372 if (!maxHealth)
2373 maxHealth = 1;
2374 SetGoAnimProgress(m_goValue.Building.Health * 255 / maxHealth);
2375 }
2376 break;
2377 }
2379 {
2380 sScriptMgr->OnGameObjectDestroyed(this, eventInvoker);
2381
2383
2384 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2385 {
2386 if (Battleground* bg = bgMap->GetBG())
2387 {
2388 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent);
2389 bg->DestroyGate(eventInvoker, this);
2390 }
2391 }
2392
2395
2398 if (modelData->DestroyedDisplayId)
2399 modelId = modelData->DestroyedDisplayId;
2400 SetDisplayId(modelId);
2401
2402 if (setHealth)
2403 {
2406 }
2407 EnableCollision(false);
2408 break;
2409 }
2411 {
2414
2415 uint32 modelId = m_goInfo->displayId;
2417 if (modelData->RebuildingDisplayId)
2418 modelId = modelData->RebuildingDisplayId;
2419 SetDisplayId(modelId);
2420
2421 // restores to full health
2422 if (setHealth)
2423 {
2425 SetGoAnimProgress(255);
2426 }
2427 EnableCollision(true);
2428 break;
2429 }
2430 }
2431}
DBCStorage< DestructibleModelDataEntry > sDestructibleModelDataStore(DestructibleModelDatafmt)
@ GO_DESTRUCTIBLE_REBUILDING
Definition: SharedDefines.h:1630
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition: GameObject.h:220
void EventInform(uint32 eventId)
Definition: GameObject.cpp:2176
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
Definition: Map.h:853
Definition: DBCStructure.h:843

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

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

◆ SetDisplayId()

void GameObject::SetDisplayId ( uint32  displayid)

◆ SetGameObjectFlag()

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

References GAMEOBJECT_FLAGS, and Object::SetFlag().

Referenced by go_suppression_device::go_suppression_deviceAI::Deactivate(), go_chromaggus_lever::go_chromaggus_leverAI::GossipHello(), go_gilded_brazier::go_gilded_brazierAI::GossipHello(), go_celestial_planetarium_access::go_celestial_planetarium_accessAI::GossipHello(), LoadGameObjectFromDB(), BattlefieldWG::OnBattleStart(), instance_uldaman::instance_uldaman_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_razorfen_downs::instance_razorfen_downs_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_zulgurub::instance_zulgurub_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_violet_hold::instance_violet_hold_InstanceMapScript::OnGameObjectCreate(), go_gong_of_bethekk::OnGossipHello(), go_elune_fire::OnGossipHello(), go_palehoof_sphere::OnGossipHello(), go_main_chambers_access_panel::OnGossipHello(), 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:750

References GAMEOBJECT_BYTES_1, and Object::SetByteValue().

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

◆ SetGoArtKit() [1/2]

void GameObject::SetGoArtKit ( uint8  artkit)
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 const GameObjectData* 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)
2469{
2471
2472 sScriptMgr->OnGameObjectStateChanged(this, state);
2473
2474 if (m_model)
2475 {
2476 if (!IsInWorld())
2477 return;
2478
2479 // pussywizard: this startOpen is unneeded here, collision depends entirely on current GOState
2481 // pussywizard: commented out everything below
2482
2483 // startOpen determines whether we are going to add or remove the LoS on activation
2484 /*bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2485
2486 if (GetGameObjectData() && GetGameObjectData()->go_state == GO_STATE_READY)
2487 startOpen = !startOpen;
2488
2489 if (state == GO_STATE_ACTIVE || state == GO_STATE_ACTIVE_ALTERNATIVE)
2490 EnableCollision(startOpen);
2491 else if (state == GO_STATE_READY)
2492 EnableCollision(!startOpen);*/
2493 }
2494 /* Whenever a gameobject inside an instance changes
2495 * save it's state on the database to be loaded properly
2496 * on server restart or crash.
2497 */
2499 {
2500 SaveStateToDB();
2501 }
2502}
bool IsAllowedToSaveToDB() const
Definition: GameObject.h:357
void SaveStateToDB()
Definition: GameObject.cpp:2563

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

Referenced by go_suppression_device::go_suppression_deviceAI::Activate(), boss_thorim::boss_thorimAI::CloseDoors(), Create(), StaticTransport::Create(), MotionTransport::CreateMoTrans(), boss_thorim::boss_thorimAI::DamageTaken(), go_suppression_device::go_suppression_deviceAI::Deactivate(), Delete(), DespawnOrUnsummon(), go_chromaggus_lever::go_chromaggus_leverAI::GossipHello(), InstanceScript::HandleGameObject(), npc_midsummer_bonfire::Ignite(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnGameObjectCreate(), instance_gundrak::instance_gundrak_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_stratholme::instance_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::OnGameObjectCreate(), instance_naxxramas::instance_naxxramas_InstanceMapScript::OnGameObjectCreate(), instance_halls_of_lightning::instance_halls_of_lightning_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(), BattlegroundIC::StartingEventOpenDoors(), SwitchDoorOrButton(), brann_bronzebeard::brann_bronzebeardAI::SwitchHeadVisaul(), boss_flame_leviathan::boss_flame_leviathanAI::TurnGates(), MotionTransport::Update(), Update(), InstanceScript::UpdateDoorState(), BattlegroundRV::UpdatePillars(), Use(), and npc_wounded_blood_elf::npc_wounded_blood_elfAI::WaypointReached().

◆ SetGoType()

void GameObject::SetGoType ( GameobjectTypes  type)
inline

◆ SetLinkedTrap()

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

References Object::GetGUID(), and m_linkedTrap.

Referenced by Create().

◆ SetLocalRotation()

void GameObject::SetLocalRotation ( G3D::Quat const &  rot)
2225{
2226 G3D::Quat rotation;
2227 // Temporary solution for gameobjects that have no rotation data in DB:
2228 if (G3D::fuzzyEq(rot.z, 0.f) && G3D::fuzzyEq(rot.w, 0.f))
2229 rotation = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), GetOrientation());
2230 else
2231 rotation = rot;
2232
2233 rotation.unitize();
2234 m_localRotation = rotation;
2236}
void UpdatePackedRotation()
Definition: GameObject.cpp:2211

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

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

◆ SetLocalRotationAngles()

void GameObject::SetLocalRotationAngles ( float  z_rot,
float  y_rot,
float  x_rot 
)
2247{
2248 SetLocalRotation(G3D::Quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot)));
2249}

References SetLocalRotation().

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

◆ SetLootGenerationTime()

void GameObject::SetLootGenerationTime ( )
2924{
2926}

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)
2638{
2639 // set the player whose group should receive the right
2640 // to loot the creature after it dies
2641 // should be set to nullptr after the loot disappears
2642 if (!creature)
2643 {
2647 return;
2648 }
2649
2653}
ObjectGuid GetLootRecipientGUID() const
Definition: Creature.h:222
ObjectGuid::LowType GetLootRecipientGroupGUID() const
Definition: Creature.h:224
void ResetAllowedLooters()
Definition: Object.cpp:3192
void SetAllowedLooters(GuidUnorderedSet const looters)
Definition: Object.cpp:3187
GuidUnorderedSet const & GetAllowedLooters() const
Definition: Object.cpp:3207
void Clear()
Definition: ObjectGuid.h:138

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

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

◆ SetLootRecipient() [2/2]

void GameObject::SetLootRecipient ( Map map)
2656{
2657 Group* group = nullptr;
2658 Map::PlayerList const& PlayerList = map->GetPlayers();
2659 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
2660 {
2661 if (Player* groupMember = i->GetSource())
2662 {
2663 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
2664 {
2665 continue;
2666 }
2667
2668 if (!m_lootRecipient)
2669 {
2670 m_lootRecipient = groupMember->GetGUID();
2671 }
2672
2673 Group* memberGroup = groupMember->GetGroup();
2674 if (memberGroup && !group)
2675 {
2676 group = memberGroup;
2678 }
2679
2680 if (memberGroup == group)
2681 {
2682 AddAllowedLooter(groupMember->GetGUID());
2683 }
2684 }
2685 }
2686
2687 if (!group)
2688 {
2690 }
2691}
Definition: LinkedList.h:139
void AddAllowedLooter(ObjectGuid guid)
Definition: Object.cpp:3182
LowType GetCounter() const
Definition: ObjectGuid.h:145
ObjectGuid GetGUID() const
Definition: Group.cpp:2306
PlayerList const & GetPlayers() const
Definition: Map.h:486
Definition: MapRefMgr.h:26
iterator begin()
Definition: MapRefMgr.h:36
iterator end()
Definition: MapRefMgr.h:37

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 
)
2434{
2435 m_lootState = state;
2436
2437 if (unit)
2438 _lootStateUnitGUID = unit->GetGUID();
2439 else
2441
2442 AI()->OnStateChanged(state, unit);
2443 sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
2444
2445 // Start restock timer if the chest is partially looted or not looted at all
2446 if (GetGoType() == GAMEOBJECT_TYPE_CHEST && state == GO_ACTIVATED && GetGOInfo()->chest.chestRestockTime > 0 && m_restockTime == 0s)
2447 {
2449 }
2450
2451 // 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
2452 /*if (m_model)
2453 {
2454 // startOpen determines whether we are going to add or remove the LoS on activation
2455 bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2456
2457 // Use the current go state
2458 if (GetGoState() == GO_STATE_ACTIVE)
2459 startOpen = !startOpen;
2460
2461 if (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED)
2462 EnableCollision(startOpen);
2463 else if (state == GO_READY)
2464 EnableCollision(!startOpen);
2465 }*/
2466}
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:30
@ GO_ACTIVATED
Definition: GameObject.h:113
virtual void OnStateChanged(uint32, Unit *)
Definition: GameObjectAI.h:65
ObjectGuid _lootStateUnitGUID
Definition: GameObject.h:407
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::go_suppression_deviceAI::Activate(), Delete(), DespawnOrUnsummon(), WorldSession::DoLootRelease(), Spell::EffectOpenLock(), spell_q9452_cast_net::HandleActiveObject(), spell_q10612_10613_the_fel_and_the_furious::HandleScriptEffect(), instance_deadmines::instance_deadmines_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_oculus::instance_oculus_InstanceMapScript::OnGameObjectCreate(), go_massive_seaforium_charge::OnGossipHello(), go_ulduar_working_harpoon::OnGossipHello(), go_suppression_device::OnLootStateChanged(), SmartScript::ProcessAction(), go_direbrew_mole_machine::go_direbrew_mole_machineAI::Reset(), ResetDoorOrButton(), Map::ScriptsProcess(), Player::SendLoot(), boss_flame_leviathan::boss_flame_leviathanAI::TurnHealStations(), Update(), Use(), and UseDoorOrButton().

◆ SetOwnerGUID()

void GameObject::SetOwnerGUID ( ObjectGuid  owner)
inline
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:723

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

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

◆ SetPhaseMask()

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

Reimplemented from WorldObject.

2588{
2589 WorldObject::SetPhaseMask(newPhaseMask, update);
2590
2591 if (m_model && m_model->isEnabled())
2592 EnableCollision(true);
2593}
bool isEnabled() const
Definition: GameObjectModel.h:69
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
Definition: Object.cpp:2870

References EnableCollision(), GameObjectModel::isEnabled(), m_model, and WorldObject::SetPhaseMask().

Referenced by Create(), StaticTransport::Create(), instance_blackwing_lair::instance_blackwing_lair_InstanceMapScript::OnGameObjectCreate(), and instance_halls_of_reflection::instance_halls_of_reflection_InstanceMapScript::OnGameObjectCreate().

◆ SetPosition() [1/2]

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

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

Referenced by SetPosition().

◆ SetPosition() [2/2]

void GameObject::SetPosition ( float  x,
float  y,
float  z,
float  o 
)
2854{
2855 // pussywizard: do not call for MotionTransport and other gobjects not in grid
2856
2857 if (!Acore::IsValidMapCoord(x, y, z, o))
2858 return;
2859
2860 GetMap()->GameObjectRelocation(this, x, y, z, o);
2861}
bool IsValidMapCoord(float c)
Definition: GridDefines.h:216
void GameObjectRelocation(GameObject *go, float x, float y, float z, float o)
Definition: Map.cpp:1044

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

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

◆ SetRespawnDelay()

void GameObject::SetRespawnDelay ( int32  respawn)
1314{
1315 m_respawnDelayTime = respawn > 0 ? respawn : 0;
1316}

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

References GAMEOBJECT_PARENTROTATION, and Object::SetFloatValue().

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

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

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
329{ 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
326{ 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
323{ 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);