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 diff)
 
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, bool disableWarning=false)
 
Position GetNearPosition (float dist, float angle, bool disableWarning=false)
 
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, bool disableWarning=false)
 
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
 
bool IsCreature () const
 
CreatureToCreature ()
 
Creature const * ToCreature () const
 
bool IsUnit () const
 
UnitToUnit ()
 
Unit const * ToUnit () const
 
bool IsGameObject () const
 
GameObjectToGameObject ()
 
GameObject const * ToGameObject () const
 
bool IsCorpse () const
 
CorpseToCorpse ()
 
Corpse const * ToCorpse () const
 
bool IsDynamicObject () const
 
DynamicObjectToDynObject ()
 
DynamicObject const * ToDynObject () const
 
bool IsItem () const
 
virtual void Heartbeat ()
 
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
 
EventProcessor m_Events
 
- Public Attributes inherited from Object
DataMap CustomData
 
- Public Attributes inherited from WorldLocation
uint32 m_mapId
 
- Public Attributes inherited from Position
float m_positionX = 0
 
float m_positionY = 0
 
float m_positionZ = 0
 
float m_orientation = 0
 

Static Public Attributes

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

Protected Types

typedef std::map< uint32, ObjectGuidChairSlotAndUser
 

Protected Member Functions

bool AIM_Initialize ()
 
GameObjectModelCreateModel ()
 
void UpdateModel ()
 
- Protected Member Functions inherited from WorldObject
 WorldObject (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:110
@ 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:247
GameObjectValue m_goValue
Definition: GameObject.h:392
time_t m_respawnTime
Definition: GameObject.h:371
GameObjectData const * m_goData
Definition: GameObject.h:391
int64 m_packedRotation
Definition: GameObject.h:395
Position m_stationaryPosition
Definition: GameObject.h:397
bool m_allowModifyDestructibleBuilding
Definition: GameObject.h:393
uint32 m_cooldownTime
Definition: GameObject.h:378
uint32 m_spellId
Definition: GameObject.h:370
uint32 m_respawnDelayTime
Definition: GameObject.h:372
void ResetLootMode()
Definition: GameObject.h:233
uint32 m_despawnDelay
Definition: GameObject.h:373
Seconds m_despawnRespawnTime
Definition: GameObject.h:374
ObjectGuid::LowType m_lootRecipientGroup
Definition: GameObject.h:400
GameObjectAI * m_AI
Definition: GameObject.h:422
GameObjectModel * m_model
Definition: GameObject.h:312
GameObjectTemplate const * m_goInfo
Definition: GameObject.h:390
ObjectGuid::LowType m_spawnId
For new or temporary gameobjects is 0 for saved it is lowguid.
Definition: GameObject.h:389
uint32 m_groupLootTimer
Definition: GameObject.h:255
uint32 lootingGroupLowGUID
Definition: GameObject.h:256
bool m_spawnedByDefault
Definition: GameObject.h:377
LootState m_lootState
Definition: GameObject.h:376
Seconds m_restockTime
Definition: GameObject.h:375
uint32 m_usetimes
Definition: GameObject.h:384
uint32 m_lootGenerationTime
Definition: GameObject.h:402
uint16 m_objectType
Definition: Object.h:245
uint16 m_valuesCount
Definition: Object.h:259
uint16 m_updateFlag
Definition: Object.h:248
TypeID m_objectTypeId
Definition: Object.h:247
MovableMapObject()=default
Definition: Object.h:410
void Relocate(float x, float y)
Definition: Position.h:72
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.

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

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

◆ ActivateToQuest()

bool GameObject::ActivateToQuest ( Player target) const
1330{
1331 if (target->HasQuestForGO(GetEntry()))
1332 return true;
1333
1334 if (!GetGOInfo()->IsGameObjectForQuests())
1335 return false;
1336
1337 switch (GetGoType())
1338 {
1340 {
1341 GameObject* go = const_cast<GameObject*>(this);
1342 QuestGiverStatus questStatus = target->GetQuestDialogStatus(go);
1343 if (questStatus > DIALOG_STATUS_UNAVAILABLE)
1344 return true;
1345 break;
1346 }
1348 {
1349 // scan GO chest with loot including quest items
1351 {
1352 //TODO: fix this hack
1353 //look for battlegroundAV for some objects which are only activated after mine gots captured by own team
1355 if (Battleground* bg = target->GetBattleground())
1356 if (bg->GetBgTypeID(true) == BATTLEGROUND_AV && !bg->ToBattlegroundAV()->PlayerCanDoMineQuest(GetEntry(), target->GetTeamId()))
1357 return false;
1358 return true;
1359 }
1360 break;
1361 }
1363 {
1364 if (GetGOInfo()->_generic.questID == -1 || target->GetQuestStatus(GetGOInfo()->_generic.questID) == QUEST_STATUS_INCOMPLETE)
1365 return true;
1366 break;
1367 }
1369 {
1370 if (GetGOInfo()->spellFocus.questID > 0 && target->GetQuestStatus(GetGOInfo()->spellFocus.questID) == QUEST_STATUS_INCOMPLETE)
1371 return true;
1372 break;
1373 }
1375 {
1376 if (GetGOInfo()->goober.questId == -1 || target->GetQuestStatus(GetGOInfo()->goober.questId) == QUEST_STATUS_INCOMPLETE)
1377 return true;
1378 break;
1379 }
1380 default:
1381 break;
1382 }
1383
1384 return false;
1385}
@ 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
QuestGiverStatus
Definition: QuestDef.h:111
@ DIALOG_STATUS_UNAVAILABLE
Definition: QuestDef.h:113
@ QUEST_STATUS_INCOMPLETE
Definition: QuestDef.h:103
LootStore LootTemplates_Gameobject("gameobject_loot_template", "gameobject entry", true)
@ BG_AV_OBJECTID_MINE_N
Definition: BattlegroundAV.h:160
@ BG_AV_OBJECTID_MINE_S
Definition: BattlegroundAV.h:161
Definition: Battleground.h:303
Definition: GameObject.h:120
GameObjectTemplate const * GetGOInfo() const
Definition: GameObject.h:136
GameobjectTypes GetGoType() const
Definition: GameObject.h:203
int32 questID
Definition: GameObjectData.h:110
struct GameObjectTemplate::@230::@236 _generic
struct GameObjectTemplate::@230::@241 goober
uint32 questId
Definition: GameObjectData.h:91
struct GameObjectTemplate::@230::@239 spellFocus
uint32 GetEntry() const
Definition: Object.h:115
bool HasQuestForGO(int32 GOId) const
Definition: Player.cpp:12414
TeamId GetTeamId(bool original=false) const
Definition: Player.h:2108
QuestGiverStatus GetQuestDialogStatus(Object *questGiver)
Definition: PlayerQuest.cpp:1594
Battleground * GetBattleground(bool create=false) const
Definition: Player.cpp:12228
QuestStatus GetQuestStatus(uint32 quest_id) const
Definition: PlayerQuest.cpp:1429
bool HaveQuestLootForPlayer(uint32 loot_id, Player const *player) const
Definition: LootMgr.cpp:228

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
231{ m_LootMode |= lootMode; }
uint16 m_LootMode
Definition: GameObject.h:401

References m_LootMode.

◆ AddToSkillupList()

void GameObject::AddToSkillupList ( ObjectGuid  playerGuid)
3071{
3072 int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS;
3073 m_SkillupList[playerGuid] = timer;
3074}
constexpr auto IN_MILLISECONDS
Definition: Common.h:53
constexpr auto MINUTE
Definition: Common.h:47
std::int32_t int32
Definition: Define.h:103
std::unordered_map< ObjectGuid, int32 > m_SkillupList
Definition: GameObject.h:380
Map * GetMap() const
Definition: Object.h:536
bool IsDungeon() const
Definition: Map.h:446

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:690
#define sScriptMgr
Definition: ScriptMgr.h:709
bool UpdatePosition()
Definition: GameObjectModel.cpp:269
bool Insert(KEY_TYPE const &handle, SPECIFIC_TYPE *obj)
Definition: TypeContainer.h:132
GOState GetGoState() const
Definition: GameObject.h:205
void EnableCollision(bool enable)
Definition: GameObject.cpp:2606
bool IsTransport() const
Definition: GameObject.cpp:1228
bool IsInWorld() const
Definition: Object.h:107
ObjectGuid GetGUID() const
Definition: Object.h:113
void AddToWorld() override
Definition: Object.cpp:1187
ZoneScript * m_zoneScript
Definition: Object.h:650
ObjectGuid sourceWorldObjectGUID
Definition: LootMgr.h:330
MapStoredObjectTypesContainer & GetObjectsStore()
Definition: Map.h:515
GameObjectBySpawnIdContainer & GetGameObjectBySpawnIdStore()
Definition: Map.h:521
void InsertGameObjectModel(const GameObjectModel &model)
Definition: Map.h:559
virtual void OnGameObjectCreate(GameObject *)
Definition: ZoneScript.h:37

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)
930{
931 AddUse();
932 m_unique_users.insert(player->GetGUID());
933}
void AddUse()
Definition: GameObject.h:239
GuidSet m_unique_users
Definition: GameObject.h:383
static ObjectGuid GetGUID(Object const *o)
Definition: Object.h:112

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:43

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.

2743{
2744 if (!target)
2745 return;
2746
2748 bool targetIsGM = target->IsGameMaster() && target->GetSession()->IsGMAccount();
2749
2750 ByteBuffer fieldBuffer;
2751
2752 UpdateMask updateMask;
2753 updateMask.SetCount(m_valuesCount);
2754
2756 uint32 visibleFlag = UF_FLAG_PUBLIC;
2757 if (GetOwnerGUID() == target->GetGUID())
2758 visibleFlag |= UF_FLAG_OWNER;
2759
2760 for (uint16 index = 0; index < m_valuesCount; ++index)
2761 {
2762 if (_fieldNotifyFlags & flags[index] ||
2763 ((updateType == UPDATETYPE_VALUES ? _changesMask.GetBit(index) : m_uint32Values[index]) && (flags[index] & visibleFlag)) ||
2764 (index == GAMEOBJECT_FLAGS && forcedFlags))
2765 {
2766 updateMask.SetBit(index);
2767
2768 if (index == GAMEOBJECT_DYNAMIC)
2769 {
2770 uint16 dynFlags = 0;
2771 int16 pathProgress = -1;
2772 switch (GetGoType())
2773 {
2775 if (ActivateToQuest(target))
2776 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2777 break;
2780 if (ActivateToQuest(target))
2781 {
2782 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2783 if (sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2784 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2785 }
2786 else if (targetIsGM)
2787 dynFlags |= GO_DYNFLAG_LO_ACTIVATE;
2788 break;
2791 if (ActivateToQuest(target) && sWorld->getBoolConfig(CONFIG_OBJECT_SPARKLES))
2792 dynFlags |= GO_DYNFLAG_LO_SPARKLE;
2793 break;
2795 if (const StaticTransport* t = ToStaticTransport())
2796 if (t->GetPauseTime())
2797 {
2798 if (GetGoState() == GO_STATE_READY)
2799 {
2800 if (t->GetPathProgress() >= t->GetPauseTime()) // if not, send 100% progress
2801 pathProgress = int16(float(t->GetPathProgress() - t->GetPauseTime()) / float(t->GetPeriod() - t->GetPauseTime()) * 65535.0f);
2802 }
2803 else
2804 {
2805 if (t->GetPathProgress() <= t->GetPauseTime()) // if not, send 100% progress
2806 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPauseTime()) * 65535.0f);
2807 }
2808 }
2809 // else it's ignored
2810 break;
2812 if (const MotionTransport* t = ToMotionTransport())
2813 pathProgress = int16(float(t->GetPathProgress()) / float(t->GetPeriod()) * 65535.0f);
2814 break;
2815 default:
2816 break;
2817 }
2818
2819 fieldBuffer << uint16(dynFlags);
2820 fieldBuffer << int16(pathProgress);
2821 }
2822 else if (index == GAMEOBJECT_FLAGS)
2823 {
2826 {
2828 }
2829
2830 fieldBuffer << goFlags;
2831 }
2832 else
2833 fieldBuffer << m_uint32Values[index]; // other cases
2834 }
2835 }
2836
2837 *data << uint8(updateMask.GetBlockCount());
2838 updateMask.AppendToPacket(data);
2839 data->append(fieldBuffer);
2840}
std::uint8_t uint8
Definition: Define.h:109
std::uint32_t uint32
Definition: Define.h:107
std::uint16_t uint16
Definition: Define.h:108
std::int16_t int16
Definition: Define.h:104
@ GAMEOBJECT_TYPE_MO_TRANSPORT
Definition: SharedDefines.h: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
@ CONFIG_OBJECT_SPARKLES
Definition: IWorld.h:178
@ UF_FLAG_PUBLIC
Definition: UpdateFieldFlags.h:27
@ UF_FLAG_OWNER
Definition: UpdateFieldFlags.h:29
uint32 GameObjectUpdateFieldFlags[GAMEOBJECT_END]
Definition: UpdateFieldFlags.cpp:1492
@ GAMEOBJECT_DYNAMIC
Definition: UpdateFields.h:401
@ GAMEOBJECT_FLAGS
Definition: UpdateFields.h:399
@ UPDATETYPE_VALUES
Definition: UpdateData.h:28
#define sWorld
Definition: World.h:443
MotionTransport * ToMotionTransport()
Definition: GameObject.h:327
bool HasLootRecipient() const
Definition: GameObject.h:254
ObjectGuid GetOwnerGUID() const
Definition: GameObject.h:173
bool ActivateToQuest(Player *target) const
Definition: GameObject.cpp:1329
bool IsLootAllowedFor(Player const *player) const
Definition: GameObject.cpp:2704
StaticTransport * ToStaticTransport()
Definition: GameObject.h:324
struct GameObjectTemplate::@230::@235 chest
uint32 groupLootRules
Definition: GameObjectData.h:98
uint16 _fieldNotifyFlags
Definition: Object.h:261
UpdateMask _changesMask
Definition: Object.h:257
uint32 * m_uint32Values
Definition: Object.h:253
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:1998
bool IsGameMaster() const
Definition: Player.h:1175
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 
)
2088{
2089 SpellInfo const* spellInfo = sSpellMgr->GetSpellInfo(spellId);
2090 if (!spellInfo)
2091 return;
2092
2093 bool self = true;
2094 for (uint8 i = 0; i < MAX_SPELL_EFFECTS; ++i)
2095 {
2096 if (spellInfo->Effects[i].TargetA.GetReferenceType() != TARGET_REFERENCE_TYPE_CASTER || spellInfo->Effects[i].TargetB.GetTarget())
2097 {
2098 self = false;
2099 break;
2100 }
2101 }
2102
2103 if (self && target && target->GetGUID() != GetGUID())
2104 {
2105 target->CastSpell(target, spellInfo, true);
2106 return;
2107 }
2108
2109 //summon world trigger
2110 Creature* trigger = SummonTrigger(GetPositionX(), GetPositionY(), GetPositionZ(), 0, spellInfo->CalcCastTime() + 2000, true);
2111 if (!trigger)
2112 return;
2113
2114 if (Unit* owner = GetOwner())
2115 {
2116 trigger->SetLevel(owner->GetLevel(), false);
2117 trigger->SetFaction(owner->GetFaction());
2118 // needed for GO casts for proper target validation checks
2119 trigger->SetOwnerGUID(owner->GetGUID());
2120 // xinef: fixes some duel bugs with traps]
2121 if (owner->HasUnitFlag(UNIT_FLAG_PLAYER_CONTROLLED))
2123 if (owner->IsFFAPvP())
2124 {
2126 {
2127 sScriptMgr->OnFfaPvpStateUpdate(trigger, true);
2129 }
2130
2131 }
2132 // xinef: Remove Immunity flags
2133 trigger->SetImmuneToNPC(false);
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, owner->GetGUID());
2138 }
2139 else
2140 {
2141 // xinef: set faction of gameobject, if no faction - assume hostile
2142 trigger->SetFaction(GetTemplateAddon() && GetTemplateAddon()->faction ? GetTemplateAddon()->faction : 14);
2143 // Set owner guid for target if no owner availble - needed by trigger auras
2144 // - trigger gets despawned and there's no caster avalible (see AuraEffect::TriggerSpell())
2145 // xinef: set proper orientation, fixes cast against stealthed targets
2146 if (target)
2147 trigger->SetInFront(target);
2148 trigger->CastSpell(target ? target : trigger, spellInfo, true, 0, 0, target ? target->GetGUID() : ObjectGuid::Empty);
2149 }
2150}
#define MAX_SPELL_EFFECTS
Definition: DBCStructure.h:1636
@ TARGET_REFERENCE_TYPE_CASTER
Definition: SpellInfo.h:89
#define sSpellMgr
Definition: SpellMgr.h:825
@ UNIT_FIELD_BYTES_2
Definition: UpdateFields.h:161
@ UNIT_BYTE2_FLAG_FFA_PVP
Definition: UnitDefines.h:117
@ UNIT_FLAG_PLAYER_CONTROLLED
Definition: UnitDefines.h:232
Definition: Creature.h:43
Unit * GetOwner() const
Definition: GameObject.cpp:1240
GameObjectTemplateAddon const * GetTemplateAddon() const
Definition: GameObject.cpp:914
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:2415
static ObjectGuid const Empty
Definition: ObjectGuid.h:120
float GetPositionZ() const
Definition: Position.h:118
float GetPositionX() const
Definition: Position.h:116
float GetPositionY() const
Definition: Position.h:117
Definition: Unit.h:630
void SetFaction(uint32 faction)
Definition: Unit.cpp:10056
void SetImmuneToNPC(bool apply, bool keepCombat=false)
Definition: Unit.cpp:13620
void SetLevel(uint8 lvl, bool showLevelChange=true)
Definition: Unit.cpp:15460
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:1167
void SetOwnerGUID(ObjectGuid owner)
Definition: Unit.cpp:10573
void SetUnitFlag(UnitFlags flags)
UnitFlags available in UnitDefines.h.
Definition: Unit.h:713
void SetInFront(WorldObject const *target)
Definition: Unit.cpp:20521
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:2352

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:220
uint32 GetSpellId() const
Definition: GameObject.h:181
uint32 animSpell
Definition: GameObjectData.h:233
struct GameObjectTemplate::@230::@246 summoningRitual
Definition: Player.h:1081
Definition: Spell.h:287

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:321
void RemoveMovementFlag(uint32 flag)
Definition: Object.h:338
struct MovementInfo::TransportInfo transport
void Reset()
Definition: Object.h:292
void SetTransport(Transport *t)
Definition: Object.h:612
Transport * GetTransport() const
Definition: Object.h:604
MovementInfo m_movementInfo
Definition: Object.h:614
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}
#define ASSERT
Definition: Errors.h:68
#define LOG_ERROR(filterType__,...)
Definition: Log.h:157
uint32 urand(uint32 min, uint32 max)
Definition: Random.cpp:44
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
#define sObjectMgr
Definition: ObjectMgr.h:1635
GOState
Definition: GameObjectData.h:688
@ GAMEOBJECT_FACTION
Definition: UpdateFields.h:402
uint32 MaxOpens
Definition: GameObject.h:60
struct GameObjectValue::@229 Building
struct GameObjectValue::@227 FishingHole
uint32 MaxHealth
Definition: GameObject.h:71
uint32 Health
Definition: GameObject.h:70
void SetLocalRotationAngles(float z_rot, float y_rot, float x_rot)
Definition: GameObject.cpp:2257
GameObject()
Definition: GameObject.cpp:41
void SetGoState(GOState state)
Definition: GameObject.cpp:2479
void SetTransportPathRotation(float qx, float qy, float qz, float qw)
Definition: GameObject.cpp:2249
void SetGoArtKit(uint8 artkit)
Definition: GameObject.cpp:1445
void SetPhaseMask(uint32 newPhaseMask, bool update) override
Definition: GameObject.cpp:2598
void SetLocalRotation(G3D::Quat const &rot)
Definition: GameObject.cpp:2235
void SetGoAnimProgress(uint8 animprogress)
Definition: GameObject.h:210
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:2958
void SetGoType(GameobjectTypes type)
Definition: GameObject.h:204
void SetLinkedTrap(GameObject *linkedTrap)
Definition: GameObject.h:261
ObjectGuid::LowType GetSpawnId() const
Definition: GameObject.h:144
bool AIM_Initialize()
Definition: GameObject.cpp:85
virtual uint32 GetScriptId() const
Definition: GameObject.cpp:2199
void SetDisplayId(uint32 displayid)
Definition: GameObject.cpp:2592
void ReplaceAllGameObjectFlags(GameObjectFlags flags)
Definition: GameObject.h:220
bool IsInstanceGameobject() const
Definition: GameObject.cpp:2515
void SwitchDoorOrButton(bool activate, bool alternative=false)
Definition: GameObject.cpp:1468
Definition: GameObjectData.h:31
uint32 intactNumHits
Definition: GameObjectData.h:351
uint32 stealthed
Definition: GameObjectData.h:124
uint32 type
Definition: GameObjectData.h:33
uint32 entry
Definition: GameObjectData.h:32
bool IsLargeGameObject() const
Definition: GameObjectData.h:593
bool IsInfiniteGameObject() const
Definition: GameObjectData.h:618
uint32 minSuccessOpens
Definition: GameObjectData.h:87
uint32 invisible
Definition: GameObjectData.h:126
struct GameObjectTemplate::@230::@258 building
uint32 damagedNumHits
Definition: GameObjectData.h:356
std::string name
Definition: GameObjectData.h:35
uint32 maxSuccessOpens
Definition: GameObjectData.h:88
float size
Definition: GameObjectData.h:39
uint32 displayId
Definition: GameObjectData.h:34
Definition: GameObjectData.h:664
Definition: GameObjectData.h:681
uint32 InvisibilityValue
Definition: GameObjectData.h:683
InvisibilityType invisibilityType
Definition: GameObjectData.h:682
void _Create(ObjectGuid::LowType guidlow, uint32 entry, HighGuid guidhigh)
Definition: Object.cpp:134
void SetEntry(uint32 entry)
Definition: Object.h:116
virtual void SetObjectScale(float scale)
Definition: Object.h:119
void SetUInt32Value(uint16 index, uint32 value)
Definition: Object.cpp:650
void AddFlag(FLAG_TYPE flag)
Definition: Object.h:373
void AddValue(FLAG_TYPE flag, T_VALUES value)
Definition: Object.h:378
InstanceScript * GetInstanceScript() const
Definition: Object.cpp:1203
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
Definition: Object.h:525
uint32 LastUsedScriptID
Definition: Object.h:601
void SetName(std::string const &newname)
Definition: Object.h:464
void SetZoneScript()
Definition: Object.cpp:2344
virtual void SetMap(Map *map)
Definition: Object.cpp:2116
void UpdatePositionData()
Definition: Object.cpp:1165
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
Definition: Object.h:522
void SetVisibilityDistanceOverride(VisibilityDistanceType type)
Definition: Object.cpp:1131
static float NormalizeOrientation(float o)
Definition: Position.h:232
float GetOrientation() const
Definition: Position.h:119
bool IsPositionValid() const
Definition: Position.cpp:176
Definition: InstanceScript.h:142
ObjectGuid::LowType GenerateLowGuid()
Definition: Map.h:636
uint32 GetId() const
Definition: Map.h:377
bool AddToMap(T *, bool checkTransport=false)
Definition: Map.cpp:558
virtual uint32 GetGameObjectEntry(ObjectGuid::LowType, uint32 entry)
Definition: ZoneScript.h:32

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
2959{
2960 return GameObjectModel::Create(std::make_unique<GameObjectModelOwnerImpl>(this), sWorld->GetDataPath());
2961}
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 ( )
982{
985
987
989
990 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
992
993 // Xinef: if ritual gameobject is removed, clear anim spells
996
997 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
998 if (poolid)
999 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
1000 else
1002}
@ GAMEOBJECT_TYPE_SUMMONING_RITUAL
Definition: SharedDefines.h:1578
#define sPoolMgr
Definition: PoolMgr.h:163
void SetLootState(LootState s, Unit *unit=nullptr)
Definition: GameObject.cpp:2444
void ClearRitualList()
Definition: GameObject.cpp:231
void AddObjectToRemoveList()
Definition: Object.cpp:2160
void SendObjectDeSpawnAnim(ObjectGuid guid)
Definition: Object.cpp:2109

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 ( )
1190{
1192 sObjectMgr->DeleteGOData(m_spawnId);
1193
1195 stmt->SetData(0, m_spawnId);
1196 WorldDatabase.Execute(stmt);
1197
1198 stmt = WorldDatabase.GetPreparedStatement(WORLD_DEL_EVENT_GAMEOBJECT);
1199 stmt->SetData(0, m_spawnId);
1200 WorldDatabase.Execute(stmt);
1201}
@ 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:157
Acore::Types::is_default< T > SetData(const uint8 index, T value)
Definition: PreparedStatement.h:77
void RemoveGORespawnTime(ObjectGuid::LowType dbGuid)
Definition: Map.cpp:3409

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

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)
2607{
2608 if (!m_model)
2609 return;
2610
2611 /*if (enable && !GetMap()->ContainsGameObjectModel(*m_model))
2612 GetMap()->InsertGameObjectModel(*m_model);*/
2613
2614 uint32 phaseMask = 0;
2615 if (enable && !DisableMgr::IsDisabledFor(DISABLE_TYPE_GO_LOS, GetEntry(), nullptr))
2616 phaseMask = GetPhaseMask();
2617
2618 m_model->enable(phaseMask);
2619}
@ DISABLE_TYPE_GO_LOS
Definition: DisableMgr.h:34
bool IsDisabledFor(DisableType type, uint32 entry, Unit const *unit, uint8 flags)
Definition: DisableMgr.cpp:307
void enable(uint32 ph_mask)
Definition: GameObjectModel.h:67
uint32 GetPhaseMask() const
Definition: Object.h:451

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)
2188{
2189 if (!eventId)
2190 return;
2191
2192 if (AI())
2193 AI()->EventInform(eventId);
2194
2195 if (m_zoneScript)
2196 m_zoneScript->ProcessEvent(this, eventId);
2197}
virtual void EventInform(uint32)
Definition: GameObjectAI.h:65
GameObjectAI * AI() const
Definition: GameObject.h:306
virtual void ProcessEvent(WorldObject *, uint32)
Definition: ZoneScript.h:54

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

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

◆ GameobjectStateToInt()

uint8 GameObject::GameobjectStateToInt ( GOState state) const
2550{
2551 uint8 m_state = 3;
2552
2553 if (state)
2554 {
2555 switch (*state)
2556 {
2557 case GO_STATE_ACTIVE:
2558 m_state = 0;
2559 return m_state;
2560 case GO_STATE_READY:
2561 m_state = 1;
2562 return m_state;
2564 m_state = 2;
2565 return m_state;
2566 }
2567 }
2568
2569 // Returning any value that is not one of the specified ones
2570 // Which will default into the invalid part of the switch
2571 return m_state;
2572}
@ GO_STATE_ACTIVE
Definition: GameObjectData.h:689
@ GO_STATE_ACTIVE_ALTERNATIVE
Definition: GameObjectData.h:691

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.

3090{
3091 std::stringstream sstr;
3092 sstr << WorldObject::GetDebugInfo() << "\n"
3093 << "SpawnId: " << GetSpawnId() << " GoState: " << std::to_string(GetGoState()) << " ScriptId: " << GetScriptId() << " AIName: " << GetAIName();
3094 return sstr.str();
3095}
std::string const & GetAIName() const
Definition: GameObject.cpp:99
std::string GetDebugInfo() const override
Definition: Object.cpp:2495

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

Referenced by MotionTransport::GetDebugInfo().

◆ GetDestructibleState()

GameObjectDestructibleState GameObject::GetDestructibleState ( ) const
inline
295 {
301 }
@ 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:217

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 
)
1005{
1006 fishloot->clear();
1007
1008 uint32 zone, subzone;
1009 uint32 defaultzone = 1;
1010 GetZoneAndAreaId(zone, subzone);
1011
1012 // if subzone loot exist use it
1013 fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true);
1014 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.
1015 {
1016 //subzone no result,use zone loot
1017 fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true);
1018 //use zone 1 as default, somewhere fishing got nothing,becase subzone and zone not set, like Off the coast of Storm Peaks.
1019 if (fishloot->empty())
1020 fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true);
1021 }
1022}
LootStore LootTemplates_Fishing("fishing_loot_template", "area id", true)
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
Definition: Object.cpp:3173

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 
)
1025{
1026 fishloot->clear();
1027
1028 uint32 zone, subzone;
1029 uint32 defaultzone = 1;
1030 GetZoneAndAreaId(zone, subzone);
1031
1032 // if subzone loot exist use it
1033 fishloot->FillLoot(subzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1034 if (fishloot->empty()) //use this becase if zone or subzone has normal mask drop, then fishloot->FillLoot return true.
1035 {
1036 //use zone loot
1037 fishloot->FillLoot(zone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1038 if (fishloot->empty())
1039 //use zone 1 as default
1040 fishloot->FillLoot(defaultzone, LootTemplates_Fishing, loot_owner, true, true, LOOT_MODE_JUNK_FISH);
1041 }
1042}
@ 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
209{ 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
207{ return GetByteValue(GAMEOBJECT_BYTES_1, 2); }

References GAMEOBJECT_BYTES_1, and Object::GetByteValue().

Referenced by SaveToDB().

◆ GetGOInfo()

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

References m_goInfo.

Referenced by ActivateToQuest(), BuildValuesUpdate(), Spell::CheckCast(), Spell::CheckEffectTarget(), CheckRitualList(), ClearRitualList(), Create(), StaticTransport::Create(), Delete(), WorldSession::DoLootRelease(), Spell::EffectOpenLock(), MotionTransport::EnableMovement(), BattlegroundSA::EventPlayerDamagedGO(), Player::GetDefaultGossipMenuForSource(), GetScriptId(), GetSpellForLock(), GetStationaryO(), GetStationaryX(), GetStationaryY(), GetStationaryZ(), GetTemplateAddon(), go_celestial_planetarium_access::go_celestial_planetarium_accessAI::GossipHello(), WorldSession::HandleAlterAppearance(), OutdoorPvPSI::HandleCustomSpell(), gobject_commandscript::HandleGameObjectMoveCommand(), gobject_commandscript::HandleGameObjectTurnCommand(), OPvPCapturePoint::HandlePlayerEnter(), OPvPCapturePoint::HandlePlayerLeave(), IsAtInteractDistance(), 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
139{ return &m_goValue; }

References m_goValue.

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

◆ GetInteractionDistance()

float GameObject::GetInteractionDistance ( ) const
2875{
2876 switch (GetGoType())
2877 {
2879 return 0.0f;
2885 return 5.5555553f;
2887 return 10.0f;
2890 return 3.0f;
2892 return 100.0f;
2894 return 20.0f + CONTACT_DISTANCE; // max spell range
2900 return 5.0f;
2901 // Following values are not blizzlike
2904 // 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.
2905 // 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.
2906 return 10.0f; // 5.0f is blizzlike
2907 default:
2908 return INTERACTION_DISTANCE;
2909 }
2910}
@ 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
#define INTERACTION_DISTANCE
Definition: ObjectDefines.h:24
#define CONTACT_DISTANCE
Definition: ObjectDefines.h:23

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.

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

References GetOwner().

◆ GetLinkedTrap()

GameObject * GameObject::GetLinkedTrap ( )
2738{
2740}
GameObject * GetGameObject(WorldObject const &u, ObjectGuid const guid)
Definition: ObjectAccessor.cpp:184
ObjectGuid m_linkedTrap
Definition: GameObject.h:404

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
150{ return m_localRotation; }
G3D::Quat m_localRotation
Definition: GameObject.h:396

References m_localRotation.

Referenced by GetWorldRotation().

◆ GetLootGenerationTime()

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

References m_lootGenerationTime.

Referenced by Player::SendLoot().

◆ GetLootMode()

uint16 GameObject::GetLootMode ( ) const
inline

◆ GetLootRecipient()

Player * GameObject::GetLootRecipient ( ) const
2635{
2636 if (!m_lootRecipient)
2637 return nullptr;
2639}
Player * FindConnectedPlayer(ObjectGuid const guid)
Definition: ObjectAccessor.cpp:257
ObjectGuid m_lootRecipient
Definition: GameObject.h:399

References ObjectAccessor::FindConnectedPlayer(), and m_lootRecipient.

◆ GetLootRecipientGroup()

Group * GameObject::GetLootRecipientGroup ( ) const
2642{
2644 return nullptr;
2645 return sGroupMgr->GetGroupByGUID(m_lootRecipientGroup);
2646}
#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.

2210{
2211 if (loc_idx != DEFAULT_LOCALE)
2212 {
2213 uint8 uloc_idx = uint8(loc_idx);
2214 if (GameObjectLocale const* cl = sObjectMgr->GetGameObjectLocale(GetEntry()))
2215 if (cl->Name.size() > uloc_idx && !cl->Name[uloc_idx].empty())
2216 return cl->Name[uloc_idx];
2217 }
2218
2219 return GetName();
2220}
#define DEFAULT_LOCALE
Definition: Common.h:79
Definition: GameObjectData.h:674
std::string const & GetName() const
Definition: Object.h:463

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

Referenced by gobject_commandscript::HandleGameObjectRespawn().

◆ GetOwner()

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

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

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

◆ GetOwnerGUID()

◆ GetPackedLocalRotation()

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

References m_packedRotation.

◆ GetRespawnDelay()

uint32 GameObject::GetRespawnDelay ( ) const
inline

◆ GetRespawnPosition()

void GameObject::GetRespawnPosition ( float &  x,
float &  y,
float &  z,
float *  ori = nullptr 
) const
2843{
2844 if (m_spawnId)
2845 {
2846 if (GameObjectData const* data = sObjectMgr->GetGameObjectData(m_spawnId))
2847 {
2848 x = data->posX;
2849 y = data->posY;
2850 z = data->posZ;
2851 if (ori)
2852 *ori = data->orientation;
2853 return;
2854 }
2855 }
2856
2857 x = GetPositionX();
2858 y = GetPositionY();
2859 z = GetPositionZ();
2860 if (ori)
2861 *ori = GetOrientation();
2862}
Definition: GameObjectData.h:696

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
2926{
2927 time_t now = GameTime::GetGameTime().count();
2928 if (m_respawnTime > now)
2929 return m_respawnTime;
2930 else
2931 return now;
2932}
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
3011{
3012 if (!player)
3013 {
3014 return nullptr;
3015 }
3016
3017 uint32 lockId = GetGOInfo()->GetLockId();
3018 if (!lockId)
3019 {
3020 return nullptr;
3021 }
3022
3023 LockEntry const* lock = sLockStore.LookupEntry(lockId);
3024 if (!lock)
3025 {
3026 return nullptr;
3027 }
3028
3029 for (uint8 i = 0; i < MAX_LOCK_CASE; ++i)
3030 {
3031 if (!lock->Type[i])
3032 {
3033 continue;
3034 }
3035
3036 if (lock->Type[i] == LOCK_KEY_SPELL)
3037 {
3038 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(lock->Index[i]))
3039 {
3040 return spell;
3041 }
3042 }
3043
3044 if (lock->Type[i] != LOCK_KEY_SKILL)
3045 {
3046 break;
3047 }
3048
3049 for (auto&& playerSpell : player->GetSpellMap())
3050 {
3051 if (SpellInfo const* spell = sSpellMgr->GetSpellInfo(playerSpell.first))
3052 {
3053 for (auto&& effect : spell->Effects)
3054 {
3055 if (effect.Effect == SPELL_EFFECT_OPEN_LOCK && ((uint32) effect.MiscValue) == lock->Index[i])
3056 {
3057 if (effect.CalcValue(player) >= int32(lock->Skill[i]))
3058 {
3059 return spell;
3060 }
3061 }
3062 }
3063 }
3064 }
3065 }
3066
3067 return nullptr;
3068}
#define MAX_LOCK_CASE
Definition: DBCStructure.h:1304
@ SPELL_EFFECT_OPEN_LOCK
Definition: SharedDefines.h:811
@ LOCK_KEY_SKILL
Definition: SharedDefines.h:2586
@ LOCK_KEY_SPELL
Definition: SharedDefines.h:2587
DBCStorage< LockEntry > sLockStore(LockEntryfmt)
uint32 GetLockId() const
Definition: GameObjectData.h:427
Definition: DBCStructure.h:1307
uint32 Type[MAX_LOCK_CASE]
Definition: DBCStructure.h:1309
uint32 Index[MAX_LOCK_CASE]
Definition: DBCStructure.h:1310
uint32 Skill[MAX_LOCK_CASE]
Definition: DBCStructure.h:1311

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

References m_unique_users.

Referenced by Update(), and Use().

◆ GetUseCount()

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

References m_usetimes.

Referenced by WorldSession::DoLootRelease().

◆ GetWorldRotation()

G3D::Quat GameObject::GetWorldRotation ( ) const
2263{
2264 G3D::Quat localRotation = GetLocalRotation();
2265 if (Transport* transport = GetTransport())
2266 {
2267 G3D::Quat worldRotation = transport->GetWorldRotation();
2268
2269 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2270 G3D::Quat localRotationQuat(localRotation.x, localRotation.y, localRotation.z, localRotation.w);
2271
2272 G3D::Quat resultRotation = localRotationQuat * worldRotationQuat;
2273
2274 return G3D::Quat(resultRotation.x, resultRotation.y, resultRotation.z, resultRotation.w);
2275 }
2276 return localRotation;
2277}
G3D::Quat const & GetLocalRotation() const
Definition: GameObject.h:150
Definition: Transport.h:29

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

Referenced by IsAtInteractDistance().

◆ HasGameObjectFlag()

bool GameObject::HasGameObjectFlag ( GameObjectFlags  flags) const
inline
217{ 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.

1218{
1219 QuestRelationBounds qir = sObjectMgr->GetGOQuestInvolvedRelationBounds(GetEntry());
1220 for (QuestRelations::const_iterator itr = qir.first; itr != qir.second; ++itr)
1221 {
1222 if (itr->second == quest_id)
1223 return true;
1224 }
1225 return false;
1226}
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
229{ 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.

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

References Object::GetEntry(), and sObjectMgr.

◆ IsAllowedToSaveToDB()

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

References m_saveStateOnDb.

Referenced by SetGoState().

◆ IsAlwaysVisibleFor()

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

Reimplemented from WorldObject.

1266{
1268 return true;
1269
1271 return true;
1272
1273 if (!seer)
1274 return false;
1275
1276 // Always seen by owner and friendly units
1277 if (ObjectGuid guid = GetOwnerGUID())
1278 {
1279 if (seer->GetGUID() == guid)
1280 return true;
1281
1282 Unit* owner = GetOwner();
1283 if (owner)
1284 {
1285 if (seer->IsUnit() && owner->IsFriendlyTo(seer->ToUnit()))
1286 return true;
1287 }
1288 }
1289
1290 return false;
1291}
bool IsDestructibleBuilding() const
Definition: GameObject.cpp:1233
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
Definition: Object.h:670
bool IsFriendlyTo(Unit const *unit) const
Definition: Unit.cpp:10241

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

◆ IsAtInteractDistance() [1/2]

bool GameObject::IsAtInteractDistance ( Player const *  player,
SpellInfo const *  spell = nullptr 
) const
2964{
2965 if (spell || (spell = GetSpellForLock(player)))
2966 {
2967 float maxRange = spell->GetMaxRange(spell->IsPositive());
2968
2970 {
2971 return maxRange * maxRange >= GetExactDistSq(player);
2972 }
2973
2974 if (sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2975 {
2976 return IsAtInteractDistance(*player, maxRange);
2977 }
2978 }
2979
2981}
DBCStorage< GameObjectDisplayInfoEntry > sGameObjectDisplayInfoStore(GameObjectDisplayInfofmt)
bool IsAtInteractDistance(Position const &pos, float radius) const
Definition: GameObject.cpp:2983
SpellInfo const * GetSpellForLock(Player const *player) const
Definition: GameObject.cpp:3010
float GetInteractionDistance() const
Definition: GameObject.cpp:2874
float GetExactDistSq(float x, float y, float z) const
Definition: Position.h:169

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
2984{
2985 if (GameObjectDisplayInfoEntry const* displayInfo = sGameObjectDisplayInfoStore.LookupEntry(GetGOInfo()->displayId))
2986 {
2987 float scale = GetObjectScale();
2988
2989 float minX = displayInfo->minX * scale - radius;
2990 float minY = displayInfo->minY * scale - radius;
2991 float minZ = displayInfo->minZ * scale - radius;
2992 float maxX = displayInfo->maxX * scale + radius;
2993 float maxY = displayInfo->maxY * scale + radius;
2994 float maxZ = displayInfo->maxZ * scale + radius;
2995
2996 G3D::Quat worldRotation = GetWorldRotation();
2997 G3D::Quat worldRotationQuat(worldRotation.x, worldRotation.y, worldRotation.z, worldRotation.w);
2998
2999 return G3D::CoordinateFrame {{worldRotationQuat}, {GetPositionX(), GetPositionY(), GetPositionZ()}}.toWorldSpace(G3D::Box {{minX, minY, minZ}, {maxX, maxY, maxZ}}).contains({pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()});
3000 }
3001
3002 return GetExactDist(&pos) <= radius;
3003}
G3D::Quat GetWorldRotation() const
Definition: GameObject.cpp:2262
float GetObjectScale() const
Definition: Object.h:118
float GetExactDist(float x, float y, float z) const
Definition: Position.h:177
Definition: DBCStructure.h:999

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
1234{
1235 GameObjectTemplate const* gInfo = GetGOInfo();
1236 if (!gInfo) return false;
1238}

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

2161{
2163 if (!info)
2164 return IsWithinDist3d(x, y, z, radius);
2165
2166 float sinA = std::sin(GetOrientation());
2167 float cosA = cos(GetOrientation());
2168 float dx = x - GetPositionX();
2169 float dy = y - GetPositionY();
2170 float dz = z - GetPositionZ();
2171 float dist = std::sqrt(dx * dx + dy * dy);
2174 if (G3D::fuzzyEq(dist, 0.0f))
2175 return true;
2176
2177 float scale = GetObjectScale();
2178 float sinB = dx / dist;
2179 float cosB = dy / dist;
2180 dx = dist * (cosA * cosB + sinA * sinB);
2181 dy = dist * (cosA * sinB - sinA * cosB);
2182 return dx < (info->maxX * scale) + radius && dx > (info->minX * scale) - radius
2183 && dy < (info->maxY * scale) + radius && dy > (info->minY * scale) - radius
2184 && dz < (info->maxZ * scale) + radius && dz > (info->minZ * scale) - radius;
2185}
bool IsWithinDist3d(float x, float y, float z, float dist) const
Definition: Object.cpp:1306
float maxX
Definition: DBCStructure.h:1006
float maxY
Definition: DBCStructure.h:1007
float minY
Definition: DBCStructure.h:1004
float minX
Definition: DBCStructure.h:1003
float minZ
Definition: DBCStructure.h:1005
float maxZ
Definition: DBCStructure.h:1008

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
3077{
3078 for (auto const& itr : m_SkillupList)
3079 {
3080 if (itr.first == playerGuid)
3081 {
3082 return true;
3083 }
3084 }
3085
3086 return false;
3087}

References m_SkillupList.

Referenced by Spell::EffectOpenLock().

◆ IsInstanceGameobject()

bool GameObject::IsInstanceGameobject ( ) const
2516{
2517 // Avoid checking for unecessary gameobjects whose
2518 // states don't matter for the dungeon progression
2520 {
2521 return false;
2522 }
2523
2524 if (auto* map = FindMap())
2525 {
2526 if (map->IsDungeon() || map->IsRaid())
2527 {
2528 return true;
2529 }
2530 }
2531 return false;
2532}
bool ValidateGameobjectType() const
Definition: GameObject.cpp:2534
Map * FindMap() const
Definition: Object.h:537

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

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

◆ IsInvisibleDueToDespawn()

bool GameObject::IsInvisibleDueToDespawn ( ) const
overridevirtual

Reimplemented from WorldObject.

1294{
1296 return true;
1297
1298 // Despawned
1299 if (!isSpawned())
1300 return true;
1301
1302 return false;
1303}
bool isSpawned() const
Definition: GameObject.h:189
virtual bool IsInvisibleDueToDespawn() const
Definition: Object.h:671

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

◆ IsLootAllowedFor()

bool GameObject::IsLootAllowedFor ( Player const *  player) const
2705{
2707 {
2708 return true;
2709 }
2710
2711 if (player->GetGUID() == m_lootRecipient)
2712 {
2713 return true;
2714 }
2715
2716 if (player->HasPendingBind())
2717 {
2718 return false;
2719 }
2720
2721 // if we dont have a group we arent the recipient
2722 // if go doesnt have group bound it means it was solo killed by someone else
2723 Group const* playerGroup = player->GetGroup();
2724 if (!playerGroup || playerGroup != GetLootRecipientGroup())
2725 {
2726 return false;
2727 }
2728
2729 if (!HasAllowedLooter(player->GetGUID()))
2730 {
2731 return false;
2732 }
2733
2734 return true;
2735}
Group * GetLootRecipientGroup() const
Definition: GameObject.cpp:2641
bool HasAllowedLooter(ObjectGuid guid) const
Definition: Object.cpp:3213
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.

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

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
1333{
1334 return obj && IsInMap(obj) && InSamePhase(obj) && _IsWithinDist(obj, dist2compare, is3D, useBoundingRadius);
1335}
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:416

◆ LoadFromDB()

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

References LoadGameObjectFromDB().

Referenced by LoadHelper().

◆ LoadGameObjectFromDB()

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

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)
1411{
1412 GameObject* ok = nullptr;
1413
1414 Acore::NearestGameObjectFishingHole u_check(*this, range);
1416
1417 Cell::VisitGridObjects(this, checker, range);
1418 return ok;
1419}
static void VisitGridObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:178
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?
2280{
2282 return;
2283
2284 // if this building doesn't have health, return
2286 return;
2287
2288 sScriptMgr->OnGameObjectModifyHealth(this, attackerOrHealer, change, sSpellMgr->GetSpellInfo(spellId));
2289
2290 // if the health isn't being changed, return
2291 if (!change)
2292 return;
2293
2295 change = 0;
2296
2297 // prevent double destructions of the same object
2298 if (change < 0 && !m_goValue.Building.Health)
2299 return;
2300
2301 if (int32(m_goValue.Building.Health) + change <= 0)
2305 else
2306 m_goValue.Building.Health += change;
2307
2308 // Set the health bar, value = 255 * healthPct;
2310
2311 Player* player = attackerOrHealer->GetCharmerOrOwnerPlayerOrPlayerItself();
2312
2313 // dealing damage, send packet
2315 if (player)
2316 {
2317 WorldPacket data(SMSG_DESTRUCTIBLE_BUILDING_DAMAGE, 8 + 8 + 8 + 4 + 4);
2318 data << GetPackGUID();
2319 data << attackerOrHealer->GetPackGUID();
2320 data << player->GetPackGUID();
2321 data << uint32(-change); // change < 0 triggers SPELL_BUILDING_HEAL combat log event
2322 // change >= 0 triggers SPELL_BUILDING_DAMAGE event
2323 data << uint32(spellId);
2324 player->GetSession()->SendPacket(&data);
2325 }
2326
2328
2330 newState = GO_DESTRUCTIBLE_DESTROYED;
2331 else if (m_goValue.Building.Health <= GetGOInfo()->building.damagedNumHits)
2332 newState = GO_DESTRUCTIBLE_DAMAGED;
2334 newState = GO_DESTRUCTIBLE_INTACT;
2335
2336 if (newState == GetDestructibleState())
2337 return;
2338
2339 SetDestructibleState(newState, player, false);
2340}
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:2342
GameObjectDestructibleState GetDestructibleState() const
Definition: GameObject.h:294
PackedGuid const & GetPackGUID() const
Definition: Object.h:114
Player * GetCharmerOrOwnerPlayerOrPlayerItself() const
Definition: Unit.cpp:10616
Definition: WorldPacket.h:26
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 ( )
920{
921 // not refresh despawned not casted GO (despawned casted GO destroyed in all cases anyway)
923 return;
924
925 if (isSpawned())
926 GetMap()->AddToMap(this);
927}

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:169
void SetOwnerGUID(ObjectGuid owner)
Definition: GameObject.h:163
std::string ToString() const
Definition: ObjectGuid.cpp:47
std::string ToString() const
Definition: Position.cpp:52

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:138
void RemoveFromWorld() override
Definition: Object.cpp:1193
void RemoveGameObjectModel(const GameObjectModel &model)
Definition: Map.h:558
virtual void OnGameObjectRemove(GameObject *)
Definition: ZoneScript.h:38

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
232{ 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.

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

References SaveRespawnTime().

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

◆ SaveRespawnTime() [2/2]

void GameObject::SaveRespawnTime ( uint32  forceDelay)
1246{
1247 if (m_goData && m_goData->dbData && (forceDelay || m_respawnTime > GameTime::GetGameTime().count()) && m_spawnedByDefault)
1248 {
1249 time_t respawnTime = forceDelay ? GameTime::GetGameTime().count() + forceDelay : m_respawnTime;
1250 GetMap()->SaveGORespawnTime(m_spawnId, respawnTime);
1251 }
1252}
bool dbData
Definition: GameObjectData.h:712
void SaveGORespawnTime(ObjectGuid::LowType dbGuid, time_t &respawnTime)
Definition: Map.cpp:3386

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

◆ SaveStateToDB()

void GameObject::SaveStateToDB ( )
2575{
2577 {
2578 if (InstanceScript* instance = GetInstanceScript())
2579 {
2580 GOState param = GetGoState();
2581 instance->StoreGameObjectState(GetSpawnId(), GameobjectStateToInt(&param));
2582
2584 stmt->SetData(0, GetInstanceId());
2585 stmt->SetData(1, GetSpawnId());
2586 stmt->SetData(2, GameobjectStateToInt(&param));
2587 CharacterDatabase.Execute(stmt);
2588 }
2589 }
2590}
@ CHAR_INSERT_INSTANCE_SAVED_DATA
Definition: CharacterDatabase.h:525
DatabaseWorkerPool< CharacterDatabaseConnection > CharacterDatabase
Accessor to the character database.
Definition: DatabaseEnv.cpp:21
uint8 GameobjectStateToInt(GOState *state) const
Definition: GameObject.cpp:2549
uint32 GetInstanceId() const
Definition: Object.h:448

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

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

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)
2153{
2155 data << GetGUID();
2156 data << uint32(anim);
2157 SendMessageToSet(&data, true);
2158}
@ SMSG_GAMEOBJECT_CUSTOM_ANIM
Definition: Opcodes.h:209
virtual void SendMessageToSet(WorldPacket const *data, bool self) const
Definition: Object.cpp:2091

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 
)
2343{
2344 // the user calling this must know he is already operating on destructible gameobject
2346
2347 switch (state)
2348 {
2352 if (setHealth)
2353 {
2355 SetGoAnimProgress(255);
2356 }
2357 EnableCollision(true);
2358 break;
2360 {
2362
2363 sScriptMgr->OnGameObjectDamaged(this, eventInvoker);
2364
2365 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2366 if (Battleground* bg = bgMap->GetBG())
2367 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.damagedEvent);
2368
2371
2374 if (modelData->DamagedDisplayId)
2375 modelId = modelData->DamagedDisplayId;
2376 SetDisplayId(modelId);
2377
2378 if (setHealth)
2379 {
2381 uint32 maxHealth = m_goValue.Building.MaxHealth;
2382 // in this case current health is 0 anyway so just prevent crashing here
2383 if (!maxHealth)
2384 maxHealth = 1;
2385 SetGoAnimProgress(m_goValue.Building.Health * 255 / maxHealth);
2386 }
2387 break;
2388 }
2390 {
2391 sScriptMgr->OnGameObjectDestroyed(this, eventInvoker);
2392
2394
2395 if (BattlegroundMap* bgMap = GetMap()->ToBattlegroundMap())
2396 {
2397 if (Battleground* bg = bgMap->GetBG())
2398 {
2399 bg->EventPlayerDamagedGO(eventInvoker, this, m_goInfo->building.destroyedEvent);
2400 bg->DestroyGate(eventInvoker, this);
2401 }
2402 }
2403
2406
2409 if (modelData->DestroyedDisplayId)
2410 modelId = modelData->DestroyedDisplayId;
2411 SetDisplayId(modelId);
2412
2413 if (setHealth)
2414 {
2417 }
2418 EnableCollision(false);
2419 break;
2420 }
2422 {
2425
2426 uint32 modelId = m_goInfo->displayId;
2428 if (modelData->RebuildingDisplayId)
2429 modelId = modelData->RebuildingDisplayId;
2430 SetDisplayId(modelId);
2431
2432 // restores to full health
2433 if (setHealth)
2434 {
2436 SetGoAnimProgress(255);
2437 }
2438 EnableCollision(true);
2439 break;
2440 }
2441 }
2442}
@ GO_DESTRUCTIBLE_REBUILDING
Definition: SharedDefines.h:1630
DBCStorage< DestructibleModelDataEntry > sDestructibleModelDataStore(DestructibleModelDatafmt)
void RemoveGameObjectFlag(GameObjectFlags flags)
Definition: GameObject.h:219
void EventInform(uint32 eventId)
Definition: GameObject.cpp:2187
uint32 destructibleData
Definition: GameObjectData.h:369
uint32 rebuildingEvent
Definition: GameObjectData.h:370
uint32 destroyedEvent
Definition: GameObjectData.h:365
uint32 damagedDisplayId
Definition: GameObjectData.h:355
uint32 destroyedDisplayId
Definition: GameObjectData.h:361
uint32 damagedEvent
Definition: GameObjectData.h:360
Definition: Map.h:851
Definition: DBCStructure.h:842

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
218{ 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(), go_magtheridons_head::InitializeAI(), LoadGameObjectFromDB(), BattlefieldWG::OnBattleStart(), instance_uldaman::instance_uldaman_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_razorfen_downs::instance_razorfen_downs_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_zulgurub::instance_zulgurub_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_violet_hold::instance_violet_hold_InstanceMapScript::OnGameObjectCreate(), go_gong_of_bethekk::OnGossipHello(), go_elune_fire::OnGossipHello(), go_palehoof_sphere::OnGossipHello(), go_main_chambers_access_panel::OnGossipHello(), SetDestructibleState(), SwitchDoorOrButton(), and Use().

◆ SetGoAnimProgress()

void GameObject::SetGoAnimProgress ( uint8  animprogress)
inline
210{ 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)
1446{
1448 GameObjectData* data = const_cast<GameObjectData*>(sObjectMgr->GetGameObjectData(m_spawnId));
1449 if (data)
1450 data->artKit = kit;
1451}

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

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

◆ SetGoState()

void GameObject::SetGoState ( GOState  state)
2480{
2482
2483 sScriptMgr->OnGameObjectStateChanged(this, state);
2484
2485 if (m_model)
2486 {
2487 if (!IsInWorld())
2488 return;
2489
2490 // pussywizard: this startOpen is unneeded here, collision depends entirely on current GOState
2492 // pussywizard: commented out everything below
2493
2494 // startOpen determines whether we are going to add or remove the LoS on activation
2495 /*bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2496
2497 if (GetGameObjectData() && GetGameObjectData()->go_state == GO_STATE_READY)
2498 startOpen = !startOpen;
2499
2500 if (state == GO_STATE_ACTIVE || state == GO_STATE_ACTIVE_ALTERNATIVE)
2501 EnableCollision(startOpen);
2502 else if (state == GO_STATE_READY)
2503 EnableCollision(!startOpen);*/
2504 }
2505 /* Whenever a gameobject inside an instance changes
2506 * save it's state on the database to be loaded properly
2507 * on server restart or crash.
2508 */
2510 {
2511 SaveStateToDB();
2512 }
2513}
bool IsAllowedToSaveToDB() const
Definition: GameObject.h:356
void SaveStateToDB()
Definition: GameObject.cpp:2574

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(), go_magtheridons_head::InitializeAI(), instance_sunken_temple::instance_sunken_temple_InstanceMapScript::OnGameObjectCreate(), instance_blackfathom_deeps::instance_blackfathom_deeps_InstanceMapScript::OnGameObjectCreate(), instance_old_hillsbrad::instance_old_hillsbrad_InstanceMapScript::OnGameObjectCreate(), instance_dire_maul::instance_dire_maul_InstanceMapScript::OnGameObjectCreate(), instance_gundrak::instance_gundrak_InstanceMapScript::OnGameObjectCreate(), instance_ulduar::instance_ulduar_InstanceMapScript::OnGameObjectCreate(), instance_karazhan::instance_karazhan_InstanceMapScript::OnGameObjectCreate(), instance_stratholme::instance_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_culling_of_stratholme::instance_culling_of_stratholme_InstanceMapScript::OnGameObjectCreate(), instance_ahnkahet::instance_ahnkahet_InstanceScript::OnGameObjectCreate(), instance_pit_of_saron::instance_pit_of_saron_InstanceScript::OnGameObjectCreate(), instance_icecrown_citadel::instance_icecrown_citadel_InstanceMapScript::OnGameObjectCreate(), instance_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(), instance_halls_of_stone::instance_halls_of_stone_InstanceMapScript::SetData(), BattlegroundIC::StartingEventOpenDoors(), SwitchDoorOrButton(), brann_bronzebeard::brann_bronzebeardAI::SwitchHeadVisaul(), boss_flame_leviathan::boss_flame_leviathanAI::TurnGates(), MotionTransport::Update(), Update(), InstanceScript::UpdateDoorState(), BattlegroundRV::UpdatePillars(), Use(), and npc_wounded_blood_elf::npc_wounded_blood_elfAI::WaypointReached().

◆ SetGoType()

void GameObject::SetGoType ( GameobjectTypes  type)
inline

◆ SetLinkedTrap()

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

References Object::GetGUID(), and m_linkedTrap.

Referenced by Create().

◆ SetLocalRotation()

void GameObject::SetLocalRotation ( G3D::Quat const &  rot)
2236{
2237 G3D::Quat rotation;
2238 // Temporary solution for gameobjects that have no rotation data in DB:
2239 if (G3D::fuzzyEq(rot.z, 0.f) && G3D::fuzzyEq(rot.w, 0.f))
2240 rotation = G3D::Quat::fromAxisAngleRotation(G3D::Vector3::unitZ(), GetOrientation());
2241 else
2242 rotation = rot;
2243
2244 rotation.unitize();
2245 m_localRotation = rotation;
2247}
void UpdatePackedRotation()
Definition: GameObject.cpp:2222

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 
)
2258{
2259 SetLocalRotation(G3D::Quat(G3D::Matrix3::fromEulerAnglesZYX(z_rot, y_rot, x_rot)));
2260}

References SetLocalRotation().

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

◆ SetLootGenerationTime()

void GameObject::SetLootGenerationTime ( )
2935{
2937}

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)
2649{
2650 // set the player whose group should receive the right
2651 // to loot the creature after it dies
2652 // should be set to nullptr after the loot disappears
2653 if (!creature)
2654 {
2658 return;
2659 }
2660
2664}
ObjectGuid GetLootRecipientGUID() const
Definition: Creature.h:227
ObjectGuid::LowType GetLootRecipientGroupGUID() const
Definition: Creature.h:229
void ResetAllowedLooters()
Definition: Object.cpp:3208
void SetAllowedLooters(GuidUnorderedSet const looters)
Definition: Object.cpp:3203
GuidUnorderedSet const & GetAllowedLooters() const
Definition: Object.cpp:3223
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)
2667{
2668 Group* group = nullptr;
2669 Map::PlayerList const& PlayerList = map->GetPlayers();
2670 for (Map::PlayerList::const_iterator i = PlayerList.begin(); i != PlayerList.end(); ++i)
2671 {
2672 if (Player* groupMember = i->GetSource())
2673 {
2674 if (groupMember->IsGameMaster() || groupMember->IsSpectator())
2675 {
2676 continue;
2677 }
2678
2679 if (!m_lootRecipient)
2680 {
2681 m_lootRecipient = groupMember->GetGUID();
2682 }
2683
2684 Group* memberGroup = groupMember->GetGroup();
2685 if (memberGroup && !group)
2686 {
2687 group = memberGroup;
2689 }
2690
2691 if (memberGroup == group)
2692 {
2693 AddAllowedLooter(groupMember->GetGUID());
2694 }
2695 }
2696 }
2697
2698 if (!group)
2699 {
2701 }
2702}
Definition: LinkedList.h:139
void AddAllowedLooter(ObjectGuid guid)
Definition: Object.cpp:3198
LowType GetCounter() const
Definition: ObjectGuid.h:145
ObjectGuid GetGUID() const
Definition: Group.cpp:2302
PlayerList const & GetPlayers() const
Definition: Map.h:484
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 
)
2445{
2446 m_lootState = state;
2447
2448 if (unit)
2449 _lootStateUnitGUID = unit->GetGUID();
2450 else
2452
2453 AI()->OnStateChanged(state, unit);
2454 sScriptMgr->OnGameObjectLootStateChanged(this, state, unit);
2455
2456 // Start restock timer if the chest is partially looted or not looted at all
2457 if (GetGoType() == GAMEOBJECT_TYPE_CHEST && state == GO_ACTIVATED && GetGOInfo()->chest.chestRestockTime > 0 && m_restockTime == 0s)
2458 {
2460 }
2461
2462 // 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
2463 /*if (m_model)
2464 {
2465 // startOpen determines whether we are going to add or remove the LoS on activation
2466 bool startOpen = (GetGoType() == GAMEOBJECT_TYPE_DOOR || GetGoType() == GAMEOBJECT_TYPE_BUTTON ? GetGOInfo()->door.startOpen : false);
2467
2468 // Use the current go state
2469 if (GetGoState() == GO_STATE_ACTIVE)
2470 startOpen = !startOpen;
2471
2472 if (state == GO_ACTIVATED || state == GO_JUST_DEACTIVATED)
2473 EnableCollision(startOpen);
2474 else if (state == GO_READY)
2475 EnableCollision(!startOpen);
2476 }*/
2477}
std::chrono::seconds Seconds
Seconds shorthand typedef.
Definition: Duration.h:30
@ GO_ACTIVATED
Definition: GameObject.h:112
virtual void OnStateChanged(uint32, Unit *)
Definition: GameObjectAI.h:64
ObjectGuid _lootStateUnitGUID
Definition: GameObject.h:406
uint32 chestRestockTime
Definition: GameObjectData.h:85

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

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

◆ SetOwnerGUID()

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

2599{
2600 WorldObject::SetPhaseMask(newPhaseMask, update);
2601
2602 if (m_model && m_model->isEnabled())
2603 EnableCollision(true);
2604}
bool isEnabled() const
Definition: GameObjectModel.h:69
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
Definition: Object.cpp:2886

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
316{ SetPosition(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), pos.GetOrientation()); }
void SetPosition(float x, float y, float z, float o)
Definition: GameObject.cpp:2864

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 
)
2865{
2866 // pussywizard: do not call for MotionTransport and other gobjects not in grid
2867
2868 if (!Acore::IsValidMapCoord(x, y, z, o))
2869 return;
2870
2871 GetMap()->GameObjectRelocation(this, x, y, z, o);
2872}
bool IsValidMapCoord(float c)
Definition: GridDefines.h:215
void GameObjectRelocation(GameObject *go, float x, float y, float z, float o)
Definition: Map.cpp:1047

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

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

◆ SetRespawnDelay()

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

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 
)
2250{
2255}
@ 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
1469{
1470 if (activate)
1472 else
1474
1475 if (GetGoState() == GO_STATE_READY) //if closed -> open
1477 else //if open -> close
1479}
@ 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
328{ 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
325{ 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
322{ 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 
)
1388{
1389 GameObjectTemplate const* trapInfo = sObjectMgr->GetGameObjectTemplate(trapEntry);
1390 if (!trapInfo || trapInfo->type != GAMEOBJECT_TYPE_TRAP)
1391 return;
1392
1393 SpellInfo const* trapSpell = sSpellMgr->GetSpellInfo(trapInfo->trap.spellId);
1394 if (!trapSpell) // checked at load already
1395 return;
1396
1397 // xinef: many spells have range 0 but radius > 0
1398 float range = float(target->GetSpellMaxRangeForTarget(GetOwner(), trapSpell));
1399 if (range < 1.0f)
1400 range = 5.0f;
1401
1402 // found correct GO
1403 // xinef: we should use the trap (checks for despawn type)
1404 if (GameObject* trapGO = GetLinkedTrap())
1405 {
1406 trapGO->Use(target); // trapGO->CastSpell(target, trapInfo->trap.spellId);
1407 }
1408}
uint32 spellId
Definition: GameObjectData.h:118
struct GameObjectTemplate::@230::@237 trap
float GetSpellMaxRangeForTarget(Unit const *target, SpellInfo const *spellInfo) const
Definition: Unit.cpp:15147

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

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

◆ Update()

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

Reimplemented from WorldObject.

Reimplemented in MotionTransport, and StaticTransport.

448{
450
451 if (AI())
452 AI()->UpdateAI(diff);
453 else if (!AIM_Initialize())
454 LOG_ERROR("entities.gameobject", "Could not initialize GameObjectAI");
455
456 if (m_despawnDelay)
457 {
458 if (m_despawnDelay > diff)
459 {
460 m_despawnDelay -= diff;
461 }
462 else
463 {
464 m_despawnDelay = 0;
466 }
467 }
468
469 for (std::unordered_map<ObjectGuid, int32>::iterator itr = m_SkillupList.begin(); itr != m_SkillupList.end();)
470 {
471 if (itr->second > 0)
472 {
473 if (itr->second > static_cast<int32>(diff))
474 {
475 itr->second -= static_cast<int32>(diff);
476 ++itr;
477 }
478 else
479 {
480 itr = m_SkillupList.erase(itr);
481 }
482 }
483 else
484 {
485 ++itr;
486 }
487 }
488
489 switch (m_lootState)
490 {
491 case GO_NOT_READY:
492 {
493 switch (GetGoType())
494 {
496 {
497 // Arming Time for GAMEOBJECT_TYPE_TRAP (6)
498 GameObjectTemplate const* goInfo = GetGOInfo();
499 // Bombs
500 if (goInfo->trap.type == 2)
501 m_cooldownTime = GameTime::GetGameTimeMS().count() + 10 * IN_MILLISECONDS; // Hardcoded tooltip value
502 else if (GetOwner())
504
506 break;
507 }
509 {
510 // fishing code (bobber ready)
512 {
513 // splash bobber (bobber ready now)
514 Unit* caster = GetOwner();
515 if (caster && caster->IsPlayer())
516 {
519
520 UpdateData udata;
521 WorldPacket packet;
522 BuildValuesUpdateBlockForPlayer(&udata, caster->ToPlayer());
523 udata.BuildPacket(packet);
524 caster->ToPlayer()->GetSession()->SendPacket(&packet);
525
527 }
528
529 m_lootState = GO_READY; // can be successfully open with some chance
530 }
531 return;
532 }
534 {
536 return;
537 GameObjectTemplate const* info = GetGOInfo();
538
540
542 {
544 return;
545 }
546
547 Unit* owner = GetOwner();
548 Unit* spellCaster = owner ? owner : ObjectAccessor::GetPlayer(*this, m_ritualOwnerGUID);
549 if (!spellCaster)
550 {
552 return;
553 }
554
555 uint32 spellId = info->summoningRitual.spellId;
556
557 if (spellId == 62330) // GO store nonexistent spell, replace by expected
558 {
559 // spell have reagent and mana cost but it not expected use its
560 // it triggered spell in fact casted at currently channeled GO
561 spellId = 61993;
562 }
563
564 // Cast casterTargetSpell at a random GO user
565 // on the current DB there is only one gameobject that uses this (Ritual of Doom)
566 // and its required target number is 1 (outter for loop will run once)
567 if (info->summoningRitual.casterTargetSpell && info->summoningRitual.casterTargetSpell != 1) // No idea why this field is a bool in some cases
568 for (uint32 i = 0; i < info->summoningRitual.casterTargetSpellTargets; i++)
569 // m_unique_users can contain only player GUIDs
571 spellCaster->CastSpell(target, info->summoningRitual.casterTargetSpell, true);
572
573 // finish owners spell
574 // xinef: properly process event cooldowns
575 if (owner)
576 {
577 if (Spell* spell = owner->GetCurrentSpell(CURRENT_CHANNELED_SPELL))
578 {
579 spell->SendChannelUpdate(0);
580 spell->finish(false);
581 }
582 }
583
584 // can be deleted now
587 else
589
591 spellCaster->CastSpell(spellCaster, spellId, true);
592 return;
593 }
596 {
597 return;
598 }
599 // If there is no restock timer, or if the restock timer passed, the chest becomes ready to loot
600 m_restockTime = 0s;
603 break;
604 default:
605 m_lootState = GO_READY; // for other GOis same switched without delay to GO_READY
606 break;
607 }
608 [[fallthrough]];
609 }
610 case GO_READY:
611 {
612 if (m_respawnTime > 0) // timer on
613 {
614 time_t now = GameTime::GetGameTime().count();
615 if (m_respawnTime <= now) // timer expired
616 {
617 ObjectGuid dbtableHighGuid = ObjectGuid::Create<HighGuid::GameObject>(GetEntry(), m_spawnId);
618 time_t linkedRespawntime = GetMap()->GetLinkedRespawnTime(dbtableHighGuid);
619 if (linkedRespawntime) // Can't respawn, the master is dead
620 {
621 ObjectGuid targetGuid = sObjectMgr->GetLinkedRespawnGuid(dbtableHighGuid);
622 if (targetGuid == dbtableHighGuid) // if linking self, never respawn (check delayed to next day)
624 else
625 m_respawnTime = (now > linkedRespawntime ? now : linkedRespawntime) + urand(5, MINUTE); // else copy time from master and add a little
626 SaveRespawnTime(); // also save to DB immediately
627 return;
628 }
629
630 m_respawnTime = 0;
631 m_SkillupList.clear();
632 m_usetimes = 0;
633
634 switch (GetGoType())
635 {
636 case GAMEOBJECT_TYPE_FISHINGNODE: // can't fish now
637 {
638 Unit* caster = GetOwner();
639 if (caster && caster->IsPlayer())
640 {
641 caster->ToPlayer()->RemoveGameObject(this, false);
642
644 caster->ToPlayer()->GetSession()->SendPacket(&data);
645 }
646 // can be delete
648 return;
649 }
652 //we need to open doors if they are closed (add there another condition if this code breaks some usage, but it need to be here for battlegrounds)
653 if (GetGoState() != GO_STATE_READY)
655 break;
657 // Initialize a new max fish count on respawn
659 break;
660 default:
661 break;
662 }
663
664 if (!m_spawnedByDefault) // despawn timer
665 {
666 // can be despawned or destroyed
668 return;
669 }
670
671 // Xinef: Call AI Reset (required for example in SmartAI to clear one time events)
672 if (AI())
673 AI()->Reset();
674
675 // respawn timer
676 uint32 poolid = m_spawnId ? sPoolMgr->IsPartOfAPool<GameObject>(m_spawnId) : 0;
677 if (poolid)
678 sPoolMgr->UpdatePool<GameObject>(poolid, m_spawnId);
679 else
680 GetMap()->AddToMap(this);
681 }
682 }
683
684 if (isSpawned())
685 {
686 // traps can have time and can not have
687 GameObjectTemplate const* goInfo = GetGOInfo();
688 if (goInfo->type == GAMEOBJECT_TYPE_TRAP)
689 {
691 break;
692
693 // Type 2 - Bomb (will go away after casting it's spell)
694 if (goInfo->trap.type == 2)
695 {
697 break;
698 }
699
702 float radius = float(goInfo->trap.diameter) * 0.5f;
703 if (!goInfo->trap.diameter)
704 {
705 // Cast in other case (at some triggering/linked go/etc explicit call)
706 if (goInfo->trap.cooldown != 3 || m_respawnTime > 0)
707 {
708 break;
709 }
710
711 radius = 3.f;
712 }
713
714 // Type 0 and 1 - trap (type 0 will not get removed after casting a spell)
715 Unit* owner = GetOwner();
716 Unit* target = nullptr; // pointer to appropriate target if found any
717
718 // Note: this hack with search required until GO casting not implemented
719 // search unfriendly creature
720 if (owner && goInfo->trap.autoCloseTime != -1) // hunter trap
721 {
724 Cell::VisitAllObjects(this, searcher, radius);
725 }
726 else // environmental trap
727 {
728 // environmental damage spells already have around enemies targeting but this not help in case not existed GO casting support
729 // affect only players
730 Player* player = nullptr;
731 Acore::AnyPlayerInObjectRangeCheck checker(this, radius, true, true);
732 Acore::PlayerSearcher<Acore::AnyPlayerInObjectRangeCheck> searcher(this, player, checker);
733 Cell::VisitWorldObjects(this, searcher, radius);
734 target = player;
735 }
736
737 if (target)
738 {
739 SetLootState(GO_ACTIVATED, target);
740 }
741 }
742 else if (uint32 max_charges = goInfo->GetCharges())
743 {
744 if (m_usetimes >= max_charges)
745 {
746 m_usetimes = 0;
747 SetLootState(GO_JUST_DEACTIVATED); // can be despawned or destroyed
748 }
749 }
750 }
751
752 break;
753 }
754 case GO_ACTIVATED:
755 {
756 switch (GetGoType())
757 {
760 if (GetGOInfo()->GetAutoCloseTime() && GameTime::GetGameTimeMS().count() >= m_cooldownTime)
762 break;
765 {
767
769 }
770 break;
773 {
774 if (m_groupLootTimer <= diff)
775 {
776 Group* group = sGroupMgr->GetGroupByGUID(lootingGroupLowGUID);
777 if (group)
778 group->EndRoll(&loot, GetMap());
781 }
782 else
783 {
784 m_groupLootTimer -= diff;
785 }
786 }
787
788 // Non-consumable chest was partially looted and restock time passed, restock all loot now
790 {
791 m_restockTime = 0s;
794 }
795 break;
797 {
798 GameObjectTemplate const* goInfo = GetGOInfo();
799 if (goInfo->trap.type == 2)
800 {
801 if (goInfo->trap.spellId)
802 CastSpell(nullptr, goInfo->trap.spellId); // FIXME: null target won't work for target type 1
804 }
805 else if (Unit* target = ObjectAccessor::GetUnit(*this, _lootStateUnitGUID))
806 {
807 if (goInfo->trap.spellId)
808 CastSpell(target, goInfo->trap.spellId);
809
810 m_cooldownTime = GameTime::GetGameTimeMS().count() + (goInfo->trap.cooldown ? goInfo->trap.cooldown : uint32(4)) * IN_MILLISECONDS; // template or 4 seconds
811
812 if (goInfo->trap.type == 1)
814 else if (!goInfo->trap.type)
816
817 // Battleground gameobjects have data2 == 0 && data5 == 3
818 if (!goInfo->trap.diameter && goInfo->trap.cooldown == 3)
819 if (Player* player = target->ToPlayer())
820 if (Battleground* bg = player->GetBattleground())
821 bg->HandleTriggerBuff(this);
822 }
823 break;
824 }
825 default:
826 break;
827 }
828 break;
829 }
831 {
832 // If nearby linked trap exists, despawn it
833 if (GameObject* linkedTrap = GetLinkedTrap())
834 {
835 linkedTrap->DespawnOrUnsummon();
836 }
837
838 //if Gameobject should cast spell, then this, but some GOs (type = 10) should be destroyed
840 {
842
843 //any return here in case battleground traps
844 // Xinef: Do not return here for summoned gos that should be deleted few lines below
845 // Xinef: Battleground objects are treated as spawned by default
846 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
847 if ((addon->flags & GO_FLAG_NODESPAWN) && isSpawnedByDefault())
848 return;
849 }
850
851 loot.clear();
852
853 // Do not delete chests or goobers that are not consumed on loot, while still allowing them to despawn when they expire if summoned
854 bool isSummonedAndExpired = (GetOwner() || GetSpellId()) && m_respawnTime == 0;
855 if ((GetGoType() == GAMEOBJECT_TYPE_CHEST || GetGoType() == GAMEOBJECT_TYPE_GOOBER) && !GetGOInfo()->IsDespawnAtAction() && !isSummonedAndExpired)
856 {
858 {
859 // Start restock timer when the chest is fully looted
863 }
864 else
865 {
867 }
868
870 return;
871 }
872 else if (GetOwnerGUID() || GetSpellId())
873 {
875 Delete();
876 return;
877 }
878
880
881 //burning flags in some battlegrounds, if you find better condition, just add it
882 if (GetGOInfo()->IsDespawnAtAction() || GetGoAnimProgress() > 0)
883 {
885 //reset flags
886 if (GameObjectTemplateAddon const* addon = GetTemplateAddon())
888 }
889
891 return;
892
894 {
895 m_respawnTime = 0;
896 DestroyForNearbyPlayers(); // xinef: old UpdateObjectVisibility();
897 return;
898 }
899
901
902 // if option not set then object will be saved at grid unload
903 if (GetMap()->IsDungeon())
905
906 DestroyForNearbyPlayers(); // xinef: old UpdateObjectVisibility();
907 break;
908 }
909 }
910
911 sScriptMgr->OnGameObjectUpdate(this, diff);
912}
constexpr auto DAY
Definition: Common.h:49
@ GAMEOBJECT_TYPE_BUTTON
Definition: SharedDefines.h:1561
#define FISHING_BOBBER_READY_TIME
Definition: GameObject.h:117
@ SMSG_FISH_ESCAPED
Definition: Opcodes.h:487
auto SelectRandomContainerElement(C const &container) -> typename std::add_const< decltype(*std::begin(container))>::type &
Definition: Containers.h:133
Milliseconds GetGameTimeMS()
Definition: GameTime.cpp:43
virtual void UpdateAI(uint32)
Definition: GameObjectAI.h:41
virtual void Reset()
Definition: GameObjectAI.h:45
void CheckRitualList()
Definition: GameObject.cpp:201
void Delete()
Definition: GameObject.cpp:981
uint32 GetUniqueUseCount() const
Definition: GameObject.h:242
bool isSpawnedByDefault() const
Definition: GameObject.h:195
void SendCustomAnim(uint32 anim)
Definition: GameObject.cpp:2152
void ResetDoorOrButton()
Definition: GameObject.cpp:1421
void DespawnOrUnsummon(Milliseconds delay=0ms, Seconds forcedRespawnTime=0s)
Definition: GameObject.cpp:935
void CastSpell(Unit *target, uint32 spell)
Definition: GameObject.cpp:2087
ObjectGuid m_ritualOwnerGUID
Definition: GameObject.h:382
uint32 startDelay
Definition: GameObjectData.h:122
uint32 casterTargetSpell
Definition: GameObjectData.h:235
bool IsDespawnAtAction() const
Definition: GameObjectData.h:397
uint32 GetCharges() const
Definition: GameObjectData.h:479
uint32 reqParticipants
Definition: GameObjectData.h:231
uint32 consumable
Definition: GameObjectData.h:86
uint32 cooldown
Definition: GameObjectData.h:120
uint32 ritualPersistent
Definition: GameObjectData.h:234
uint32 autoCloseTime
Definition: GameObjectData.h:47
uint32 casterTargetSpellTargets
Definition: GameObjectData.h:236
uint32 diameter
Definition: GameObjectData.h:117
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target)
Definition: Object.cpp:257
bool IsPlayer() const
Definition: Object.h:200
Player * ToPlayer()
Definition: Object.h:201
void AddToObjectUpdateIfNeeded()
Definition: Object.cpp:524
void DestroyForNearbyPlayers()
Definition: Object.cpp:2955
virtual void Update(uint32 diff)
Definition: Object.cpp:1061
Definition: UpdateData.h:52
bool BuildPacket(WorldPacket &packet)
Definition: UpdateData.cpp:48
void RemoveGameObject(GameObject *gameObj, bool del)
Definition: Unit.cpp:6197
Spell * GetCurrentSpell(CurrentSpellTypes spellType) const
Definition: Unit.h:1449
static void VisitAllObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:206
static void VisitWorldObjects(WorldObject const *obj, T &visitor, float radius, bool dont_load=true)
Definition: CellImpl.h:192
Definition: GridNotifiers.h:389
Definition: GridNotifiers.h:510
Definition: GridNotifiers.h:1354
void EndRoll(Loot *loot, Map *allowedMap)
Definition: Group.cpp:1407
void clear()
Definition: LootMgr.h:343
time_t GetLinkedRespawnTime(ObjectGuid guid) const
Definition: Map.cpp:3584

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

Referenced by StaticTransport::Update().

◆ UpdateModel()

void GameObject::UpdateModel ( )
protected
2622{
2623 if (!IsInWorld())
2624 return;
2625 if (m_model)
2626 if (GetMap()->ContainsGameObjectModel(*m_model))
2628 delete m_model;
2629 m_model = CreateModel();
2630 if (m_model)
2632}

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

Referenced by SetDisplayId().

◆ UpdateModelPosition()

void GameObject::UpdateModelPosition ( )

◆ UpdatePackedRotation()

void GameObject::UpdatePackedRotation ( )
private
2223{
2224 static const int32 PACK_YZ = 1 << 20;
2225 static const int32 PACK_X = PACK_YZ << 1;
2226 static const int32 PACK_YZ_MASK = (PACK_YZ << 1) - 1;
2227 static const int32 PACK_X_MASK = (PACK_X << 1) - 1;
2228 int8 w_sign = (m_localRotation.w >= 0.f ? 1 : -1);
2229 int64 x = int32(m_localRotation.x * PACK_X) * w_sign & PACK_X_MASK;
2230 int64 y = int32(m_localRotation.y * PACK_YZ) * w_sign & PACK_YZ_MASK;
2231 int64 z = int32(m_localRotation.z * PACK_YZ) * w_sign & PACK_YZ_MASK;
2232 m_packedRotation = z | (y << 21) | (x << 42);
2233}
std::int8_t int8
Definition: Define.h:105
std::int64_t int64
Definition: Define.h:102

References m_localRotation, and m_packedRotation.

Referenced by SetLocalRotation().

◆ Use()

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

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

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

◆ UseDoorOrButton()

◆ ValidateGameobjectType()

bool GameObject::ValidateGameobjectType ( ) const
2535{
2536 switch (m_goInfo->type)
2537 {
2543 return true;
2544 default:
2545 return false;
2546 }
2547}
@ GAMEOBJECT_TYPE_TRAPDOOR
Definition: SharedDefines.h:1595

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

Referenced by IsInstanceGameobject().

Member Data Documentation

◆ _lootStateUnitGUID

ObjectGuid GameObject::_lootStateUnitGUID
protected

Referenced by SetLootState(), and Update().

◆ ChairListSlots

ChairSlotAndUser GameObject::ChairListSlots
protected

Referenced by Use().

◆ gameObjectToEventFlag

std::unordered_map< int, goEventFlag > GameObject::gameObjectToEventFlag = { }
static

Referenced by Use().

◆ loot

◆ lootingGroupLowGUID

uint32 GameObject::lootingGroupLowGUID

Referenced by GameObject(), and Update().

◆ m_AI

GameObjectAI* GameObject::m_AI
private

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

◆ m_allowModifyDestructibleBuilding

bool GameObject::m_allowModifyDestructibleBuilding
protected

◆ m_cooldownTime

uint32 GameObject::m_cooldownTime
protected

◆ m_despawnDelay

uint32 GameObject::m_despawnDelay
protected

◆ m_despawnRespawnTime

Seconds GameObject::m_despawnRespawnTime
protected

◆ m_goData

◆ m_goInfo

◆ m_goValue

◆ m_groupLootTimer

uint32 GameObject::m_groupLootTimer

Referenced by GameObject(), and Update().

◆ m_linkedTrap

ObjectGuid GameObject::m_linkedTrap
protected

Referenced by GetLinkedTrap(), and SetLinkedTrap().

◆ m_localRotation

G3D::Quat GameObject::m_localRotation
protected

◆ m_lootGenerationTime

uint32 GameObject::m_lootGenerationTime
protected

◆ m_LootMode

uint16 GameObject::m_LootMode
protected

◆ m_lootRecipient

ObjectGuid GameObject::m_lootRecipient
protected

◆ m_lootRecipientGroup

ObjectGuid::LowType GameObject::m_lootRecipientGroup
protected

◆ m_lootState

LootState GameObject::m_lootState
protected

◆ m_model

◆ m_packedRotation

int64 GameObject::m_packedRotation
protected

◆ m_respawnDelayTime

uint32 GameObject::m_respawnDelayTime
protected

◆ m_respawnTime

◆ m_restockTime

Seconds GameObject::m_restockTime
protected

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

◆ m_ritualOwnerGUID

ObjectGuid GameObject::m_ritualOwnerGUID
protected

Referenced by Update(), and Use().

◆ m_saveStateOnDb

bool GameObject::m_saveStateOnDb = false
private

◆ m_SkillupList

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

◆ m_spawnedByDefault

◆ m_spawnId

ObjectGuid::LowType GameObject::m_spawnId
protected

◆ m_spellId

uint32 GameObject::m_spellId
protected

◆ m_stationaryPosition

◆ m_unique_users

GuidSet GameObject::m_unique_users
protected

◆ m_usetimes

uint32 GameObject::m_usetimes
protected