311 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetEntry()));
312 ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.
GetRawValue(0)));
321 if (!ParseComponent<dec>(guidString, &
id)
322 || !ParseComponent<hex>(guidString, &counter)
323 || !ParseDone(guidString))
329 static fmt::appender FormatClientActor(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
331 ctx.advance_to(AppendTypeName(ctx, typeName));
332 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
333 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 26 & 0xFFFFFF));
334 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) & 0xFFFFFFFF));
344 if (!ParseComponent<dec>(guidString, &ownerType)
345 || !ParseComponent<dec>(guidString, &ownerId)
346 || !ParseComponent<dec>(guidString, &counter)
347 || !ParseDone(guidString))
353 static fmt::appender FormatChatChannel(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
360 ctx.advance_to(AppendTypeName(ctx, typeName));
361 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
362 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, builtIn));
363 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, trade));
364 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, zoneId));
365 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, factionGroupMask));
366 ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.
GetRawValue(0)));
376 uint8 factionGroupMask = 0;
379 if (!ParseComponent<dec>(guidString, &realmId)
380 || !ParseComponent<dec>(guidString, &builtIn)
381 || !ParseComponent<dec>(guidString, &trade)
382 || !ParseComponent<dec>(guidString, &zoneId)
383 || !ParseComponent<dec>(guidString, &factionGroupMask)
384 || !ParseComponent<hex>(guidString, &
id)
385 || !ParseDone(guidString))
391 static fmt::appender FormatGlobal(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
393 ctx.advance_to(AppendTypeName(ctx, typeName));
394 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) & 0x3FFFFFFFFFFFFFF));
395 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
404 if (!ParseComponent<dec>(guidString, &dbIdHigh)
405 || !ParseComponent<hex>(guidString, &dbIdLow)
406 || !ParseDone(guidString))
412 static fmt::appender FormatGuild(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
414 ctx.advance_to(AppendTypeName(ctx, typeName));
415 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
416 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
425 if (!ParseComponent<dec>(guidString, &realmId)
426 || !ParseComponent<hex>(guidString, &dbId)
427 || !ParseDone(guidString))
433 static fmt::appender FormatMobileSession(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
435 ctx.advance_to(AppendTypeName(ctx, typeName));
436 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
437 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 33 & 0x1FF));
438 ctx.advance_to(AppendComponent<padding<8>, hex>(ctx, guid.
GetRawValue(0)));
448 if (!ParseComponent<dec>(guidString, &realmId)
449 || !ParseComponent<dec>(guidString, &arg1)
450 || !ParseComponent<hex>(guidString, &counter)
451 || !ParseDone(guidString))
457 static fmt::appender FormatWebObj(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
459 ctx.advance_to(AppendTypeName(ctx, typeName));
460 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
461 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 37 & 0x1F));
462 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 35 & 0x3));
463 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
474 if (!ParseComponent<dec>(guidString, &realmId)
475 || !ParseComponent<dec>(guidString, &arg1)
476 || !ParseComponent<dec>(guidString, &arg2)
477 || !ParseComponent<hex>(guidString, &counter)
478 || !ParseDone(guidString))
484 static fmt::appender FormatLFGObject(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
486 ctx.advance_to(AppendTypeName(ctx, typeName));
487 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 54 & 0xF));
488 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 50 & 0xF));
489 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 46 & 0xF));
490 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 38 & 0xFF));
491 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 37 & 0x1));
492 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 35 & 0x3));
493 ctx.advance_to(AppendComponent<padding<6>, hex>(ctx, guid.
GetRawValue(0)));
507 if (!ParseComponent<dec>(guidString, &arg1)
508 || !ParseComponent<dec>(guidString, &arg2)
509 || !ParseComponent<dec>(guidString, &arg3)
510 || !ParseComponent<dec>(guidString, &arg4)
511 || !ParseComponent<dec>(guidString, &arg5)
512 || !ParseComponent<dec>(guidString, &arg6)
513 || !ParseComponent<hex>(guidString, &counter)
514 || !ParseDone(guidString))
520 static fmt::appender FormatLFGList(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
522 ctx.advance_to(AppendTypeName(ctx, typeName));
523 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 54 & 0xF));
524 ctx.advance_to(AppendComponent<padding<6>, hex>(ctx, guid.
GetRawValue(0)));
533 if (!ParseComponent<dec>(guidString, &arg1)
534 || !ParseComponent<hex>(guidString, &counter)
535 || !ParseDone(guidString))
541 static fmt::appender FormatClient(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
543 ctx.advance_to(AppendTypeName(ctx, typeName));
544 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
545 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) >> 10 & 0xFFFFFFFF));
546 ctx.advance_to(AppendComponent<padding<12>, hex>(ctx, guid.
GetRawValue(0)));
556 if (!ParseComponent<dec>(guidString, &realmId)
557 || !ParseComponent<dec>(guidString, &arg1)
558 || !ParseComponent<hex>(guidString, &counter)
559 || !ParseDone(guidString))
565 static fmt::appender FormatClubFinder(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
570 ctx.advance_to(AppendTypeName(ctx, typeName));
571 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, type));
572 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, clubFinderId));
576 ctx.advance_to(AppendComponent<padding<16>, hex>(ctx, guid.
GetRawValue(0)));
579 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
580 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0)));
596 if (!ParseComponent<dec>(guidString, &type)
597 || !ParseComponent<dec>(guidString, &clubFinderId))
603 if (!ParseComponent<hex>(guidString, &dbId))
607 if (!ParseComponent<dec>(guidString, &realmId)
608 || !ParseComponent<dec>(guidString, &dbId))
615 if (!ParseDone(guidString))
621 static fmt::appender FormatToolsClient(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
623 ctx.advance_to(AppendTypeName(ctx, typeName));
624 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetMapId()));
625 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) >> 40 & 0xFFFFFF));
626 ctx.advance_to(AppendComponent<padding<10>, hex>(ctx, guid.
GetCounter()));
636 if (!ParseComponent<dec>(guidString, &mapId)
637 || !ParseComponent<dec>(guidString, &serverId)
638 || !ParseComponent<hex>(guidString, &counter)
639 || !ParseDone(guidString))
645 static fmt::appender FormatWorldLayer(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
647 ctx.advance_to(AppendTypeName(ctx, typeName));
648 ctx.advance_to(AppendComponent<padding<0>, hex>(ctx, guid.
GetRawValue(1) >> 10 & 0xFFFFFFFF));
649 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(1) & 0x1FF));
650 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) >> 24 & 0xFF));
651 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0) & 0x7FFFFF));
662 if (!ParseComponent<hex>(guidString, &arg1)
663 || !ParseComponent<dec>(guidString, &arg2)
664 || !ParseComponent<dec>(guidString, &arg3)
665 || !ParseComponent<dec>(guidString, &arg4)
666 || !ParseDone(guidString))
672 static fmt::appender FormatLMMLobby(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
674 ctx.advance_to(AppendTypeName(ctx, typeName));
675 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRealmId()));
676 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 26) & 0xFFFFFF));
677 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 18) & 0xFF));
678 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 10) & 0xFF));
679 ctx.advance_to(AppendComponent<padding<0>, hex>(ctx, guid.
GetRawValue(0)));
691 if (!ParseComponent<dec>(guidString, &realmId)
692 || !ParseComponent<dec>(guidString, &arg2)
693 || !ParseComponent<dec>(guidString, &arg3)
694 || !ParseComponent<dec>(guidString, &arg4)
695 || !ParseComponent<hex>(guidString, &arg5)
696 || !ParseDone(guidString))
702 static fmt::appender FormatHousing(fmt::format_context& ctx, std::string_view typeName,
ObjectGuid const& guid)
704 ctx.advance_to(AppendTypeName(ctx, typeName));
709 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
710 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 32) & 0xFFFF));
711 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0xFFFFFFFF));
712 ctx.advance_to(AppendComponent<no_padding, hex>(ctx, guid.
GetRawValue(0)));
715 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
716 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0xFFFFFFFF));
717 ctx.advance_to(AppendComponent<no_padding, hex>(ctx, guid.
GetRawValue(0)));
720 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, subType));
721 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1)) & 0x7FFF));
722 ctx.advance_to(AppendComponent<no_padding, dec>(ctx, guid.
GetRawValue(0)));
723 ctx.advance_to(AppendComponent<no_padding, dec>(ctx,
uint32(guid.
GetRawValue(1) >> 15) & 0x3F));
735 if (!ParseComponent<dec>(guidString, &subType))
746 if (!ParseComponent<dec>(guidString, &arg1)
747 || !ParseComponent<dec>(guidString, &arg2)
748 || !ParseComponent<hex>(guidString, &arg3)
749 || !ParseDone(guidString))
753 if (!ParseComponent<dec>(guidString, &arg2)
754 || !ParseComponent<hex>(guidString, &arg3)
755 || !ParseDone(guidString))
759 if (!ParseComponent<dec>(guidString, &arg2)
760 || !ParseComponent<dec>(guidString, &arg3)
761 || !ParseComponent<dec>(guidString, &arg1)
762 || !ParseDone(guidString))
773 ObjectGuidInfo::ObjectGuidInfo()
775#define SET_GUID_INFO(type, format, parse) \
776 Names[AsUnderlyingType(HighGuid::type)] = #type ## sv;\
777 ClientFormatFunction[AsUnderlyingType(HighGuid::type)] = &ObjectGuidInfo::format;\
778 ClientParseFunction[AsUnderlyingType(HighGuid::type)] = &ObjectGuidInfo::parse
843template <
typename FormatContext>
850 if (!Info.ClientFormatFunction[type])
853 return Info.ClientFormatFunction[type](ctx, Info.Names[type], guid);
863 return Info.Names[
uint32(high)];
868 return ObjectGuidInfo::Format(*
this);
878 return Info.Parse(guidString);
910 | (
uint64(subType & 0x3) << 40)
911 | (
uint64(arg1 & 0xFFFFFF) << 16)),
926 | (
uint64(mapId & 0x1FFF) << 29)
927 | (
uint64(entry & 0x7FFFFF) << 6)
928 | (
uint64(subType) & 0x3F)),
930 | (counter &
UI64LIT(0xFFFFFFFFFF))));
936 | (
uint64(counter) << 38)),
943 | (
uint64(ownerType & 0x1FFF) << 42)
944 | (
uint64(ownerId & 0xFFFFFF) << 26)),
954 | (
uint64(zoneId & 0x3FFF) << 10)
955 | (
uint64(factionGroupMask & 0x3F) << 4)),
977 | (
uint64(arg1 & 0x1FF) << 33)),
985 | (
uint64(arg1 & 0x1F) << 37)
986 | (
uint64(arg2 & 0x3) << 35)),
993 | (
uint64(arg1 & 0xF) << 54)
994 | (
uint64(arg2 & 0xF) << 50)
995 | (
uint64(arg3 & 0xF) << 46)
996 | (
uint64(arg4 & 0xFF) << 38)
997 | (
uint64(arg5 ? 1 : 0) << 37)
998 | (
uint64(arg6 & 0x3) << 35)),
1005 | (
uint64(arg1 & 0xF) << 54)),
1013 | (
uint64(arg1 & 0xFFFFFFFF) << 10)),
1021 | (
uint64(type & 0xFF) << 33)
1022 | (
uint64(clubFinderId & 0xFFFFFFFF))),
1031 | (counter &
UI64LIT(0xFFFFFFFFFF))));
1037 | (
uint64(arg1 & 0xFFFFFFFF) << 10)
1038 | (
uint64(arg2 & 0x1FF))),
1040 |
uint64(arg4 & 0x7FFFFF)));
1047 | (
uint64(arg2 & 0xFFFFFFFF) << 26)
1048 | (
uint64(arg3 & 0xFF) << 18)
1049 | (
uint64(arg4 & 0xFF) << 10)),
1060 | (
uint64(subType & 0x1F) << 53)
1061 | (
uint64(arg1 & 0xFFFF) << 32)
1062 | (
uint64(arg2 & 0xFFFFFFFF))),
1066 | (
uint64(subType & 0x1F) << 53)
1067 | (
uint64(arg2 & 0xFFFFFFFF))),
1071 | (
uint64(subType & 0x1F) << 53)
1072 | (
uint64(arg1 & 0x3F) << 15)
1073 | (
uint64(arg2 & 0x7FFF))),
1089 static constexpr std::ptrdiff_t NumUInt64s = std::tuple_size_v<
decltype(
ObjectGuid::_data)>;
1091 std::array<uint8, NumUInt64s + ObjectGuid::BytesSize> bytes;
1093 int32 outputByteIndex = NumUInt64s;
1094 std::span<uint8 const, ObjectGuid::BytesSize> guidBytes = std::span<uint8 const, ObjectGuid::BytesSize>(
reinterpret_cast<uint8 const*
>(guid.
_data.data()),
ObjectGuid::BytesSize);
1098 uint8 byte = guidBytes[inputByteIndex];
1099 bytes[outputByteIndex] = byte;
1101 int32 hasByte = (
byte != 0) ? 1 : 0;
1102 mask |= hasByte << inputByteIndex;
1103 outputByteIndex += hasByte;
1106 bytes[0] = mask & 0xFF;
1107 bytes[1] = (mask >> 8) & 0xFF;
1108 buf.
append(bytes.data(), outputByteIndex);
1116 std::span<uint8> bytes = buf.
ReadBytes(std::popcount(mask));
1121 if (!(mask & 0x8000))
1127 std::span<uint8, ObjectGuid::BytesSize> guidBytes = std::span<uint8, ObjectGuid::BytesSize>(
reinterpret_cast<uint8*
>(guid.
_data.data()),
ObjectGuid::BytesSize);
1129 for (std::size_t outputByteIndex = 0, inputByteIndex = 0; outputByteIndex <
ObjectGuid::BytesSize; ++outputByteIndex)
1131 int32 hasByte = (mask >> outputByteIndex) & 1;
1132 guidBytes[outputByteIndex] = bytes[inputByteIndex] & -hasByte;
1133 inputByteIndex += hasByte;