Core/PacketIO: Use new packet writing utilities in a bunch of files

This commit is contained in:
Shauren
2025-03-01 00:43:08 +01:00
parent 464d8e39e0
commit 76352cb391
21 changed files with 351 additions and 391 deletions

View File

@@ -1104,6 +1104,17 @@ enum ItemBonusType
ITEM_BONUS_ITEM_HISTORY_SLOT = 38,
};
enum class ItemCollectionType : uint8
{
None = 0,
Toy = 1,
Heirloom = 2,
Transmog = 3,
TransmogSetFavorite = 4,
RuneforgeLegendaryAbility = 5,
TransmogIllusion = 6,
};
enum class ItemContext : uint8
{
NONE = 0,

View File

@@ -1005,7 +1005,7 @@ void WorldSession::SendAuctionHello(ObjectGuid guid, Unit const* unit)
return;
WorldPackets::AuctionHouse::AuctionHelloResponse auctionHelloResponse;
auctionHelloResponse.Guid = guid;
auctionHelloResponse.Auctioneer = guid;
auctionHelloResponse.OpenForBusiness = true; // 3.3.3: 1 - AH enabled, 0 - AH disabled
SendPacket(auctionHelloResponse.Write());
}

View File

@@ -23,10 +23,10 @@ void WorldSession::HandleCollectionItemSetFavorite(WorldPackets::Collections::Co
{
switch (collectionItemSetFavorite.Type)
{
case WorldPackets::Collections::TOYBOX:
case ItemCollectionType::Toy:
GetCollectionMgr()->ToySetFavorite(collectionItemSetFavorite.ID, collectionItemSetFavorite.IsFavorite);
break;
case WorldPackets::Collections::APPEARANCE:
case ItemCollectionType::Transmog:
{
auto [hasAppearance, isTemporary] = GetCollectionMgr()->HasItemAppearance(collectionItemSetFavorite.ID);
if (!hasAppearance || isTemporary)
@@ -35,7 +35,7 @@ void WorldSession::HandleCollectionItemSetFavorite(WorldPackets::Collections::Co
GetCollectionMgr()->SetAppearanceIsFavorite(collectionItemSetFavorite.ID, collectionItemSetFavorite.IsFavorite);
break;
}
case WorldPackets::Collections::TRANSMOG_SET:
case ItemCollectionType::TransmogSetFavorite:
break;
default:
break;

View File

@@ -140,7 +140,7 @@ void WorldSession::HandleWhoOpcode(WorldPackets::Who::WhoRequestPkt& whoRequest)
uint32 gmLevelInWhoList = sWorld->getIntConfig(CONFIG_GM_LEVEL_IN_WHO_LIST);
WorldPackets::Who::WhoResponsePkt response;
response.RequestID = whoRequest.RequestID;
response.Token = whoRequest.Token;
WhoListInfoVector const& whoList = sWhoListStorageMgr->GetWhoList();
for (WhoListPlayerInfo const& target : whoList)

View File

@@ -21,9 +21,7 @@
#include "ObjectGuid.h"
#include "Util.h"
namespace WorldPackets
{
namespace AuctionHouse
namespace WorldPackets::AuctionHouse
{
AuctionBucketKey& AuctionBucketKey::operator=(AuctionsBucketKey const& key)
{
@@ -42,15 +40,10 @@ AuctionBucketKey& AuctionBucketKey::operator=(AuctionsBucketKey const& key)
ByteBuffer& operator>>(ByteBuffer& data, AuctionBucketKey& itemKey)
{
data.ResetBitPos();
itemKey.ItemID = data.ReadBits(20);
if (data.ReadBit())
itemKey.BattlePetSpeciesID.emplace();
itemKey.ItemLevel = data.ReadBits(11);
if (data.ReadBit())
itemKey.ItemSuffix.emplace();
data >> Bits<20>(itemKey.ItemID);
data >> OptionalInit(itemKey.BattlePetSpeciesID);
data >> Bits<11>(itemKey.ItemLevel);
data >> OptionalInit(itemKey.ItemSuffix);
if (itemKey.BattlePetSpeciesID)
data >> *itemKey.BattlePetSpeciesID;
@@ -63,10 +56,10 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionBucketKey& itemKey)
ByteBuffer& operator<<(ByteBuffer& data, AuctionBucketKey const& itemKey)
{
data.WriteBits(itemKey.ItemID, 20);
data.WriteBit(itemKey.BattlePetSpeciesID.has_value());
data.WriteBits(itemKey.ItemLevel, 11);
data.WriteBit(itemKey.ItemSuffix.has_value());
data << Bits<20>(itemKey.ItemID);
data << OptionalInit(itemKey.BattlePetSpeciesID);
data << Bits<11>(itemKey.ItemLevel);
data << OptionalInit(itemKey.ItemSuffix);
data.FlushBits();
if (itemKey.BattlePetSpeciesID)
@@ -89,7 +82,7 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterSubClass& filterSubCla
ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterClass& filterClass)
{
data >> filterClass.ItemClass;
filterClass.SubClassFilters.resize(data.ReadBits(5));
data >> BitsSize<5>(filterClass.SubClassFilters);
for (AuctionListFilterSubClass& filterSubClass : filterClass.SubClassFilters)
data >> filterSubClass;
@@ -161,12 +154,12 @@ ByteBuffer& operator<<(ByteBuffer& data, BucketInfo const& bucketInfo)
if (!bucketInfo.ItemModifiedAppearanceIDs.empty())
data.append(bucketInfo.ItemModifiedAppearanceIDs.data(), bucketInfo.ItemModifiedAppearanceIDs.size());
data.WriteBit(bucketInfo.MaxBattlePetQuality.has_value());
data.WriteBit(bucketInfo.MaxBattlePetLevel.has_value());
data.WriteBit(bucketInfo.BattlePetBreedID.has_value());
data.WriteBit(bucketInfo.BattlePetLevelMask.has_value());
data.WriteBit(bucketInfo.ContainsOwnerItem);
data.WriteBit(bucketInfo.ContainsOnlyCollectedAppearances);
data << OptionalInit(bucketInfo.MaxBattlePetQuality);
data << OptionalInit(bucketInfo.MaxBattlePetLevel);
data << OptionalInit(bucketInfo.BattlePetBreedID);
data << OptionalInit(bucketInfo.BattlePetLevelMask);
data << Bits<1>(bucketInfo.ContainsOwnerItem);
data << Bits<1>(bucketInfo.ContainsOnlyCollectedAppearances);
data.FlushBits();
if (bucketInfo.MaxBattlePetQuality)
@@ -186,21 +179,21 @@ ByteBuffer& operator<<(ByteBuffer& data, BucketInfo const& bucketInfo)
ByteBuffer& operator<<(ByteBuffer& data, AuctionItem const& auctionItem)
{
data.WriteBit(auctionItem.Item.has_value());
data.WriteBits(auctionItem.Enchantments.size(), 4);
data.WriteBits(auctionItem.Gems.size(), 2);
data.WriteBit(auctionItem.MinBid.has_value());
data.WriteBit(auctionItem.MinIncrement.has_value());
data.WriteBit(auctionItem.BuyoutPrice.has_value());
data.WriteBit(auctionItem.UnitPrice.has_value());
data.WriteBit(auctionItem.CensorServerSideInfo);
data.WriteBit(auctionItem.CensorBidInfo);
data.WriteBit(auctionItem.AuctionBucketKey.has_value());
data.WriteBit(auctionItem.Creator.has_value());
data << OptionalInit(auctionItem.Item);
data << BitsSize<4>(auctionItem.Enchantments);
data << BitsSize<2>(auctionItem.Gems);
data << OptionalInit(auctionItem.MinBid);
data << OptionalInit(auctionItem.MinIncrement);
data << OptionalInit(auctionItem.BuyoutPrice);
data << OptionalInit(auctionItem.UnitPrice);
data << Bits<1>(auctionItem.CensorServerSideInfo);
data << Bits<1>(auctionItem.CensorBidInfo);
data << OptionalInit(auctionItem.AuctionBucketKey);
data << OptionalInit(auctionItem.Creator);
if (!auctionItem.CensorBidInfo)
{
data.WriteBit(auctionItem.Bidder.has_value());
data.WriteBit(auctionItem.BidAmount.has_value());
data << OptionalInit(auctionItem.Bidder);
data << OptionalInit(auctionItem.BidAmount);
}
data.FlushBits();
@@ -295,17 +288,15 @@ void AuctionBrowseQuery::Read()
for (uint8& knownPetMask : KnownPets)
_worldPacket >> knownPetMask;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
uint32 nameLength = _worldPacket.ReadBits(8);
ItemClassFilters.resize(_worldPacket.ReadBits(3));
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> SizedString::BitsSize<8>(Name);
_worldPacket >> BitsSize<3>(ItemClassFilters);
_worldPacket >> BitsSize<2>(Sorts);
if (TaintedBy)
_worldPacket >> *TaintedBy;
Name = _worldPacket.ReadString(nameLength);
_worldPacket >> SizedString::Data(Name);
for (AuctionListFilterClass& filterClass : ItemClassFilters)
_worldPacket >> filterClass;
@@ -316,11 +307,9 @@ void AuctionBrowseQuery::Read()
void AuctionCancelCommoditiesPurchase::Read()
{
_worldPacket >> Auctioneer;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
void AuctionConfirmCommoditiesPurchase::Read()
@@ -328,11 +317,9 @@ void AuctionConfirmCommoditiesPurchase::Read()
_worldPacket >> Auctioneer;
_worldPacket >> ItemID;
_worldPacket >> Quantity;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
void AuctionHelloRequest::Read()
@@ -344,12 +331,9 @@ void AuctionListBiddedItems::Read()
{
_worldPacket >> Auctioneer;
_worldPacket >> Offset;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
AuctionIDs.resize(_worldPacket.ReadBits(7));
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<7>(AuctionIDs);
_worldPacket >> BitsSize<2>(Sorts);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -364,12 +348,9 @@ void AuctionListBiddedItems::Read()
void AuctionListBucketsByBucketKeys::Read()
{
_worldPacket >> Auctioneer;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
BucketKeys.resize(_worldPacket.ReadBits(7));
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<7>(BucketKeys);
_worldPacket >> BitsSize<2>(Sorts);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -386,11 +367,8 @@ void AuctionListItemsByBucketKey::Read()
_worldPacket >> Auctioneer;
_worldPacket >> Offset;
_worldPacket >> Unknown830;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<2>(Sorts);
_worldPacket >> BucketKey;
@@ -407,11 +385,8 @@ void AuctionListItemsByItemID::Read()
_worldPacket >> ItemID;
_worldPacket >> SuffixItemNameDescriptionID;
_worldPacket >> Offset;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<2>(Sorts);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -424,11 +399,8 @@ void AuctionListOwnedItems::Read()
{
_worldPacket >> Auctioneer;
_worldPacket >> Offset;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
Sorts.resize(_worldPacket.ReadBits(2));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<2>(Sorts);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -442,11 +414,9 @@ void AuctionPlaceBid::Read()
_worldPacket >> Auctioneer;
_worldPacket >> AuctionID;
_worldPacket >> BidAmount;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
void AuctionRemoveItem::Read()
@@ -454,11 +424,9 @@ void AuctionRemoveItem::Read()
_worldPacket >> Auctioneer;
_worldPacket >> AuctionID;
_worldPacket >> ItemID;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
void AuctionReplicateItems::Read()
@@ -468,11 +436,9 @@ void AuctionReplicateItems::Read()
_worldPacket >> ChangeNumberCursor;
_worldPacket >> ChangeNumberTombstone;
_worldPacket >> Count;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
void AuctionSellCommodity::Read()
@@ -480,11 +446,8 @@ void AuctionSellCommodity::Read()
_worldPacket >> Auctioneer;
_worldPacket >> UnitPrice;
_worldPacket >> RunTime;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
Items.resize(_worldPacket.ReadBits(6));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<6>(Items);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -499,11 +462,8 @@ void AuctionSellItem::Read()
_worldPacket >> MinBid;
_worldPacket >> BuyoutPrice;
_worldPacket >> RunTime;
if (_worldPacket.ReadBit())
TaintedBy.emplace();
Items.resize(_worldPacket.ReadBits(6));
_worldPacket >> OptionalInit(TaintedBy);
_worldPacket >> BitsSize<6>(Items);
if (TaintedBy)
_worldPacket >> *TaintedBy;
@@ -514,7 +474,7 @@ void AuctionSellItem::Read()
void AuctionSetFavoriteItem::Read()
{
IsNotFavorite = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(IsNotFavorite);
_worldPacket >> Item;
}
@@ -523,18 +483,16 @@ void AuctionGetCommodityQuote::Read()
_worldPacket >> Auctioneer;
_worldPacket >> ItemID;
_worldPacket >> Quantity;
if (_worldPacket.ReadBit())
{
TaintedBy.emplace();
_worldPacket >> OptionalInit(TaintedBy);
if (TaintedBy)
_worldPacket >> *TaintedBy;
}
}
WorldPacket const* AuctionClosedNotification::Write()
{
_worldPacket << Info;
_worldPacket << float(ProceedsMailDelay);
_worldPacket.WriteBit(Sold);
_worldPacket << Bits<1>(Sold);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -556,9 +514,9 @@ WorldPacket const* AuctionCommandResult::Write()
WorldPacket const* AuctionGetCommodityQuoteResult::Write()
{
_worldPacket.WriteBit(TotalPrice.has_value());
_worldPacket.WriteBit(Quantity.has_value());
_worldPacket.WriteBit(QuoteDuration.has_value());
_worldPacket << OptionalInit(TotalPrice);
_worldPacket << OptionalInit(Quantity);
_worldPacket << OptionalInit(QuoteDuration);
_worldPacket << int32(ItemID);
_worldPacket << uint32(DesiredDelay);
@@ -577,7 +535,7 @@ WorldPacket const* AuctionGetCommodityQuoteResult::Write()
WorldPacket const* AuctionFavoriteList::Write()
{
_worldPacket << uint32(DesiredDelay);
_worldPacket.WriteBits(Items.size(), 7);
_worldPacket << BitsSize<7>(Items);
_worldPacket.FlushBits();
for (AuctionFavoriteInfo const& favoriteInfo : Items)
@@ -588,10 +546,10 @@ WorldPacket const* AuctionFavoriteList::Write()
WorldPacket const* AuctionHelloResponse::Write()
{
_worldPacket << Guid;
_worldPacket << uint32(PurchasedItemDeliveryDelay);
_worldPacket << uint32(CancelledItemDeliveryDelay);
_worldPacket.WriteBit(OpenForBusiness);
_worldPacket << Auctioneer;
_worldPacket << uint32(PurchaseDeliveryDelay);
_worldPacket << uint32(CancelDeliveryDelay);
_worldPacket << Bits<1>(OpenForBusiness);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -601,7 +559,7 @@ WorldPacket const* AuctionListBiddedItemsResult::Write()
{
_worldPacket << uint32(Items.size());
_worldPacket << uint32(DesiredDelay);
_worldPacket.WriteBit(HasMoreResults);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (AuctionItem const& item : Items)
@@ -616,8 +574,8 @@ WorldPacket const* AuctionListBucketsResult::Write()
_worldPacket << uint32(DesiredDelay);
_worldPacket << int32(Unknown830_0);
_worldPacket << int32(Unknown830_1);
_worldPacket.WriteBits(AsUnderlyingType(BrowseMode), 1);
_worldPacket.WriteBit(HasMoreResults);
_worldPacket << Bits<1>(BrowseMode);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (BucketInfo const& bucketInfo : Buckets)
@@ -637,8 +595,8 @@ WorldPacket const* AuctionListItemsResult::Write()
}
{
_worldPacket.WriteBits(AsUnderlyingType(ListType), 2);
_worldPacket.WriteBit(HasMoreResults);
_worldPacket << Bits<2>(ListType);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
_worldPacket << BucketKey;
@@ -653,7 +611,7 @@ WorldPacket const* AuctionListOwnedItemsResult::Write()
_worldPacket << int32(Items.size());
_worldPacket << int32(SoldItems.size());
_worldPacket << uint32(DesiredDelay);
_worldPacket.WriteBit(HasMoreResults);
_worldPacket << Bits<1>(HasMoreResults);
_worldPacket.FlushBits();
for (AuctionItem const& item : Items)
@@ -705,4 +663,3 @@ WorldPacket const* AuctionWonNotification::Write()
return &_worldPacket;
}
}
}

View File

@@ -412,9 +412,9 @@ namespace WorldPackets
WorldPacket const* Write() override;
ObjectGuid Guid;
uint32 PurchasedItemDeliveryDelay = 0;
uint32 CancelledItemDeliveryDelay = 0;
ObjectGuid Auctioneer;
uint32 PurchaseDeliveryDelay = 0;
uint32 CancelDeliveryDelay = 0;
bool OpenForBusiness = true;
};

View File

@@ -25,14 +25,14 @@
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::VirtualRealmNameInfo const& virtualRealmInfo)
{
data.WriteBit(virtualRealmInfo.IsLocal);
data.WriteBit(virtualRealmInfo.IsInternalRealm);
data.WriteBits(virtualRealmInfo.RealmNameActual.length(), 8);
data.WriteBits(virtualRealmInfo.RealmNameNormalized.length(), 8);
data << WorldPackets::Bits<1>(virtualRealmInfo.IsLocal);
data << WorldPackets::Bits<1>(virtualRealmInfo.IsInternalRealm);
data << WorldPackets::SizedString::BitsSize<8>(virtualRealmInfo.RealmNameActual);
data << WorldPackets::SizedString::BitsSize<8>(virtualRealmInfo.RealmNameNormalized);
data.FlushBits();
data.WriteString(virtualRealmInfo.RealmNameActual);
data.WriteString(virtualRealmInfo.RealmNameNormalized);
data << WorldPackets::SizedString::Data(virtualRealmInfo.RealmNameActual);
data << WorldPackets::SizedString::Data(virtualRealmInfo.RealmNameNormalized);
return data;
}
@@ -89,12 +89,12 @@ void WorldPackets::Auth::AuthSession::Read()
_worldPacket >> RealmID;
_worldPacket.read(LocalChallenge.data(), LocalChallenge.size());
_worldPacket.read(Digest.data(), Digest.size());
UseIPv6 = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(UseIPv6);
_worldPacket >> realmJoinTicketSize;
if (realmJoinTicketSize)
{
RealmJoinTicket.resize(std::min(realmJoinTicketSize, uint32(_worldPacket.size() - _worldPacket.rpos())));
_worldPacket.read(reinterpret_cast<uint8*>(&RealmJoinTicket[0]), RealmJoinTicket.size());
_worldPacket.read(RealmJoinTicket.data(), RealmJoinTicket.size());
}
}
@@ -103,8 +103,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::AuthWaitInfo const&
data << uint32(waitInfo.WaitCount);
data << uint32(waitInfo.WaitTime);
data << uint32(waitInfo.AllowedFactionGroupForCharacterCreate);
data.WriteBit(waitInfo.HasFCM);
data.WriteBit(waitInfo.CanCreateOnlyIfExisting);
data << WorldPackets::Bits<1>(waitInfo.HasFCM);
data << WorldPackets::Bits<1>(waitInfo.CanCreateOnlyIfExisting);
data.FlushBits();
return data;
@@ -113,8 +113,8 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::AuthWaitInfo const&
WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
{
_worldPacket << uint32(Result);
_worldPacket.WriteBit(SuccessInfo.has_value());
_worldPacket.WriteBit(WaitInfo.has_value());
_worldPacket << OptionalInit(SuccessInfo);
_worldPacket << OptionalInit(WaitInfo);
_worldPacket.FlushBits();
if (SuccessInfo)
@@ -144,21 +144,21 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
}
}
_worldPacket.WriteBit(SuccessInfo->IsExpansionTrial);
_worldPacket.WriteBit(SuccessInfo->ForceCharacterTemplate);
_worldPacket.WriteBit(SuccessInfo->NumPlayersHorde.has_value());
_worldPacket.WriteBit(SuccessInfo->NumPlayersAlliance.has_value());
_worldPacket.WriteBit(SuccessInfo->ExpansionTrialExpiration.has_value());
_worldPacket.WriteBit(SuccessInfo->NewBuildKeys.has_value());
_worldPacket << Bits<1>(SuccessInfo->IsExpansionTrial);
_worldPacket << Bits<1>(SuccessInfo->ForceCharacterTemplate);
_worldPacket << OptionalInit(SuccessInfo->NumPlayersHorde);
_worldPacket << OptionalInit(SuccessInfo->NumPlayersAlliance);
_worldPacket << OptionalInit(SuccessInfo->ExpansionTrialExpiration);
_worldPacket << OptionalInit(SuccessInfo->NewBuildKeys);
_worldPacket.FlushBits();
{
_worldPacket << uint32(SuccessInfo->GameTimeInfo.BillingType);
_worldPacket << uint32(SuccessInfo->GameTimeInfo.MinutesRemaining);
_worldPacket << uint32(SuccessInfo->GameTimeInfo.RealBillingType);
_worldPacket.WriteBit(SuccessInfo->GameTimeInfo.IsInIGR); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG
_worldPacket.WriteBit(SuccessInfo->GameTimeInfo.IsPaidForByIGR); // inGameRoom lua return from Script_GetBillingPlan
_worldPacket.WriteBit(SuccessInfo->GameTimeInfo.IsCAISEnabled); // not used anywhere in the client
_worldPacket << Bits<1>(SuccessInfo->GameTimeInfo.IsInIGR); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG
_worldPacket << Bits<1>(SuccessInfo->GameTimeInfo.IsPaidForByIGR); // inGameRoom lua return from Script_GetBillingPlan
_worldPacket << Bits<1>(SuccessInfo->GameTimeInfo.IsCAISEnabled); // not used anywhere in the client
_worldPacket.FlushBits();
}
@@ -193,12 +193,12 @@ WorldPacket const* WorldPackets::Auth::AuthResponse::Write()
_worldPacket << uint8(templateClass.FactionGroup);
}
_worldPacket.WriteBits(characterTemplate->Name.length(), 7);
_worldPacket.WriteBits(characterTemplate->Description.length(), 10);
_worldPacket << SizedString::BitsSize<7>(characterTemplate->Name);
_worldPacket << SizedString::BitsSize<10>(characterTemplate->Description);
_worldPacket.FlushBits();
_worldPacket.WriteString(characterTemplate->Name);
_worldPacket.WriteString(characterTemplate->Description);
_worldPacket << SizedString::Data(characterTemplate->Name);
_worldPacket << SizedString::Data(characterTemplate->Description);
}
}
@@ -361,7 +361,7 @@ WorldPacket const* WorldPackets::Auth::EnterEncryptedMode::Write()
ed25519.SignWithContext(toSign, { EnableEncryptionContext.begin(), EnableEncryptionContext.end() }, signature);
_worldPacket.append(signature.data(), signature.size());
_worldPacket.WriteBit(Enabled);
_worldPacket << Bits<1>(Enabled);
_worldPacket.FlushBits();
return &_worldPacket;

View File

@@ -26,9 +26,9 @@ WorldPacket const* WorldPackets::Battleground::SeasonInfo::Write()
_worldPacket << int32(ConquestWeeklyProgressCurrencyID);
_worldPacket << int32(PvpSeasonID);
_worldPacket << int32(Unknown1027_1);
_worldPacket.WriteBit(WeeklyRewardChestsEnabled);
_worldPacket.WriteBit(CurrentArenaSeasonUsesTeams);
_worldPacket.WriteBit(PreviousArenaSeasonUsesTeams);
_worldPacket << Bits<1>(WeeklyRewardChestsEnabled);
_worldPacket << Bits<1>(CurrentArenaSeasonUsesTeams);
_worldPacket << Bits<1>(PreviousArenaSeasonUsesTeams);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -203,8 +203,9 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldStatusActive::Write()
_worldPacket << uint32(Mapid);
_worldPacket << uint32(ShutdownTimer);
_worldPacket << uint32(StartTimer);
_worldPacket.WriteBit(ArenaFaction != 0);
_worldPacket.WriteBit(LeftEarly);
_worldPacket << Bits<1>(ArenaFaction != 0);
_worldPacket << Bits<1>(LeftEarly);
_worldPacket << Bits<1>(Brawl);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -215,9 +216,9 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldStatusQueued::Write()
_worldPacket << uint32(AverageWaitTime);
_worldPacket << uint32(WaitTime);
_worldPacket << int32(SpecSelected);
_worldPacket.WriteBit(AsGroup);
_worldPacket.WriteBit(EligibleForMatchmaking);
_worldPacket.WriteBit(SuspendedQueue);
_worldPacket << Bits<1>(AsGroup);
_worldPacket << Bits<1>(EligibleForMatchmaking);
_worldPacket << Bits<1>(SuspendedQueue);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -234,7 +235,7 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldStatusFailed::Write()
void WorldPackets::Battleground::BattlefieldPort::Read()
{
_worldPacket >> Ticket;
AcceptedInvite = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(AcceptedInvite);
}
void WorldPackets::Battleground::BattlefieldListRequest::Read()
@@ -252,24 +253,24 @@ WorldPacket const* WorldPackets::Battleground::BattlefieldList::Write()
if (!Battlefields.empty())
_worldPacket.append(Battlefields.data(), Battlefields.size());
_worldPacket.WriteBit(PvpAnywhere);
_worldPacket.WriteBit(HasRandomWinToday);
_worldPacket << Bits<1>(PvpAnywhere);
_worldPacket << Bits<1>(HasRandomWinToday);
_worldPacket.FlushBits();
return &_worldPacket;
}
WorldPacket const* WorldPackets::Battleground::PVPOptionsEnabled::Write()
{
_worldPacket.WriteBit(RatedBattlegrounds);
_worldPacket.WriteBit(PugBattlegrounds);
_worldPacket.WriteBit(WargameBattlegrounds);
_worldPacket.WriteBit(WargameArenas);
_worldPacket.WriteBit(RatedArenas);
_worldPacket.WriteBit(ArenaSkirmish);
_worldPacket.WriteBit(SoloShuffle);
_worldPacket.WriteBit(RatedSoloShuffle);
_worldPacket.WriteBit(BattlegroundBlitz);
_worldPacket.WriteBit(RatedBattlegroundBlitz);
_worldPacket << Bits<1>(RatedBattlegrounds);
_worldPacket << Bits<1>(PugBattlegrounds);
_worldPacket << Bits<1>(WargameBattlegrounds);
_worldPacket << Bits<1>(WargameArenas);
_worldPacket << Bits<1>(RatedArenas);
_worldPacket << Bits<1>(ArenaSkirmish);
_worldPacket << Bits<1>(SoloShuffle);
_worldPacket << Bits<1>(RatedSoloShuffle);
_worldPacket << Bits<1>(BattlegroundBlitz);
_worldPacket << Bits<1>(RatedBattlegroundBlitz);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -375,9 +376,9 @@ WorldPacket const* WorldPackets::Battleground::PVPMatchInitialize::Write()
_worldPacket << Duration;
_worldPacket << uint8(ArenaFaction);
_worldPacket << uint32(BattlemasterListID);
_worldPacket.WriteBit(Registered);
_worldPacket.WriteBit(AffectsRating);
_worldPacket.WriteBit(DeserterPenalty.has_value());
_worldPacket << Bits<1>(Registered);
_worldPacket << Bits<1>(AffectsRating);
_worldPacket << OptionalInit(DeserterPenalty);
_worldPacket.FlushBits();
if (DeserterPenalty)
@@ -397,8 +398,8 @@ WorldPacket const* WorldPackets::Battleground::PVPMatchComplete::Write()
{
_worldPacket << uint8(Winner);
_worldPacket << Duration;
_worldPacket.WriteBit(LogData.has_value());
_worldPacket.WriteBits(SoloShuffleStatus, 2);
_worldPacket << OptionalInit(LogData);
_worldPacket << Bits<2>(SoloShuffleStatus);
_worldPacket.FlushBits();
if (LogData)

View File

@@ -210,6 +210,7 @@ namespace WorldPackets
uint32 ShutdownTimer = 0;
uint8 ArenaFaction = 0;
bool LeftEarly = false;
bool Brawl = false;
uint32 StartTimer = 0;
uint32 Mapid = 0;
};

View File

@@ -236,12 +236,12 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfoBasi
for (ChrCustomizationChoice const& customization : charInfo.Customizations)
data << customization;
data << BitsSize<6>(charInfo.Name);
data << SizedString::BitsSize<6>(charInfo.Name);
data << Bits<1>(charInfo.FirstLogin);
data.FlushBits();
data.WriteString(charInfo.Name);
data << SizedString::Data(charInfo.Name);
return data;
}
@@ -263,13 +263,12 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterRestrict
data.append(restrictionsAndMails.MailSenderTypes.data(), restrictionsAndMails.MailSenderTypes.size());
for (std::string const& str : restrictionsAndMails.MailSenders)
data << Bits<6>(str.length() + 1);
data << SizedCString::BitsSize<6>(str);
data.FlushBits();
for (std::string const& str : restrictionsAndMails.MailSenders)
if (!str.empty())
data << str;
data << SizedCString::Data(str);
return data;
}

View File

@@ -16,10 +16,11 @@
*/
#include "CollectionPackets.h"
#include "PacketUtilities.h"
void WorldPackets::Collections::CollectionItemSetFavorite::Read()
{
Type = _worldPacket.read<CollectionType>();
ID = _worldPacket.read<uint32>();
IsFavorite = _worldPacket.ReadBit();
_worldPacket >> As<uint32>(Type);
_worldPacket >> ID;
_worldPacket >> Bits<1>(IsFavorite);
}

View File

@@ -15,23 +15,16 @@
* with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef CollectionPackets_h__
#define CollectionPackets_h__
#ifndef TRINITYCORE_COLLECTION_PACKETS_H
#define TRINITYCORE_COLLECTION_PACKETS_H
#include "DBCEnums.h"
#include "Packet.h"
namespace WorldPackets
{
namespace Collections
{
enum CollectionType : int32
{
NONE = -1,
TOYBOX = 1,
APPEARANCE = 3,
TRANSMOG_SET = 4
};
class CollectionItemSetFavorite final : public ClientPacket
{
public:
@@ -39,11 +32,11 @@ namespace WorldPackets
void Read() override;
CollectionType Type = NONE;
ItemCollectionType Type = ItemCollectionType::None;
uint32 ID = 0;
bool IsFavorite = false;
};
}
}
#endif // CollectionPackets_h__
#endif // TRINITYCORE_COLLECTION_PACKETS_H

View File

@@ -91,10 +91,10 @@ WorldPacket const* WorldPackets::Guild::GuildCommandResult::Write()
_worldPacket << int32(Result);
_worldPacket << int32(Command);
_worldPacket.WriteBits(Name.length(), 8);
_worldPacket << SizedString::BitsSize<8>(Name);
_worldPacket.FlushBits();
_worldPacket.WriteString(Name);
_worldPacket << SizedString::Data(Name);
return &_worldPacket;
}

View File

@@ -674,8 +674,10 @@ WorldPacket const* WorldPackets::Movement::TransferPending::Write()
{
_worldPacket << int32(MapID);
_worldPacket << OldMapPosition;
_worldPacket.WriteBit(Ship.has_value());
_worldPacket.WriteBit(TransferSpellID.has_value());
_worldPacket << OptionalInit(Ship);
_worldPacket << OptionalInit(TransferSpellID);
_worldPacket.FlushBits();
if (Ship)
{
_worldPacket << uint32(Ship->ID);
@@ -685,7 +687,6 @@ WorldPacket const* WorldPackets::Movement::TransferPending::Write()
if (TransferSpellID)
_worldPacket << int32(*TransferSpellID);
_worldPacket.FlushBits();
return &_worldPacket;
}
@@ -1054,7 +1055,7 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
data << uint32(stateChange.MessageID);
data << uint32(stateChange.SequenceIndex);
data.WriteBit(stateChange.Speed.has_value());
data.WriteBit(stateChange.SpeedRange.has_value());
data.WriteBit(stateChange.Range.has_value());
data.WriteBit(stateChange.KnockBack.has_value());
data.WriteBit(stateChange.VehicleRecID.has_value());
data.WriteBit(stateChange.CollisionHeight.has_value());
@@ -1070,10 +1071,10 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Movement::MoveSetCompound
if (stateChange.Speed)
data << float(*stateChange.Speed);
if (stateChange.SpeedRange)
if (stateChange.Range)
{
data << float(stateChange.SpeedRange->Min);
data << float(stateChange.SpeedRange->Max);
data << float(stateChange.Range->Min);
data << float(stateChange.Range->Max);
}
if (stateChange.KnockBack)

View File

@@ -707,7 +707,7 @@ namespace WorldPackets
float InitVertSpeed = 0.0f;
};
struct SpeedRange
struct StateChangeRangeInfo
{
float Min = 0.0f;
float Max = 0.0f;
@@ -720,7 +720,7 @@ namespace WorldPackets
uint32 MessageID = 0;
uint32 SequenceIndex = 0;
Optional<float> Speed;
Optional<MoveSetCompoundState::SpeedRange> SpeedRange;
Optional<StateChangeRangeInfo> Range;
Optional<KnockBackInfo> KnockBack;
Optional<int32> VehicleRecID;
Optional<CollisionHeightInfo> CollisionHeight;

View File

@@ -69,30 +69,27 @@ void QueryCreature::Read()
WorldPacket const* QueryCreatureResponse::Write()
{
_worldPacket << uint32(CreatureID);
_worldPacket.WriteBit(Allow);
_worldPacket << Bits<1>(Allow);
_worldPacket.FlushBits();
if (Allow)
{
_worldPacket.WriteBits(Stats.Title.length() + 1, 11);
_worldPacket.WriteBits(Stats.TitleAlt.length() + 1, 11);
_worldPacket.WriteBits(Stats.CursorName.length() + 1, 6);
_worldPacket.WriteBit(Stats.Leader);
_worldPacket << SizedCString::BitsSize<11>(Stats.Title);
_worldPacket << SizedCString::BitsSize<11>(Stats.TitleAlt);
_worldPacket << SizedCString::BitsSize<6>(Stats.CursorName);
_worldPacket << Bits<1>(Stats.Leader);
for (std::size_t i = 0; i < Stats.Name.size(); ++i)
{
_worldPacket.WriteBits(Stats.Name[i].length() + 1, 11);
_worldPacket.WriteBits(Stats.NameAlt[i].length() + 1, 11);
_worldPacket << SizedCString::BitsSize<11>(Stats.Name[i]);
_worldPacket << SizedCString::BitsSize<11>(Stats.NameAlt[i]);
}
for (std::size_t i = 0; i < Stats.Name.size(); ++i)
{
if (!Stats.Name[i].empty())
_worldPacket << Stats.Name[i];
if (!Stats.NameAlt[i].empty())
_worldPacket << Stats.NameAlt[i];
_worldPacket << SizedCString::Data(Stats.Name[i]);
_worldPacket << SizedCString::Data(Stats.NameAlt[i]);
}
_worldPacket.append(Stats.Flags.data(), Stats.Flags.size());
@@ -123,14 +120,9 @@ WorldPacket const* QueryCreatureResponse::Write()
_worldPacket << int32(Stats.WidgetSetID);
_worldPacket << int32(Stats.WidgetSetUnitConditionID);
if (!Stats.Title.empty())
_worldPacket << Stats.Title;
if (!Stats.TitleAlt.empty())
_worldPacket << Stats.TitleAlt;
if (!Stats.CursorName.empty())
_worldPacket << Stats.CursorName;
_worldPacket << SizedCString::Data(Stats.Title);
_worldPacket << SizedCString::Data(Stats.TitleAlt);
_worldPacket << SizedCString::Data(Stats.CursorName);
if (!Stats.QuestItems.empty())
_worldPacket.append(Stats.QuestItems.data(), Stats.QuestItems.size());

View File

@@ -16,15 +16,18 @@
*/
#include "SocialPackets.h"
#include "PacketUtilities.h"
#include "SocialMgr.h"
#include "World.h"
void WorldPackets::Social::SendContactList::Read()
namespace WorldPackets::Social
{
void SendContactList::Read()
{
_worldPacket >> Flags;
}
WorldPackets::Social::ContactInfo::ContactInfo(ObjectGuid const& guid, FriendInfo const& friendInfo)
ContactInfo::ContactInfo(ObjectGuid const& guid, FriendInfo const& friendInfo)
{
Guid = guid;
WowAccountGuid = friendInfo.WowAccountGuid;
@@ -38,7 +41,7 @@ WorldPackets::Social::ContactInfo::ContactInfo(ObjectGuid const& guid, FriendInf
ClassID = friendInfo.Class;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Social::ContactInfo const& contact)
ByteBuffer& operator<<(ByteBuffer& data, ContactInfo const& contact)
{
data << contact.Guid;
data << contact.WowAccountGuid;
@@ -49,17 +52,18 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Social::ContactInfo const
data << uint32(contact.AreaID);
data << uint32(contact.Level);
data << uint32(contact.ClassID);
data.WriteBits(contact.Notes.length(), 10);
data << SizedString::BitsSize<10>(contact.Notes);
data.FlushBits();
data.WriteString(contact.Notes);
data << SizedString::Data(contact.Notes);
return data;
}
WorldPacket const* WorldPackets::Social::ContactList::Write()
WorldPacket const* ContactList::Write()
{
_worldPacket << uint32(Flags);
_worldPacket.WriteBits(Contacts.size(), 8);
_worldPacket << BitsSize<8>(Contacts);
_worldPacket.FlushBits();
for (ContactInfo const& contact : Contacts)
@@ -68,7 +72,7 @@ WorldPacket const* WorldPackets::Social::ContactList::Write()
return &_worldPacket;
}
void WorldPackets::Social::FriendStatus::Initialize(ObjectGuid const& guid, FriendsResult result, FriendInfo const& friendInfo)
void FriendStatus::Initialize(ObjectGuid const& guid, FriendsResult result, FriendInfo const& friendInfo)
{
VirtualRealmAddress = GetVirtualRealmAddress();
Notes = friendInfo.Note;
@@ -81,7 +85,7 @@ void WorldPackets::Social::FriendStatus::Initialize(ObjectGuid const& guid, Frie
FriendResult = result;
}
WorldPacket const* WorldPackets::Social::FriendStatus::Write()
WorldPacket const* FriendStatus::Write()
{
_worldPacket << uint8(FriendResult);
_worldPacket << Guid;
@@ -91,14 +95,15 @@ WorldPacket const* WorldPackets::Social::FriendStatus::Write()
_worldPacket << uint32(AreaID);
_worldPacket << uint32(Level);
_worldPacket << uint32(ClassID);
_worldPacket.WriteBits(Notes.length(), 10);
_worldPacket << SizedString::BitsSize<10>(Notes);
_worldPacket.FlushBits();
_worldPacket.WriteString(Notes);
_worldPacket << SizedString::Data(Notes);
return &_worldPacket;
}
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Social::QualifiedGUID& qGuid)
ByteBuffer& operator>>(ByteBuffer& data, QualifiedGUID& qGuid)
{
data >> qGuid.VirtualRealmAddress;
data >> qGuid.Guid;
@@ -106,41 +111,43 @@ ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Social::QualifiedGUID& qG
return data;
}
void WorldPackets::Social::AddFriend::Read()
void AddFriend::Read()
{
uint32 nameLength = _worldPacket.ReadBits(9);
uint32 noteslength = _worldPacket.ReadBits(9);
Name = _worldPacket.ReadString(nameLength);
Notes = _worldPacket.ReadString(noteslength);
_worldPacket >> SizedString::BitsSize<9>(Name);
_worldPacket >> SizedString::BitsSize<9>(Notes);
_worldPacket >> SizedString::Data(Name);
_worldPacket >> SizedString::Data(Notes);
}
void WorldPackets::Social::DelFriend::Read()
void DelFriend::Read()
{
_worldPacket >> Player;
}
void WorldPackets::Social::SetContactNotes::Read()
void SetContactNotes::Read()
{
_worldPacket >> Player;
Notes = _worldPacket.ReadString(_worldPacket.ReadBits(10));
_worldPacket >> SizedString::BitsSize<10>(Notes);
_worldPacket >> SizedString::Data(Notes);
}
void WorldPackets::Social::AddIgnore::Read()
void AddIgnore::Read()
{
uint32 nameLength = _worldPacket.ReadBits(9);
_worldPacket >> SizedString::BitsSize<9>(Name);
_worldPacket >> AccountGUID;
Name = _worldPacket.ReadString(nameLength);
_worldPacket >> SizedString::Data(Name);
}
void WorldPackets::Social::DelIgnore::Read()
void DelIgnore::Read()
{
_worldPacket >> Player;
}
WorldPacket const* WorldPackets::Social::SocialContractRequestResponse::Write()
{
_worldPacket.WriteBit(ShowSocialContract);
_worldPacket << Bits<1>(ShowSocialContract);
_worldPacket.FlushBits();
return &_worldPacket;
}
}

View File

@@ -48,7 +48,7 @@ WorldPacket const* SendKnownSpells::Write()
{
_worldPacket.reserve(1 + 4 * KnownSpells.size() + 4 * FavoriteSpells.size());
_worldPacket.WriteBit(InitialLogin);
_worldPacket << Bits<1>(InitialLogin);
_worldPacket << uint32(KnownSpells.size());
_worldPacket << uint32(FavoriteSpells.size());
@@ -140,7 +140,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraInfo const& aura)
WorldPacket const* AuraUpdate::Write()
{
_worldPacket.WriteBit(UpdateAll);
_worldPacket << Bits<1>(UpdateAll);
_worldPacket << BitsSize<9>(Auras);
for (AuraInfo const& aura : Auras)
_worldPacket << aura;
@@ -161,30 +161,29 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellTargetData& targetData)
{
buffer.ResetBitPos();
targetData.Flags = buffer.ReadBits(28);
bool hasSrcLocation = buffer.ReadBit();
bool hasDstLocation = buffer.ReadBit();
bool hasOrientation = buffer.ReadBit();
bool hasMapID = buffer.ReadBit();
uint32 nameLength = buffer.ReadBits(7);
buffer >> Bits<28>(targetData.Flags);
buffer >> OptionalInit(targetData.SrcLocation);
buffer >> OptionalInit(targetData.DstLocation);
buffer >> OptionalInit(targetData.Orientation);
buffer >> OptionalInit(targetData.MapID);
buffer >> SizedString::BitsSize<7>(targetData.Name);
buffer >> targetData.Unit;
buffer >> targetData.Item;
if (hasSrcLocation)
buffer >> targetData.SrcLocation.emplace();
if (targetData.SrcLocation)
buffer >> *targetData.SrcLocation;
if (hasDstLocation)
buffer >> targetData.DstLocation.emplace();
if (targetData.DstLocation)
buffer >> *targetData.DstLocation;
if (hasOrientation)
targetData.Orientation = buffer.read<float>();
if (targetData.Orientation)
buffer >> *targetData.Orientation;
if (hasMapID)
targetData.MapID = buffer.read<int32>();
targetData.Name = buffer.ReadString(nameLength);
if (targetData.MapID)
buffer >> *targetData.MapID;
buffer >> SizedString::Data(targetData.Name);
return buffer;
}
@@ -200,8 +199,9 @@ ByteBuffer& operator>>(ByteBuffer& data, SpellCraftingReagent& optionalReagent)
data >> optionalReagent.ItemID;
data >> optionalReagent.DataSlotIndex;
data >> optionalReagent.Quantity;
if (data.ReadBit())
optionalReagent.Source = data.read<uint8>();
data >> OptionalInit(optionalReagent.Source);
if (optionalReagent.Source)
data >> *optionalReagent.Source;
return data;
}
@@ -230,14 +230,14 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
for (SpellExtraCurrencyCost& optionalCurrency : request.OptionalCurrencies)
buffer >> optionalCurrency;
request.SendCastFlags = buffer.ReadBits(5);
bool hasMoveUpdate = buffer.ReadBit();
request.Weight.resize(buffer.ReadBits(2));
bool hasCraftingOrderID = buffer.ReadBit();
buffer >> Bits<5>(request.SendCastFlags);
buffer >> OptionalInit(request.MoveUpdate);
buffer >> BitsSize<2>(request.Weight);
buffer >> OptionalInit(request.CraftingOrderID);
buffer >> request.Target;
if (hasCraftingOrderID)
request.CraftingOrderID = buffer.read<uint64>();
if (request.CraftingOrderID)
buffer >> *request.CraftingOrderID;
for (SpellCraftingReagent& optionalReagent : request.OptionalReagents)
buffer >> optionalReagent;
@@ -245,13 +245,13 @@ ByteBuffer& operator>>(ByteBuffer& buffer, SpellCastRequest& request)
for (SpellCraftingReagent& optionalReagent : request.RemovedModifications)
buffer >> optionalReagent;
if (hasMoveUpdate)
buffer >> request.MoveUpdate.emplace();
if (request.MoveUpdate)
buffer >> *request.MoveUpdate;
for (SpellWeight& weight : request.Weight)
{
buffer.ResetBitPos();
weight.Type = buffer.ReadBits(2);
buffer >> Bits<2>(weight.Type);
buffer >> weight.ID;
buffer >> weight.Quantity;
}
@@ -295,12 +295,12 @@ ByteBuffer& operator<<(ByteBuffer& data, TargetLocation const& targetLocation)
ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData)
{
data.WriteBits(spellTargetData.Flags, 28);
data.WriteBit(spellTargetData.SrcLocation.has_value());
data.WriteBit(spellTargetData.DstLocation.has_value());
data.WriteBit(spellTargetData.Orientation.has_value());
data.WriteBit(spellTargetData.MapID.has_value());
data.WriteBits(spellTargetData.Name.size(), 7);
data << Bits<28>(spellTargetData.Flags);
data << OptionalInit(spellTargetData.SrcLocation);
data << OptionalInit(spellTargetData.DstLocation);
data << OptionalInit(spellTargetData.Orientation);
data << OptionalInit(spellTargetData.MapID);
data << SizedString::BitsSize<7>(spellTargetData.Name);
data.FlushBits();
data << spellTargetData.Unit;
@@ -313,13 +313,12 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellTargetData const& spellTargetData)
data << *spellTargetData.DstLocation;
if (spellTargetData.Orientation)
data << *spellTargetData.Orientation;
data << float(*spellTargetData.Orientation);
if (spellTargetData.MapID)
data << *spellTargetData.MapID;
data.WriteString(spellTargetData.Name);
data << int32(*spellTargetData.MapID);
data << SizedString::Data(spellTargetData.Name);
return data;
}
@@ -394,13 +393,13 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastData const& spellCastData)
data << uint8(spellCastData.DestLocSpellCastIndex);
data << spellCastData.Immunities;
data << spellCastData.Predict;
data.WriteBits(spellCastData.HitTargets.size(), 16);
data.WriteBits(spellCastData.MissTargets.size(), 16);
data.WriteBits(spellCastData.HitStatus.size(), 16);
data.WriteBits(spellCastData.MissStatus.size(), 16);
data.WriteBits(spellCastData.RemainingPower.size(), 9);
data.WriteBit(spellCastData.RemainingRunes.has_value());
data.WriteBits(spellCastData.TargetPoints.size(), 16);
data << BitsSize<16>(spellCastData.HitTargets);
data << BitsSize<16>(spellCastData.MissTargets);
data << BitsSize<16>(spellCastData.HitStatus);
data << BitsSize<16>(spellCastData.MissStatus);
data << BitsSize<9>(spellCastData.RemainingPower);
data << OptionalInit(spellCastData.RemainingRunes);
data << BitsSize<16>(spellCastData.TargetPoints);
data.FlushBits();
data << spellCastData.Target;
@@ -451,10 +450,10 @@ WorldPacket const* SpellGo::Write()
ByteBuffer& operator<<(ByteBuffer& data, LearnedSpellInfo const& learnedSpellInfo)
{
data << int32(learnedSpellInfo.SpellID);
data.WriteBit(learnedSpellInfo.Favorite);
data.WriteBit(learnedSpellInfo.EquipableSpellInvSlot.has_value());
data.WriteBit(learnedSpellInfo.Superceded.has_value());
data.WriteBit(learnedSpellInfo.TraitDefinitionID.has_value());
data << Bits<1>(learnedSpellInfo.Favorite);
data << OptionalInit(learnedSpellInfo.EquipableSpellInvSlot);
data << OptionalInit(learnedSpellInfo.Superceded);
data << OptionalInit(learnedSpellInfo.TraitDefinitionID);
data.FlushBits();
if (learnedSpellInfo.EquipableSpellInvSlot)
@@ -473,7 +472,7 @@ WorldPacket const* LearnedSpells::Write()
{
_worldPacket << uint32(ClientLearnedSpellData.size());
_worldPacket << uint32(SpecializationID);
_worldPacket.WriteBit(SuppressMessaging);
_worldPacket << Bits<1>(SuppressMessaging);
_worldPacket.FlushBits();
for (LearnedSpellInfo const& spell : ClientLearnedSpellData)
@@ -570,7 +569,7 @@ WorldPacket const* UnlearnedSpells::Write()
for (uint32 spellId : SpellID)
_worldPacket << uint32(spellId);
_worldPacket.WriteBit(SuppressMessaging);
_worldPacket << Bits<1>(SuppressMessaging);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -579,7 +578,7 @@ WorldPacket const* UnlearnedSpells::Write()
WorldPacket const* CooldownEvent::Write()
{
_worldPacket << int32(SpellID);
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -591,7 +590,7 @@ WorldPacket const* ClearCooldowns::Write()
if (!SpellID.empty())
_worldPacket.append(SpellID.data(), SpellID.size());
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -600,8 +599,8 @@ WorldPacket const* ClearCooldowns::Write()
WorldPacket const* ClearCooldown::Write()
{
_worldPacket << uint32(SpellID);
_worldPacket.WriteBit(ClearOnHold);
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(ClearOnHold);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -611,8 +610,8 @@ WorldPacket const* ModifyCooldown::Write()
{
_worldPacket << int32(SpellID);
_worldPacket << int32(DeltaTime);
_worldPacket.WriteBit(IsPet);
_worldPacket.WriteBit(WithoutCategoryCooldown);
_worldPacket << Bits<1>(IsPet);
_worldPacket << Bits<1>(WithoutCategoryCooldown);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -645,9 +644,9 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellHistoryEntry const& historyEntry)
data << int32(historyEntry.RecoveryTime);
data << int32(historyEntry.CategoryRecoveryTime);
data << float(historyEntry.ModRate);
data.WriteBit(historyEntry.RecoveryTimeStartOffset.has_value());
data.WriteBit(historyEntry.CategoryRecoveryTimeStartOffset.has_value());
data.WriteBit(historyEntry.OnHold);
data << OptionalInit(historyEntry.RecoveryTimeStartOffset);
data << OptionalInit(historyEntry.CategoryRecoveryTimeStartOffset);
data << Bits<1>(historyEntry.OnHold);
if (historyEntry.RecoveryTimeStartOffset)
data << uint32(*historyEntry.RecoveryTimeStartOffset);
if (historyEntry.CategoryRecoveryTimeStartOffset)
@@ -668,7 +667,7 @@ WorldPacket const* SendSpellHistory::Write()
WorldPacket const* ClearAllSpellCharges::Write()
{
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -677,7 +676,7 @@ WorldPacket const* ClearAllSpellCharges::Write()
WorldPacket const* ClearSpellCharges::Write()
{
_worldPacket << int32(Category);
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -689,7 +688,7 @@ WorldPacket const* SetSpellCharges::Write()
_worldPacket << uint32(NextRecoveryTime);
_worldPacket << uint8(ConsumedCharges);
_worldPacket << float(ChargeModRate);
_worldPacket.WriteBit(IsPet);
_worldPacket << Bits<1>(IsPet);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -739,7 +738,7 @@ WorldPacket const* CancelSpellVisualKit::Write()
{
_worldPacket << Source;
_worldPacket << int32(SpellVisualKitID);
_worldPacket.WriteBit(MountedVisual);
_worldPacket << Bits<1>(MountedVisual);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -756,7 +755,7 @@ WorldPacket const* PlayOrphanSpellVisual::Write()
_worldPacket << float(TravelSpeed);
_worldPacket << float(LaunchDelay);
_worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket << Bits<1>(SpeedAsTime);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -775,7 +774,7 @@ WorldPacket const* PlaySpellVisual::Write()
_worldPacket << uint16(ReflectStatus);
_worldPacket << float(LaunchDelay);
_worldPacket << float(MinDuration);
_worldPacket.WriteBit(SpeedAsTime);
_worldPacket << Bits<1>(SpeedAsTime);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -787,7 +786,7 @@ WorldPacket const* PlaySpellVisualKit::Write()
_worldPacket << int32(KitRecID);
_worldPacket << int32(KitType);
_worldPacket << uint32(Duration);
_worldPacket.WriteBit(MountedVisual);
_worldPacket << Bits<1>(MountedVisual);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -833,8 +832,8 @@ WorldPacket const* SpellChannelStart::Write()
_worldPacket << int32(SpellID);
_worldPacket << Visual;
_worldPacket << uint32(ChannelDuration);
_worldPacket.WriteBit(InterruptImmunities.has_value());
_worldPacket.WriteBit(HealPrediction.has_value());
_worldPacket << OptionalInit(InterruptImmunities);
_worldPacket << OptionalInit(HealPrediction);
_worldPacket.FlushBits();
if (InterruptImmunities)
@@ -871,8 +870,8 @@ WorldPacket const* SpellEmpowerStart::Write()
for (Duration<Milliseconds, uint32> stageDuration : StageDurations)
_worldPacket << stageDuration;
_worldPacket.WriteBit(InterruptImmunities.has_value());
_worldPacket.WriteBit(HealPrediction.has_value());
_worldPacket << OptionalInit(InterruptImmunities);
_worldPacket << OptionalInit(HealPrediction);
_worldPacket.FlushBits();
if (InterruptImmunities)
@@ -929,12 +928,12 @@ WorldPacket const* ResurrectRequest::Write()
_worldPacket << uint32(ResurrectOffererVirtualRealmAddress);
_worldPacket << uint32(PetNumber);
_worldPacket << int32(SpellID);
_worldPacket.WriteBits(Name.length(), 11);
_worldPacket.WriteBit(UseTimer);
_worldPacket.WriteBit(Sickness);
_worldPacket << SizedString::BitsSize<11>(Name);
_worldPacket << Bits<1>(UseTimer);
_worldPacket << Bits<1>(Sickness);
_worldPacket.FlushBits();
_worldPacket.WriteString(Name);
_worldPacket << SizedString::Data(Name);
return &_worldPacket;
}
@@ -994,7 +993,7 @@ WorldPacket const* MirrorImageCreatureData::Write()
void SpellClick::Read()
{
_worldPacket >> SpellClickUnitGuid;
TryAutoDismount = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(TryAutoDismount);
}
WorldPacket const* ResyncRunes::Write()
@@ -1038,11 +1037,11 @@ void UpdateMissileTrajectory::Read()
_worldPacket >> Speed;
_worldPacket >> FirePos;
_worldPacket >> ImpactPos;
bool hasStatus = _worldPacket.ReadBit();
_worldPacket >> OptionalInit(Status);
_worldPacket.ResetBitPos();
if (hasStatus)
_worldPacket >> Status.emplace();
if (Status)
_worldPacket >> *Status;
}
WorldPacket const* SpellDelayed::Write()
@@ -1093,7 +1092,7 @@ WorldPacket const* MissileCancel::Write()
{
_worldPacket << OwnerGUID;
_worldPacket << int32(SpellID);
_worldPacket.WriteBit(Reverse);
_worldPacket << Bits<1>(Reverse);
_worldPacket.FlushBits();
return &_worldPacket;
@@ -1102,7 +1101,7 @@ WorldPacket const* MissileCancel::Write()
void TradeSkillSetFavorite::Read()
{
_worldPacket >> RecipeID;
IsFavorite = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(IsFavorite);
}
void KeyboundOverride::Read()

View File

@@ -148,7 +148,7 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << Bits<1>(false); // unused 10.2.7
_worldPacket << Bits<1>(GuildEventsEditsEnabled);
_worldPacket << Bits<1>(GuildTradeSkillsEnabled);
_worldPacket << BitsSize<7>(Unknown1027);
_worldPacket << SizedString::BitsSize<7>(Unknown1027);
_worldPacket << Bits<1>(BNSendWhisperUseV2Services);
_worldPacket << Bits<1>(BNSendGameDataUseV2Services);
_worldPacket << Bits<1>(IsAccountCurrencyTransferEnabled);
@@ -192,7 +192,7 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket << int32(SessionAlert->DisplayTime);
}
_worldPacket.WriteString(Unknown1027);
_worldPacket << SizedString::Data(Unknown1027);
{
_worldPacket << Bits<1>(Squelch.IsSquelched);

View File

@@ -17,88 +17,85 @@
#include "WhoPackets.h"
void WorldPackets::Who::WhoIsRequest::Read()
namespace WorldPackets::Who
{
CharName = _worldPacket.ReadString(_worldPacket.ReadBits(6));
void WhoIsRequest::Read()
{
_worldPacket >> SizedString::BitsSize<6>(CharName);
_worldPacket >> SizedString::Data(CharName);
}
WorldPacket const* WorldPackets::Who::WhoIsResponse::Write()
WorldPacket const* WhoIsResponse::Write()
{
_worldPacket.WriteBits(AccountName.length(), 11);
_worldPacket << SizedString::BitsSize<11>(AccountName);
_worldPacket.FlushBits();
_worldPacket.WriteString(AccountName);
_worldPacket << SizedString::Data(AccountName);
return &_worldPacket;
}
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Who::WhoWord& word)
ByteBuffer& operator>>(ByteBuffer& data, WhoWord& word)
{
word.Word = data.ReadString(data.ReadBits(7));
data.ResetBitPos();
data >> SizedString::BitsSize<7>(word.Word);
data >> SizedString::Data(word.Word);
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, Optional<WorldPackets::Who::WhoRequestServerInfo>& serverInfo)
ByteBuffer& operator>>(ByteBuffer& data, WhoRequestServerInfo& serverInfo)
{
serverInfo.emplace();
data >> serverInfo->FactionGroup;
data >> serverInfo->Locale;
data >> serverInfo->RequesterVirtualRealmAddress;
data >> serverInfo.FactionGroup;
data >> serverInfo.Locale;
data >> serverInfo.RequesterVirtualRealmAddress;
return data;
}
ByteBuffer& operator>>(ByteBuffer& data, WorldPackets::Who::WhoRequest& request)
ByteBuffer& operator>>(ByteBuffer& data, WhoRequest& request)
{
data >> request.MinLevel;
data >> request.MaxLevel;
data >> request.RaceFilter.RawValue;
data >> request.ClassFilter;
uint32 nameLength = data.ReadBits(6);
uint32 virtualRealmNameLength = data.ReadBits(9);
uint32 guildNameLength = data.ReadBits(7);
uint32 guildVirtualRealmNameLength = data.ReadBits(9);
request.Words.resize(data.ReadBits(3));
request.ShowEnemies = data.ReadBit();
request.ShowArenaPlayers = data.ReadBit();
request.ExactName = data.ReadBit();
bool hasWhoRequest = data.ReadBit();
data.ResetBitPos();
data >> SizedString::BitsSize<6>(request.Name);
data >> SizedString::BitsSize<9>(request.VirtualRealmName);
data >> SizedString::BitsSize<7>(request.Guild);
data >> SizedString::BitsSize<9>(request.GuildVirtualRealmName);
data >> BitsSize<3>(request.Words);
data >> Bits<1>(request.ShowEnemies);
data >> Bits<1>(request.ShowArenaPlayers);
data >> Bits<1>(request.ExactName);
data >> OptionalInit(request.ServerInfo);
for (size_t i = 0; i < request.Words.size(); ++i)
data >> request.Words[i];
request.Name = data.ReadString(nameLength);
request.VirtualRealmName = data.ReadString(virtualRealmNameLength);
request.Guild = data.ReadString(guildNameLength);
request.GuildVirtualRealmName = data.ReadString(guildVirtualRealmNameLength);
data >> SizedString::Data(request.Name);
data >> SizedString::Data(request.VirtualRealmName);
data >> SizedString::Data(request.Guild);
data >> SizedString::Data(request.GuildVirtualRealmName);
if (hasWhoRequest)
data >> request.ServerInfo;
if (request.ServerInfo)
data >> *request.ServerInfo;
return data;
}
void WorldPackets::Who::WhoRequestPkt::Read()
void WhoRequestPkt::Read()
{
Areas.resize(_worldPacket.ReadBits(4));
IsFromAddOn = _worldPacket.ReadBit();
_worldPacket >> BitsSize<4>(Areas);
_worldPacket >> Bits<1>(IsAddon);
_worldPacket >> Request;
_worldPacket >> RequestID;
_worldPacket >> Token;
_worldPacket >> Origin;
for (size_t i = 0; i < Areas.size(); ++i)
_worldPacket >> Areas[i];
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoEntry const& entry)
ByteBuffer& operator<<(ByteBuffer& data, WhoEntry const& entry)
{
data << entry.PlayerData;
@@ -106,30 +103,31 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoEntry const& entr
data << uint32(entry.GuildVirtualRealmAddress);
data << int32(entry.AreaID);
data.WriteBits(entry.GuildName.length(), 7);
data.WriteBit(entry.IsGM);
data << SizedString::BitsSize<7>(entry.GuildName);
data << Bits<1>(entry.IsGM);
data.FlushBits();
data.WriteString(entry.GuildName);
data << SizedString::Data(entry.GuildName);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Who::WhoResponse const& response)
ByteBuffer& operator<<(ByteBuffer& data, WhoResponse const& response)
{
data.WriteBits(response.Entries.size(), 6);
data << BitsSize<6>(response.Entries);
data.FlushBits();
for (WorldPackets::Who::WhoEntry const& whoEntry : response.Entries)
for (WhoEntry const& whoEntry : response.Entries)
data << whoEntry;
return data;
}
WorldPacket const* WorldPackets::Who::WhoResponsePkt::Write()
WorldPacket const* WhoResponsePkt::Write()
{
_worldPacket << uint32(RequestID);
_worldPacket << uint32(Token);
_worldPacket << Response;
return &_worldPacket;
}
}

View File

@@ -84,9 +84,9 @@ namespace WorldPackets
void Read() override;
WhoRequest Request;
uint32 RequestID = 0;
uint32 Token = 0;
uint8 Origin = 0; // 1 = Social, 2 = Chat, 3 = Item
bool IsFromAddOn = false;
bool IsAddon = false;
Array<int32, 10> Areas;
};
@@ -112,7 +112,7 @@ namespace WorldPackets
WorldPacket const* Write() override;
uint32 RequestID = 0;
uint32 Token = 0;
WhoResponse Response;
};
}