mirror of
https://github.com/mangosfour/server.git
synced 2025-12-13 22:37:03 +00:00
[9547] Implement ObjectGuid wrapper for guid value
Only one example (mostly) case converted to use it. Need lot work for finally switch to class obly use, so old low-level defines still exist also (while used). But some unused low-level defines dropped.
This commit is contained in:
parent
c5fc08934d
commit
93ad67fc9d
10 changed files with 139 additions and 60 deletions
|
|
@ -899,10 +899,10 @@ bool ChatHandler::ExecuteCommandInTable(ChatCommand *table, const char* text, co
|
||||||
if (m_session)
|
if (m_session)
|
||||||
{
|
{
|
||||||
Player* p = m_session->GetPlayer();
|
Player* p = m_session->GetPlayer();
|
||||||
uint64 sel_guid = p->GetSelection();
|
ObjectGuid sel_guid = p->GetSelection();
|
||||||
sLog.outCommand(GetAccountId(),"Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s (GUID: %u)]",
|
sLog.outCommand(GetAccountId(),"Command: %s [Player: %s (Account: %u) X: %f Y: %f Z: %f Map: %u Selected: %s]",
|
||||||
fullcmd.c_str(),p->GetName(),GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
|
fullcmd.c_str(),p->GetName(),GetAccountId(),p->GetPositionX(),p->GetPositionY(),p->GetPositionZ(),p->GetMapId(),
|
||||||
GetLogNameForGuid(sel_guid),GUID_LOPART(sel_guid));
|
sel_guid.GetString().c_str());
|
||||||
}
|
}
|
||||||
else // 0 account -> console
|
else // 0 account -> console
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -26,19 +26,19 @@
|
||||||
|
|
||||||
void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data )
|
void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data )
|
||||||
{
|
{
|
||||||
uint64 guid;
|
ObjectGuid guid;
|
||||||
recv_data >> guid;
|
recv_data >> guid;
|
||||||
|
|
||||||
DEBUG_LOG( "WORLD: Recvd CMSG_ATTACKSWING Message guidlow:%u guidhigh:%u", GUID_LOPART(guid), GUID_HIPART(guid) );
|
DEBUG_LOG("WORLD: Recvd CMSG_ATTACKSWING Message %s", guid.GetString().c_str());
|
||||||
|
|
||||||
Unit *pEnemy = ObjectAccessor::GetUnit(*_player, guid);
|
Unit *pEnemy = ObjectAccessor::GetUnit(*_player, guid.GetRawValue());
|
||||||
|
|
||||||
if(!pEnemy)
|
if(!pEnemy)
|
||||||
{
|
{
|
||||||
if(!IS_UNIT_GUID(guid))
|
if(!guid.IsUnit())
|
||||||
sLog.outError("WORLD: Object %u (TypeID: %u) isn't player, pet or creature",GUID_LOPART(guid),GuidHigh2TypeId(GUID_HIPART(guid)));
|
sLog.outError("WORLD: %u isn't player, pet or creature", guid.GetString().c_str());
|
||||||
else
|
else
|
||||||
sLog.outError( "WORLD: Enemy %s %u not found",GetLogNameForGuid(guid),GUID_LOPART(guid));
|
sLog.outError( "WORLD: Enemy %s not found", guid.GetString().c_str());
|
||||||
|
|
||||||
// stop attack state at client
|
// stop attack state at client
|
||||||
SendAttackStop(NULL);
|
SendAttackStop(NULL);
|
||||||
|
|
@ -47,7 +47,7 @@ void WorldSession::HandleAttackSwingOpcode( WorldPacket & recv_data )
|
||||||
|
|
||||||
if(_player->IsFriendlyTo(pEnemy) || pEnemy->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))
|
if(_player->IsFriendlyTo(pEnemy) || pEnemy->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE))
|
||||||
{
|
{
|
||||||
sLog.outError( "WORLD: Enemy %s %u is friendly",(IS_PLAYER_GUID(guid) ? "player" : "creature"),GUID_LOPART(guid));
|
sLog.outError( "WORLD: Enemy %s is friendly",guid.GetString().c_str());
|
||||||
|
|
||||||
// stop attack state at client
|
// stop attack state at client
|
||||||
SendAttackStop(pEnemy);
|
SendAttackStop(pEnemy);
|
||||||
|
|
|
||||||
|
|
@ -194,6 +194,7 @@ libmangosgame_a_SOURCES = \
|
||||||
ObjectAccessor.cpp \
|
ObjectAccessor.cpp \
|
||||||
ObjectAccessor.h \
|
ObjectAccessor.h \
|
||||||
Object.cpp \
|
Object.cpp \
|
||||||
|
ObjectGuid.cpp \
|
||||||
ObjectGuid.h \
|
ObjectGuid.h \
|
||||||
ObjectGridLoader.cpp \
|
ObjectGridLoader.cpp \
|
||||||
ObjectGridLoader.h \
|
ObjectGridLoader.h \
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ uint32 GuidHigh2TypeId(uint32 guid_hi)
|
||||||
case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
|
case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
|
||||||
case HIGHGUID_VEHICLE: return TYPEID_UNIT;
|
case HIGHGUID_VEHICLE: return TYPEID_UNIT;
|
||||||
}
|
}
|
||||||
return NUM_CLIENT_OBJECT_TYPES; // unknown
|
return TYPEID_OBJECT; // unknown
|
||||||
}
|
}
|
||||||
|
|
||||||
Object::Object( ) : m_PackGUID(sizeof(uint64)+1)
|
Object::Object( ) : m_PackGUID(sizeof(uint64)+1)
|
||||||
|
|
|
||||||
|
|
@ -40,32 +40,6 @@
|
||||||
#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f // player size, also currently used (correctly?) for any non Unit world objects
|
#define DEFAULT_WORLD_OBJECT_SIZE 0.388999998569489f // player size, also currently used (correctly?) for any non Unit world objects
|
||||||
#define MAX_STEALTH_DETECT_RANGE 45.0f
|
#define MAX_STEALTH_DETECT_RANGE 45.0f
|
||||||
|
|
||||||
enum TypeMask
|
|
||||||
{
|
|
||||||
TYPEMASK_OBJECT = 0x0001,
|
|
||||||
TYPEMASK_ITEM = 0x0002,
|
|
||||||
TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004
|
|
||||||
TYPEMASK_UNIT = 0x0008,
|
|
||||||
TYPEMASK_PLAYER = 0x0010,
|
|
||||||
TYPEMASK_GAMEOBJECT = 0x0020,
|
|
||||||
TYPEMASK_DYNAMICOBJECT = 0x0040,
|
|
||||||
TYPEMASK_CORPSE = 0x0080
|
|
||||||
};
|
|
||||||
|
|
||||||
enum TypeID
|
|
||||||
{
|
|
||||||
TYPEID_OBJECT = 0,
|
|
||||||
TYPEID_ITEM = 1,
|
|
||||||
TYPEID_CONTAINER = 2,
|
|
||||||
TYPEID_UNIT = 3,
|
|
||||||
TYPEID_PLAYER = 4,
|
|
||||||
TYPEID_GAMEOBJECT = 5,
|
|
||||||
TYPEID_DYNAMICOBJECT = 6,
|
|
||||||
TYPEID_CORPSE = 7
|
|
||||||
};
|
|
||||||
|
|
||||||
#define NUM_CLIENT_OBJECT_TYPES 8
|
|
||||||
|
|
||||||
uint32 GuidHigh2TypeId(uint32 guid_hi);
|
uint32 GuidHigh2TypeId(uint32 guid_hi);
|
||||||
|
|
||||||
enum TempSummonType
|
enum TempSummonType
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,35 @@
|
||||||
#ifndef MANGOS_OBJECT_GUID_H
|
#ifndef MANGOS_OBJECT_GUID_H
|
||||||
#define MANGOS_OBJECT_GUID_H
|
#define MANGOS_OBJECT_GUID_H
|
||||||
|
|
||||||
#include "Platform/Define.h"
|
#include "Common.h"
|
||||||
|
|
||||||
|
class ByteBuffer;
|
||||||
|
|
||||||
|
enum TypeID
|
||||||
|
{
|
||||||
|
TYPEID_OBJECT = 0,
|
||||||
|
TYPEID_ITEM = 1,
|
||||||
|
TYPEID_CONTAINER = 2,
|
||||||
|
TYPEID_UNIT = 3,
|
||||||
|
TYPEID_PLAYER = 4,
|
||||||
|
TYPEID_GAMEOBJECT = 5,
|
||||||
|
TYPEID_DYNAMICOBJECT = 6,
|
||||||
|
TYPEID_CORPSE = 7
|
||||||
|
};
|
||||||
|
|
||||||
|
#define MAX_TYPE_ID 8
|
||||||
|
|
||||||
|
enum TypeMask
|
||||||
|
{
|
||||||
|
TYPEMASK_OBJECT = 0x0001,
|
||||||
|
TYPEMASK_ITEM = 0x0002,
|
||||||
|
TYPEMASK_CONTAINER = 0x0006, // TYPEMASK_ITEM | 0x0004
|
||||||
|
TYPEMASK_UNIT = 0x0008,
|
||||||
|
TYPEMASK_PLAYER = 0x0010,
|
||||||
|
TYPEMASK_GAMEOBJECT = 0x0020,
|
||||||
|
TYPEMASK_DYNAMICOBJECT = 0x0040,
|
||||||
|
TYPEMASK_CORPSE = 0x0080
|
||||||
|
};
|
||||||
|
|
||||||
enum HighGuid
|
enum HighGuid
|
||||||
{
|
{
|
||||||
|
|
@ -36,8 +64,7 @@ enum HighGuid
|
||||||
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
|
HIGHGUID_MO_TRANSPORT = 0x1FC0, // blizz 1FC0 (for GAMEOBJECT_TYPE_MO_TRANSPORT)
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IS_EMPTY_GUID(Guid) ( Guid == 0 )
|
//*** Must be replaced by ObjectGuid use ***
|
||||||
|
|
||||||
#define IS_CREATURE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_UNIT )
|
#define IS_CREATURE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_UNIT )
|
||||||
#define IS_PET_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PET )
|
#define IS_PET_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_PET )
|
||||||
#define IS_VEHICLE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_VEHICLE )
|
#define IS_VEHICLE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_VEHICLE )
|
||||||
|
|
@ -47,9 +74,7 @@ enum HighGuid
|
||||||
// special case for empty guid need check
|
// special case for empty guid need check
|
||||||
#define IS_ITEM_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_ITEM )
|
#define IS_ITEM_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_ITEM )
|
||||||
#define IS_GAMEOBJECT_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT )
|
#define IS_GAMEOBJECT_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_GAMEOBJECT )
|
||||||
#define IS_DYNAMICOBJECT_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_DYNAMICOBJECT )
|
|
||||||
#define IS_CORPSE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_CORPSE )
|
#define IS_CORPSE_GUID(Guid) ( GUID_HIPART(Guid) == HIGHGUID_CORPSE )
|
||||||
#define IS_TRANSPORT(Guid) ( GUID_HIPART(Guid) == HIGHGUID_TRANSPORT )
|
|
||||||
#define IS_MO_TRANSPORT(Guid) ( GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT )
|
#define IS_MO_TRANSPORT(Guid) ( GUID_HIPART(Guid) == HIGHGUID_MO_TRANSPORT )
|
||||||
|
|
||||||
// l - OBJECT_FIELD_GUID
|
// l - OBJECT_FIELD_GUID
|
||||||
|
|
@ -88,22 +113,92 @@ inline bool IsGuidHaveEnPart(uint64 const& guid)
|
||||||
#define GUID_ENPART(x) (IsGuidHaveEnPart(x) ? _GUID_ENPART_3(x) : _GUID_ENPART_2(x))
|
#define GUID_ENPART(x) (IsGuidHaveEnPart(x) ? _GUID_ENPART_3(x) : _GUID_ENPART_2(x))
|
||||||
#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x))
|
#define GUID_LOPART(x) (IsGuidHaveEnPart(x) ? _GUID_LOPART_3(x) : _GUID_LOPART_2(x))
|
||||||
|
|
||||||
inline char const* GetLogNameForGuid(uint64 guid)
|
//*** Must be replaced by ObjectGuid use END ***
|
||||||
|
|
||||||
|
class ObjectGuid
|
||||||
{
|
{
|
||||||
switch(GUID_HIPART(guid))
|
public: // constructors
|
||||||
{
|
ObjectGuid() : m_guid(0) {}
|
||||||
case HIGHGUID_ITEM: return "item";
|
ObjectGuid(uint64 const& guid) : m_guid(guid) {} // NOTE: must be explicit in future for more strict control type conversions
|
||||||
case HIGHGUID_PLAYER: return guid ? "player" : "none";
|
ObjectGuid(HighGuid hi, uint32 entry, uint32 counter) : m_guid(uint64(counter) | (uint64(entry) << 24) | (uint64(hi) << 48)) {}
|
||||||
case HIGHGUID_GAMEOBJECT: return "gameobject";
|
|
||||||
case HIGHGUID_TRANSPORT: return "transport";
|
public: // modifiers
|
||||||
case HIGHGUID_UNIT: return "creature";
|
void Set(uint64 const& guid) { m_guid = guid; }
|
||||||
case HIGHGUID_PET: return "pet";
|
|
||||||
case HIGHGUID_VEHICLE: return "vehicle";
|
// Possible removed in future for more strict control type conversions
|
||||||
case HIGHGUID_DYNAMICOBJECT:return "dynobject";
|
void operator= (uint64 const& guid) { m_guid = guid; }
|
||||||
case HIGHGUID_CORPSE: return "corpse";
|
public: // accessors
|
||||||
case HIGHGUID_MO_TRANSPORT: return "mo_transport";
|
uint64 const& GetRawValue() const { return m_guid; }
|
||||||
default:
|
HighGuid GetHigh() const { return HighGuid((m_guid >> 48) & 0x0000FFFF); }
|
||||||
return "<unknown>";
|
uint32 GetEntry() const { return HasEntry() ? uint32((m_guid >> 24) & UI64LIT(0x0000000000FFFFFF)) : 0; }
|
||||||
}
|
uint32 GetCounter() const
|
||||||
}
|
{
|
||||||
|
return HasEntry()
|
||||||
|
? uint32(m_guid & UI64LIT(0x0000000000FFFFFF))
|
||||||
|
: uint32(m_guid & UI64LIT(0x00000000FFFFFFFF));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsEmpty() const { return m_guid == 0; }
|
||||||
|
bool IsCreature() const { return GetHigh() == HIGHGUID_UNIT; }
|
||||||
|
bool IsPet() const { return GetHigh() == HIGHGUID_PET; }
|
||||||
|
bool IsVehicle() const { return GetHigh() == HIGHGUID_VEHICLE; }
|
||||||
|
bool IsCreatureOrPet() const { return GetHigh() == HIGHGUID_VEHICLE; }
|
||||||
|
bool IsPlayer() const { return !IsEmpty() && GetHigh() == HIGHGUID_PLAYER; }
|
||||||
|
bool IsUnit() const { return IsCreatureOrPet() || IsPlayer(); }
|
||||||
|
bool IsItem() const { return GetHigh() == HIGHGUID_ITEM; }
|
||||||
|
bool IsGameobject() const { return GetHigh() == HIGHGUID_GAMEOBJECT; }
|
||||||
|
bool IsDynamicObject() const { return GetHigh() == HIGHGUID_DYNAMICOBJECT; }
|
||||||
|
bool IsCorpse() const { return GetHigh() == HIGHGUID_CORPSE; }
|
||||||
|
bool IsTransport() const { return GetHigh() == HIGHGUID_TRANSPORT; }
|
||||||
|
bool IsMOTransport() const { return GetHigh() == HIGHGUID_MO_TRANSPORT; }
|
||||||
|
|
||||||
|
TypeID GetTypeId()
|
||||||
|
{
|
||||||
|
switch(GetHigh())
|
||||||
|
{
|
||||||
|
case HIGHGUID_ITEM: return TYPEID_ITEM;
|
||||||
|
//case HIGHGUID_CONTAINER: return TYPEID_CONTAINER; HIGHGUID_CONTAINER==HIGHGUID_ITEM currently
|
||||||
|
case HIGHGUID_UNIT: return TYPEID_UNIT;
|
||||||
|
case HIGHGUID_PET: return TYPEID_UNIT;
|
||||||
|
case HIGHGUID_PLAYER: return TYPEID_PLAYER;
|
||||||
|
case HIGHGUID_GAMEOBJECT: return TYPEID_GAMEOBJECT;
|
||||||
|
case HIGHGUID_DYNAMICOBJECT:return TYPEID_DYNAMICOBJECT;
|
||||||
|
case HIGHGUID_CORPSE: return TYPEID_CORPSE;
|
||||||
|
case HIGHGUID_MO_TRANSPORT: return TYPEID_GAMEOBJECT;
|
||||||
|
case HIGHGUID_VEHICLE: return TYPEID_UNIT;
|
||||||
|
// unknown
|
||||||
|
default: return TYPEID_OBJECT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
public: // accessors - for debug
|
||||||
|
char const* GetTypeName() const;
|
||||||
|
std::string GetString() const;
|
||||||
|
private: // internal functions
|
||||||
|
bool HasEntry() const
|
||||||
|
{
|
||||||
|
switch(GetHigh())
|
||||||
|
{
|
||||||
|
case HIGHGUID_ITEM:
|
||||||
|
case HIGHGUID_PLAYER:
|
||||||
|
case HIGHGUID_DYNAMICOBJECT:
|
||||||
|
case HIGHGUID_CORPSE:
|
||||||
|
return false;
|
||||||
|
case HIGHGUID_GAMEOBJECT:
|
||||||
|
case HIGHGUID_TRANSPORT:
|
||||||
|
case HIGHGUID_UNIT:
|
||||||
|
case HIGHGUID_PET:
|
||||||
|
case HIGHGUID_VEHICLE:
|
||||||
|
case HIGHGUID_MO_TRANSPORT:
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private: // fields
|
||||||
|
uint64 m_guid;
|
||||||
|
};
|
||||||
|
|
||||||
|
ByteBuffer& operator<< (ByteBuffer& buf, ObjectGuid const& guid);
|
||||||
|
ByteBuffer& operator>> (ByteBuffer& buf, ObjectGuid& guid);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __REVISION_NR_H__
|
#ifndef __REVISION_NR_H__
|
||||||
#define __REVISION_NR_H__
|
#define __REVISION_NR_H__
|
||||||
#define REVISION_NR "9546"
|
#define REVISION_NR "9547"
|
||||||
#endif // __REVISION_NR_H__
|
#endif // __REVISION_NR_H__
|
||||||
|
|
|
||||||
|
|
@ -435,6 +435,7 @@
|
||||||
<ClCompile Include="..\..\src\game\ObjectAccessor.cpp" />
|
<ClCompile Include="..\..\src\game\ObjectAccessor.cpp" />
|
||||||
<ClCompile Include="..\..\src\game\ObjectGridLoader.cpp" />
|
<ClCompile Include="..\..\src\game\ObjectGridLoader.cpp" />
|
||||||
<ClCompile Include="..\..\src\game\ObjectMgr.cpp" />
|
<ClCompile Include="..\..\src\game\ObjectMgr.cpp" />
|
||||||
|
<ClInclude Include="..\..\src\game\ObjectGuid.cpp" />
|
||||||
<ClCompile Include="..\..\src\game\ObjectPosSelector.cpp" />
|
<ClCompile Include="..\..\src\game\ObjectPosSelector.cpp" />
|
||||||
<ClCompile Include="..\..\src\game\Opcodes.cpp" />
|
<ClCompile Include="..\..\src\game\Opcodes.cpp" />
|
||||||
<ClCompile Include="..\..\src\game\pchdef.cpp">
|
<ClCompile Include="..\..\src\game\pchdef.cpp">
|
||||||
|
|
|
||||||
|
|
@ -1309,6 +1309,10 @@
|
||||||
RelativePath="..\..\src\game\ObjectAccessor.h"
|
RelativePath="..\..\src\game\ObjectAccessor.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\game\ObjectGuid.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\src\game\ObjectGuid.h"
|
RelativePath="..\..\src\game\ObjectGuid.h"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
|
|
@ -1310,6 +1310,10 @@
|
||||||
RelativePath="..\..\src\game\ObjectAccessor.h"
|
RelativePath="..\..\src\game\ObjectAccessor.h"
|
||||||
>
|
>
|
||||||
</File>
|
</File>
|
||||||
|
<File
|
||||||
|
RelativePath="..\..\src\game\ObjectGuid.cpp"
|
||||||
|
>
|
||||||
|
</File>
|
||||||
<File
|
<File
|
||||||
RelativePath="..\..\src\game\ObjectGuid.h"
|
RelativePath="..\..\src\game\ObjectGuid.h"
|
||||||
>
|
>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue