311 ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.
GetRawValue(0)));
320 if (!ParseComponent<dec>(guidString, &
id)
321 || !ParseComponent<hex>(guidString, &counter)
322 || !ParseDone(guidString))
328 static fmt::appender FormatClientActor(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
330 ctx.advance_to(AppendTypeName(ctx, typeName));
331 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
332 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 26 & 0xFFFFFF));
333 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) & 0xFFFFFFFF));
343 if (!ParseComponent<dec>(guidString, &ownerType)
344 || !ParseComponent<dec>(guidString, &ownerId)
345 || !ParseComponent<dec>(guidString, &counter)
346 || !ParseDone(guidString))
352 static fmt::appender FormatChatChannel(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
359 ctx.advance_to(AppendTypeName(ctx, typeName));
360 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
361 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, builtIn));
362 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, trade));
363 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, zoneId));
364 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, factionGroupMask));
365 ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.
GetRawValue(0)));
375 uint8 factionGroupMask = 0;
378 if (!ParseComponent<dec>(guidString, &realmId)
379 || !ParseComponent<dec>(guidString, &builtIn)
380 || !ParseComponent<dec>(guidString, &trade)
381 || !ParseComponent<dec>(guidString, &zoneId)
382 || !ParseComponent<dec>(guidString, &factionGroupMask)
383 || !ParseComponent<hex>(guidString, &
id)
384 || !ParseDone(guidString))
390 static fmt::appender FormatGlobal(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
392 ctx.advance_to(AppendTypeName(ctx, typeName));
393 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) & 0x3FFFFFFFFFFFFFF));
394 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
403 if (!ParseComponent<dec>(guidString, &dbIdHigh)
404 || !ParseComponent<hex>(guidString, &dbIdLow)
405 || !ParseDone(guidString))
411 static fmt::appender FormatGuild(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
413 ctx.advance_to(AppendTypeName(ctx, typeName));
414 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
415 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
424 if (!ParseComponent<dec>(guidString, &realmId)
425 || !ParseComponent<hex>(guidString, &dbId)
426 || !ParseDone(guidString))
432 static fmt::appender FormatMobileSession(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
434 ctx.advance_to(AppendTypeName(ctx, typeName));
435 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
436 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 33 & 0x1FF));
437 ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.
GetRawValue(0)));
447 if (!ParseComponent<dec>(guidString, &realmId)
448 || !ParseComponent<dec>(guidString, &arg1)
449 || !ParseComponent<hex>(guidString, &counter)
450 || !ParseDone(guidString))
456 static fmt::appender FormatWebObj(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
458 ctx.advance_to(AppendTypeName(ctx, typeName));
459 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
460 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 37 & 0x1F));
461 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 35 & 0x3));
462 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
473 if (!ParseComponent<dec>(guidString, &realmId)
474 || !ParseComponent<dec>(guidString, &arg1)
475 || !ParseComponent<dec>(guidString, &arg2)
476 || !ParseComponent<hex>(guidString, &counter)
477 || !ParseDone(guidString))
483 static fmt::appender FormatLFGObject(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
485 ctx.advance_to(AppendTypeName(ctx, typeName));
486 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 54 & 0xF));
487 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 50 & 0xF));
488 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 46 & 0xF));
489 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 38 & 0xFF));
490 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 37 & 0x1));
491 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 35 & 0x3));
492 ctx.advance_to(AppendComponent<padding<6>, hex>(ctx, guid.
GetRawValue(0)));
506 if (!ParseComponent<dec>(guidString, &arg1)
507 || !ParseComponent<dec>(guidString, &arg2)
508 || !ParseComponent<dec>(guidString, &arg3)
509 || !ParseComponent<dec>(guidString, &arg4)
510 || !ParseComponent<dec>(guidString, &arg5)
511 || !ParseComponent<dec>(guidString, &arg6)
512 || !ParseComponent<hex>(guidString, &counter)
513 || !ParseDone(guidString))
519 static fmt::appender FormatLFGList(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
521 ctx.advance_to(AppendTypeName(ctx, typeName));
522 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 54 & 0xF));
523 ctx.advance_to(AppendComponent<padding<6>, hex>(ctx, guid.
GetRawValue(0)));
532 if (!ParseComponent<dec>(guidString, &arg1)
533 || !ParseComponent<hex>(guidString, &counter)
534 || !ParseDone(guidString))
540 static fmt::appender FormatClient(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
542 ctx.advance_to(AppendTypeName(ctx, typeName));
543 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
544 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 10 & 0xFFFFFFFF));
545 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
555 if (!ParseComponent<dec>(guidString, &realmId)
556 || !ParseComponent<dec>(guidString, &arg1)
557 || !ParseComponent<hex>(guidString, &counter)
558 || !ParseDone(guidString))
564 static fmt::appender FormatClubFinder(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
569 ctx.advance_to(AppendTypeName(ctx, typeName));
570 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, type));
571 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, clubFinderId));
575 ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.
GetRawValue(0)));
578 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
579 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0)));
595 if (!ParseComponent<dec>(guidString, &type)
596 || !ParseComponent<dec>(guidString, &clubFinderId))
602 if (!ParseComponent<hex>(guidString, &dbId))
606 if (!ParseComponent<dec>(guidString, &realmId)
607 || !ParseComponent<dec>(guidString, &dbId))
614 if (!ParseDone(guidString))
620 static fmt::appender FormatToolsClient(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
622 ctx.advance_to(AppendTypeName(ctx, typeName));
623 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetMapId()));
624 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) >> 40 & 0xFFFFFF));
625 ctx.advance_to(AppendComponent<padding<10>, hex>(ctx, guid.
GetCounter()));
635 if (!ParseComponent<dec>(guidString, &mapId)
636 || !ParseComponent<dec>(guidString, &serverId)
637 || !ParseComponent<hex>(guidString, &counter)
638 || !ParseDone(guidString))
644 static fmt::appender FormatWorldLayer(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
646 ctx.advance_to(AppendTypeName(ctx, typeName));
647 ctx.advance_to(AppendComponent<padding<0>, hex>(ctx, guid.
GetRawValue(1) >> 10 & 0xFFFFFFFF));
648 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) & 0x1FF));
649 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) >> 24 & 0xFF));
650 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) & 0x7FFFFF));
661 if (!ParseComponent<hex>(guidString, &arg1)
662 || !ParseComponent<dec>(guidString, &arg2)
663 || !ParseComponent<dec>(guidString, &arg3)
664 || !ParseComponent<dec>(guidString, &arg4)
665 || !ParseDone(guidString))
671 static fmt::appender FormatLMMLobby(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
673 ctx.advance_to(AppendTypeName(ctx, typeName));
674 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
675 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 26) & 0xFFFFFF));
676 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 18) & 0xFF));
677 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 10) & 0xFF));
678 ctx.advance_to(AppendComponent<padding<0>, hex>(ctx, guid.
GetRawValue(0)));
690 if (!ParseComponent<dec>(guidString, &realmId)
691 || !ParseComponent<dec>(guidString, &arg2)
692 || !ParseComponent<dec>(guidString, &arg3)
693 || !ParseComponent<dec>(guidString, &arg4)
694 || !ParseComponent<hex>(guidString, &arg5)
695 || !ParseDone(guidString))
701 static fmt::appender FormatHousing(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
703 ctx.advance_to(AppendTypeName(ctx, typeName));
708 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
709 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 32) & 0xFFFF));
710 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0xFFFFFFFF));
711 ctx.advance_to(AppendComponent<no_padding, hex>(ctx, guid.
GetRawValue(0)));
714 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
715 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0xFFFFFFFF));
716 ctx.advance_to(AppendComponent<no_padding, hex>(ctx, guid.
GetRawValue(0)));
719 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
720 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0x7FFF));
721 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0)));
722 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 15) & 0x3F));
734 if (!ParseComponent<dec>(guidString, &subType))
745 if (!ParseComponent<dec>(guidString, &arg1)
746 || !ParseComponent<dec>(guidString, &arg2)
747 || !ParseComponent<hex>(guidString, &arg3)
748 || !ParseDone(guidString))
752 if (!ParseComponent<dec>(guidString, &arg2)
753 || !ParseComponent<hex>(guidString, &arg3)
754 || !ParseDone(guidString))
758 if (!ParseComponent<dec>(guidString, &arg2)
759 || !ParseComponent<dec>(guidString, &arg3)
760 || !ParseComponent<dec>(guidString, &arg1)
761 || !ParseDone(guidString))
772 ObjectGuidInfo::ObjectGuidInfo()
774#define SET_GUID_INFO(type, format, parse) \
775 Names[AsUnderlyingType(HighGuid::type)] = #type ## sv;\
776 ClientFormatFunction[AsUnderlyingType(HighGuid::type)] = &ObjectGuidInfo::format;\
777 ClientParseFunction[AsUnderlyingType(HighGuid::type)] = &ObjectGuidInfo::parse
842template <
typename FormatContext>
849 if (!Info.ClientFormatFunction[type])
852 return Info.ClientFormatFunction[type](ctx, Info.Names[type], guid);
862 return Info.Names[
uint32(high)];
867 return ObjectGuidInfo::Format(*
this);
877 return Info.Parse(guidString);
909 | (
uint64(subType & 0x3) << 40)
910 | (
uint64(arg1 & 0xFFFFFF) << 16)),
925 | (
uint64(mapId & 0x1FFF) << 29)
926 | (
uint64(entry & 0x7FFFFF) << 6)
927 | (
uint64(subType) & 0x3F)),
929 | (counter &
UI64LIT(0xFFFFFFFFFF))));
935 | (
uint64(counter) << 38)),
942 | (
uint64(ownerType & 0x1FFF) << 42)
943 | (
uint64(ownerId & 0xFFFFFF) << 26)),
953 | (
uint64(zoneId & 0x3FFF) << 10)
954 | (
uint64(factionGroupMask & 0x3F) << 4)),
976 | (
uint64(arg1 & 0x1FF) << 33)),
984 | (
uint64(arg1 & 0x1F) << 37)
985 | (
uint64(arg2 & 0x3) << 35)),
992 | (
uint64(arg1 & 0xF) << 54)
993 | (
uint64(arg2 & 0xF) << 50)
994 | (
uint64(arg3 & 0xF) << 46)
995 | (
uint64(arg4 & 0xFF) << 38)
996 | (
uint64(arg5 ? 1 : 0) << 37)
997 | (
uint64(arg6 & 0x3) << 35)),
1004 | (
uint64(arg1 & 0xF) << 54)),
1012 | (
uint64(arg1 & 0xFFFFFFFF) << 10)),
1020 | (
uint64(type & 0xFF) << 33)
1021 | (
uint64(clubFinderId & 0xFFFFFFFF))),
1030 | (counter &
UI64LIT(0xFFFFFFFFFF))));
1036 | (
uint64(arg1 & 0xFFFFFFFF) << 10)
1037 | (
uint64(arg2 & 0x1FF))),
1039 |
uint64(arg4 & 0x7FFFFF)));
1046 | (
uint64(arg2 & 0xFFFFFFFF) << 26)
1047 | (
uint64(arg3 & 0xFF) << 18)
1048 | (
uint64(arg4 & 0xFF) << 10)),
1059 | (
uint64(subType & 0x1F) << 53)
1060 | (
uint64(arg1 & 0xFFFF) << 32)
1061 | (
uint64(arg2 & 0xFFFFFFFF))),
1065 | (
uint64(subType & 0x1F) << 53)
1066 | (
uint64(arg2 & 0xFFFFFFFF))),
1070 | (
uint64(subType & 0x1F) << 53)
1071 | (
uint64(arg1 & 0x3F) << 15)
1072 | (
uint64(arg2 & 0x7FFF))),
1088 static constexpr std::size_t NumUInt64s = 2;
1090 std::array<uint8, NumUInt64s + ObjectGuid::BytesSize> bytes;
1091 memset(bytes.data(), 0, NumUInt64s);
1092 size_t packedSize = guid.
_data.size();
1094 for (std::size_t i = 0; i < guid.
_data.size(); ++i)
1096 for (
uint32 b = 0; b < 8; ++b)
1100 bytes[packedSize++] = byte;
1101 bytes[i] |=
uint8(1 << b);
1106 buf.
append(bytes.data(), packedSize);
1113 std::array<uint8, 2> mask;
1116 for (std::size_t i = 0; i < guid.
_data.size(); ++i)
1117 for (
uint32 b = 0; b < 8; ++b)
1118 if (mask[i] & (
uint8(1) << b))