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  | 
