20#define CONTACT_DISTANCE 0.5f
21#define INTERACTION_DISTANCE 5.0f
22#define ATTACK_DISTANCE 5.0f
23#define MAX_VISIBILITY_DISTANCE SIZE_OF_GRIDS
24#define SIGHT_RANGE_UNIT 50.0f
25#define DEFAULT_VISIBILITY_DISTANCE 90.0f
26#define DEFAULT_VISIBILITY_INSTANCE 170.0f
27#define DEFAULT_VISIBILITY_BGARENAS 533.0f
29#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f
30#define DEFAULT_COMBAT_REACH 1.5f
31#define MIN_MELEE_REACH 2.0f
32#define NOMINAL_MELEE_RANGE 5.0f
33#define MELEE_RANGE (NOMINAL_MELEE_RANGE - MIN_MELEE_REACH * 2)
310 void Relocate(
float x,
float y,
float z,
float orientation)
398 float GetAngle(
float x,
float y)
const;
404 void GetSinCos(
float x,
float y,
float& vsin,
float& vcos)
const;
414 bool IsInDist(
float x,
float y,
float z,
float dist)
const
422 bool HasInArc(
float arcangle,
Position const* pos,
float border = 2.0f)
const;
434 mod = fmod(mod, 2.0f *
static_cast<float>(
M_PI));
435 mod = -mod + 2.0f *
static_cast<float>(
M_PI);
438 return fmod(o, 2.0f *
static_cast<float>(
M_PI));
461 pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
499 pos.Relocate(0.0f, 0.0f, 0.0f, 0.0f);
531#define MAPID_INVALID 0xFFFFFFFF
563template <
class T_VALUES,
class T_FLAGS,
class FLAG_TYPE, u
int8 ARRAY_SIZE>
569 memset(&
m_values, 0x00,
sizeof(T_VALUES) * ARRAY_SIZE);
621 void GetNearPoint2D(
float& x,
float& y,
float distance,
float absAngle)
const;
622 void GetNearPoint(
WorldObject const* searcher,
float& x,
float& y,
float& z,
float searcher_size,
float distance2d,
float absAngle)
const;
623 void GetClosePoint(
float& x,
float& y,
float& z,
float size,
float distance2d = 0,
float angle = 0)
const;
635 void GetRandomPoint(
Position const& srcPos,
float distance,
float& rand_x,
float& rand_y,
float& rand_z)
const;
671 float GetDistance(
float x,
float y,
float z)
const;
689 bool IsInRange2d(
float x,
float y,
float minRange,
float maxRange)
const;
690 bool IsInRange3d(
float x,
float y,
float z,
float minRange,
float maxRange)
const;
786#ifdef MAP_BASED_RAND_GEN
static constexpr TempSummonType TEMPSUMMON_DEAD_DESPAWN
static constexpr TempSummonType TEMPSUMMON_MANUAL_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN
static constexpr TypeID TYPEID_PLAYER
static constexpr TypeID TYPEID_OBJECT
static constexpr TypeID TYPEID_CORPSE
static constexpr TempSummonType TEMPSUMMON_TIMED_OR_DEAD_DESPAWN
static constexpr TempSummonType TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT
static constexpr TypeID TYPEID_ITEM
static constexpr TypeID TYPEID_UNIT
static constexpr TypeID TYPEID_CONTAINER
static constexpr TempSummonType TEMPSUMMON_CORPSE_TIMED_DESPAWN
static constexpr TypeID TYPEID_DYNAMICOBJECT
static constexpr TypeID TYPEID_GAMEOBJECT
static constexpr TempSummonType TEMPSUMMON_CORPSE_DESPAWN
@ MAP_OBJECT_CELL_MOVE_ACTIVE
@ MAP_OBJECT_CELL_MOVE_NONE
@ NUM_CLIENT_OBJECT_TYPES
UNORDERED_MAP< Player *, UpdateData > UpdateDataMapType
@ TEMPSUMMON_MANUAL_DESPAWN
TypeID GuidHigh2TypeId(uint32 guid_hi)
ByteBuffer & operator>>(ByteBuffer &buf, Position::PositionXYZOStreamer const &streamer)
ByteBuffer & operator<<(ByteBuffer &buf, Position::PositionXYZStreamer const &streamer)
@ NOTIFY_VISIBILITY_CHANGED
uint32 GUID_LOPART(uint64 x)
uint32 GUID_ENPART(uint64 x)
uint32 GUID_HIPART(uint64 guid)
bool HasFlag(FLAG_TYPE flag) const
void AddFlag(FLAG_TYPE flag)
void DelFlag(FLAG_TYPE flag)
T_VALUES GetValue(FLAG_TYPE flag) const
T_VALUES m_values[ARRAY_SIZE]
void AddValue(FLAG_TYPE flag, T_VALUES value)
void SetValue(FLAG_TYPE flag, T_VALUES value)
GridReference< T > _gridRef
void AddToGrid(GridRefManager< T > &m)
void VisitGrid(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
void VisitAll(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
void VisitWorld(const float &x, const float &y, float radius, NOTIFIER ¬ifier)
void SetCurrentCell(Cell const &cell)
MapObjectCellMoveState _moveState
void SetNewCellPosition(float x, float y, float z, float o)
friend class ObjectGridLoader
Cell const & GetCurrentCell() const
void ApplyModSignedFloatValue(uint16 index, float val, bool apply)
void UpdateUInt32Value(uint16 index, uint32 value)
void ToggleFlag64(uint16 index, uint64 flag)
uint8 GetByteValue(uint16 index, uint8 offset) const
void SetByteValue(uint16 index, uint8 offset, uint8 value)
void BuildFieldsUpdate(Player *, UpdateDataMapType &) const
Player const * ToPlayer() const
ObjectGuid GetObjectGUID() const
int32 GetInt32Value(uint16 index) const
float GetObjectScale() const
void ApplyModFlag64(uint16 index, uint64 flag, bool apply)
void SetInt32Value(uint16 index, int32 value)
void SetInt16Value(uint16 index, uint8 offset, int16 value)
DynamicObject * ToDynObject()
void SetUInt16Value(uint16 index, uint8 offset, uint16 value)
uint32 GetUInt32Value(uint16 index) const
void _LoadIntoDataField(std::string const &data, uint32 startOffset, uint32 count)
uint16 GetUInt16Value(uint16 index, uint8 offset) const
virtual void DestroyForPlayer(Player *target, bool onDeath=false) const
uint32 GetGUIDLow() const
virtual void BuildValuesUpdate(uint8 updatetype, ByteBuffer *data, Player *target) const
void ApplyModInt32Value(uint16 index, int32 val, bool apply)
uint32 GetUpdateFieldData(Player const *target, uint32 *&flags) const
uint32 GetGUIDMid() const
std::vector< uint32 * > m_dynamicTab
void ApplyModPositiveFloatValue(uint16 index, float val, bool apply)
void RemoveFieldNotifyFlag(uint16 flag)
virtual bool hasQuest(uint32) const
void SendDestroyObject(Player *target, ObjectGuid Guid, bool onDeath=false) const
virtual void BuildCreateUpdateBlockForPlayer(UpdateData *data, Player *target) const
void _Create(uint32 guidlow, uint32 entry, HighGuid guidhigh)
bool RemoveUInt64Value(uint16 index, uint64 value)
bool isType(uint16 mask) const
void BuildMovementUpdate(ByteBuffer *data, uint16 flags) const
void SetFlag(uint16 index, uint32 newFlag)
void RemoveFlag(uint16 index, uint32 oldFlag)
void ApplyModUInt32Value(uint16 index, int32 val, bool apply)
Object & operator=(Object const &right)=delete
AreaTrigger * ToAreaTrigger()
float GetFloatValue(uint16 index) const
void ApplyModFlag(uint16 index, uint32 flag, bool apply)
void ClearUpdateMask(bool remove)
uint32 GetDynamicUInt32Value(uint32 tab, uint16 index) const
void BuildDynamicValuesUpdate(uint8 updateType, ByteBuffer *data, Player *target) const
uint16 m_fieldNotifyFlags
GameObject * ToGameObject()
GameObject const * ToGameObject() const
void SetFlag64(uint16 index, uint64 newFlag)
Corpse const * ToCorpse() const
const ByteBuffer & GetPackGUID() const
Unit const * ToUnit() const
uint64 GetUInt64Value(uint16 index) const
bool PrintIndexError(uint32 index, bool set) const
void BuildValuesUpdateBlockForPlayer(UpdateData *data, Player *target) const
void RemoveFlag64(uint16 index, uint64 oldFlag)
void SetFloatValue(uint16 index, float value)
virtual void BuildUpdate(UpdateDataMapType &)
void SetDynamicUInt32Value(uint32 tab, uint16 index, uint32 value)
void SetStatFloatValue(uint16 index, float value)
std::vector< bool * > m_dynamicChange
virtual void AddToWorld()
void RemoveByteFlag(uint16 index, uint8 offset, uint8 newFlag)
bool HasFlag(uint16 index, uint32 flag) const
std::string _ConcatFields(uint16 startIndex, uint16 size) const
virtual void RemoveFromWorld()
Creature const * ToCreature() const
AreaTrigger const * ToAreaTrigger() const
uint32 GetGUIDHigh() const
void BuildOutOfRangeUpdateBlock(UpdateData *data) const
void SetEntry(uint32 entry)
bool HasByteFlag(uint16 index, uint8 offset, uint8 flag) const
virtual void SetObjectScale(float scale)
virtual bool hasInvolvedQuest(uint32) const
void SetFieldNotifyFlag(uint16 flag)
void SendUpdateToPlayer(Player *player)
void SetUInt32Value(uint16 index, uint32 value)
uint16 GetValuesCount() const
void ToggleFlag(uint16 index, uint32 flag)
Object(Object const &right)=delete
bool HasFlag64(uint16 index, uint64 flag) const
void ApplyPercentModFloatValue(uint16 index, float val, bool apply)
void SetStatInt32Value(uint16 index, int32 value)
DynamicObject const * ToDynObject() const
void SetUInt64Value(uint16 index, uint64 value)
void ToggleByteFlag(uint16 index, uint8 offset, uint8 flag)
void ForceValuesUpdateAtIndex(uint32)
bool AddUInt64Value(uint16 index, uint64 value)
void SetByteFlag(uint16 index, uint8 offset, uint8 newFlag)
WorldObject const * m_refObj
ObjectDistanceOrderPred(WorldObject const *pRefObj, bool ascending=true)
bool operator()(WorldObject const *pLeft, WorldObject const *pRight) const
WorldLocation(uint32 _mapid=MAPID_INVALID, float _x=0, float _y=0, float _z=0, float _o=0)
void WorldRelocate(const WorldLocation &loc)
WorldLocation(const WorldLocation &loc)
bool isInFront(WorldObject const *target, float arc=M_PI) const
bool NotifyExecuted(uint16 f) const
int8 GetTransSeat() const
bool IsPhased(WorldObject const *obj) const
virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self)
virtual void SetPhaseMask(uint32 newPhaseMask, bool update)
void _Create(uint32 guidlow, HighGuid guidhigh, uint32 phaseMask)
uint32 GetPhaseMask() const
bool IsInRange3d(float x, float y, float z, float minRange, float maxRange) const
bool IsWithinDist2d(float x, float y, float dist) const
bool IsWithinDist3d(float x, float y, float z, float dist) const
bool CanDetectStealthOf(WorldObject const *obj) const
InstanceScript * GetInstanceScript()
virtual void RemoveFromWorld()
std::set< uint32 > const & GetTerrainSwaps() const
bool IsWorldObject() const
std::set< uint32 > _worldMapSwaps
virtual float GetStationaryO() const
uint16 m_executed_notifies
bool isNeedNotify(uint16 f) const
bool IsWithinDistInMap(WorldObject const *obj, float dist2compare, bool is3D=true) const
void SetLocationInstanceId(uint32 _instanceId)
bool IsWithinLOSInMap(WorldObject const *obj) const
bool IsInRange2d(float x, float y, float minRange, float maxRange) const
Creature * SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI *(*GetAI)(Creature *)=NULL)
virtual bool IsNeverVisible() const
virtual bool IsInvisibleDueToDespawn() const
void GetGameObjectListWithEntryInGrid(std::list< GameObject * > &lList, uint32 uiEntry, float fMaxSearchRange) const
virtual bool IsAlwaysDetectableFor(WorldObject const *) const
bool HasPhaseList(uint32 phase)
float GetGridActivationRange() const
GameObject * FindNearestGameObjectOfType(GameobjectTypes type, float range) const
std::set< uint32 > const & GetPhases() const
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibility
GameObject * FindNearestGameObject(uint32 entry, float range) const
void SetWorldObject(bool apply)
void RebuildWorldMapAreaSwaps()
void SendObjectDeSpawnAnim(uint64 guid)
void SetTransport(Transport *t)
void RebuildTerrainSwaps()
virtual bool SetPhased(uint32 id, bool update, bool apply)
float GetTransOffsetX() const
void MovePositionToFirstCollision(Position &pos, float dist, float angle)
FlaggedValuesArray32< int32, uint32, InvisibilityType, TOTAL_INVISIBILITY_TYPES > m_invisibilityDetect
void SetLocationMapId(uint32 _mapId)
void GetNearPoint2D(float &x, float &y, float distance, float absAngle) const
ZoneScript * GetZoneScript() const
bool IsPermanentWorldObject() const
void SetNotified(uint16 f)
void SetName(std::string const &newname)
bool isActiveObject() const
bool IsSelfOrInSameMap(WorldObject const *obj) const
bool GetDistanceOrder(WorldObject const *obj1, WorldObject const *obj2, bool is3D=true) const
uint32 GetInstanceId() const
void GetRandomNearPosition(Position &pos, float radius)
uint16 GetNotifyFlags() const
void setActive(bool isActiveObject)
float GetDistance2d(WorldObject const *obj) const
ZoneScript * m_zoneScript
float GetTransOffsetY() const
bool InSamePhase(uint32 phasemask) const
void GetPlayerListInGrid(std::list< Player * > &lList, float fMaxSearchRange) const
std::string const & GetName() const
virtual void SetMap(Map *map)
void SendPlaySound(uint32 Sound, bool OnlySelf)
virtual float GetStationaryX() const
float GetTransOffsetZ() const
virtual bool IsAlwaysVisibleFor(WorldObject const *) const
void BuildUpdate(UpdateDataMapType &)
void GetFirstCollisionPosition(Position &pos, float dist, float angle)
void VisitNearbyObject(float const &radius, NOTIFIER ¬ifier) const
void AddObjectToRemoveList()
virtual std::string const & GetNameForLocaleIdx(LocaleConstant) const
std::set< uint32 > const & GetWorldMapSwaps() const
std::set< uint32 > _terrainSwaps
void VisitNearbyGridObject(float const &radius, NOTIFIER ¬ifier) const
void GetNearPoint(WorldObject const *searcher, float &x, float &y, float &z, float searcher_size, float distance2d, float absAngle) const
bool InSamePhase(WorldObject const *obj) const
WorldObject(bool isWorldObject)
float GetSightRange(WorldObject const *target=NULL) const
void GetContactPoint(WorldObject const *obj, float &x, float &y, float &z, float distance2d=CONTACT_DISTANCE) const
bool CanDetectInvisibilityOf(WorldObject const *obj) const
uint32 GetTransTime() const
bool IsWithinLOS(float x, float y, float z) const
void DestroyForNearbyPlayers()
Transport * GetTransport() const
void UpdateAllowedPositionZ(float x, float y, float &z) const
void GetCreatureListWithEntryInGrid(std::list< Creature * > &lList, uint32 uiEntry, float fMaxSearchRange) const
void MonsterWhisper(const char *text, Player const *target, bool IsBossWhisper=false)
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealthDetect
virtual bool _IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D) const
void MonsterSay(const char *text, Language language, WorldObject const *target)
Creature * FindNearestCreature(uint32 entry, float range, bool alive=true) const
void UpdateGroundPositionZ(float x, float y, float &z) const
void MonsterTextEmote(const char *text, WorldObject const *target, bool IsBossEmote=false)
void ClearPhases(bool update=false)
const bool m_isWorldObject
bool isInBack(WorldObject const *target, float arc=M_PI) const
void VisitNearbyWorldObject(float const &radius, NOTIFIER ¬ifier) const
void AddToNotify(uint16 f)
Map const * GetBaseMap() const
GameObject * SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime)
bool IsInRange(WorldObject const *obj, float minRange, float maxRange, bool is3D=true) const
void GetClosePoint(float &x, float &y, float &z, float size, float distance2d=0, float angle=0) const
void PlayDistanceSound(uint32 sound_id, Player *target)
float GetVisibilityRange() const
void MonsterYell(const char *text, Language language, WorldObject const *target)
FlaggedValuesArray32< int32, uint32, StealthType, TOTAL_STEALTH_TYPES > m_stealth
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibilityDetect
bool IsPhased(uint32 phase) const
float GetDistance(WorldObject const *obj) const
bool IsInBetween(WorldObject const *obj1, WorldObject const *obj2, float size=0) const
bool IsTerrainSwaped(uint32 terrainSwap) const
float GetTransOffsetO() const
void GetNearPosition(Position &pos, float dist, float angle)
bool CanNeverSee(WorldObject const *obj) const
void SummonCreatureGroup(uint8 group, std::list< TempSummon * > *list=NULL)
bool IsWithinDist(WorldObject const *obj, float dist2compare, bool is3D=true) const
MovementInfo m_movementInfo
virtual void SendMessageToSet(WorldPacket *data, bool self)
FlaggedValuesArray32< int32, uint32, ServerSideVisibilityType, TOTAL_SERVERSIDE_VISIBILITY_TYPES > m_serverSideVisibility
float GetDistanceZ(WorldObject const *obj) const
void GetZoneAndAreaId(uint32 &zoneid, uint32 &areaid) const
float GetObjectSize() const
virtual void Update(uint32)
virtual float GetStationaryY() const
void PlayDirectSound(uint32 sound_id, Player *target=NULL)
TempSummon * SummonCreature(uint32 id, Position const &pos, TempSummonType spwtype=TempSummonType::TEMPSUMMON_MANUAL_DESPAWN, uint32 despwtime=0, uint32 vehId=0) const
bool CanDetect(WorldObject const *obj, bool ignoreStealth) const
std::set< uint32 > _phases
bool CanSeeOrDetect(WorldObject const *obj, bool ignoreStealth=false, bool distanceCheck=false) const
virtual float GetStationaryZ() const
virtual bool CanAlwaysSee(WorldObject const *) const
bool IsInMap(WorldObject const *obj) const
virtual uint64 GetTransGUID() const
virtual uint8 getLevelForTarget(WorldObject const *) const
void GetRandomPoint(Position const &srcPos, float distance, float &rand_x, float &rand_y, float &rand_z) const
virtual void SaveRespawnTime()
virtual void UpdateObjectVisibility(bool forced=true)
virtual void CleanupsBeforeDelete(bool finalCleanup=true)
void SetExtraMovementFlags(uint16 flag)
uint16 GetExtraMovementFlags() const
struct MovementInfo::JumpInfo jump
void RemoveMovementFlag(uint32 flag)
struct MovementInfo::TransportInfo transport
void SetMovementFlags(uint32 flag)
bool HasMovementFlag(uint32 flag) const
void RemoveExtraMovementFlag(uint16 flag)
uint32 GetMovementFlags() const
void AddMovementFlag(uint32 flag)
void SetFallTime(uint32 time)
bool HasExtraMovementFlag(uint16 flag) const
void AddExtraMovementFlag(uint16 flag)
PositionXYZOStreamer(Position &pos)
PositionXYZStreamer(Position &pos)
void GetPosition(Position *pos) const
float GetAngle(Position const *pos) const
void Relocate(Position const *pos)
float GetExactDist2dSq(float x, float y) const
float GetExactDist2d(const float x, const float y) const
float GetRelativeAngle(float x, float y) const
std::string ToString() const
float GetExactDist(float x, float y, float z) const
void Relocate(float x, float y, float z)
static float NormalizeOrientation(float o)
float GetPositionZ() const
void Relocate(float x, float y, float z, float orientation)
bool operator==(Position const &a)
bool IsInDist(Position const *pos, float dist) const
bool IsInDist2d(float x, float y, float dist) const
float GetOrientation() const
float GetExactDist(Position const *pos) const
bool IsInDist(float x, float y, float z, float dist) const
bool HasInArc(float arcangle, Position const *pos, float border=2.0f) const
void GetPosition(float &x, float &y, float &z) const
float GetExactDist2dSq(Position const *pos) const
Position::PositionXYZStreamer PositionXYZStream()
bool IsPositionValid() const
void GetPosition(float &x, float &y, float &z, float &o) const
void GetSinCos(float x, float y, float &vsin, float &vcos) const
bool operator!=(Position const &a)
void SetOrientation(float orientation)
float GetRelativeAngle(Position const *pos) const
float GetExactDistSq(Position const *pos) const
float GetExactDist2d(Position const *pos) const
bool HasInLine(WorldObject const *target, float width) const
void Relocate(Position const &pos)
Position::PositionXYZOStreamer PositionXYZOStream()
bool IsInDist2d(Position const *pos, float dist) const
float GetPositionX() const
void GetPosition(float &x, float &y) const
void GetPositionOffsetTo(Position const &endPos, Position &retOffset) const
float GetPositionY() const
float GetExactDistSq(float x, float y, float z) const
void RelocateOffset(Position const &offset)
void Relocate(float x, float y)
Position const MovePosition