diff options
| author | Shauren <shauren.trinity@gmail.com> | 2019-10-26 11:17:33 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2019-10-27 00:12:41 +0200 |
| commit | ee2e49429f4383732b4e0f39b493470b9c1dd10c (patch) | |
| tree | 4204060b24b0469268971b8f1a45084eb0aee26b /src/server/game/Entities/Object | |
| parent | 28eda522b1bef6d354d5a6b54fc0864ea503121a (diff) | |
Core/PacketIO: Update opcodes and packet structures to 8.2.5
Diffstat (limited to 'src/server/game/Entities/Object')
5 files changed, 682 insertions, 442 deletions
diff --git a/src/server/game/Entities/Object/ObjectGuid.cpp b/src/server/game/Entities/Object/ObjectGuid.cpp index 4689e841ade..f4d96c130e0 100644 --- a/src/server/game/Entities/Object/ObjectGuid.cpp +++ b/src/server/game/Entities/Object/ObjectGuid.cpp @@ -90,6 +90,7 @@ namespace SET_GUID_NAME(ClientSession); SET_GUID_NAME(Cast); SET_GUID_NAME(ClientConnection); + SET_GUID_NAME(ClubFinder); #undef SET_GUID_NAME } diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index 3ac339345d6..f5a17c3788f 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -118,6 +118,7 @@ enum class HighGuid ClientSession = 46, Cast = 47, ClientConnection = 48, + ClubFinder = 49, Count, }; @@ -171,6 +172,7 @@ GUID_TRAIT_GLOBAL(HighGuid::CommerceObj) GUID_TRAIT_GLOBAL(HighGuid::ClientSession) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Player) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Item) // This is not exactly correct, there are 2 more unknown parts in highguid: (high >> 10 & 0xFF), (high >> 18 & 0xFFFFFF) +GUID_TRAIT_REALM_SPECIFIC(HighGuid::ChatChannel) GUID_TRAIT_REALM_SPECIFIC(HighGuid::Guild) GUID_TRAIT_MAP_SPECIFIC(HighGuid::WorldTransaction) GUID_TRAIT_MAP_SPECIFIC(HighGuid::Conversation) diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index aaed95d4469..952bc97370f 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -19,6 +19,7 @@ #define UpdateField_h__ #include "ObjectGuid.h" +#include "Optional.h" #include "UpdateMask.h" #include <algorithm> #include <vector> diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index abedd992089..c9c7dcd3191 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -68,7 +68,7 @@ void ObjectData::ClearChangesMask() _changesMask.ResetAll(); } -void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << int32(ID); data << uint32(Duration); @@ -76,7 +76,7 @@ void ItemEnchantment::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla data << uint16(Inactive); } -void ItemEnchantment::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ItemEnchantment::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const { UpdateMask<5> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 5); @@ -112,21 +112,21 @@ void ItemEnchantment::ClearChangesMask() _changesMask.ResetAll(); } -void ArtifactPower::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ArtifactPower::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << int16(ArtifactPowerID); data << uint8(PurchasedRank); data << uint8(CurrentRankWithBonus); } -void ArtifactPower::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void ArtifactPower::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << int16(ArtifactPowerID); data << uint8(PurchasedRank); data << uint8(CurrentRankWithBonus); } -void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void SocketedGem::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << int32(ItemID); for (std::size_t i = 0; i < 16; ++i) @@ -136,7 +136,7 @@ void SocketedGem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> f data << uint8(Context); } -void SocketedGem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void SocketedGem::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const { UpdateMask<20> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlocksMask(0), 1); @@ -198,7 +198,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << uint32(DynamicFlags); for (std::size_t i = 0; i < 13; ++i) { - Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Enchantment[i].WriteCreate(data, owner, receiver); } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { @@ -229,11 +229,11 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel } for (std::size_t i = 0; i < ArtifactPowers.size(); ++i) { - ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ArtifactPowers[i].WriteCreate(data, owner, receiver); } for (std::size_t i = 0; i < Gems.size(); ++i) { - Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Gems[i].WriteCreate(data, owner, receiver); } } @@ -303,7 +303,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, { if (ArtifactPowers.HasChanged(i)) { - ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ArtifactPowers[i].WriteUpdate(data, owner, receiver); } } } @@ -313,7 +313,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, { if (Gems.HasChanged(i)) { - Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Gems[i].WriteUpdate(data, owner, receiver); } } } @@ -394,7 +394,7 @@ void ItemData::WriteUpdate(ByteBuffer& data, UpdateMask<40> const& changesMask, { if (changesMask[27 + i]) { - Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Enchantment[i].WriteUpdate(data, owner, receiver); } } } @@ -504,19 +504,19 @@ void AzeriteEmpoweredItemData::ClearChangesMask() _changesMask.ResetAll(); } -void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << uint32(AzeriteEssenceID); data << uint32(Rank); } -void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const { data << uint32(AzeriteEssenceID); data << uint32(Rank); } -void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 3; ++i) { @@ -527,7 +527,7 @@ void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, EnumClassFlag<Update data.FlushBits(); } -void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const +void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const { UpdateMask<7> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlocksMask(0), 1); @@ -575,14 +575,14 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla data << uint32(Level); data << uint32(AuraLevel); data << uint32(KnowledgeLevel); - data << uint32(DEBUGknowledgeWeek); + data << int32(DEBUGknowledgeWeek); } data << uint32(UnlockedEssences.size()); data << uint32(SelectedEssences.size()); data << uint32(UnlockedEssenceMilestones.size()); for (std::size_t i = 0; i < UnlockedEssences.size(); ++i) { - UnlockedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + UnlockedEssences[i].WriteCreate(data, owner, receiver); } for (std::size_t i = 0; i < UnlockedEssenceMilestones.size(); ++i) { @@ -590,7 +590,7 @@ void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla } for (std::size_t i = 0; i < SelectedEssences.size(); ++i) { - SelectedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SelectedEssences[i].WriteCreate(data, owner, receiver); } } @@ -635,7 +635,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes { if (UnlockedEssences.HasChanged(i)) { - UnlockedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + UnlockedEssences[i].WriteUpdate(data, owner, receiver); } } } @@ -655,7 +655,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes { if (SelectedEssences.HasChanged(i)) { - SelectedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SelectedEssences[i].WriteUpdate(data, owner, receiver); } } } @@ -677,7 +677,7 @@ void AzeriteItemData::WriteUpdate(ByteBuffer& data, UpdateMask<9> const& changes } if (changesMask[8]) { - data << uint32(DEBUGknowledgeWeek); + data << int32(DEBUGknowledgeWeek); } } } @@ -695,26 +695,26 @@ void AzeriteItemData::ClearChangesMask() _changesMask.ResetAll(); } -void UnitChannel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(SpellID); data << int32(SpellXSpellVisualID); } -void UnitChannel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void UnitChannel::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(SpellID); data << int32(SpellXSpellVisualID); } -void VisibleItem::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(ItemID); data << uint16(ItemAppearanceModID); data << uint16(ItemVisual); } -void VisibleItem::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void VisibleItem::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { UpdateMask<4> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 4); @@ -745,13 +745,13 @@ void VisibleItem::ClearChangesMask() _changesMask.ResetAll(); } -void PassiveSpellHistory::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void PassiveSpellHistory::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(SpellID); data << int32(AuraSpellID); } -void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const +void PassiveSpellHistory::WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(SpellID); data << int32(AuraSpellID); @@ -787,7 +787,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << Target; data << BattlePetCompanionGUID; data << uint64(BattlePetDBID); - ChannelData->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ChannelData->WriteCreate(data, owner, receiver); data << uint32(SummonedByHomeRealm); data << uint8(Race); data << uint8(ClassId); @@ -822,7 +822,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(FactionTemplate, owner, receiver)); for (std::size_t i = 0; i < 3; ++i) { - VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + VirtualItems[i].WriteCreate(data, owner, receiver); } data << uint32(ViewerDependentValue<FlagsTag>::GetValue(Flags, owner, receiver)); data << uint32(Flags2); @@ -940,7 +940,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel data << uint32(ChannelObjects.size()); for (std::size_t i = 0; i < PassiveSpells.size(); ++i) { - PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + PassiveSpells[i].WriteCreate(data, owner, receiver); } for (std::size_t i = 0; i < WorldEffects.size(); ++i) { @@ -1012,7 +1012,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, { if (PassiveSpells.HasChanged(i)) { - PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + PassiveSpells[i].WriteUpdate(data, owner, receiver); } } } @@ -1102,7 +1102,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, } if (changesMask[21]) { - ChannelData->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ChannelData->WriteUpdate(data, owner, receiver); } if (changesMask[22]) { @@ -1508,7 +1508,7 @@ void UnitData::WriteUpdate(ByteBuffer& data, UpdateMask<191> const& changesMask, { if (changesMask[143 + i]) { - VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + VirtualItems[i].WriteUpdate(data, owner, receiver); } } } @@ -1693,21 +1693,22 @@ void UnitData::ClearChangesMask() _changesMask.ResetAll(); } -void QuestLog::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(QuestID); data << uint32(StateFlags); data << uint32(EndTime); data << uint32(AcceptTime); + data << uint32(Field_10); for (std::size_t i = 0; i < 24; ++i) { data << int16(ObjectiveProgress[i]); } } -void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void QuestLog::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - UpdateMask<30> const& changesMask = _changesMask; + UpdateMask<31> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlocksMask(0), 1); if (changesMask.GetBlock(0)) data.WriteBits(changesMask.GetBlock(0), 32); @@ -1731,12 +1732,16 @@ void QuestLog::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fiel { data << uint32(AcceptTime); } + if (changesMask[5]) + { + data << uint32(Field_10); + } } - if (changesMask[5]) + if (changesMask[6]) { for (std::size_t i = 0; i < 24; ++i) { - if (changesMask[6 + i]) + if (changesMask[7 + i]) { data << int16(ObjectiveProgress[i]); } @@ -1750,11 +1755,12 @@ void QuestLog::ClearChangesMask() Base::ClearChangesMask(StateFlags); Base::ClearChangesMask(EndTime); Base::ClearChangesMask(AcceptTime); + Base::ClearChangesMask(Field_10); Base::ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } -void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(SpellID); data << int32(Charges); @@ -1765,7 +1771,7 @@ void ArenaCooldown::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> data << uint8(MaxCharges); } -void ArenaCooldown::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void ArenaCooldown::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { UpdateMask<8> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 8); @@ -1844,14 +1850,15 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi data << int32(GuildTimeStamp); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) { - for (std::size_t i = 0; i < 100; ++i) + for (std::size_t i = 0; i < 125; ++i) { - QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + QuestLog[i].WriteCreate(data, owner, receiver); } + data << uint32(QuestSessionQuestLog.size()); } for (std::size_t i = 0; i < 19; ++i) { - VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + VisibleItems[i].WriteCreate(data, owner, receiver); } data << int32(PlayerTitle); data << int32(FakeInebriation); @@ -1867,213 +1874,272 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi data << uint32(ArenaCooldowns.size()); data << int32(Field_B0); data << int32(Field_B4); + data << Field_F8; + data << int32(Field_108); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) + { + for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i) + { + QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); + } + } for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i) { - ArenaCooldowns[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ArenaCooldowns[i].WriteCreate(data, owner, receiver); + } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) + { + data.WriteBit(HasQuestSession); } + data.WriteBit(HasLevelLink); + data.FlushBits(); } void PlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - UpdateMask<161> allowedMaskForTarget({ 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u }); + UpdateMask<192> allowedMaskForTarget({ 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); } -void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const +void PlayerData::AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u }; + allowedMaskForTarget |= { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu }; } -void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void PlayerData::WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { data.WriteBits(changesMask.GetBlocksMask(0), 6); for (std::size_t i = 0; i < 6; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); + bool hasQuestLogDynamicChangesMask = data.WriteBit(IsQuestLogDynamicChangesMask()); if (changesMask[0]) { if (changesMask[1]) { + data.WriteBit(HasQuestSession); + } + if (changesMask[2]) + { + data.WriteBit(HasLevelLink); + } + if (changesMask[3]) + { + QuestSessionQuestLog.WriteUpdateMask(data); + } + if (changesMask[4]) + { ArenaCooldowns.WriteUpdateMask(data); } } data.FlushBits(); if (changesMask[0]) { - if (changesMask[1]) + if (changesMask[3]) + { + for (std::size_t i = 0; i < QuestSessionQuestLog.size(); ++i) + { + if (QuestSessionQuestLog.HasChanged(i)) + { + if (hasQuestLogDynamicChangesMask) + QuestSessionQuestLog[i].WriteUpdate(data, owner, receiver); + else + QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); + } + } + } + if (changesMask[4]) { for (std::size_t i = 0; i < ArenaCooldowns.size(); ++i) { if (ArenaCooldowns.HasChanged(i)) { - ArenaCooldowns[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ArenaCooldowns[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[2]) + if (changesMask[5]) { data << DuelArbiter; } - if (changesMask[3]) + if (changesMask[6]) { data << WowAccount; } - if (changesMask[4]) + if (changesMask[7]) { data << LootTargetGUID; } - if (changesMask[5]) + if (changesMask[8]) { data << uint32(PlayerFlags); } - if (changesMask[6]) + if (changesMask[9]) { data << uint32(PlayerFlagsEx); } - if (changesMask[7]) + if (changesMask[10]) { data << uint32(GuildRankID); } - if (changesMask[8]) + if (changesMask[11]) { data << uint32(GuildDeleteDate); } - if (changesMask[9]) + if (changesMask[12]) { data << int32(GuildLevel); } - if (changesMask[10]) + if (changesMask[13]) { data << uint8(SkinID); } - if (changesMask[11]) + if (changesMask[14]) { data << uint8(FaceID); } - if (changesMask[12]) + if (changesMask[15]) { data << uint8(HairStyleID); } - if (changesMask[13]) + if (changesMask[16]) { data << uint8(HairColorID); } - if (changesMask[14]) + if (changesMask[17]) { data << uint8(FacialHairStyleID); } - if (changesMask[15]) + if (changesMask[18]) { data << uint8(PartyType); } - if (changesMask[16]) + if (changesMask[19]) { data << uint8(NativeSex); } - if (changesMask[17]) + if (changesMask[20]) { data << uint8(Inebriation); } - if (changesMask[18]) + if (changesMask[21]) { data << uint8(PvpTitle); } - if (changesMask[19]) + if (changesMask[22]) { data << uint8(ArenaFaction); } - if (changesMask[20]) + if (changesMask[23]) { data << uint32(DuelTeam); } - if (changesMask[21]) + if (changesMask[24]) { data << int32(GuildTimeStamp); } - if (changesMask[22]) + if (changesMask[25]) { data << int32(PlayerTitle); } - if (changesMask[23]) + if (changesMask[26]) { data << int32(FakeInebriation); } - if (changesMask[24]) + if (changesMask[27]) { data << uint32(VirtualPlayerRealm); } - if (changesMask[25]) + if (changesMask[28]) { data << uint32(CurrentSpecID); } - if (changesMask[26]) + if (changesMask[29]) { data << int32(TaxiMountAnimKitID); } - if (changesMask[27]) + if (changesMask[30]) { data << uint8(CurrentBattlePetBreedQuality); } - if (changesMask[28]) + if (changesMask[31]) { data << int32(HonorLevel); } - if (changesMask[29]) + } + if (changesMask[32]) + { + if (changesMask[33]) { data << int32(Field_B0); } - if (changesMask[30]) + if (changesMask[34]) { data << int32(Field_B4); } + if (changesMask[35]) + { + data << Field_F8; + } + if (changesMask[36]) + { + data << int32(Field_108); + } } - if (changesMask[31]) + if (changesMask[37]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[32 + i]) + if (changesMask[38 + i]) { data << uint8(CustomDisplayOption[i]); } } } - if (changesMask[35]) + if (changesMask[41]) { - for (std::size_t i = 0; i < 100; ++i) + for (std::size_t i = 0; i < 125; ++i) { - if (changesMask[36 + i]) + if (changesMask[42 + i]) { - QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + if (hasQuestLogDynamicChangesMask) + QuestLog[i].WriteUpdate(data, owner, receiver); + else + QuestLog[i].WriteCreate(data, owner, receiver); } } } - if (changesMask[136]) + if (changesMask[167]) { for (std::size_t i = 0; i < 19; ++i) { - if (changesMask[137 + i]) + if (changesMask[168 + i]) { - VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + VisibleItems[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[156]) + if (changesMask[187]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[157 + i]) + if (changesMask[188 + i]) { data << float(AvgItemLevel[i]); } } } + data.FlushBits(); } void PlayerData::ClearChangesMask() { + Base::ClearChangesMask(HasQuestSession); + Base::ClearChangesMask(HasLevelLink); + Base::ClearChangesMask(QuestSessionQuestLog); Base::ClearChangesMask(ArenaCooldowns); Base::ClearChangesMask(DuelArbiter); Base::ClearChangesMask(WowAccount); @@ -2104,6 +2170,8 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(HonorLevel); Base::ClearChangesMask(Field_B0); Base::ClearChangesMask(Field_B4); + Base::ClearChangesMask(Field_F8); + Base::ClearChangesMask(Field_108); Base::ClearChangesMask(CustomDisplayOption); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); @@ -2111,7 +2179,7 @@ void PlayerData::ClearChangesMask() _changesMask.ResetAll(); } -void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SkillInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 256; ++i) { @@ -2125,7 +2193,7 @@ void SkillInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fie } } -void SkillInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SkillInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { UpdateMask<1793> const& changesMask = _changesMask; for (std::size_t i = 0; i < 1; ++i) @@ -2184,13 +2252,13 @@ void SkillInfo::ClearChangesMask() _changesMask.ResetAll(); } -void RestInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void RestInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << uint32(Threshold); data << uint8(StateID); } -void RestInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void RestInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { UpdateMask<3> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 3); @@ -2216,7 +2284,7 @@ void RestInfo::ClearChangesMask() _changesMask.ResetAll(); } -void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << uint32(Field_0); data << uint32(Field_4); @@ -2230,7 +2298,7 @@ void PVPInfo::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> field data.FlushBits(); } -void PVPInfo::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void PVPInfo::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { UpdateMask<10> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 10); @@ -2292,7 +2360,7 @@ void PVPInfo::ClearChangesMask() _changesMask.ResetAll(); } -void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void CharacterRestriction::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(Field_0); data << int32(Field_4); @@ -2301,7 +2369,7 @@ void CharacterRestriction::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFie data.FlushBits(); } -void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void CharacterRestriction::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(Field_0); data << int32(Field_4); @@ -2310,44 +2378,120 @@ void CharacterRestriction::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFie data.FlushBits(); } -void SpellPctModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SpellPctModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ModIndex); data << float(ModifierValue); data << int32(LabelID); } -void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SpellPctModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ModIndex); data << float(ModifierValue); data << int32(LabelID); } -void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SpellFlatModByLabel::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ModIndex); data << int32(ModifierValue); data << int32(LabelID); } -void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void SpellFlatModByLabel::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ModIndex); data << int32(ModifierValue); data << int32(LabelID); } -void Research::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int16(ResearchProjectID); } -void Research::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const +void Research::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int16(ResearchProjectID); } +void ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(QuestID); + data << uint32(ReplayTime); +} + +void ReplayedQuest::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + UpdateMask<3> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(QuestID); + } + if (changesMask[2]) + { + data << uint32(ReplayTime); + } + } +} + +void ReplayedQuest::ClearChangesMask() +{ + Base::ClearChangesMask(QuestID); + Base::ClearChangesMask(ReplayTime); + _changesMask.ResetAll(); +} + +void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << Owner; + for (std::size_t i = 0; i < 875; ++i) + { + data << uint64(QuestCompleted[i]); + } +} + +void QuestSession::WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + UpdateMask<878> const& changesMask = _changesMask; + data.WriteBits(changesMask.GetBlocksMask(0), 28); + for (std::size_t i = 0; i < 28; ++i) + if (changesMask.GetBlock(i)) + data.WriteBits(changesMask.GetBlock(i), 32); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << Owner; + } + } + if (changesMask[2]) + { + for (std::size_t i = 0; i < 875; ++i) + { + if (changesMask[3 + i]) + { + data << uint64(QuestCompleted[i]); + } + } + } +} + +void QuestSession::ClearChangesMask() +{ + Base::ClearChangesMask(Owner); + Base::ClearChangesMask(QuestCompleted); + _changesMask.ResetAll(); +} + void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { for (std::size_t i = 0; i < 195; ++i) @@ -2361,7 +2505,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data << int32(XP); data << int32(NextLevelXP); data << int32(TrialXP); - Skill->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Skill->WriteCreate(data, owner, receiver); data << int32(CharacterPoints); data << int32(MaxTalentTiers); data << int32(TrackCreatureMask); @@ -2398,7 +2542,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl } for (std::size_t i = 0; i < 2; ++i) { - RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + RestInfo[i].WriteCreate(data, owner, receiver); } for (std::size_t i = 0; i < 7; ++i) { @@ -2502,9 +2646,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data << uint32(Research[i].size()); for (std::size_t j = 0; j < Research[i].size(); ++j) { - Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Research[i][j].WriteCreate(data, owner, receiver); } } + data << uint32(ReplayedQuests.size()); + data << uint32(DisabledSpells.size()); for (std::size_t i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -2555,30 +2701,43 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl } for (std::size_t i = 0; i < SpellPctModByLabel.size(); ++i) { - SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SpellPctModByLabel[i].WriteCreate(data, owner, receiver); } for (std::size_t i = 0; i < SpellFlatModByLabel.size(); ++i) { - SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SpellFlatModByLabel[i].WriteCreate(data, owner, receiver); + } + for (std::size_t i = 0; i < ReplayedQuests.size(); ++i) + { + ReplayedQuests[i].WriteCreate(data, owner, receiver); + } + for (std::size_t i = 0; i < DisabledSpells.size(); ++i) + { + data << int32(DisabledSpells[i]); } for (std::size_t i = 0; i < 6; ++i) { - PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + PvpInfo[i].WriteCreate(data, owner, receiver); } data.WriteBit(BackpackAutoSortDisabled); data.WriteBit(BankAutoSortDisabled); data.WriteBit(SortBagsRightToLeft); data.WriteBit(InsertItemsLeftToRight); + data.WriteBit(QuestSession.is_initialized()); for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) { - CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + CharacterRestrictions[i].WriteCreate(data, owner, receiver); + } + if (QuestSession.is_initialized()) + { + QuestSession->WriteCreate(data, owner, receiver); } data.FlushBits(); } void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - UpdateMask<1487> const& changesMask = _changesMask; + UpdateMask<1490> const& changesMask = _changesMask; for (std::size_t i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); data.WriteBits(changesMask.GetBlocksMask(1), 15); @@ -2665,33 +2824,45 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl SpellFlatModByLabel.WriteUpdateMask(data); } } - if (changesMask[20]) + if (changesMask[22]) { for (std::size_t i = 0; i < 1; ++i) { - if (changesMask[21 + i]) + if (changesMask[23 + i]) { Research[i].WriteUpdateMask(data); } } } - data.FlushBits(); - if (changesMask[20]) + if (changesMask[22]) { for (std::size_t i = 0; i < 1; ++i) { - if (changesMask[21 + i]) + if (changesMask[23 + i]) { for (std::size_t j = 0; j < Research[i].size(); ++j) { if (Research[i].HasChanged(j)) { - Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Research[i][j].WriteUpdate(data, owner, receiver); } } } } } + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[20]) + { + ReplayedQuests.WriteUpdateMask(data); + } + if (changesMask[21]) + { + DisabledSpells.WriteUpdateMask(data); + } + } + data.FlushBits(); if (changesMask[0]) { if (changesMask[5]) @@ -2820,7 +2991,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl { if (SpellPctModByLabel.HasChanged(i)) { - SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SpellPctModByLabel[i].WriteUpdate(data, owner, receiver); } } } @@ -2830,487 +3001,519 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl { if (SpellFlatModByLabel.HasChanged(i)) { - SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SpellFlatModByLabel[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[17]) + if (changesMask[20]) { - for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) + for (std::size_t i = 0; i < ReplayedQuests.size(); ++i) { - if (CharacterRestrictions.HasChanged(i)) + if (ReplayedQuests.HasChanged(i)) { - CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ReplayedQuests[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[22]) + if (changesMask[21]) { - data << FarsightObject; + for (std::size_t i = 0; i < DisabledSpells.size(); ++i) + { + if (DisabledSpells.HasChanged(i)) + { + data << int32(DisabledSpells[i]); + } + } } - if (changesMask[23]) + if (changesMask[17]) { - data << SummonedBattlePetGUID; + for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) + { + if (CharacterRestrictions.HasChanged(i)) + { + CharacterRestrictions[i].WriteUpdate(data, owner, receiver); + } + } } if (changesMask[24]) { - data << uint64(Coinage); + data << FarsightObject; } if (changesMask[25]) { - data << int32(XP); + data << SummonedBattlePetGUID; } if (changesMask[26]) { - data << int32(NextLevelXP); + data << uint64(Coinage); } if (changesMask[27]) { - data << int32(TrialXP); + data << int32(XP); } if (changesMask[28]) { - Skill->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + data << int32(NextLevelXP); } if (changesMask[29]) { - data << int32(CharacterPoints); + data << int32(TrialXP); } if (changesMask[30]) { - data << int32(MaxTalentTiers); + Skill->WriteUpdate(data, owner, receiver); } if (changesMask[31]) { - data << int32(TrackCreatureMask); + data << int32(CharacterPoints); } if (changesMask[32]) { - data << float(MainhandExpertise); + data << int32(MaxTalentTiers); } if (changesMask[33]) { - data << float(OffhandExpertise); + data << int32(TrackCreatureMask); } } if (changesMask[34]) { if (changesMask[35]) { - data << float(RangedExpertise); + data << float(MainhandExpertise); } if (changesMask[36]) { - data << float(CombatRatingExpertise); + data << float(OffhandExpertise); } if (changesMask[37]) { - data << float(BlockPercentage); + data << float(RangedExpertise); } if (changesMask[38]) { - data << float(DodgePercentage); + data << float(CombatRatingExpertise); } if (changesMask[39]) { - data << float(DodgePercentageFromAttribute); + data << float(BlockPercentage); } if (changesMask[40]) { - data << float(ParryPercentage); + data << float(DodgePercentage); } if (changesMask[41]) { - data << float(ParryPercentageFromAttribute); + data << float(DodgePercentageFromAttribute); } if (changesMask[42]) { - data << float(CritPercentage); + data << float(ParryPercentage); } if (changesMask[43]) { - data << float(RangedCritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[44]) { - data << float(OffhandCritPercentage); + data << float(CritPercentage); } if (changesMask[45]) { - data << float(SpellCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[46]) { - data << int32(ShieldBlock); + data << float(OffhandCritPercentage); } if (changesMask[47]) { - data << float(ShieldBlockCritPercentage); + data << float(SpellCritPercentage); } if (changesMask[48]) { - data << float(Mastery); + data << int32(ShieldBlock); } if (changesMask[49]) { - data << float(Speed); + data << float(ShieldBlockCritPercentage); } if (changesMask[50]) { - data << float(Avoidance); + data << float(Mastery); } if (changesMask[51]) { - data << float(Sturdiness); + data << float(Speed); } if (changesMask[52]) { - data << int32(Versatility); + data << float(Avoidance); } if (changesMask[53]) { - data << float(VersatilityBonus); + data << float(Sturdiness); } if (changesMask[54]) { - data << float(PvpPowerDamage); + data << int32(Versatility); } if (changesMask[55]) { - data << float(PvpPowerHealing); + data << float(VersatilityBonus); } if (changesMask[56]) { - data << int32(ModHealingDonePos); + data << float(PvpPowerDamage); } if (changesMask[57]) { - data << float(ModHealingPercent); + data << float(PvpPowerHealing); } if (changesMask[58]) { - data << float(ModHealingDonePercent); + data << int32(ModHealingDonePos); } if (changesMask[59]) { - data << float(ModPeriodicHealingDonePercent); + data << float(ModHealingPercent); } if (changesMask[60]) { - data << float(ModSpellPowerPercent); + data << float(ModHealingDonePercent); } if (changesMask[61]) { - data << float(ModResiliencePercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[62]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModSpellPowerPercent); } if (changesMask[63]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(ModResiliencePercent); } if (changesMask[64]) { - data << int32(ModTargetResistance); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[65]) { - data << int32(ModTargetPhysicalResistance); + data << float(OverrideAPBySpellPowerPercent); } } if (changesMask[66]) { if (changesMask[67]) { - data << int32(LocalFlags); + data << int32(ModTargetResistance); } if (changesMask[68]) { - data << uint8(GrantableLevels); + data << int32(ModTargetPhysicalResistance); } if (changesMask[69]) { - data << uint8(MultiActionBars); + data << int32(LocalFlags); } if (changesMask[70]) { - data << uint8(LifetimeMaxRank); + data << uint8(GrantableLevels); } if (changesMask[71]) { - data << uint8(NumRespecs); + data << uint8(MultiActionBars); } if (changesMask[72]) { - data << uint32(PvpMedals); + data << uint8(LifetimeMaxRank); } if (changesMask[73]) { - data << uint16(TodayHonorableKills); + data << uint8(NumRespecs); } if (changesMask[74]) { - data << uint16(YesterdayHonorableKills); + data << uint32(PvpMedals); } if (changesMask[75]) { - data << uint32(LifetimeHonorableKills); + data << uint16(TodayHonorableKills); } if (changesMask[76]) { - data << int32(WatchedFactionIndex); + data << uint16(YesterdayHonorableKills); } if (changesMask[77]) { - data << int32(MaxLevel); + data << uint32(LifetimeHonorableKills); } if (changesMask[78]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(WatchedFactionIndex); } if (changesMask[79]) { - data << int32(MaxCreatureScalingLevel); + data << int32(MaxLevel); } if (changesMask[80]) { - data << int32(PetSpellPower); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[81]) { - data << float(UiHitModifier); + data << int32(MaxCreatureScalingLevel); } if (changesMask[82]) { - data << float(UiSpellHitModifier); + data << int32(PetSpellPower); } if (changesMask[83]) { - data << int32(HomeRealmTimeOffset); + data << float(UiHitModifier); } if (changesMask[84]) { - data << float(ModPetHaste); + data << float(UiSpellHitModifier); } if (changesMask[85]) { - data << uint8(LocalRegenFlags); + data << int32(HomeRealmTimeOffset); } if (changesMask[86]) { - data << uint8(AuraVision); + data << float(ModPetHaste); } if (changesMask[87]) { - data << uint8(NumBackpackSlots); + data << uint8(LocalRegenFlags); } if (changesMask[88]) { - data << int32(OverrideSpellsID); + data << uint8(AuraVision); } if (changesMask[89]) { - data << int32(LfgBonusFactionID); + data << uint8(NumBackpackSlots); } if (changesMask[90]) { - data << uint16(LootSpecID); + data << int32(OverrideSpellsID); } if (changesMask[91]) { - data << uint32(OverrideZonePVPType); + data << int32(LfgBonusFactionID); } if (changesMask[92]) { - data << int32(Honor); + data << uint16(LootSpecID); } if (changesMask[93]) { - data << int32(HonorNextLevel); + data << uint32(OverrideZonePVPType); } if (changesMask[94]) { - data << int32(PvpRewardAchieved); + data << int32(Honor); } if (changesMask[95]) { - data << int32(PvpTierMaxFromWins); + data << int32(HonorNextLevel); } if (changesMask[96]) { - data << int32(PvpLastWeeksRewardAchieved); + data << int32(PvpRewardAchieved); } if (changesMask[97]) { - data << int32(PvpLastWeeksTierMaxFromWins); + data << int32(PvpTierMaxFromWins); } } if (changesMask[98]) { if (changesMask[99]) { - data << int32(PvpLastWeeksRewardClaimed); + data << int32(PvpLastWeeksRewardAchieved); } if (changesMask[100]) { + data << int32(PvpLastWeeksTierMaxFromWins); + } + if (changesMask[101]) + { + data << int32(PvpLastWeeksRewardClaimed); + } + if (changesMask[102]) + { data << uint8(NumBankSlots); } } - if (changesMask[101]) + data.FlushBits(); + if (changesMask[98]) + { + data.WriteBit(QuestSession.is_initialized()); + if (changesMask[103]) + { + if (QuestSession.is_initialized()) + { + QuestSession->WriteUpdate(data, owner, receiver); + } + } + } + if (changesMask[104]) { for (std::size_t i = 0; i < 195; ++i) { - if (changesMask[102 + i]) + if (changesMask[105 + i]) { data << InvSlots[i]; } } } - if (changesMask[297]) + if (changesMask[300]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[298 + i]) + if (changesMask[301 + i]) { data << uint32(TrackResourceMask[i]); } } } - if (changesMask[300]) + if (changesMask[303]) { for (std::size_t i = 0; i < 192; ++i) { - if (changesMask[301 + i]) + if (changesMask[304 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[493]) + if (changesMask[496]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[494 + i]) + if (changesMask[497 + i]) { - RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + RestInfo[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[496]) + if (changesMask[499]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[497 + i]) + if (changesMask[500 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[504 + i]) + if (changesMask[507 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[511 + i]) + if (changesMask[514 + i]) { data << float(ModDamageDonePercent[i]); } } } - if (changesMask[518]) + if (changesMask[521]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[519 + i]) + if (changesMask[522 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[522 + i]) + if (changesMask[525 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[525]) + if (changesMask[528]) { for (std::size_t i = 0; i < 12; ++i) { - if (changesMask[526 + i]) + if (changesMask[529 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[538 + i]) + if (changesMask[541 + i]) { data << uint32(BuybackTimestamp[i]); } } } - if (changesMask[550]) + if (changesMask[553]) { for (std::size_t i = 0; i < 32; ++i) { - if (changesMask[551 + i]) + if (changesMask[554 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[590]) + if (changesMask[593]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[591 + i]) + if (changesMask[594 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[595]) + if (changesMask[598]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[596 + i]) + if (changesMask[599 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[598]) + if (changesMask[601]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[599 + i]) + if (changesMask[602 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[603]) + if (changesMask[606]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[604 + i]) + if (changesMask[607 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[611]) + if (changesMask[614]) { for (std::size_t i = 0; i < 875; ++i) { - if (changesMask[612 + i]) + if (changesMask[615 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[583]) + if (changesMask[586]) { for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[584 + i]) + if (changesMask[587 + i]) { - PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + PvpInfo[i].WriteUpdate(data, owner, receiver); } } } @@ -3338,6 +3541,8 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(SelfResSpells); Base::ClearChangesMask(SpellPctModByLabel); Base::ClearChangesMask(SpellFlatModByLabel); + Base::ClearChangesMask(ReplayedQuests); + Base::ClearChangesMask(DisabledSpells); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(FarsightObject); Base::ClearChangesMask(SummonedBattlePetGUID); @@ -3415,6 +3620,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins); Base::ClearChangesMask(PvpLastWeeksRewardClaimed); Base::ClearChangesMask(NumBankSlots); + Base::ClearChangesMask(QuestSession); Base::ClearChangesMask(InvSlots); Base::ClearChangesMask(TrackResourceMask); Base::ClearChangesMask(ExploredZones); @@ -3804,7 +4010,7 @@ void CorpseData::ClearChangesMask() _changesMask.ResetAll(); } -void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +void ScaleCurve::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const { data << uint32(StartTimeOffset); for (std::size_t i = 0; i < 2; ++i) @@ -3816,7 +4022,7 @@ void ScaleCurve::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fi data.FlushBits(); } -void ScaleCurve::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const +void ScaleCurve::WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const { UpdateMask<7> const& changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 7); @@ -3864,7 +4070,7 @@ void ScaleCurve::ClearChangesMask() void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const { - OverrideScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + OverrideScaleCurve->WriteCreate(data, owner, receiver); data << Caster; data << uint32(Duration); data << uint32(TimeToTarget); @@ -3876,7 +4082,7 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla data << float(BoundsRadius2D); data << uint32(DecalPropertiesID); data << CreatingEffectGUID; - ExtraScaleCurve->WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ExtraScaleCurve->WriteCreate(data, owner, receiver); } void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const @@ -3889,7 +4095,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla { if (changesMask[1]) { - OverrideScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + OverrideScaleCurve->WriteUpdate(data, owner, receiver); } if (changesMask[3]) { @@ -3937,7 +4143,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFla } if (changesMask[2]) { - ExtraScaleCurve->WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ExtraScaleCurve->WriteUpdate(data, owner, receiver); } } } @@ -4004,7 +4210,7 @@ void SceneObjectData::ClearChangesMask() _changesMask.ResetAll(); } -void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { data << int32(ConversationLineID); data << uint32(StartTime); @@ -4013,7 +4219,7 @@ void ConversationLine::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data << uint8(Flags); } -void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationLine::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { data << int32(ConversationLineID); data << uint32(StartTime); @@ -4022,7 +4228,7 @@ void ConversationLine::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data << uint8(Flags); } -void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { data << uint32(CreatureID); data << uint32(CreatureDisplayInfoID); @@ -4032,7 +4238,7 @@ void ConversationActor::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldF data.FlushBits(); } -void ConversationActor::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const +void ConversationActor::WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { data << uint32(CreatureID); data << uint32(CreatureDisplayInfoID); @@ -4049,12 +4255,12 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data << uint32(Field_1C); for (std::size_t i = 0; i < Lines->size(); ++i) { - (*Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + (*Lines)[i].WriteCreate(data, owner, receiver); } data << uint32(Actors.size()); for (std::size_t i = 0; i < Actors.size(); ++i) { - Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Actors[i].WriteCreate(data, owner, receiver); } } @@ -4070,7 +4276,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl data.WriteBits(Lines->size(), 32); for (std::size_t i = 0; i < Lines->size(); ++i) { - (*Lines)[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + (*Lines)[i].WriteUpdate(data, owner, receiver); } } } @@ -4091,7 +4297,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFl { if (Actors.HasChanged(i)) { - Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Actors[i].WriteUpdate(data, owner, receiver); } } } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 148cc41e842..b519b79a625 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -58,8 +58,8 @@ struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask UpdateField<int16, 0, 3> Charges; UpdateField<uint16, 0, 4> Inactive; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -69,8 +69,8 @@ struct ArtifactPower : public IsUpdateFieldStructureTag uint8 PurchasedRank; uint8 CurrentRankWithBonus; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const; }; struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20> @@ -79,8 +79,8 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20> UpdateField<uint8, 0, 2> Context; UpdateFieldArray<uint16, 16, 3, 4> BonusListIDs; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -88,8 +88,8 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> { UpdateField<std::vector<int32>, 0, 1> BonusListIDs; DynamicUpdateField<int32, 0, 2> Modifiers; - DynamicUpdateField<ArtifactPower, 0, 3> ArtifactPowers; - DynamicUpdateField<SocketedGem, 0, 4> Gems; + DynamicUpdateField<UF::ArtifactPower, 0, 3> ArtifactPowers; + DynamicUpdateField<UF::SocketedGem, 0, 4> Gems; UpdateField<ObjectGuid, 0, 5> Owner; UpdateField<ObjectGuid, 0, 6> ContainedIn; UpdateField<ObjectGuid, 0, 7> Creator; @@ -106,7 +106,7 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<40> UpdateField<uint8, 0, 18> ItemAppearanceModID; UpdateField<uint32, 0, 19> Field_130; UpdateFieldArray<int32, 5, 20, 21> SpellCharges; - UpdateFieldArray<ItemEnchantment, 13, 26, 27> Enchantment; + UpdateFieldArray<UF::ItemEnchantment, 13, 26, 27> Enchantment; void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; @@ -139,8 +139,8 @@ struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag uint32 AzeriteEssenceID; uint32 Rank; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const; }; struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<7> @@ -149,21 +149,21 @@ struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasCha UpdateField<uint32, 0, 2> Enabled; UpdateFieldArray<uint32, 3, 3, 4> AzeriteEssenceID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Item const* owner, Player const* receiver) const; void ClearChangesMask(); }; struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<9> { - DynamicUpdateField<UnlockedAzeriteEssence, 0, 1> UnlockedEssences; + DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 1> UnlockedEssences; DynamicUpdateField<uint32, 0, 3> UnlockedEssenceMilestones; - DynamicUpdateField<SelectedAzeriteEssences, 0, 2> SelectedEssences; + DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 2> SelectedEssences; UpdateField<uint64, 0, 4> Xp; UpdateField<uint32, 0, 5> Level; UpdateField<uint32, 0, 6> AuraLevel; UpdateField<uint32, 0, 7> KnowledgeLevel; - UpdateField<uint32, 0, 8> DEBUGknowledgeWeek; + UpdateField<int32, 0, 8> DEBUGknowledgeWeek; void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; @@ -177,8 +177,8 @@ struct UnitChannel : public IsUpdateFieldStructureTag int32 SpellID; int32 SpellXSpellVisualID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; }; struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4> @@ -187,8 +187,8 @@ struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4> UpdateField<uint16, 0, 2> ItemAppearanceModID; UpdateField<uint16, 0, 3> ItemVisual; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -197,14 +197,14 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag int32 SpellID; int32 AuraSpellID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; }; struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; - DynamicUpdateField<PassiveSpellHistory, 0, 2> PassiveSpells; + DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; DynamicUpdateField<int32, 0, 3> WorldEffects; DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects; UpdateField<int32, 0, 5> DisplayID; @@ -224,7 +224,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191> UpdateField<ObjectGuid, 0, 18> Target; UpdateField<ObjectGuid, 0, 19> BattlePetCompanionGUID; UpdateField<uint64, 0, 20> BattlePetDBID; - UpdateField<UnitChannel, 0, 21> ChannelData; + UpdateField<UF::UnitChannel, 0, 21> ChannelData; UpdateField<uint32, 0, 22> SummonedByHomeRealm; UpdateField<uint8, 0, 23> Race; UpdateField<uint8, 0, 24> ClassId; @@ -324,7 +324,7 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191> UpdateFieldArray<int32, 6, 117, 124> MaxPower; UpdateFieldArray<float, 6, 117, 130> PowerRegenFlatModifier; UpdateFieldArray<float, 6, 117, 136> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<VisibleItem, 3, 142, 143> VirtualItems; + UpdateFieldArray<UF::VisibleItem, 3, 142, 143> VirtualItems; UpdateFieldArray<uint32, 2, 146, 147> AttackRoundBaseTime; UpdateFieldArray<int32, 4, 149, 150> Stats; UpdateFieldArray<int32, 4, 149, 154> StatPosBuff; @@ -341,16 +341,17 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<191> void ClearChangesMask(); }; -struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30> +struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<31> { UpdateField<int32, 0, 1> QuestID; UpdateField<uint32, 0, 2> StateFlags; UpdateField<uint32, 0, 3> EndTime; UpdateField<uint32, 0, 4> AcceptTime; - UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress; + UpdateField<uint32, 0, 5> Field_10; + UpdateFieldArray<int16, 24, 6, 7> ObjectiveProgress; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -364,53 +365,59 @@ struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8 UpdateField<uint32, 0, 6> NextChargeTime; UpdateField<uint8, 0, 7> MaxCharges; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<161> -{ - DynamicUpdateField<ArenaCooldown, 0, 1> ArenaCooldowns; - UpdateField<ObjectGuid, 0, 2> DuelArbiter; - UpdateField<ObjectGuid, 0, 3> WowAccount; - UpdateField<ObjectGuid, 0, 4> LootTargetGUID; - UpdateField<uint32, 0, 5> PlayerFlags; - UpdateField<uint32, 0, 6> PlayerFlagsEx; - UpdateField<uint32, 0, 7> GuildRankID; - UpdateField<uint32, 0, 8> GuildDeleteDate; - UpdateField<int32, 0, 9> GuildLevel; - UpdateField<uint8, 0, 10> SkinID; - UpdateField<uint8, 0, 11> FaceID; - UpdateField<uint8, 0, 12> HairStyleID; - UpdateField<uint8, 0, 13> HairColorID; - UpdateField<uint8, 0, 14> FacialHairStyleID; - UpdateField<uint8, 0, 15> PartyType; - UpdateField<uint8, 0, 16> NativeSex; - UpdateField<uint8, 0, 17> Inebriation; - UpdateField<uint8, 0, 18> PvpTitle; - UpdateField<uint8, 0, 19> ArenaFaction; - UpdateField<uint32, 0, 20> DuelTeam; - UpdateField<int32, 0, 21> GuildTimeStamp; - UpdateField<int32, 0, 22> PlayerTitle; - UpdateField<int32, 0, 23> FakeInebriation; - UpdateField<uint32, 0, 24> VirtualPlayerRealm; - UpdateField<uint32, 0, 25> CurrentSpecID; - UpdateField<int32, 0, 26> TaxiMountAnimKitID; - UpdateField<uint8, 0, 27> CurrentBattlePetBreedQuality; - UpdateField<int32, 0, 28> HonorLevel; - UpdateField<int32, 0, 29> Field_B0; - UpdateField<int32, 0, 30> Field_B4; - UpdateFieldArray<uint8, 3, 31, 32> CustomDisplayOption; - UpdateFieldArray<QuestLog, 100, 35, 36> QuestLog; - UpdateFieldArray<VisibleItem, 19, 136, 137> VisibleItems; - UpdateFieldArray<float, 4, 156, 157> AvgItemLevel; +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<192> +{ + UpdateField<bool, 0, 1> HasQuestSession; + UpdateField<bool, 0, 2> HasLevelLink; + DynamicUpdateField<UF::QuestLog, 0, 3> QuestSessionQuestLog; + DynamicUpdateField<UF::ArenaCooldown, 0, 4> ArenaCooldowns; + UpdateField<ObjectGuid, 0, 5> DuelArbiter; + UpdateField<ObjectGuid, 0, 6> WowAccount; + UpdateField<ObjectGuid, 0, 7> LootTargetGUID; + UpdateField<uint32, 0, 8> PlayerFlags; + UpdateField<uint32, 0, 9> PlayerFlagsEx; + UpdateField<uint32, 0, 10> GuildRankID; + UpdateField<uint32, 0, 11> GuildDeleteDate; + UpdateField<int32, 0, 12> GuildLevel; + UpdateField<uint8, 0, 13> SkinID; + UpdateField<uint8, 0, 14> FaceID; + UpdateField<uint8, 0, 15> HairStyleID; + UpdateField<uint8, 0, 16> HairColorID; + UpdateField<uint8, 0, 17> FacialHairStyleID; + UpdateField<uint8, 0, 18> PartyType; + UpdateField<uint8, 0, 19> NativeSex; + UpdateField<uint8, 0, 20> Inebriation; + UpdateField<uint8, 0, 21> PvpTitle; + UpdateField<uint8, 0, 22> ArenaFaction; + UpdateField<uint32, 0, 23> DuelTeam; + UpdateField<int32, 0, 24> GuildTimeStamp; + UpdateField<int32, 0, 25> PlayerTitle; + UpdateField<int32, 0, 26> FakeInebriation; + UpdateField<uint32, 0, 27> VirtualPlayerRealm; + UpdateField<uint32, 0, 28> CurrentSpecID; + UpdateField<int32, 0, 29> TaxiMountAnimKitID; + UpdateField<uint8, 0, 30> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 31> HonorLevel; + UpdateField<int32, 32, 33> Field_B0; + UpdateField<int32, 32, 34> Field_B4; + UpdateField<ObjectGuid, 32, 35> Field_F8; + UpdateField<int32, 32, 36> Field_108; + UpdateFieldArray<uint8, 3, 37, 38> CustomDisplayOption; + UpdateFieldArray<UF::QuestLog, 125, 41, 42> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 167, 168> VisibleItems; + UpdateFieldArray<float, 4, 187, 188> AvgItemLevel; void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void AppendAllowedFieldsMaskForFlag(UpdateMask<161>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; - void WriteUpdate(ByteBuffer& data, UpdateMask<161> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void AppendAllowedFieldsMaskForFlag(UpdateMask<192>& allowedMaskForTarget, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags) const; + void WriteUpdate(ByteBuffer& data, UpdateMask<192> const& changesMask, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void ClearChangesMask(); + bool IsQuestLogDynamicChangesMask() const { return false; } // bandwidth savings aren't worth the cpu time }; struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793> @@ -423,8 +430,8 @@ struct SkillInfo : public IsUpdateFieldStructureTag, public HasChangesMask<1793> UpdateFieldArray<int16, 256, 0, 1281> SkillTempBonus; UpdateFieldArray<uint16, 256, 0, 1537> SkillPermBonus; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -433,8 +440,8 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> UpdateField<uint32, 0, 1> Threshold; UpdateField<uint8, 0, 2> StateID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -450,8 +457,8 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> UpdateField<uint32, 0, 8> PvpTierID; UpdateField<uint32, 0, 9> Field_20; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void ClearChangesMask(); }; @@ -462,8 +469,8 @@ struct CharacterRestriction : public IsUpdateFieldStructureTag int32 Field_8; uint32 Type; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; }; struct SpellPctModByLabel : public IsUpdateFieldStructureTag @@ -472,8 +479,8 @@ struct SpellPctModByLabel : public IsUpdateFieldStructureTag float ModifierValue; int32 LabelID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; }; struct SpellFlatModByLabel : public IsUpdateFieldStructureTag @@ -482,25 +489,45 @@ struct SpellFlatModByLabel : public IsUpdateFieldStructureTag int32 ModifierValue; int32 LabelID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; }; struct Research : public IsUpdateFieldStructureTag { int16 ResearchProjectID; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1487> +struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + UpdateField<int32, 0, 1> QuestID; + UpdateField<uint32, 0, 2> ReplayTime; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<878> +{ + UpdateField<ObjectGuid, 0, 1> Owner; + UpdateFieldArray<uint64, 875, 2, 3> QuestCompleted; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1490> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BankAutoSortDisabled; UpdateField<bool, 0, 3> SortBagsRightToLeft; UpdateField<bool, 0, 4> InsertItemsLeftToRight; - UpdateFieldArray<DynamicUpdateField<Research, -1, -1>, 1, 20, 21> Research; + UpdateFieldArray<DynamicUpdateField<UF::Research, -1, -1>, 1, 22, 23> Research; DynamicUpdateField<uint64, 0, 5> KnownTitles; DynamicUpdateField<uint16, 0, 6> ResearchSites; DynamicUpdateField<uint32, 0, 7> ResearchSiteProgress; @@ -513,103 +540,106 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField<uint32, 0, 14> Transmog; DynamicUpdateField<int32, 0, 15> ConditionalTransmog; DynamicUpdateField<int32, 0, 16> SelfResSpells; - DynamicUpdateField<SpellPctModByLabel, 0, 18> SpellPctModByLabel; - DynamicUpdateField<SpellFlatModByLabel, 0, 19> SpellFlatModByLabel; - DynamicUpdateField<CharacterRestriction, 0, 17> CharacterRestrictions; - UpdateField<ObjectGuid, 0, 22> FarsightObject; - UpdateField<ObjectGuid, 0, 23> SummonedBattlePetGUID; - UpdateField<uint64, 0, 24> Coinage; - UpdateField<int32, 0, 25> XP; - UpdateField<int32, 0, 26> NextLevelXP; - UpdateField<int32, 0, 27> TrialXP; - UpdateField<SkillInfo, 0, 28> Skill; - UpdateField<int32, 0, 29> CharacterPoints; - UpdateField<int32, 0, 30> MaxTalentTiers; - UpdateField<int32, 0, 31> TrackCreatureMask; - UpdateField<float, 0, 32> MainhandExpertise; - UpdateField<float, 0, 33> OffhandExpertise; - UpdateField<float, 34, 35> RangedExpertise; - UpdateField<float, 34, 36> CombatRatingExpertise; - UpdateField<float, 34, 37> BlockPercentage; - UpdateField<float, 34, 38> DodgePercentage; - UpdateField<float, 34, 39> DodgePercentageFromAttribute; - UpdateField<float, 34, 40> ParryPercentage; - UpdateField<float, 34, 41> ParryPercentageFromAttribute; - UpdateField<float, 34, 42> CritPercentage; - UpdateField<float, 34, 43> RangedCritPercentage; - UpdateField<float, 34, 44> OffhandCritPercentage; - UpdateField<float, 34, 45> SpellCritPercentage; - UpdateField<int32, 34, 46> ShieldBlock; - UpdateField<float, 34, 47> ShieldBlockCritPercentage; - UpdateField<float, 34, 48> Mastery; - UpdateField<float, 34, 49> Speed; - UpdateField<float, 34, 50> Avoidance; - UpdateField<float, 34, 51> Sturdiness; - UpdateField<int32, 34, 52> Versatility; - UpdateField<float, 34, 53> VersatilityBonus; - UpdateField<float, 34, 54> PvpPowerDamage; - UpdateField<float, 34, 55> PvpPowerHealing; - UpdateField<int32, 34, 56> ModHealingDonePos; - UpdateField<float, 34, 57> ModHealingPercent; - UpdateField<float, 34, 58> ModHealingDonePercent; - UpdateField<float, 34, 59> ModPeriodicHealingDonePercent; - UpdateField<float, 34, 60> ModSpellPowerPercent; - UpdateField<float, 34, 61> ModResiliencePercent; - UpdateField<float, 34, 62> OverrideSpellPowerByAPPercent; - UpdateField<float, 34, 63> OverrideAPBySpellPowerPercent; - UpdateField<int32, 34, 64> ModTargetResistance; - UpdateField<int32, 34, 65> ModTargetPhysicalResistance; - UpdateField<int32, 66, 67> LocalFlags; - UpdateField<uint8, 66, 68> GrantableLevels; - UpdateField<uint8, 66, 69> MultiActionBars; - UpdateField<uint8, 66, 70> LifetimeMaxRank; - UpdateField<uint8, 66, 71> NumRespecs; - UpdateField<uint32, 66, 72> PvpMedals; - UpdateField<uint16, 66, 73> TodayHonorableKills; - UpdateField<uint16, 66, 74> YesterdayHonorableKills; - UpdateField<uint32, 66, 75> LifetimeHonorableKills; - UpdateField<int32, 66, 76> WatchedFactionIndex; - UpdateField<int32, 66, 77> MaxLevel; - UpdateField<int32, 66, 78> ScalingPlayerLevelDelta; - UpdateField<int32, 66, 79> MaxCreatureScalingLevel; - UpdateField<int32, 66, 80> PetSpellPower; - UpdateField<float, 66, 81> UiHitModifier; - UpdateField<float, 66, 82> UiSpellHitModifier; - UpdateField<int32, 66, 83> HomeRealmTimeOffset; - UpdateField<float, 66, 84> ModPetHaste; - UpdateField<uint8, 66, 85> LocalRegenFlags; - UpdateField<uint8, 66, 86> AuraVision; - UpdateField<uint8, 66, 87> NumBackpackSlots; - UpdateField<int32, 66, 88> OverrideSpellsID; - UpdateField<int32, 66, 89> LfgBonusFactionID; - UpdateField<uint16, 66, 90> LootSpecID; - UpdateField<uint32, 66, 91> OverrideZonePVPType; - UpdateField<int32, 66, 92> Honor; - UpdateField<int32, 66, 93> HonorNextLevel; - UpdateField<int32, 66, 94> PvpRewardAchieved; - UpdateField<int32, 66, 95> PvpTierMaxFromWins; - UpdateField<int32, 66, 96> PvpLastWeeksRewardAchieved; - UpdateField<int32, 66, 97> PvpLastWeeksTierMaxFromWins; - UpdateField<int32, 98, 99> PvpLastWeeksRewardClaimed; - UpdateField<uint8, 98, 100> NumBankSlots; - UpdateFieldArray<ObjectGuid, 195, 101, 102> InvSlots; - UpdateFieldArray<uint32, 2, 297, 298> TrackResourceMask; - UpdateFieldArray<uint64, 192, 300, 301> ExploredZones; - UpdateFieldArray<RestInfo, 2, 493, 494> RestInfo; - UpdateFieldArray<int32, 7, 496, 497> ModDamageDonePos; - UpdateFieldArray<int32, 7, 496, 504> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 496, 511> ModDamageDonePercent; - UpdateFieldArray<float, 3, 518, 519> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 518, 522> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 525, 526> BuybackPrice; - UpdateFieldArray<uint32, 12, 525, 538> BuybackTimestamp; - UpdateFieldArray<int32, 32, 550, 551> CombatRatings; - UpdateFieldArray<PVPInfo, 6, 583, 584> PvpInfo; - UpdateFieldArray<uint32, 4, 590, 591> NoReagentCostMask; - UpdateFieldArray<int32, 2, 595, 596> ProfessionSkillLine; - UpdateFieldArray<uint32, 4, 598, 599> BagSlotFlags; - UpdateFieldArray<uint32, 7, 603, 604> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 611, 612> QuestCompleted; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 18> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 19> SpellFlatModByLabel; + DynamicUpdateField<UF::ReplayedQuest, 0, 20> ReplayedQuests; + DynamicUpdateField<int32, 0, 21> DisabledSpells; + DynamicUpdateField<UF::CharacterRestriction, 0, 17> CharacterRestrictions; + UpdateField<ObjectGuid, 0, 24> FarsightObject; + UpdateField<ObjectGuid, 0, 25> SummonedBattlePetGUID; + UpdateField<uint64, 0, 26> Coinage; + UpdateField<int32, 0, 27> XP; + UpdateField<int32, 0, 28> NextLevelXP; + UpdateField<int32, 0, 29> TrialXP; + UpdateField<UF::SkillInfo, 0, 30> Skill; + UpdateField<int32, 0, 31> CharacterPoints; + UpdateField<int32, 0, 32> MaxTalentTiers; + UpdateField<int32, 0, 33> TrackCreatureMask; + UpdateField<float, 34, 35> MainhandExpertise; + UpdateField<float, 34, 36> OffhandExpertise; + UpdateField<float, 34, 37> RangedExpertise; + UpdateField<float, 34, 38> CombatRatingExpertise; + UpdateField<float, 34, 39> BlockPercentage; + UpdateField<float, 34, 40> DodgePercentage; + UpdateField<float, 34, 41> DodgePercentageFromAttribute; + UpdateField<float, 34, 42> ParryPercentage; + UpdateField<float, 34, 43> ParryPercentageFromAttribute; + UpdateField<float, 34, 44> CritPercentage; + UpdateField<float, 34, 45> RangedCritPercentage; + UpdateField<float, 34, 46> OffhandCritPercentage; + UpdateField<float, 34, 47> SpellCritPercentage; + UpdateField<int32, 34, 48> ShieldBlock; + UpdateField<float, 34, 49> ShieldBlockCritPercentage; + UpdateField<float, 34, 50> Mastery; + UpdateField<float, 34, 51> Speed; + UpdateField<float, 34, 52> Avoidance; + UpdateField<float, 34, 53> Sturdiness; + UpdateField<int32, 34, 54> Versatility; + UpdateField<float, 34, 55> VersatilityBonus; + UpdateField<float, 34, 56> PvpPowerDamage; + UpdateField<float, 34, 57> PvpPowerHealing; + UpdateField<int32, 34, 58> ModHealingDonePos; + UpdateField<float, 34, 59> ModHealingPercent; + UpdateField<float, 34, 60> ModHealingDonePercent; + UpdateField<float, 34, 61> ModPeriodicHealingDonePercent; + UpdateField<float, 34, 62> ModSpellPowerPercent; + UpdateField<float, 34, 63> ModResiliencePercent; + UpdateField<float, 34, 64> OverrideSpellPowerByAPPercent; + UpdateField<float, 34, 65> OverrideAPBySpellPowerPercent; + UpdateField<int32, 66, 67> ModTargetResistance; + UpdateField<int32, 66, 68> ModTargetPhysicalResistance; + UpdateField<int32, 66, 69> LocalFlags; + UpdateField<uint8, 66, 70> GrantableLevels; + UpdateField<uint8, 66, 71> MultiActionBars; + UpdateField<uint8, 66, 72> LifetimeMaxRank; + UpdateField<uint8, 66, 73> NumRespecs; + UpdateField<uint32, 66, 74> PvpMedals; + UpdateField<uint16, 66, 75> TodayHonorableKills; + UpdateField<uint16, 66, 76> YesterdayHonorableKills; + UpdateField<uint32, 66, 77> LifetimeHonorableKills; + UpdateField<int32, 66, 78> WatchedFactionIndex; + UpdateField<int32, 66, 79> MaxLevel; + UpdateField<int32, 66, 80> ScalingPlayerLevelDelta; + UpdateField<int32, 66, 81> MaxCreatureScalingLevel; + UpdateField<int32, 66, 82> PetSpellPower; + UpdateField<float, 66, 83> UiHitModifier; + UpdateField<float, 66, 84> UiSpellHitModifier; + UpdateField<int32, 66, 85> HomeRealmTimeOffset; + UpdateField<float, 66, 86> ModPetHaste; + UpdateField<uint8, 66, 87> LocalRegenFlags; + UpdateField<uint8, 66, 88> AuraVision; + UpdateField<uint8, 66, 89> NumBackpackSlots; + UpdateField<int32, 66, 90> OverrideSpellsID; + UpdateField<int32, 66, 91> LfgBonusFactionID; + UpdateField<uint16, 66, 92> LootSpecID; + UpdateField<uint32, 66, 93> OverrideZonePVPType; + UpdateField<int32, 66, 94> Honor; + UpdateField<int32, 66, 95> HonorNextLevel; + UpdateField<int32, 66, 96> PvpRewardAchieved; + UpdateField<int32, 66, 97> PvpTierMaxFromWins; + UpdateField<int32, 98, 99> PvpLastWeeksRewardAchieved; + UpdateField<int32, 98, 100> PvpLastWeeksTierMaxFromWins; + UpdateField<int32, 98, 101> PvpLastWeeksRewardClaimed; + UpdateField<uint8, 98, 102> NumBankSlots; + OptionalUpdateField<UF::QuestSession, 98, 103> QuestSession; + UpdateFieldArray<ObjectGuid, 195, 104, 105> InvSlots; + UpdateFieldArray<uint32, 2, 300, 301> TrackResourceMask; + UpdateFieldArray<uint64, 192, 303, 304> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 496, 497> RestInfo; + UpdateFieldArray<int32, 7, 499, 500> ModDamageDonePos; + UpdateFieldArray<int32, 7, 499, 507> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 499, 514> ModDamageDonePercent; + UpdateFieldArray<float, 3, 521, 522> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 521, 525> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 528, 529> BuybackPrice; + UpdateFieldArray<uint32, 12, 528, 541> BuybackTimestamp; + UpdateFieldArray<int32, 32, 553, 554> CombatRatings; + UpdateFieldArray<UF::PVPInfo, 6, 586, 587> PvpInfo; + UpdateFieldArray<uint32, 4, 593, 594> NoReagentCostMask; + UpdateFieldArray<int32, 2, 598, 599> ProfessionSkillLine; + UpdateFieldArray<uint32, 4, 601, 602> BagSlotFlags; + UpdateFieldArray<uint32, 7, 606, 607> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 614, 615> QuestCompleted; void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -692,15 +722,15 @@ struct ScaleCurve : public IsUpdateFieldStructureTag, public HasChangesMask<7> UpdateField<uint32, 0, 3> ParameterCurve; UpdateFieldArray<TaggedPosition<Position::XY>, 2, 4, 5> Points; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const; void ClearChangesMask(); }; struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14> { - UpdateField<ScaleCurve, 0, 1> OverrideScaleCurve; - UpdateField<ScaleCurve, 0, 2> ExtraScaleCurve; + UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve; + UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve; UpdateField<ObjectGuid, 0, 3> Caster; UpdateField<uint32, 0, 4> Duration; UpdateField<uint32, 0, 5> TimeToTarget; @@ -738,8 +768,8 @@ struct ConversationLine : public IsUpdateFieldStructureTag uint8 ActorIndex; uint8 Flags; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; }; struct ConversationActor : public IsUpdateFieldStructureTag @@ -750,14 +780,14 @@ struct ConversationActor : public IsUpdateFieldStructureTag int32 Field_18; uint32 Type; - void WriteCreate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumClassFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; + void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; }; struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5> { - UpdateField<std::vector<ConversationLine>, 0, 1> Lines; - DynamicUpdateField<ConversationActor, 0, 2> Actors; + UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines; + DynamicUpdateField<UF::ConversationActor, 0, 2> Actors; UpdateField<int32, 0, 3> LastLineEndTime; UpdateField<uint32, 0, 4> Field_1C; |
