diff options
Diffstat (limited to 'src/game/Object.h')
-rw-r--r-- | src/game/Object.h | 66 |
1 files changed, 50 insertions, 16 deletions
diff --git a/src/game/Object.h b/src/game/Object.h index 328df30492a..68438c4df85 100644 --- a/src/game/Object.h +++ b/src/game/Object.h @@ -28,7 +28,6 @@ #include "GameSystem/GridReference.h" #include "ObjectDefines.h" #include "GridDefines.h" -#include "CreatureAI.h" #include "Map.h" #include <set> @@ -50,13 +49,14 @@ enum TypeMask TYPEMASK_OBJECT = 0x0001, TYPEMASK_ITEM = 0x0002, TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004 - TYPEMASK_UNIT = 0x0008, + TYPEMASK_UNIT = 0x0008, //creature or player TYPEMASK_PLAYER = 0x0010, TYPEMASK_GAMEOBJECT = 0x0020, TYPEMASK_DYNAMICOBJECT = 0x0040, TYPEMASK_CORPSE = 0x0080, TYPEMASK_AIGROUP = 0x0100, - TYPEMASK_AREATRIGGER = 0x0200 + TYPEMASK_AREATRIGGER = 0x0200, + TYPEMASK_SEER = TYPEMASK_UNIT | TYPEMASK_DYNAMICOBJECT }; enum TypeID @@ -72,6 +72,7 @@ enum TypeID TYPEID_AIGROUP = 8, TYPEID_AREATRIGGER = 9 }; +#define MAX_TYPEID 10 uint32 GuidHigh2TypeId(uint32 guid_hi); @@ -87,6 +88,12 @@ enum TempSummonType TEMPSUMMON_MANUAL_DESPAWN = 8 // despawns when UnSummon() is called }; +enum PhaseMasks +{ + PHASEMASK_NORMAL = 0x00000001, + PHASEMASK_ANYWHERE = 0xFFFFFFFF +}; + class WorldPacket; class UpdateData; class ByteBuffer; @@ -96,6 +103,9 @@ class Player; class UpdateMask; class InstanceData; class GameObject; +class TempSummon; +class Vehicle; +class CreatureAI; typedef UNORDERED_MAP<Player*, UpdateData> UpdateDataMapType; @@ -117,7 +127,7 @@ class TRINITY_DLL_SPEC Object public: virtual ~Object ( ); - const bool& IsInWorld() const { return m_inWorld; } + const bool IsInWorld() const { return m_inWorld; } virtual void AddToWorld() { if(m_inWorld) @@ -193,7 +203,7 @@ class TRINITY_DLL_SPEC Object return *(((uint8*)&m_uint32Values[ index ])+offset); } - uint8 GetUInt16Value( uint16 index, uint8 offset) const + uint16 GetUInt16Value( uint16 index, uint8 offset) const { ASSERT( index < m_valuesCount || PrintIndexError( index , false) ); ASSERT( offset < 2 ); @@ -210,6 +220,9 @@ class TRINITY_DLL_SPEC Object void SetStatFloatValue( uint16 index, float value); void SetStatInt32Value( uint16 index, int32 value); + bool AddUInt64Value( uint16 index, const uint64 &value ); + bool RemoveUInt64Value( uint16 index, const uint64 &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); @@ -318,7 +331,7 @@ class TRINITY_DLL_SPEC Object virtual void _SetUpdateBits(UpdateMask *updateMask, Player *target) const; virtual void _SetCreateBits(UpdateMask *updateMask, Player *target) const; - void _BuildMovementUpdate(ByteBuffer * data, uint8 flags, uint32 flags2 ) const; + void _BuildMovementUpdate(ByteBuffer * data, uint8 flags) const; void _BuildValuesUpdate(uint8 updatetype, ByteBuffer *data, UpdateMask *updateMask, Player *target ) const; uint16 m_objectType; @@ -357,7 +370,15 @@ class TRINITY_DLL_SPEC WorldObject : public Object virtual void Update ( uint32 /*time_diff*/ ) { } - void _Create( uint32 guidlow, HighGuid guidhigh, uint32 mapid ); + void _Create( uint32 guidlow, HighGuid guidhigh, uint32 mapid, uint32 phaseMask); + + void Relocate(WorldObject *obj) + { + m_positionX = obj->GetPositionX(); + m_positionY = obj->GetPositionY(); + m_positionZ = obj->GetPositionZ(); + m_orientation = obj->GetOrientation(); + } void Relocate(float x, float y, float z, float orientation) { @@ -423,8 +444,14 @@ class TRINITY_DLL_SPEC WorldObject : public Object void SetInstanceId(uint32 val) { m_InstanceId = val; m_map = NULL; } uint32 GetInstanceId() const { return m_InstanceId; } + virtual void SetPhaseMask(uint32 newPhaseMask, bool update); + uint32 GetPhaseMask() const { return m_phaseMask; } + bool InSamePhase(WorldObject const* obj) const { return InSamePhase(obj->GetPhaseMask()); } + bool InSamePhase(uint32 phasemask) const { return (GetPhaseMask() & phasemask); } + uint32 GetZoneId() const; uint32 GetAreaId() const; + void GetZoneAndAreaId(uint32& zoneid, uint32& areaid) const; InstanceData* GetInstanceData(); @@ -440,21 +467,24 @@ class TRINITY_DLL_SPEC WorldObject : public Object float GetDistance2d(const float x, const float y) const; float GetExactDistance2d(const float x, const float y) const; float GetDistanceZ(const WorldObject* obj) const; - bool IsInMap(const WorldObject* obj) const { return GetMapId()==obj->GetMapId() && GetInstanceId()==obj->GetInstanceId(); } + bool IsInMap(const WorldObject* obj) const + { + return IsInWorld() && obj->IsInWorld() && GetMapId()==obj->GetMapId() && + GetInstanceId()==obj->GetInstanceId() && InSamePhase(obj); + } bool IsWithinDistInMap(const WorldObject* obj, const float dist2compare, const bool is3D = true) const; bool IsWithinLOS(const float x, const float y, const float z ) const; bool IsWithinLOSInMap(const WorldObject* obj) const; float GetAngle( const WorldObject* obj ) const; float GetAngle( const float x, const float y ) const; + void GetSinCos(const float x, const float y, float &vsin, float &vcos); bool HasInArc( const float arcangle, const WorldObject* obj ) const; virtual void SendMessageToSet(WorldPacket *data, bool self, bool to_possessor = true); virtual void SendMessageToSetInRange(WorldPacket *data, float dist, bool self, bool to_possessor = true); void BuildHeartBeatMsg( WorldPacket *data ) const; void BuildTeleportAckMsg( WorldPacket *data, float x, float y, float z, float ang) const; - bool IsBeingTeleported() { return mSemaphoreTeleport; } - void SetSemaphoreTeleport(bool semphsetting) { mSemaphoreTeleport = semphsetting; } void MonsterSay(const char* text, uint32 language, uint64 TargetGuid); void MonsterYell(const char* text, uint32 language, uint64 TargetGuid); @@ -464,8 +494,12 @@ class TRINITY_DLL_SPEC WorldObject : public Object void MonsterYell(int32 textId, uint32 language, uint64 TargetGuid); void MonsterTextEmote(int32 textId, uint64 TargetGuid, bool IsBossEmote = false); void MonsterWhisper(int32 textId, uint64 receiver, bool IsBossWhisper = false); + void MonsterYellToZone(int32 textId, uint32 language, uint64 TargetGuid); void BuildMonsterChat(WorldPacket *data, uint8 msgtype, char const* text, uint32 language, char const* name, uint64 TargetGuid) const; + void PlayDistanceSound(uint32 sound_id, Player* target = NULL); + void PlayDirectSound(uint32 sound_id, Player* target = NULL); + void SendObjectDeSpawnAnim(uint64 guid); virtual void SaveRespawnTime() {} @@ -484,9 +518,10 @@ class TRINITY_DLL_SPEC WorldObject : public Object Map * GetMap() const { return m_map ? m_map : const_cast<WorldObject*>(this)->_getMap(); } Map * FindMap() const { return m_map ? m_map : const_cast<WorldObject*>(this)->_findMap(); } Map const* GetBaseMap() const; - Creature* SummonCreature(uint32 id, float x, float y, float z, float ang,TempSummonType spwtype,uint32 despwtime); + TempSummon* SummonCreature(uint32 id, float x, float y, float z, float ang = 0,TempSummonType spwtype = TEMPSUMMON_MANUAL_DESPAWN,uint32 despwtime = 0); + Vehicle* SummonVehicle(uint32 entry, float x, float y, float z, float ang = 0); GameObject* SummonGameObject(uint32 entry, float x, float y, float z, float ang, float rotation0, float rotation1, float rotation2, float rotation3, uint32 respawnTime); - Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); + Creature* SummonTrigger(float x, float y, float z, float ang, uint32 dur, CreatureAI* (*GetAI)(Creature*) = NULL); bool isActiveObject() const { return m_isActive; } void setActive(bool isActiveObject); void SetWorldObject(bool apply); @@ -501,8 +536,9 @@ class TRINITY_DLL_SPEC WorldObject : public Object bool m_isActive; private: - uint32 m_mapId; - uint32 m_InstanceId; + uint32 m_mapId; // object at map with map_id + uint32 m_InstanceId; // in map copy with instance id + uint32 m_phaseMask; // in area phase state Map *m_map; Map* _getMap(); @@ -512,8 +548,6 @@ class TRINITY_DLL_SPEC WorldObject : public Object float m_positionY; float m_positionZ; float m_orientation; - - bool mSemaphoreTeleport; }; #endif |