Core/PacketIO: Added example uses of new packet reading/writing utilities

This commit is contained in:
Shauren
2024-07-31 11:57:33 +02:00
parent f41ab921b9
commit 6f67ed7fd3
27 changed files with 226 additions and 235 deletions

View File

@@ -99,8 +99,8 @@ ByteBuffer& operator>>(ByteBuffer& data, AuctionListFilterClass& filterClass)
ByteBuffer& operator>>(ByteBuffer& data, AuctionSortDef& sortDef)
{
data.ResetBitPos();
sortDef.SortOrder = static_cast<AuctionHouseSortOrder>(data.ReadBits(4));
sortDef.ReverseSort = data.ReadBit();
data >> Bits<4>(sortDef.SortOrder);
data >> Bits<1>(sortDef.ReverseSort);
return data;
}

View File

@@ -327,7 +327,7 @@ void WorldPackets::Auth::AuthContinuedSession::Read()
void WorldPackets::Auth::ConnectToFailed::Read()
{
Serial = _worldPacket.read<ConnectToSerial>();
_worldPacket >> As<uint32>(Serial);
_worldPacket >> Con;
}

View File

@@ -290,8 +290,8 @@ WorldPacket const* WorldPackets::Calendar::CalendarSendEvent::Write()
_worldPacket << LockDate;
_worldPacket << uint64(EventClubID);
_worldPacket << uint32(Invites.size());
_worldPacket.WriteBits(EventName.size(), 8);
_worldPacket.WriteBits(Description.size(), 11);
_worldPacket << BitsSize<8>(EventName);
_worldPacket << BitsSize<11>(Description);
_worldPacket.FlushBits();
for (auto const& invite : Invites)
@@ -319,7 +319,7 @@ WorldPacket const* WorldPackets::Calendar::CalendarInviteAlert::Write()
_worldPacket << InvitedByGuid;
_worldPacket << OwnerGuid;
_worldPacket.WriteBits(EventName.size(), 8);
_worldPacket << BitsSize<8>(EventName);
_worldPacket.FlushBits();
_worldPacket.WriteString(EventName);

View File

@@ -49,16 +49,7 @@ namespace Character
{
void SortCustomizations(Array<ChrCustomizationChoice, 250>& customizations)
{
auto first = customizations.begin();
auto last = customizations.end();
for (auto itr = first; itr != last; ++itr)
{
auto insertion = std::upper_bound(first, itr, *itr, [](ChrCustomizationChoice const& left, ChrCustomizationChoice const& right)
{
return left.ChrCustomizationOptionID < right.ChrCustomizationOptionID;
});
std::rotate(insertion, itr, std::next(itr));
}
std::ranges::sort(customizations, std::ranges::less(), &ChrCustomizationChoice::ChrCustomizationOptionID);
}
ByteBuffer& operator<<(ByteBuffer& data, CustomTabardInfo const& customTabardInfo)
@@ -88,7 +79,7 @@ EnumCharacters::EnumCharacters(WorldPacket&& packet) : ClientPacket(std::move(pa
ASSERT(GetOpcode() == CMSG_ENUM_CHARACTERS || GetOpcode() == CMSG_ENUM_CHARACTERS_DELETED_BY_CLIENT);
}
EnumCharactersResult::CharacterInfo::CharacterInfo(Field* fields)
EnumCharactersResult::CharacterInfo::CharacterInfo(Field const* fields)
{
// 0 1 2 3 4 5
// "SELECT characters.guid, characters.name, characters.race, characters.class, characters.gender, characters.level, "
@@ -248,15 +239,15 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo con
if (!charInfo.MailSenderTypes.empty())
data.append(charInfo.MailSenderTypes.data(), charInfo.MailSenderTypes.size());
data.WriteBits(charInfo.Name.length(), 6);
data.WriteBit(charInfo.FirstLogin);
data.WriteBit(charInfo.BoostInProgress);
data.WriteBits(charInfo.unkWod61x, 5);
data.WriteBit(charInfo.RpeResetAvailable);
data.WriteBit(charInfo.RpeResetQuestClearAvailable);
data << BitsSize<6>(charInfo.Name);
data << Bits<1>(charInfo.FirstLogin);
data << Bits<1>(charInfo.BoostInProgress);
data << Bits<5>(charInfo.unkWod61x);
data << Bits<1>(charInfo.RpeResetAvailable);
data << Bits<1>(charInfo.RpeResetQuestClearAvailable);
for (std::string const& str : charInfo.MailSenders)
data.WriteBits(str.length() + 1, 6);
data << Bits<6>(str.length() + 1);
data.FlushBits();
@@ -272,11 +263,11 @@ ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::CharacterInfo con
ByteBuffer& operator<<(ByteBuffer& data, EnumCharactersResult::RaceUnlock const& raceUnlock)
{
data << int32(raceUnlock.RaceID);
data.WriteBit(raceUnlock.HasExpansion);
data.WriteBit(raceUnlock.HasAchievement);
data.WriteBit(raceUnlock.HasHeritageArmor);
data.WriteBit(raceUnlock.IsLocked);
data.WriteBit(raceUnlock.Unused1027);
data << Bits<1>(raceUnlock.HasExpansion);
data << Bits<1>(raceUnlock.HasAchievement);
data << Bits<1>(raceUnlock.HasHeritageArmor);
data << Bits<1>(raceUnlock.IsLocked);
data << Bits<1>(raceUnlock.Unused1027);
data.FlushBits();
return data;
@@ -302,13 +293,13 @@ WorldPacket const* EnumCharactersResult::Write()
{
_worldPacket.reserve(9 + Characters.size() * sizeof(CharacterInfo) + RaceUnlockData.size() * sizeof(RaceUnlock));
_worldPacket.WriteBit(Success);
_worldPacket.WriteBit(IsDeletedCharacters);
_worldPacket.WriteBit(IsNewPlayerRestrictionSkipped);
_worldPacket.WriteBit(IsNewPlayerRestricted);
_worldPacket.WriteBit(IsNewPlayer);
_worldPacket.WriteBit(IsTrialAccountRestricted);
_worldPacket.WriteBit(DisabledClassesMask.has_value());
_worldPacket << Bits<1>(Success);
_worldPacket << Bits<1>(IsDeletedCharacters);
_worldPacket << Bits<1>(IsNewPlayerRestrictionSkipped);
_worldPacket << Bits<1>(IsNewPlayerRestricted);
_worldPacket << Bits<1>(IsNewPlayer);
_worldPacket << Bits<1>(IsTrialAccountRestricted);
_worldPacket << OptionalInit(DisabledClassesMask);
_worldPacket << uint32(Characters.size());
_worldPacket << int32(MaxCharacterLevel);
_worldPacket << uint32(RaceUnlockData.size());

View File

@@ -128,7 +128,7 @@ namespace WorldPackets
*
* @param fields Field set of CharacterDatabaseStatements::CHAR_SEL_ENUM
*/
CharacterInfo(Field* fields);
CharacterInfo(Field const* fields);
ObjectGuid Guid;
uint64 GuildClubMemberID = 0; ///< same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known)

View File

@@ -55,7 +55,7 @@ void SpellCastLogData::Initialize(Spell const* spell)
}
if (!primaryPowerAdded)
PowerData.insert(PowerData.begin(), SpellLogPowerData(int32(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0));
PowerData.emplace(PowerData.begin(), int32(primaryPowerType), unitCaster->GetPower(primaryPowerType), 0);
}
}
@@ -160,10 +160,10 @@ ByteBuffer& operator<<(ByteBuffer& data, SpellCastLogData const& spellCastLogDat
data << int32(spellCastLogData.AttackPower);
data << int32(spellCastLogData.SpellPower);
data << int32(spellCastLogData.Armor);
data.WriteBits(spellCastLogData.PowerData.size(), 9);
data << BitsSize<9>(spellCastLogData.PowerData);
data.FlushBits();
for (WorldPackets::Spells::SpellLogPowerData const& powerData : spellCastLogData.PowerData)
for (SpellLogPowerData const& powerData : spellCastLogData.PowerData)
{
data << int32(powerData.PowerType);
data << int32(powerData.Amount);

View File

@@ -48,10 +48,10 @@ ByteBuffer& operator<<(ByteBuffer& data, CraftingData const& craftingData)
for (SpellReducedReagent const& spellReducedReagent : craftingData.ResourcesReturned)
data << spellReducedReagent;
data.WriteBit(craftingData.IsCrit);
data.WriteBit(craftingData.field_29);
data.WriteBit(craftingData.field_2A);
data.WriteBit(craftingData.BonusCraft);
data << Bits<1>(craftingData.IsCrit);
data << Bits<1>(craftingData.field_29);
data << Bits<1>(craftingData.field_2A);
data << Bits<1>(craftingData.BonusCraft);
data.FlushBits();
data << craftingData.OldItem;

View File

@@ -67,7 +67,7 @@ WorldPacket const* WorldPackets::EquipmentSet::LoadEquipmentSet::Write()
void WorldPackets::EquipmentSet::SaveEquipmentSet::Read()
{
Set.Type = _worldPacket.read<EquipmentSetInfo::EquipmentSetType, int32>();
_worldPacket >> As<int32>(Set.Type);
_worldPacket >> Set.Guid;
_worldPacket >> Set.SetID;
_worldPacket >> Set.IgnoreMask;

View File

@@ -253,7 +253,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GarrisonInfo const& garrison)
data << uint32(garrison.NumMissionsStartedToday);
data << int32(garrison.MinAutoTroopLevel);
for (GarrisonPlotInfo* plot : garrison.Plots)
for (GarrisonPlotInfo const* plot : garrison.Plots)
data << *plot;
for (std::vector<GarrisonMissionReward> const& missionReward : garrison.MissionRewards)

View File

@@ -906,8 +906,7 @@ void WorldPackets::Guild::GuildNewsUpdateSticky::Read()
{
_worldPacket >> GuildGUID;
_worldPacket >> NewsID;
NewsID = _worldPacket.ReadBit();
_worldPacket >> Bits<1>(Sticky);
}
void WorldPackets::Guild::GuildSetGuildMaster::Read()

View File

@@ -16,6 +16,7 @@
*/
#include "InstancePackets.h"
#include "PacketUtilities.h"
WorldPacket const* WorldPackets::Instance::UpdateLastInstance::Write()
{
@@ -110,8 +111,8 @@ WorldPacket const* WorldPackets::Instance::RaidInstanceMessage::Write()
_worldPacket << uint8(Type);
_worldPacket << uint32(MapID);
_worldPacket << uint32(DifficultyID);
_worldPacket.WriteBit(Locked);
_worldPacket.WriteBit(Extended);
_worldPacket << Bits<1>(Locked);
_worldPacket << Bits<1>(Extended);
_worldPacket.FlushBits();
return &_worldPacket;

View File

@@ -264,14 +264,14 @@ WorldPacket const* WorldPackets::Item::ItemPushResult::Write()
for (UiEventToast const& uiEventToast : Toasts)
_worldPacket << uiEventToast;
_worldPacket.WriteBit(Pushed);
_worldPacket.WriteBit(Created);
_worldPacket.WriteBit(Unused_1017);
_worldPacket.WriteBits(DisplayText, 3);
_worldPacket.WriteBit(IsBonusRoll);
_worldPacket.WriteBit(IsEncounterLoot);
_worldPacket.WriteBit(CraftingData.has_value());
_worldPacket.WriteBit(FirstCraftOperationID.has_value());
_worldPacket << Bits<1>(Pushed);
_worldPacket << Bits<1>(Created);
_worldPacket << Bits<1>(Unused_1017);
_worldPacket << Bits<3>(DisplayText);
_worldPacket << Bits<1>(IsBonusRoll);
_worldPacket << Bits<1>(IsEncounterLoot);
_worldPacket << OptionalInit(CraftingData);
_worldPacket << OptionalInit(FirstCraftOperationID);
_worldPacket.FlushBits();
_worldPacket << Item;

View File

@@ -147,17 +147,16 @@ ByteBuffer& operator<<(ByteBuffer& data, ItemBonuses const& itemBonusInstanceDat
ByteBuffer& operator>>(ByteBuffer& data, ItemBonuses& itemBonusInstanceData)
{
uint32 bonusListIdSize;
itemBonusInstanceData.Context = data.read<ItemContext>();
uint32 bonusListIdSize;
data >> bonusListIdSize;
if (bonusListIdSize > 32)
throw PacketArrayMaxCapacityException(bonusListIdSize, 32);
for (uint32 i = 0u; i < bonusListIdSize; ++i)
{
uint32 bonusId;
data >> bonusId;
itemBonusInstanceData.BonusListIDs.push_back(bonusId);
}
itemBonusInstanceData.BonusListIDs.resize(bonusListIdSize);
for (int32& bonusListID : itemBonusInstanceData.BonusListIDs)
data >> bonusListID;
return data;
}
@@ -173,14 +172,14 @@ ByteBuffer& operator<<(ByteBuffer& data, ItemMod const& itemMod)
ByteBuffer& operator>>(ByteBuffer& data, ItemMod& itemMod)
{
data >> itemMod.Value;
itemMod.Type = data.read<ItemModifier, uint8>();
data >> As<uint8>(itemMod.Type);
return data;
}
ByteBuffer& operator<<(ByteBuffer& data, ItemModList const& itemModList)
{
data.WriteBits(itemModList.Values.size(), 6);
data << BitsSize<6>(itemModList.Values);
data.FlushBits();
for (ItemMod const& itemMod : itemModList.Values)
@@ -191,7 +190,7 @@ ByteBuffer& operator<<(ByteBuffer& data, ItemModList const& itemModList)
ByteBuffer& operator>>(ByteBuffer& data, ItemModList& itemModList)
{
itemModList.Values.resize(data.ReadBits(6));
data >> BitsSize<6>(itemModList.Values);
data.ResetBitPos();
for (ItemMod& itemMod : itemModList.Values)

View File

@@ -16,13 +16,12 @@
*/
#include "NPCPackets.h"
#include "Util.h"
namespace WorldPackets::NPC
{
ByteBuffer& operator<<(ByteBuffer& data, TreasureItem const& treasureItem)
{
data.WriteBits(AsUnderlyingType(treasureItem.Type), 1);
data << Bits<1>(treasureItem.Type);
data << int32(treasureItem.ID);
data << int32(treasureItem.Quantity);
@@ -47,11 +46,11 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipOptions const& gossipOption
data << uint32(gossipOption.OptionLanguage);
data << int32(gossipOption.Flags);
data << int32(gossipOption.OrderIndex);
data.WriteBits(gossipOption.Text.size(), 12);
data.WriteBits(gossipOption.Confirm.size(), 12);
data.WriteBits(AsUnderlyingType(gossipOption.Status), 2);
data.WriteBit(gossipOption.SpellID.has_value());
data.WriteBit(gossipOption.OverrideIconID.has_value());
data << BitsSize<12>(gossipOption.Text);
data << BitsSize<12>(gossipOption.Confirm);
data << Bits<2>(gossipOption.Status);
data << OptionalInit(gossipOption.SpellID);
data << OptionalInit(gossipOption.OverrideIconID);
data.FlushBits();
data << gossipOption.Treasure;
@@ -76,9 +75,9 @@ ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText)
data << int32(gossipText.QuestFlags[0]);
data << int32(gossipText.QuestFlags[1]);
data.WriteBit(gossipText.Repeatable);
data.WriteBit(gossipText.Important);
data.WriteBits(gossipText.QuestTitle.size(), 9);
data << Bits<1>(gossipText.Repeatable);
data << Bits<1>(gossipText.Important);
data << BitsSize<9>(gossipText.QuestTitle);
data.FlushBits();
data.WriteString(gossipText.QuestTitle);
@@ -108,8 +107,8 @@ WorldPacket const* GossipMessage::Write()
_worldPacket << int32(FriendshipFactionID);
_worldPacket << uint32(GossipOptions.size());
_worldPacket << uint32(GossipText.size());
_worldPacket.WriteBit(TextID.has_value());
_worldPacket.WriteBit(BroadcastTextID.has_value());
_worldPacket << OptionalInit(TextID);
_worldPacket << OptionalInit(BroadcastTextID);
_worldPacket.FlushBits();
for (ClientGossipOptions const& options : GossipOptions)

View File

@@ -94,13 +94,13 @@ namespace WorldPackets
struct ClientGossipText
{
int32 QuestID = 0;
int32 QuestID = 0;
int32 ContentTuningID = 0;
int32 QuestType = 0;
bool Repeatable = false;
bool Important = false;
int32 QuestType = 0;
bool Repeatable = false;
bool Important = false;
std::string QuestTitle;
int32 QuestFlags[2] = { };
std::array<int32, 2> QuestFlags = { };
};
ByteBuffer& operator<<(ByteBuffer& data, ClientGossipText const& gossipText);

View File

@@ -735,9 +735,9 @@ WorldPacket const* WorldPackets::Party::BroadcastSummonResponse::Write()
void WorldPackets::Party::SetRestrictPingsToAssistants::Read()
{
bool hasPartyIndex = _worldPacket.ReadBit();
RestrictPingsToAssistants = _worldPacket.ReadBit();
if (hasPartyIndex)
_worldPacket >> OptionalInit(PartyIndex);
_worldPacket >> Bits<1>(RestrictPingsToAssistants);
if (PartyIndex)
_worldPacket >> PartyIndex.emplace();
}
@@ -764,7 +764,7 @@ void WorldPackets::Party::SendPingWorldPoint::Read()
_worldPacket >> SenderGUID;
_worldPacket >> MapID;
_worldPacket >> Point;
Type = _worldPacket.read<PingSubjectType, uint8>();
_worldPacket >> As<uint8>(Type);
_worldPacket >> PinFrameID;
}

View File

@@ -369,7 +369,7 @@ void QueryCorpseLocationFromClient::Read()
WorldPacket const* CorpseLocation::Write()
{
_worldPacket.WriteBit(Valid);
_worldPacket << Bits<1>(Valid);
_worldPacket.FlushBits();
_worldPacket << Player;

View File

@@ -194,16 +194,16 @@ WorldPacket const* QueryQuestInfoResponse::Write()
for (QuestCompleteDisplaySpell const& rewardDisplaySpell : Info.RewardDisplaySpell)
_worldPacket << rewardDisplaySpell;
_worldPacket.WriteBits(Info.LogTitle.size(), 9);
_worldPacket.WriteBits(Info.LogDescription.size(), 12);
_worldPacket.WriteBits(Info.QuestDescription.size(), 12);
_worldPacket.WriteBits(Info.AreaDescription.size(), 9);
_worldPacket.WriteBits(Info.PortraitGiverText.size(), 10);
_worldPacket.WriteBits(Info.PortraitGiverName.size(), 8);
_worldPacket.WriteBits(Info.PortraitTurnInText.size(), 10);
_worldPacket.WriteBits(Info.PortraitTurnInName.size(), 8);
_worldPacket.WriteBits(Info.QuestCompletionLog.size(), 11);
_worldPacket.WriteBit(Info.ReadyForTranslation);
_worldPacket << BitsSize<9>(Info.LogTitle);
_worldPacket << BitsSize<12>(Info.LogDescription);
_worldPacket << BitsSize<12>(Info.QuestDescription);
_worldPacket << BitsSize<9>(Info.AreaDescription);
_worldPacket << BitsSize<10>(Info.PortraitGiverText);
_worldPacket << BitsSize<8>(Info.PortraitGiverName);
_worldPacket << BitsSize<10>(Info.PortraitTurnInText);
_worldPacket << BitsSize<8>(Info.PortraitTurnInName);
_worldPacket << BitsSize<11>(Info.QuestCompletionLog);
_worldPacket << Bits<1>(Info.ReadyForTranslation);
_worldPacket.FlushBits();
for (QuestObjective const& questObjective : Info.Objectives)
@@ -221,7 +221,7 @@ WorldPacket const* QueryQuestInfoResponse::Write()
for (int32 visualEffect : questObjective.VisualEffects)
_worldPacket << int32(visualEffect);
_worldPacket.WriteBits(questObjective.Description.size(), 8);
_worldPacket << BitsSize<8>(questObjective.Description);
_worldPacket.FlushBits();
_worldPacket.WriteString(questObjective.Description);
@@ -278,7 +278,7 @@ WorldPacket const* QuestUpdateAddPvPCredit::Write()
ByteBuffer& operator<<(ByteBuffer& data, QuestChoiceItem const& questChoiceItem)
{
data.WriteBits(AsUnderlyingType(questChoiceItem.LootItemType), 2);
data << Bits<2>(questChoiceItem.LootItemType);
data << questChoiceItem.Item;
data << int32(questChoiceItem.Quantity);
@@ -288,7 +288,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestChoiceItem const& questChoiceItem)
ByteBuffer& operator>>(ByteBuffer& data, QuestChoiceItem& questChoiceItem)
{
data.ResetBitPos();
questChoiceItem.LootItemType = LootItemType(data.ReadBits(2));
data >> Bits<2>(questChoiceItem.LootItemType);
data >> questChoiceItem.Item;
data >> questChoiceItem.Quantity;
@@ -339,7 +339,7 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestRewards const& questRewards)
for (QuestChoiceItem const& choiceItem : questRewards.ChoiceItems)
data << choiceItem;
data.WriteBit(questRewards.IsBoostSpell);
data << Bits<1>(questRewards.IsBoostSpell);
data.FlushBits();
return data;
@@ -361,8 +361,8 @@ ByteBuffer& operator<<(ByteBuffer& data, QuestGiverOfferReward const& offer)
data << uint32(emote.Delay);
}
data.WriteBit(offer.AutoLaunched);
data.WriteBit(false); // Unused
data << Bits<1>(offer.AutoLaunched);
data << Bits<1>(false); // Unused
data.FlushBits();
data << offer.Rewards; // QuestRewards
@@ -381,12 +381,12 @@ WorldPacket const* QuestGiverOfferRewardMessage::Write()
_worldPacket << int32(QuestGiverCreatureID);
_worldPacket << uint32(ConditionalRewardText.size());
_worldPacket.WriteBits(QuestTitle.size(), 9);
_worldPacket.WriteBits(RewardText.size(), 12);
_worldPacket.WriteBits(PortraitGiverText.size(), 10);
_worldPacket.WriteBits(PortraitGiverName.size(), 8);
_worldPacket.WriteBits(PortraitTurnInText.size(), 10);
_worldPacket.WriteBits(PortraitTurnInName.size(), 8);
_worldPacket << BitsSize<9>(QuestTitle);
_worldPacket << BitsSize<12>(RewardText);
_worldPacket << BitsSize<10>(PortraitGiverText);
_worldPacket << BitsSize<8>(PortraitGiverName);
_worldPacket << BitsSize<10>(PortraitTurnInText);
_worldPacket << BitsSize<8>(PortraitTurnInName);
_worldPacket.FlushBits();
for (ConditionalQuestText const& conditionalQuestText : ConditionalRewardText)
@@ -477,18 +477,18 @@ WorldPacket const* QuestGiverQuestDetails::Write()
_worldPacket << uint8(obj.Type);
}
_worldPacket.WriteBits(QuestTitle.size(), 9);
_worldPacket.WriteBits(DescriptionText.size(), 12);
_worldPacket.WriteBits(LogDescription.size(), 12);
_worldPacket.WriteBits(PortraitGiverText.size(), 10);
_worldPacket.WriteBits(PortraitGiverName.size(), 8);
_worldPacket.WriteBits(PortraitTurnInText.size(), 10);
_worldPacket.WriteBits(PortraitTurnInName.size(), 8);
_worldPacket.WriteBit(AutoLaunched);
_worldPacket.WriteBit(FromContentPush);
_worldPacket.WriteBit(false); // unused in client
_worldPacket.WriteBit(StartCheat);
_worldPacket.WriteBit(DisplayPopup);
_worldPacket << BitsSize<9>(QuestTitle);
_worldPacket << BitsSize<12>(DescriptionText);
_worldPacket << BitsSize<12>(LogDescription);
_worldPacket << BitsSize<10>(PortraitGiverText);
_worldPacket << BitsSize<8>(PortraitGiverName);
_worldPacket << BitsSize<10>(PortraitTurnInText);
_worldPacket << BitsSize<8>(PortraitTurnInName);
_worldPacket << Bits<1>(AutoLaunched);
_worldPacket << Bits<1>(FromContentPush);
_worldPacket << Bits<1>(false); // unused in client
_worldPacket << Bits<1>(StartCheat);
_worldPacket << Bits<1>(DisplayPopup);
_worldPacket.FlushBits();
_worldPacket << Rewards; // QuestRewards
@@ -535,14 +535,14 @@ WorldPacket const* QuestGiverRequestItems::Write()
_worldPacket << int32(cur.Amount);
}
_worldPacket.WriteBit(AutoLaunched);
_worldPacket << Bits<1>(AutoLaunched);
_worldPacket.FlushBits();
_worldPacket << int32(QuestGiverCreatureID);
_worldPacket << uint32(ConditionalCompletionText.size());
_worldPacket.WriteBits(QuestTitle.size(), 9);
_worldPacket.WriteBits(CompletionText.size(), 12);
_worldPacket << BitsSize<9>(QuestTitle);
_worldPacket << BitsSize<12>(CompletionText);
_worldPacket.FlushBits();
for (ConditionalQuestText const& conditionalQuestText : ConditionalCompletionText)

View File

@@ -280,7 +280,7 @@ namespace WorldPackets
int32 SkillLineID = 0;
int32 NumSkillUps = 0;
int32 TreasurePickerID = 0;
std::array<QuestChoiceItem, QUEST_REWARD_CHOICES_COUNT> ChoiceItems;
std::array<QuestChoiceItem, QUEST_REWARD_CHOICES_COUNT> ChoiceItems = { };
std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemID = { };
std::array<int32, QUEST_REWARD_ITEM_COUNT> ItemQty = { };
std::array<int32, QUEST_REWARD_REPUTATIONS_COUNT> FactionID = { };
@@ -302,13 +302,13 @@ namespace WorldPackets
struct QuestGiverOfferReward
{
ObjectGuid QuestGiverGUID;
int32 QuestGiverCreatureID = 0;
int32 QuestID = 0;
bool AutoLaunched = false;
int32 SuggestedPartyMembers = 0;
int32 QuestGiverCreatureID = 0;
int32 QuestID = 0;
bool AutoLaunched = false;
int32 SuggestedPartyMembers = 0;
QuestRewards Rewards;
std::vector<QuestDescEmote> Emotes;
int32 QuestFlags[3] = { }; // Flags and FlagsEx
std::array<int32, 3> QuestFlags = { };
};
class QuestGiverOfferRewardMessage final : public ServerPacket

View File

@@ -16,6 +16,7 @@
*/
#include "ReputationPackets.h"
#include "PacketUtilities.h"
WorldPacket const* WorldPackets::Reputation::InitializeFactions::Write()
{

View File

@@ -16,6 +16,7 @@
*/
#include "ScenePackets.h"
#include "PacketUtilities.h"
WorldPacket const* WorldPackets::Scenes::PlayScene::Write()
{
@@ -24,8 +25,8 @@ WorldPacket const* WorldPackets::Scenes::PlayScene::Write()
_worldPacket << uint32(SceneInstanceID);
_worldPacket << int32(SceneScriptPackageID);
_worldPacket << TransportGUID;
_worldPacket << Location.PositionXYZOStream();
_worldPacket.WriteBit(Encrypted);
_worldPacket << Location;
_worldPacket << Bits<1>(Encrypted);
_worldPacket.FlushBits();
return &_worldPacket;

View File

@@ -18,8 +18,9 @@
#ifndef ScenePackets_h__
#define ScenePackets_h__
#include "ObjectGuid.h"
#include "Packet.h"
#include "Object.h"
#include "Position.h"
namespace WorldPackets
{
@@ -37,7 +38,7 @@ namespace WorldPackets
uint32 SceneInstanceID = 0;
int32 SceneScriptPackageID = 0;
ObjectGuid TransportGUID;
Position Location;
TaggedPosition<Position::XYZO> Location;
bool Encrypted = false;
};

View File

@@ -94,13 +94,13 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData)
data << uint16(auraData.CastLevel);
data << uint8(auraData.Applications);
data << int32(auraData.ContentTuningID);
data.WriteBit(auraData.CastUnit.has_value());
data.WriteBit(auraData.Duration.has_value());
data.WriteBit(auraData.Remaining.has_value());
data.WriteBit(auraData.TimeMod.has_value());
data.WriteBits(auraData.Points.size(), 6);
data.WriteBits(auraData.EstimatedPoints.size(), 6);
data.WriteBit(auraData.ContentTuning.has_value());
data << OptionalInit(auraData.CastUnit);
data << OptionalInit(auraData.Duration);
data << OptionalInit(auraData.Remaining);
data << OptionalInit(auraData.TimeMod);
data << BitsSize<6>(auraData.Points);
data << BitsSize<6>(auraData.EstimatedPoints);
data << OptionalInit(auraData.ContentTuning);
if (auraData.ContentTuning)
data << *auraData.ContentTuning;
@@ -129,7 +129,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraDataInfo const& auraData)
ByteBuffer& operator<<(ByteBuffer& data, AuraInfo const& aura)
{
data << aura.Slot;
data.WriteBit(aura.AuraData.has_value());
data << OptionalInit(aura.AuraData);
data.FlushBits();
if (aura.AuraData)
@@ -141,7 +141,7 @@ ByteBuffer& operator<<(ByteBuffer& data, AuraInfo const& aura)
WorldPacket const* AuraUpdate::Write()
{
_worldPacket.WriteBit(UpdateAll);
_worldPacket.WriteBits(Auras.size(), 9);
_worldPacket << BitsSize<9>(Auras);
for (AuraInfo const& aura : Auras)
_worldPacket << aura;

View File

@@ -30,10 +30,10 @@ ByteBuffer& operator<<(ByteBuffer& data, SavedThrottleObjectState const& throttl
ByteBuffer& operator<<(ByteBuffer& data, EuropaTicketConfig const& europaTicketSystemStatus)
{
data.WriteBit(europaTicketSystemStatus.TicketsEnabled);
data.WriteBit(europaTicketSystemStatus.BugsEnabled);
data.WriteBit(europaTicketSystemStatus.ComplaintsEnabled);
data.WriteBit(europaTicketSystemStatus.SuggestionsEnabled);
data << Bits<1>(europaTicketSystemStatus.TicketsEnabled);
data << Bits<1>(europaTicketSystemStatus.BugsEnabled);
data << Bits<1>(europaTicketSystemStatus.ComplaintsEnabled);
data << Bits<1>(europaTicketSystemStatus.SuggestionsEnabled);
data << europaTicketSystemStatus.ThrottleState;
@@ -50,7 +50,7 @@ ByteBuffer& operator<<(ByteBuffer& data, GameRuleValuePair const& gameRuleValue)
ByteBuffer& operator<<(ByteBuffer& data, DebugTimeEventInfo const& debugTimeEventInfo)
{
data << uint32(debugTimeEventInfo.TimeEvent);
data.WriteBits(debugTimeEventInfo.Text.length(), 7);
data << BitsSize<7>(debugTimeEventInfo.Text);
data.FlushBits();
data.WriteString(debugTimeEventInfo.Text);
@@ -94,59 +94,59 @@ WorldPacket const* FeatureSystemStatus::Write()
for (GameRuleValuePair const& gameRuleValue : GameRuleValues)
_worldPacket << gameRuleValue;
_worldPacket.WriteBit(VoiceEnabled);
_worldPacket.WriteBit(EuropaTicketSystemStatus.has_value());
_worldPacket.WriteBit(BpayStoreEnabled);
_worldPacket.WriteBit(BpayStoreAvailable);
_worldPacket.WriteBit(BpayStoreDisabledByParentalControls);
_worldPacket.WriteBit(ItemRestorationButtonEnabled);
_worldPacket.WriteBit(BrowserEnabled);
_worldPacket.WriteBit(SessionAlert.has_value());
_worldPacket << Bits<1>(VoiceEnabled);
_worldPacket << OptionalInit(EuropaTicketSystemStatus);
_worldPacket << Bits<1>(BpayStoreEnabled);
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(ItemRestorationButtonEnabled);
_worldPacket << Bits<1>(BrowserEnabled);
_worldPacket << OptionalInit(SessionAlert);
_worldPacket.WriteBit(RAFSystem.Enabled);
_worldPacket.WriteBit(RAFSystem.RecruitingEnabled);
_worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(RestrictedAccount);
_worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(TutorialsEnabled);
_worldPacket.WriteBit(Unk67);
_worldPacket.WriteBit(WillKickFromWorld);
_worldPacket << Bits<1>(RAFSystem.Enabled);
_worldPacket << Bits<1>(RAFSystem.RecruitingEnabled);
_worldPacket << Bits<1>(CharUndeleteEnabled);
_worldPacket << Bits<1>(RestrictedAccount);
_worldPacket << Bits<1>(CommerceSystemEnabled);
_worldPacket << Bits<1>(TutorialsEnabled);
_worldPacket << Bits<1>(Unk67);
_worldPacket << Bits<1>(WillKickFromWorld);
_worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled);
_worldPacket.WriteBit(TokenBalanceEnabled);
_worldPacket.WriteBit(WarModeFeatureEnabled);
_worldPacket.WriteBit(ClubsEnabled);
_worldPacket.WriteBit(ClubsBattleNetClubTypeAllowed);
_worldPacket.WriteBit(ClubsCharacterClubTypeAllowed);
_worldPacket.WriteBit(ClubsPresenceUpdateEnabled);
_worldPacket << Bits<1>(KioskModeEnabled);
_worldPacket << Bits<1>(CompetitiveModeEnabled);
_worldPacket << Bits<1>(TokenBalanceEnabled);
_worldPacket << Bits<1>(WarModeFeatureEnabled);
_worldPacket << Bits<1>(ClubsEnabled);
_worldPacket << Bits<1>(ClubsBattleNetClubTypeAllowed);
_worldPacket << Bits<1>(ClubsCharacterClubTypeAllowed);
_worldPacket << Bits<1>(ClubsPresenceUpdateEnabled);
_worldPacket.WriteBit(VoiceChatDisabledByParentalControl);
_worldPacket.WriteBit(VoiceChatMutedByParentalControl);
_worldPacket.WriteBit(QuestSessionEnabled);
_worldPacket.WriteBit(IsMuted);
_worldPacket.WriteBit(ClubFinderEnabled);
_worldPacket.WriteBit(CommunityFinderEnabled);
_worldPacket.WriteBit(Unknown901CheckoutRelated);
_worldPacket.WriteBit(TextToSpeechFeatureEnabled);
_worldPacket << Bits<1>(VoiceChatDisabledByParentalControl);
_worldPacket << Bits<1>(VoiceChatMutedByParentalControl);
_worldPacket << Bits<1>(QuestSessionEnabled);
_worldPacket << Bits<1>(IsMuted);
_worldPacket << Bits<1>(ClubFinderEnabled);
_worldPacket << Bits<1>(CommunityFinderEnabled);
_worldPacket << Bits<1>(Unknown901CheckoutRelated);
_worldPacket << Bits<1>(TextToSpeechFeatureEnabled);
_worldPacket.WriteBit(ChatDisabledByDefault);
_worldPacket.WriteBit(ChatDisabledByPlayer);
_worldPacket.WriteBit(LFGListCustomRequiresAuthenticator);
_worldPacket.WriteBit(AddonsDisabled);
_worldPacket.WriteBit(WarGamesEnabled);
_worldPacket.WriteBit(ContentTrackingEnabled);
_worldPacket.WriteBit(IsSellAllJunkEnabled);
_worldPacket.WriteBit(IsGroupFinderEnabled);
_worldPacket << Bits<1>(ChatDisabledByDefault);
_worldPacket << Bits<1>(ChatDisabledByPlayer);
_worldPacket << Bits<1>(LFGListCustomRequiresAuthenticator);
_worldPacket << Bits<1>(AddonsDisabled);
_worldPacket << Bits<1>(WarGamesEnabled);
_worldPacket << Bits<1>(ContentTrackingEnabled);
_worldPacket << Bits<1>(IsSellAllJunkEnabled);
_worldPacket << Bits<1>(IsGroupFinderEnabled);
_worldPacket.WriteBit(IsLFDEnabled);
_worldPacket.WriteBit(IsLFREnabled);
_worldPacket.WriteBit(IsPremadeGroupEnabled);
_worldPacket.WriteBit(CanShowSetRoleButton);
_worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket.WriteBit(false); // unused 10.2.7
_worldPacket << Bits<1>(IsLFDEnabled);
_worldPacket << Bits<1>(IsLFREnabled);
_worldPacket << Bits<1>(IsPremadeGroupEnabled);
_worldPacket << Bits<1>(CanShowSetRoleButton);
_worldPacket << Bits<1>(false); // unused 10.2.7
_worldPacket << Bits<1>(false); // unused 10.2.7
_worldPacket.WriteBits(Unknown1027.length(), 7);
_worldPacket << BitsSize<7>(Unknown1027);
_worldPacket.FlushBits();
@@ -186,7 +186,7 @@ WorldPacket const* FeatureSystemStatus::Write()
_worldPacket.WriteString(Unknown1027);
{
_worldPacket.WriteBit(Squelch.IsSquelched);
_worldPacket << Bits<1>(Squelch.IsSquelched);
_worldPacket << Squelch.BnetAccountGuid;
_worldPacket << Squelch.GuildGuid;
}
@@ -199,38 +199,38 @@ WorldPacket const* FeatureSystemStatus::Write()
WorldPacket const* FeatureSystemStatusGlueScreen::Write()
{
_worldPacket.WriteBit(BpayStoreEnabled);
_worldPacket.WriteBit(BpayStoreAvailable);
_worldPacket.WriteBit(BpayStoreDisabledByParentalControls);
_worldPacket.WriteBit(CharUndeleteEnabled);
_worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(Unk14);
_worldPacket.WriteBit(WillKickFromWorld);
_worldPacket.WriteBit(IsExpansionPreorderInStore);
_worldPacket << Bits<1>(BpayStoreEnabled);
_worldPacket << Bits<1>(BpayStoreAvailable);
_worldPacket << Bits<1>(BpayStoreDisabledByParentalControls);
_worldPacket << Bits<1>(CharUndeleteEnabled);
_worldPacket << Bits<1>(CommerceSystemEnabled);
_worldPacket << Bits<1>(Unk14);
_worldPacket << Bits<1>(WillKickFromWorld);
_worldPacket << Bits<1>(IsExpansionPreorderInStore);
_worldPacket.WriteBit(KioskModeEnabled);
_worldPacket.WriteBit(CompetitiveModeEnabled);
_worldPacket.WriteBit(IsBoostEnabled);
_worldPacket.WriteBit(TrialBoostEnabled);
_worldPacket.WriteBit(TokenBalanceEnabled);
_worldPacket.WriteBit(LiveRegionCharacterListEnabled);
_worldPacket.WriteBit(LiveRegionCharacterCopyEnabled);
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
_worldPacket << Bits<1>(KioskModeEnabled);
_worldPacket << Bits<1>(CompetitiveModeEnabled);
_worldPacket << Bits<1>(IsBoostEnabled);
_worldPacket << Bits<1>(TrialBoostEnabled);
_worldPacket << Bits<1>(TokenBalanceEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterListEnabled);
_worldPacket << Bits<1>(LiveRegionCharacterCopyEnabled);
_worldPacket << Bits<1>(LiveRegionAccountCopyEnabled);
_worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled);
_worldPacket.WriteBit(Unknown901CheckoutRelated);
_worldPacket.WriteBit(false); // unused, 10.0.2
_worldPacket.WriteBit(EuropaTicketSystemStatus.has_value());
_worldPacket.WriteBit(IsNameReservationEnabled);
_worldPacket.WriteBit(LaunchETA.has_value());
_worldPacket.WriteBit(TimerunningEnabled);
_worldPacket.WriteBit(AddonsDisabled);
_worldPacket << Bits<1>(LiveRegionKeyBindingsCopyEnabled);
_worldPacket << Bits<1>(Unknown901CheckoutRelated);
_worldPacket << Bits<1>(false); // unused, 10.0.2
_worldPacket << OptionalInit(EuropaTicketSystemStatus);
_worldPacket << Bits<1>(IsNameReservationEnabled);
_worldPacket << OptionalInit(LaunchETA);
_worldPacket << Bits<1>(TimerunningEnabled);
_worldPacket << Bits<1>(AddonsDisabled);
_worldPacket.WriteBit(Unused1000);
_worldPacket.WriteBit(AccountSaveDataExportEnabled);
_worldPacket.WriteBit(AccountLockedByExport);
_worldPacket << Bits<1>(Unused1000);
_worldPacket << Bits<1>(AccountSaveDataExportEnabled);
_worldPacket << Bits<1>(AccountLockedByExport);
_worldPacket.WriteBits(RealmHiddenAlert.length() + 1, 11);
_worldPacket << Bits<11>(RealmHiddenAlert.length() + 1);
_worldPacket.FlushBits();
@@ -278,9 +278,9 @@ WorldPacket const* FeatureSystemStatusGlueScreen::Write()
WorldPacket const* SetTimeZoneInformation::Write()
{
_worldPacket.WriteBits(ServerTimeTZ.length(), 7);
_worldPacket.WriteBits(GameTimeTZ.length(), 7);
_worldPacket.WriteBits(ServerRegionalTZ.length(), 7);
_worldPacket << BitsSize<7>(ServerTimeTZ);
_worldPacket << BitsSize<7>(GameTimeTZ);
_worldPacket << BitsSize<7>(ServerRegionalTZ);
_worldPacket.FlushBits();
_worldPacket.WriteString(ServerTimeTZ);

View File

@@ -152,7 +152,6 @@ namespace WorldPackets
struct UnwrappedTradeItem
{
WorldPackets::Item::ItemInstance Item;
int32 EnchantID = 0;
int32 OnUseEnchantmentID = 0;
ObjectGuid Creator;

View File

@@ -5191,7 +5191,7 @@ SpellLogEffect& Spell::GetExecuteLogEffect(SpellEffectName effect)
return _executeLogEffects.back();
}
void Spell::ExecuteLogEffectTakeTargetPower(SpellEffectName effect, Unit* target, uint32 powerType, uint32 points, float amplitude)
void Spell::ExecuteLogEffectTakeTargetPower(SpellEffectName effect, Unit* target, Powers powerType, uint32 points, float amplitude)
{
SpellLogEffectPowerDrainParams spellLogEffectPowerDrainParams;

View File

@@ -176,7 +176,7 @@ struct SpellLogEffectPowerDrainParams
{
ObjectGuid Victim;
uint32 Points = 0;
uint32 PowerType = 0;
Powers PowerType = POWER_MANA;
float Amplitude = 0;
};
@@ -549,7 +549,7 @@ class TC_GAME_API Spell
return *opt;
}
void ExecuteLogEffectTakeTargetPower(SpellEffectName effect, Unit* target, uint32 powerType, uint32 points, float amplitude);
void ExecuteLogEffectTakeTargetPower(SpellEffectName effect, Unit* target, Powers powerType, uint32 points, float amplitude);
void ExecuteLogEffectExtraAttacks(SpellEffectName effect, Unit* victim, uint32 numAttacks);
void ExecuteLogEffectDurabilityDamage(SpellEffectName effect, Unit* victim, int32 itemId, int32 amount);
void ExecuteLogEffectOpenLock(SpellEffectName effect, Object* obj);