29#include <unordered_set>
49#define NUM_CLIENT_OBJECT_TYPES 14
161template<HighGu
id high>
165 using Format = std::integral_constant<ObjectGuidFormatType, ObjectGuidFormatType::Null>;
168#define MAKE_GUID_TRAIT(high, sequence, format) \
169 template<> struct ObjectGuidTraits<high> \
171 static constexpr EnumFlag<ObjectGuidSequenceSource> SequenceSource = sequence; \
172 using Format = std::integral_constant<ObjectGuidFormatType, format>; \
273 std::vector<uint8> GetRawValue()
const;
274 void SetRawValue(std::vector<uint8>
const& guid);
276 void Clear() { std::fill(std::begin(_data), std::end(_data),
UI64LIT(0)); }
287 case HighGuid::Transport:
288 return (_data[1] >> 38) &
UI64LIT(0xFFFFF);
292 return _data[0] &
UI64LIT(0x000000FFFFFFFFFF);
299 case HighGuid::Transport:
309 bool IsEmpty()
const {
return _data[0] == 0 && _data[1] == 0; }
310 bool IsCreature()
const {
return GetHigh() == HighGuid::Creature; }
311 bool IsPet()
const {
return GetHigh() == HighGuid::Pet; }
312 bool IsVehicle()
const {
return GetHigh() == HighGuid::Vehicle; }
316 bool IsPlayer()
const {
return !IsEmpty() && GetHigh() == HighGuid::Player; }
318 bool IsItem()
const {
return GetHigh() == HighGuid::Item; }
319 bool IsGameObject()
const {
return GetHigh() == HighGuid::GameObject; }
321 bool IsCorpse()
const {
return GetHigh() == HighGuid::Corpse; }
325 bool IsParty()
const {
return GetHigh() == HighGuid::Party; }
326 bool IsGuild()
const {
return GetHigh() == HighGuid::Guild; }
329 bool IsCast()
const {
return GetHigh() == HighGuid::Cast; }
336 if (_data[1] < guid.
_data[1])
338 else if (_data[1] > guid.
_data[1])
341 return _data[0] < guid.
_data[0];
344 static char const* GetTypeName(
HighGuid high);
346 std::string ToString()
const;
347 std::string ToHexString()
const;
348 static ObjectGuid FromString(std::string
const& guidString);
349 std::size_t GetHash()
const;
356 template<HighGu
id type>
static std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::WorldObject,
ObjectGuid>
Create(
uint8 subType,
uint16 mapId,
uint32 entry,
ObjectGuid::LowType counter) {
return ObjectGuidFactory::CreateWorldObject(type, subType, 0, mapId, 0, entry, counter); }
359 template<HighGu
id type>
static std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::ChatChannel,
ObjectGuid>
Create(
bool builtIn,
bool trade,
uint16 zoneId,
uint8 factionGroupMask,
ObjectGuid::LowType counter) {
return ObjectGuidFactory::CreateChatChannel(0, builtIn, trade, zoneId, factionGroupMask, counter); }
364 template<HighGu
id type>
static std::enable_if_t<ObjectGuidTraits<type>::Format::value == ObjectGuidFormatType::LFGObject,
ObjectGuid>
Create(
uint8 arg1,
uint8 arg2,
uint8 arg3,
uint8 arg4,
bool arg5,
uint8 arg6,
ObjectGuid::LowType counter) {
return ObjectGuidFactory::CreateLFGObject(arg1, arg2, arg3, arg4, arg5, arg6, counter); }
400 void HandleCounterOverflow();
401 void CheckGuidTrigger();
417 return key.GetHash();
444 switch (legacyTypeID)
477 if (legacyTypeMask & (1 <<
uint32(i)))
bool operator==(AreaTriggerId const &left, AreaTriggerId const &right)
Definition: AreaTriggerDataStore.cpp:30
bool operator<(AuctionsBucketKey const &left, AuctionsBucketKey const &right)
Definition: AuctionHouseMgr.cpp:90
#define TC_GAME_API
Definition: Define.h:124
uint8_t uint8
Definition: Define.h:145
uint64_t uint64
Definition: Define.h:142
#define UI64LIT(N)
Definition: Define.h:128
uint16_t uint16
Definition: Define.h:144
uint32_t uint32
Definition: Define.h:143
#define DEFINE_ENUM_FLAG(enumType)
Definition: EnumFlag.h:26
bool operator!=(const CoordPair< LIMIT > &p1, const CoordPair< LIMIT > &p2)
Definition: GridDefines.h:182
ByteBuffer & operator<<(ByteBuffer &buf, ObjectGuid const &guid)
Definition: ObjectGuid.cpp:725
ByteBuffer & operator>>(ByteBuffer &buf, ObjectGuid &guid)
Definition: ObjectGuid.cpp:746
std::list< ObjectGuid > GuidList
Definition: ObjectGuid.h:385
std::unordered_set< ObjectGuid > GuidUnorderedSet
Definition: ObjectGuid.h:387
TypeID
Definition: ObjectGuid.h:32
@ TYPEID_AZERITE_ITEM
Definition: ObjectGuid.h:37
@ TYPEID_OBJECT
Definition: ObjectGuid.h:33
@ TYPEID_AREATRIGGER
Definition: ObjectGuid.h:44
@ TYPEID_ACTIVE_PLAYER
Definition: ObjectGuid.h:40
@ TYPEID_DYNAMICOBJECT
Definition: ObjectGuid.h:42
@ TYPEID_GAMEOBJECT
Definition: ObjectGuid.h:41
@ TYPEID_UNIT
Definition: ObjectGuid.h:38
@ TYPEID_CORPSE
Definition: ObjectGuid.h:43
@ TYPEID_ITEM
Definition: ObjectGuid.h:34
@ TYPEID_SCENEOBJECT
Definition: ObjectGuid.h:45
@ TYPEID_CONVERSATION
Definition: ObjectGuid.h:46
@ TYPEID_PLAYER
Definition: ObjectGuid.h:39
@ TYPEID_AZERITE_EMPOWERED_ITEM
Definition: ObjectGuid.h:36
@ TYPEID_CONTAINER
Definition: ObjectGuid.h:35
TC_GAME_API ByteBuffer & operator>>(ByteBuffer &buf, ObjectGuid &guid)
Definition: ObjectGuid.cpp:746
std::set< ObjectGuid > GuidSet
Definition: ObjectGuid.h:384
#define MAKE_GUID_TRAIT(high, sequence, format)
Definition: ObjectGuid.h:168
HighGuid
Definition: ObjectGuid.h:71
TypeMask
Definition: ObjectGuid.h:52
@ TYPEMASK_OBJECT
Definition: ObjectGuid.h:53
@ TYPEMASK_ITEM
Definition: ObjectGuid.h:54
@ TYPEMASK_SCENEOBJECT
Definition: ObjectGuid.h:65
@ TYPEMASK_DYNAMICOBJECT
Definition: ObjectGuid.h:62
@ TYPEMASK_SEER
Definition: ObjectGuid.h:67
@ TYPEMASK_AZERITE_ITEM
Definition: ObjectGuid.h:57
@ TYPEMASK_UNIT
Definition: ObjectGuid.h:58
@ TYPEMASK_CONVERSATION
Definition: ObjectGuid.h:66
@ TYPEMASK_CONTAINER
Definition: ObjectGuid.h:55
@ TYPEMASK_CORPSE
Definition: ObjectGuid.h:63
@ TYPEMASK_GAMEOBJECT
Definition: ObjectGuid.h:61
@ TYPEMASK_PLAYER
Definition: ObjectGuid.h:59
@ TYPEMASK_AREATRIGGER
Definition: ObjectGuid.h:64
@ TYPEMASK_ACTIVE_PLAYER
Definition: ObjectGuid.h:60
@ TYPEMASK_AZERITE_EMPOWERED_ITEM
Definition: ObjectGuid.h:56
ObjectGuidSequenceSource
Definition: ObjectGuid.h:130
ObjectGuidFormatType
Definition: ObjectGuid.h:140
TC_GAME_API ByteBuffer & operator<<(ByteBuffer &buf, ObjectGuid const &guid)
Definition: ObjectGuid.cpp:725
std::vector< ObjectGuid > GuidVector
Definition: ObjectGuid.h:386
Definition: AreaTrigger.h:43
Definition: ArenaTeam.h:112
Definition: ByteBuffer.h:62
Definition: Conversation.h:30
Definition: Creature.h:70
Definition: DynamicObject.h:37
Definition: EnumFlag.h:66
Definition: GameObject.h:125
Definition: ObjectGuid.h:233
static ObjectGuid CreateTransport(HighGuid type, uint32 counter)
Definition: ObjectGuid.cpp:611
static ObjectGuid CreateGlobal(HighGuid type, uint64 dbIdHigh, uint64 dbId)
Definition: ObjectGuid.cpp:637
static ObjectGuid CreateItem(uint32 realmId, uint64 dbId)
Definition: ObjectGuid.cpp:593
static ObjectGuid CreateWorldLayer(uint32 arg1, uint16 arg2, uint8 arg3, uint32 arg4)
Definition: ObjectGuid.cpp:712
static ObjectGuid CreateMobileSession(uint32 realmId, uint16 arg1, uint64 counter)
Definition: ObjectGuid.cpp:651
static ObjectGuid CreateClubFinder(uint32 realmId, uint8 type, uint32 clubFinderId, uint64 dbId)
Definition: ObjectGuid.cpp:695
static ObjectGuid CreateClient(HighGuid type, uint32 realmId, uint32 arg1, uint64 counter)
Definition: ObjectGuid.cpp:687
static ObjectGuid CreateClientActor(uint16 ownerType, uint16 ownerId, uint32 counter)
Definition: ObjectGuid.cpp:618
static ObjectGuid CreateToolsClient(uint16 mapId, uint32 serverId, uint64 counter)
Definition: ObjectGuid.cpp:704
static ObjectGuid CreateGuild(HighGuid type, uint32 realmId, uint64 dbId)
Definition: ObjectGuid.cpp:644
static ObjectGuid CreateUniq(uint64 id)
Definition: ObjectGuid.cpp:580
static ObjectGuid CreateWorldObject(HighGuid type, uint8 subType, uint32 realmId, uint16 mapId, uint32 serverId, uint32 entry, uint64 counter)
Definition: ObjectGuid.cpp:600
static ObjectGuid CreateChatChannel(uint32 realmId, bool builtIn, bool trade, uint16 zoneId, uint8 factionGroupMask, uint64 counter)
Definition: ObjectGuid.cpp:626
static ObjectGuid CreatePlayer(uint32 realmId, uint64 dbId)
Definition: ObjectGuid.cpp:586
static ObjectGuid CreateNull()
Definition: ObjectGuid.cpp:575
static ObjectGuid CreateLFGList(uint8 arg1, uint64 counter)
Definition: ObjectGuid.cpp:680
static ObjectGuid CreateLFGObject(uint8 arg1, uint8 arg2, uint8 arg3, uint8 arg4, bool arg5, uint8 arg6, uint64 counter)
Definition: ObjectGuid.cpp:668
static ObjectGuid CreateWebObj(uint32 realmId, uint8 arg1, uint8 arg2, uint64 counter)
Definition: ObjectGuid.cpp:659
Definition: ObjectGuid.h:390
ObjectGuidGenerator(HighGuid high, ObjectGuid::LowType start=UI64LIT(1))
Definition: ObjectGuid.h:392
HighGuid _high
Definition: ObjectGuid.h:402
ObjectGuid::LowType _nextGuid
Definition: ObjectGuid.h:403
ObjectGuid::LowType GetNextAfterMaxUsed() const
Definition: ObjectGuid.h:397
~ObjectGuidGenerator()=default
void Set(ObjectGuid::LowType val)
Definition: ObjectGuid.h:395
Definition: ObjectGuid.h:258
uint32 GetMapId() const
Definition: ObjectGuid.h:280
static LowType GetMaxCounter(HighGuid high)
Definition: ObjectGuid.h:295
LowType GetCounter() const
Definition: ObjectGuid.h:283
static ObjectGuid const Empty
Definition: ObjectGuid.h:264
bool IsAnyTypeGameObject() const
Definition: ObjectGuid.h:324
ObjectGuid()
Definition: ObjectGuid.h:270
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Client, ObjectGuid > Create(uint32 arg1, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:366
bool IsCorpse() const
Definition: ObjectGuid.h:321
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::WorldObject, ObjectGuid > Create(uint16 mapId, uint32 entry, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:355
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Uniq, ObjectGuid > Create(ObjectGuid::LowType id)
Definition: ObjectGuid.h:352
bool IsEmpty() const
Definition: ObjectGuid.h:309
ObjectGuid(uint64 high, uint64 low)
Definition: ObjectGuid.h:372
bool IsAreaTrigger() const
Definition: ObjectGuid.h:322
uint64 GetRawValue(std::size_t i) const
Definition: ObjectGuid.h:272
void SetRawValue(uint64 high, uint64 low)
Definition: ObjectGuid.h:275
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::ChatChannel, ObjectGuid > Create(bool builtIn, bool trade, uint16 zoneId, uint8 factionGroupMask, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:359
bool IsSceneObject() const
Definition: ObjectGuid.h:327
static ObjectGuid const FromStringFailed
Definition: ObjectGuid.h:265
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::LFGObject, ObjectGuid > Create(uint8 arg1, uint8 arg2, uint8 arg3, uint8 arg4, bool arg5, uint8 arg6, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:364
bool IsMOTransport() const
Definition: ObjectGuid.h:323
bool IsItem() const
Definition: ObjectGuid.h:318
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::WorldLayer, ObjectGuid > Create(uint32 arg1, uint16 arg2, uint8 arg3, uint32 arg4)
Definition: ObjectGuid.h:369
bool IsPlayer() const
Definition: ObjectGuid.h:316
bool IsUnit() const
Definition: ObjectGuid.h:317
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::ToolsClient, ObjectGuid > Create(uint16 mapId, uint32 serverId, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:368
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::LFGList, ObjectGuid > Create(uint8 arg1, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:365
bool IsVehicle() const
Definition: ObjectGuid.h:312
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Transport, ObjectGuid > Create(uint32 counter)
Definition: ObjectGuid.h:357
bool IsCast() const
Definition: ObjectGuid.h:329
uint64 _data[2]
Definition: ObjectGuid.h:378
bool IsDynamicObject() const
Definition: ObjectGuid.h:320
LowType GetMaxCounter() const
Definition: ObjectGuid.h:307
bool IsGameObject() const
Definition: ObjectGuid.h:319
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::WorldObject, ObjectGuid > Create(uint8 subType, uint16 mapId, uint32 entry, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:356
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Item, ObjectGuid > Create(ObjectGuid::LowType dbId)
Definition: ObjectGuid.h:354
bool IsCreatureOrPet() const
Definition: ObjectGuid.h:313
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::MobileSession, ObjectGuid > Create(uint16 arg1, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:362
bool IsParty() const
Definition: ObjectGuid.h:325
bool operator!() const
Definition: ObjectGuid.h:331
uint32 GetEntry() const
Definition: ObjectGuid.h:281
static ObjectGuid const TradeItem
Definition: ObjectGuid.h:266
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Player, ObjectGuid > Create(ObjectGuid::LowType dbId)
Definition: ObjectGuid.h:353
bool IsGuild() const
Definition: ObjectGuid.h:326
uint32 GetSubType() const
Definition: ObjectGuid.h:282
char const * GetTypeName() const
Definition: ObjectGuid.h:345
bool IsAnyTypeCreature() const
Definition: ObjectGuid.h:315
uint64 LowType
Definition: ObjectGuid.h:268
bool IsCreatureOrVehicle() const
Definition: ObjectGuid.h:314
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::ClientActor, ObjectGuid > Create(uint16 ownerType, uint16 ownerId, uint32 counter)
Definition: ObjectGuid.h:358
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Guild, ObjectGuid > Create(ObjectGuid::LowType dbId)
Definition: ObjectGuid.h:361
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::ClubFinder, ObjectGuid > Create(uint8 clubType, uint32 clubFinderId, ObjectGuid::LowType dbId)
Definition: ObjectGuid.h:367
uint32 GetRealmId() const
Definition: ObjectGuid.h:279
HighGuid GetHigh() const
Definition: ObjectGuid.h:278
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Null, ObjectGuid > Create()
Definition: ObjectGuid.h:351
bool IsCreature() const
Definition: ObjectGuid.h:310
bool IsPet() const
Definition: ObjectGuid.h:311
void Clear()
Definition: ObjectGuid.h:276
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::Global, ObjectGuid > Create(ObjectGuid::LowType dbId)
Definition: ObjectGuid.h:360
static std::enable_if_t< ObjectGuidTraits< type >::Format::value==ObjectGuidFormatType::WebObj, ObjectGuid > Create(uint8 arg1, uint8 arg2, ObjectGuid::LowType counter)
Definition: ObjectGuid.h:363
bool IsConversation() const
Definition: ObjectGuid.h:328
Definition: Player.h:1125
Definition: Scenario.h:51
Definition: SceneObject.h:33
Definition: Transport.h:30
TypeID
Definition: ObjectGuid.h:427
constexpr TypeMask ConvertLegacyTypeMask(uint32 legacyTypeMask)
Definition: ObjectGuid.h:473
constexpr ::TypeID ConvertLegacyTypeID(TypeID legacyTypeID)
Definition: ObjectGuid.h:442
Definition: AsioHacksFwd.h:53
Definition: ObjectGuid.h:163
std::integral_constant< ObjectGuidFormatType, ObjectGuidFormatType::Null > Format
Definition: ObjectGuid.h:165
static constexpr EnumFlag< ObjectGuidSequenceSource > SequenceSource
Definition: ObjectGuid.h:164
size_t operator()(ObjectGuid const &key) const noexcept
Definition: ObjectGuid.h:415