diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-09-07 01:10:07 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-09-07 01:10:07 +0200 |
| commit | 8efeb202a500bda46283127f66fb85f6b91f9e76 (patch) | |
| tree | c6c12b633d144d26927f615af4d3d64b07e62dcc /src/server/game/Entities/Object | |
| parent | 0bf5cf33c7dd909202ef492b69e317652e923f96 (diff) | |
Core: Update to 10.1.7
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 541 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 351 |
2 files changed, 488 insertions, 404 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 93ac9f8c967..dd13e001442 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -2130,7 +2130,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << uint32(GuildDeleteDate); data << int32(GuildLevel); data << uint32(Customizations.size()); - data << uint8(PartyType); + for (uint32 i = 0; i < 2; ++i) + { + data << uint8(PartyType[i]); + } data << uint8(NativeSex); data << uint8(Inebriation); data << uint8(PvpTitle); @@ -2165,6 +2168,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(Field_B0); data << int32(Field_B4); data << int32(CurrentBattlePetSpeciesID); + data << field_138; CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); @@ -2203,7 +2207,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2211,12 +2215,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFC0u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x003FFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000012u, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x01FFFFFFu, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x0000003Fu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFC00000u, 0xFFFFFFFFu, 0x0000001Fu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFE000000u, 0xFFFFFFFFu, 0x000000FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2348,78 +2352,78 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } if (changesMask[15]) { - data << uint8(PartyType); + data << uint8(NativeSex); } if (changesMask[16]) { - data << uint8(NativeSex); + data << uint8(Inebriation); } if (changesMask[17]) { - data << uint8(Inebriation); + data << uint8(PvpTitle); } if (changesMask[18]) { - data << uint8(PvpTitle); + data << uint8(ArenaFaction); } if (changesMask[19]) { - data << uint8(ArenaFaction); + data << uint32(DuelTeam); } if (changesMask[20]) { - data << uint32(DuelTeam); + data << int32(GuildTimeStamp); } if (changesMask[21]) { - data << int32(GuildTimeStamp); + data << int32(PlayerTitle); } if (changesMask[22]) { - data << int32(PlayerTitle); + data << int32(FakeInebriation); } if (changesMask[23]) { - data << int32(FakeInebriation); + data << uint32(VirtualPlayerRealm); } if (changesMask[24]) { - data << uint32(VirtualPlayerRealm); + data << uint32(CurrentSpecID); } if (changesMask[25]) { - data << uint32(CurrentSpecID); + data << int32(TaxiMountAnimKitID); } if (changesMask[26]) { - data << int32(TaxiMountAnimKitID); + data << uint8(CurrentBattlePetBreedQuality); } if (changesMask[27]) { - data << uint8(CurrentBattlePetBreedQuality); + data << int32(HonorLevel); } if (changesMask[28]) { - data << int32(HonorLevel); + data << int64(LogoutTime); } if (changesMask[29]) { - data << int64(LogoutTime); + data << int32(Field_B0); } if (changesMask[30]) { - data << int32(Field_B0); + data << int32(Field_B4); } if (changesMask[31]) { - data << int32(Field_B4); + data << int32(CurrentBattlePetSpeciesID); } } if (changesMask[32]) { if (changesMask[33]) { - data << int32(CurrentBattlePetSpeciesID); + data << field_138; } if (changesMask[34]) { @@ -2440,10 +2444,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } if (changesMask[38]) { - for (uint32 i = 0; i < 175; ++i) + for (uint32 i = 0; i < 2; ++i) { if (changesMask[39 + i]) { + data << uint8(PartyType[i]); + } + } + } + if (changesMask[41]) + { + for (uint32 i = 0; i < 175; ++i) + { + if (changesMask[42 + i]) + { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); else @@ -2451,31 +2465,31 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[214]) + if (changesMask[217]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[215 + i]) + if (changesMask[218 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[234]) + if (changesMask[237]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[235 + i]) + if (changesMask[238 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[241]) + if (changesMask[244]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[242 + i]) + if (changesMask[245 + i]) { data << uint32(Field_3120[i]); } @@ -2500,7 +2514,6 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(GuildRankID); Base::ClearChangesMask(GuildDeleteDate); Base::ClearChangesMask(GuildLevel); - Base::ClearChangesMask(PartyType); Base::ClearChangesMask(NativeSex); Base::ClearChangesMask(Inebriation); Base::ClearChangesMask(PvpTitle); @@ -2518,10 +2531,12 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(Field_B0); Base::ClearChangesMask(Field_B4); Base::ClearChangesMask(CurrentBattlePetSpeciesID); + Base::ClearChangesMask(field_138); Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); Base::ClearChangesMask(DungeonScore); + Base::ClearChangesMask(PartyType); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); @@ -3803,6 +3818,47 @@ void StableInfo::ClearChangesMask() _changesMask.ResetAll(); } +void CollectableSourceTrackedData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(TargetType); + data << int32(TargetID); + data << int32(CollectableSourceInfoID); +} + +void CollectableSourceTrackedData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + Mask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + if (changesMask[1]) + { + data << int32(TargetType); + } + if (changesMask[2]) + { + data << int32(TargetID); + } + if (changesMask[3]) + { + data << int32(CollectableSourceInfoID); + } + } +} + +void CollectableSourceTrackedData::ClearChangesMask() +{ + Base::ClearChangesMask(TargetType); + Base::ClearChangesMask(TargetID); + Base::ClearChangesMask(CollectableSourceInfoID); + _changesMask.ResetAll(); +} + void Research::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int16(ResearchProjectID); @@ -4103,10 +4159,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f } for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { - data << int64(TrackedCollectableSources[i]); + TrackedCollectableSources[i].WriteCreate(data, owner, receiver); } data.FlushBits(); data.WriteBit(BackpackAutoSortDisabled); + data.WriteBit(BackpackSellJunkDisabled); data.WriteBit(BankAutoSortDisabled); data.WriteBit(SortBagsRightToLeft); data.WriteBit(InsertItemsLeftToRight); @@ -4167,28 +4224,32 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[2]) { - data.WriteBit(BankAutoSortDisabled); + data.WriteBit(BackpackSellJunkDisabled); } if (changesMask[3]) { - data.WriteBit(SortBagsRightToLeft); + data.WriteBit(BankAutoSortDisabled); } if (changesMask[4]) { - data.WriteBit(InsertItemsLeftToRight); + data.WriteBit(SortBagsRightToLeft); } if (changesMask[5]) { - data.WriteBit(HasPerksProgramPendingReward); + data.WriteBit(InsertItemsLeftToRight); } if (changesMask[6]) { + data.WriteBit(HasPerksProgramPendingReward); + } + if (changesMask[7]) + { if (!ignoreNestedChangesMask) KnownTitles.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } - if (changesMask[7]) + if (changesMask[8]) { if (!ignoreNestedChangesMask) PvpInfo.WriteUpdateMask(data); @@ -4196,11 +4257,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[35]) + if (changesMask[36]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[36 + i]) + if (changesMask[37 + i]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -4209,11 +4270,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[38 + i]) + if (changesMask[39 + i]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -4222,11 +4283,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[40 + i]) + if (changesMask[41 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4235,11 +4296,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[35]) + if (changesMask[36]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[36 + i]) + if (changesMask[37 + i]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -4251,11 +4312,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[37]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[38 + i]) + if (changesMask[39 + i]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -4267,11 +4328,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[39]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[40 + i]) + if (changesMask[41 + i]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -4286,185 +4347,185 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[8]) + if (changesMask[9]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data); } - if (changesMask[9]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data); } - if (changesMask[10]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data); } - if (changesMask[11]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data); } - if (changesMask[12]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.size(), data); } - if (changesMask[13]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data); } - if (changesMask[14]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data); } - if (changesMask[15]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data); } - if (changesMask[16]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data); } - if (changesMask[17]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data); } - if (changesMask[18]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data); } - if (changesMask[19]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } - if (changesMask[20]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } - if (changesMask[21]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } - if (changesMask[22]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); } - if (changesMask[23]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); } - if (changesMask[24]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); } - if (changesMask[25]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); } - if (changesMask[26]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); } - if (changesMask[27]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); } - if (changesMask[28]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); } - if (changesMask[29]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } - if (changesMask[30]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[33]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[34]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[34]) + if (changesMask[35]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -4475,7 +4536,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[6]) + if (changesMask[7]) { for (uint32 i = 0; i < KnownTitles.size(); ++i) { @@ -4485,7 +4546,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[8]) + if (changesMask[9]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { @@ -4495,7 +4556,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[9]) + if (changesMask[10]) { for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { @@ -4505,7 +4566,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[10]) + if (changesMask[11]) { for (uint32 i = 0; i < Heirlooms.size(); ++i) { @@ -4515,7 +4576,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[11]) + if (changesMask[12]) { for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { @@ -4525,7 +4586,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[12]) + if (changesMask[13]) { for (uint32 i = 0; i < Toys.size(); ++i) { @@ -4535,7 +4596,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[13]) + if (changesMask[14]) { for (uint32 i = 0; i < ToyFlags.size(); ++i) { @@ -4545,7 +4606,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[14]) + if (changesMask[15]) { for (uint32 i = 0; i < Transmog.size(); ++i) { @@ -4555,7 +4616,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[15]) + if (changesMask[16]) { for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { @@ -4565,7 +4626,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[16]) + if (changesMask[17]) { for (uint32 i = 0; i < SelfResSpells.size(); ++i) { @@ -4575,7 +4636,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[17]) + if (changesMask[18]) { for (uint32 i = 0; i < RuneforgePowers.size(); ++i) { @@ -4585,7 +4646,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[18]) + if (changesMask[19]) { for (uint32 i = 0; i < TransmogIllusions.size(); ++i) { @@ -4595,7 +4656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[20]) + if (changesMask[21]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -4605,7 +4666,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[21]) + if (changesMask[22]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -4615,7 +4676,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[22]) + if (changesMask[23]) { for (uint32 i = 0; i < MawPowers.size(); ++i) { @@ -4625,7 +4686,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[23]) + if (changesMask[24]) { for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) { @@ -4635,7 +4696,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[24]) + if (changesMask[25]) { for (uint32 i = 0; i < RecipeProgression.size(); ++i) { @@ -4645,7 +4706,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[25]) + if (changesMask[26]) { for (uint32 i = 0; i < ReplayedQuests.size(); ++i) { @@ -4655,7 +4716,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[26]) + if (changesMask[27]) { for (uint32 i = 0; i < TaskQuests.size(); ++i) { @@ -4665,7 +4726,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[27]) + if (changesMask[28]) { for (uint32 i = 0; i < DisabledSpells.size(); ++i) { @@ -4675,7 +4736,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[30]) + if (changesMask[31]) { for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) { @@ -4685,7 +4746,10 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { @@ -4695,10 +4759,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[34]) { for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { @@ -4708,20 +4769,20 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[34]) + if (changesMask[35]) { for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) { if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask) { - data << int64(TrackedCollectableSources[i]); + TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } } if (changesMask[0]) { - if (changesMask[7]) + if (changesMask[8]) { for (uint32 i = 0; i < PvpInfo.size(); ++i) { @@ -4731,7 +4792,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[19]) + if (changesMask[20]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -4741,7 +4802,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[28]) + if (changesMask[29]) { for (uint32 i = 0; i < TraitConfigs.size(); ++i) { @@ -4751,7 +4812,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[30]) { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { @@ -4764,356 +4825,356 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[32]) { - if (changesMask[41]) - { - data << FarsightObject; - } if (changesMask[42]) { - data << SummonedBattlePetGUID; + data << FarsightObject; } if (changesMask[43]) { - data << uint64(Coinage); + data << SummonedBattlePetGUID; } if (changesMask[44]) { - data << int32(XP); + data << uint64(Coinage); } if (changesMask[45]) { - data << int32(NextLevelXP); + data << int32(XP); } if (changesMask[46]) { - data << int32(TrialXP); + data << int32(NextLevelXP); } if (changesMask[47]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(TrialXP); } if (changesMask[48]) { - data << int32(CharacterPoints); + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[49]) { - data << int32(MaxTalentTiers); + data << int32(CharacterPoints); } if (changesMask[50]) { - data << uint32(TrackCreatureMask); + data << int32(MaxTalentTiers); } if (changesMask[51]) { - data << float(MainhandExpertise); + data << uint32(TrackCreatureMask); } if (changesMask[52]) { - data << float(OffhandExpertise); + data << float(MainhandExpertise); } if (changesMask[53]) { - data << float(RangedExpertise); + data << float(OffhandExpertise); } if (changesMask[54]) { - data << float(CombatRatingExpertise); + data << float(RangedExpertise); } if (changesMask[55]) { - data << float(BlockPercentage); + data << float(CombatRatingExpertise); } if (changesMask[56]) { - data << float(DodgePercentage); + data << float(BlockPercentage); } if (changesMask[57]) { - data << float(DodgePercentageFromAttribute); + data << float(DodgePercentage); } if (changesMask[58]) { - data << float(ParryPercentage); + data << float(DodgePercentageFromAttribute); } if (changesMask[59]) { - data << float(ParryPercentageFromAttribute); + data << float(ParryPercentage); } if (changesMask[60]) { - data << float(CritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[61]) { - data << float(RangedCritPercentage); + data << float(CritPercentage); } if (changesMask[62]) { - data << float(OffhandCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[63]) { - data << float(SpellCritPercentage); + data << float(OffhandCritPercentage); } if (changesMask[64]) { - data << int32(ShieldBlock); + data << float(SpellCritPercentage); } if (changesMask[65]) { - data << float(ShieldBlockCritPercentage); + data << int32(ShieldBlock); } if (changesMask[66]) { - data << float(Mastery); + data << float(ShieldBlockCritPercentage); } if (changesMask[67]) { - data << float(Speed); + data << float(Mastery); } if (changesMask[68]) { - data << float(Avoidance); + data << float(Speed); } if (changesMask[69]) { - data << float(Sturdiness); + data << float(Avoidance); } } if (changesMask[70]) { if (changesMask[71]) { - data << int32(Versatility); + data << float(Sturdiness); } if (changesMask[72]) { - data << float(VersatilityBonus); + data << int32(Versatility); } if (changesMask[73]) { - data << float(PvpPowerDamage); + data << float(VersatilityBonus); } if (changesMask[74]) { - data << float(PvpPowerHealing); + data << float(PvpPowerDamage); } if (changesMask[75]) { - data << int32(ModHealingDonePos); + data << float(PvpPowerHealing); } if (changesMask[76]) { - data << float(ModHealingPercent); + data << int32(ModHealingDonePos); } if (changesMask[77]) { - data << float(ModPeriodicHealingDonePercent); + data << float(ModHealingPercent); } if (changesMask[78]) { - data << float(ModSpellPowerPercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[79]) { - data << float(ModResiliencePercent); + data << float(ModSpellPowerPercent); } if (changesMask[80]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModResiliencePercent); } if (changesMask[81]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[82]) { - data << int32(ModTargetResistance); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[83]) { - data << int32(ModTargetPhysicalResistance); + data << int32(ModTargetResistance); } if (changesMask[84]) { - data << uint32(LocalFlags); + data << int32(ModTargetPhysicalResistance); } if (changesMask[85]) { - data << uint8(GrantableLevels); + data << uint32(LocalFlags); } if (changesMask[86]) { - data << uint8(MultiActionBars); + data << uint8(GrantableLevels); } if (changesMask[87]) { - data << uint8(LifetimeMaxRank); + data << uint8(MultiActionBars); } if (changesMask[88]) { - data << uint8(NumRespecs); + data << uint8(LifetimeMaxRank); } if (changesMask[89]) { - data << uint32(PvpMedals); + data << uint8(NumRespecs); } if (changesMask[90]) { - data << uint16(TodayHonorableKills); + data << uint32(PvpMedals); } if (changesMask[91]) { - data << uint16(YesterdayHonorableKills); + data << uint16(TodayHonorableKills); } if (changesMask[92]) { - data << uint32(LifetimeHonorableKills); + data << uint16(YesterdayHonorableKills); } if (changesMask[93]) { - data << int32(WatchedFactionIndex); + data << uint32(LifetimeHonorableKills); } if (changesMask[94]) { - data << int32(MaxLevel); + data << int32(WatchedFactionIndex); } if (changesMask[95]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(MaxLevel); } if (changesMask[96]) { - data << int32(MaxCreatureScalingLevel); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[97]) { - data << int32(PetSpellPower); + data << int32(MaxCreatureScalingLevel); } if (changesMask[98]) { - data << float(UiHitModifier); + data << int32(PetSpellPower); } if (changesMask[99]) { - data << float(UiSpellHitModifier); + data << float(UiHitModifier); } if (changesMask[100]) { - data << int32(HomeRealmTimeOffset); + data << float(UiSpellHitModifier); } if (changesMask[101]) { - data << float(ModPetHaste); + data << int32(HomeRealmTimeOffset); } } if (changesMask[102]) { if (changesMask[103]) { - data << int8(JailersTowerLevelMax); + data << float(ModPetHaste); } if (changesMask[104]) { - data << int8(JailersTowerLevel); + data << int8(JailersTowerLevelMax); } if (changesMask[105]) { - data << uint8(LocalRegenFlags); + data << int8(JailersTowerLevel); } if (changesMask[106]) { - data << uint8(AuraVision); + data << uint8(LocalRegenFlags); } if (changesMask[107]) { - data << uint8(NumBackpackSlots); + data << uint8(AuraVision); } if (changesMask[108]) { - data << int32(OverrideSpellsID); + data << uint8(NumBackpackSlots); } if (changesMask[109]) { - data << uint16(LootSpecID); + data << int32(OverrideSpellsID); } if (changesMask[110]) { - data << uint32(OverrideZonePVPType); + data << uint16(LootSpecID); } if (changesMask[111]) { - data << BnetAccount; + data << uint32(OverrideZonePVPType); } if (changesMask[112]) { - data << uint64(GuildClubMemberID); + data << BnetAccount; } if (changesMask[113]) { - data << int32(Honor); + data << uint64(GuildClubMemberID); } if (changesMask[114]) { - data << int32(HonorNextLevel); + data << int32(Honor); } if (changesMask[115]) { - data << int32(PerksProgramCurrency); + data << int32(HonorNextLevel); } if (changesMask[116]) { + data << int32(PerksProgramCurrency); + } + if (changesMask[117]) + { data << uint8(NumBankSlots); } - if (changesMask[121]) + if (changesMask[122]) { data << int32(UiChromieTimeExpansionID); } - if (changesMask[122]) + if (changesMask[123]) { data << int32(TransportServerTime); } - if (changesMask[123]) + if (changesMask[124]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[124]) + if (changesMask[125]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[126]) + if (changesMask[127]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[127]) + if (changesMask[128]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[128]) + if (changesMask[129]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[129]) + if (changesMask[130]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[130]) + if (changesMask[131]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[131]) + if (changesMask[132]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[132]) + if (changesMask[133]) { data << uint64(LootHistoryInstanceID); } } if (changesMask[134]) { - if (changesMask[135]) + if (changesMask[136]) { data << uint8(RequiredMountCapabilityFlags); } @@ -5121,32 +5182,41 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo if (changesMask[102]) { data.WriteBits(QuestSession.has_value(), 1); + } + if (changesMask[134]) + { data.WriteBits(PetStable.has_value(), 1); - data.FlushBits(); - if (changesMask[117]) + } + data.FlushBits(); + if (changesMask[102]) + { + if (changesMask[118]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[119]) + if (changesMask[120]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[118]) + if (changesMask[119]) { data << FrozenPerksVendorItem; } - if (changesMask[120]) + if (changesMask[121]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[125]) + if (changesMask[126]) { data << DungeonScore; } - if (changesMask[133]) + } + if (changesMask[134]) + { + if (changesMask[135]) { if (PetStable.has_value()) { @@ -5154,151 +5224,151 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[136]) + if (changesMask[137]) { for (uint32 i = 0; i < 227; ++i) { - if (changesMask[137 + i]) + if (changesMask[138 + i]) { data << InvSlots[i]; } } } - if (changesMask[364]) + if (changesMask[365]) { for (uint32 i = 0; i < 240; ++i) { - if (changesMask[365 + i]) + if (changesMask[366 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[605]) + if (changesMask[606]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[606 + i]) + if (changesMask[607 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[608]) + if (changesMask[609]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[609 + i]) + if (changesMask[610 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[616 + i]) + if (changesMask[617 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[623 + i]) + if (changesMask[624 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[630 + i]) + if (changesMask[631 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[637]) + if (changesMask[638]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[638 + i]) + if (changesMask[639 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[641 + i]) + if (changesMask[642 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[644]) + if (changesMask[645]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[645 + i]) + if (changesMask[646 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[657 + i]) + if (changesMask[658 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[669]) + if (changesMask[670]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[670 + i]) + if (changesMask[671 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[702]) + if (changesMask[703]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[703 + i]) + if (changesMask[704 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[707]) + if (changesMask[708]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[708 + i]) + if (changesMask[709 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[710]) + if (changesMask[711]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[711 + i]) + if (changesMask[712 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[716]) + if (changesMask[717]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[717 + i]) + if (changesMask[718 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[724]) + if (changesMask[725]) { for (uint32 i = 0; i < 875; ++i) { - if (changesMask[725 + i]) + if (changesMask[726 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1600]) + if (changesMask[1601]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1601 + i]) + if (changesMask[1602 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -5310,6 +5380,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo void ActivePlayerData::ClearChangesMask() { Base::ClearChangesMask(BackpackAutoSortDisabled); + Base::ClearChangesMask(BackpackSellJunkDisabled); Base::ClearChangesMask(BankAutoSortDisabled); Base::ClearChangesMask(SortBagsRightToLeft); Base::ClearChangesMask(InsertItemsLeftToRight); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 9d9c3df590f..1b5fe5782ce 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -462,7 +462,7 @@ struct CTROptions : public IsUpdateFieldStructureTag bool operator!=(CTROptions const& right) const { return !(*this == right); } }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<264> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -478,32 +478,33 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<261> UpdateField<uint32, 0, 12> GuildRankID; UpdateField<uint32, 0, 13> GuildDeleteDate; UpdateField<int32, 0, 14> GuildLevel; - 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<int64, 0, 29> LogoutTime; - UpdateField<int32, 0, 30> Field_B0; - UpdateField<int32, 0, 31> Field_B4; - UpdateField<int32, 32, 33> CurrentBattlePetSpeciesID; + UpdateField<uint8, 0, 15> NativeSex; + UpdateField<uint8, 0, 16> Inebriation; + UpdateField<uint8, 0, 17> PvpTitle; + UpdateField<uint8, 0, 18> ArenaFaction; + UpdateField<uint32, 0, 19> DuelTeam; + UpdateField<int32, 0, 20> GuildTimeStamp; + UpdateField<int32, 0, 21> PlayerTitle; + UpdateField<int32, 0, 22> FakeInebriation; + UpdateField<uint32, 0, 23> VirtualPlayerRealm; + UpdateField<uint32, 0, 24> CurrentSpecID; + UpdateField<int32, 0, 25> TaxiMountAnimKitID; + UpdateField<uint8, 0, 26> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 27> HonorLevel; + UpdateField<int64, 0, 28> LogoutTime; + UpdateField<int32, 0, 29> Field_B0; + UpdateField<int32, 0, 30> Field_B4; + UpdateField<int32, 0, 31> CurrentBattlePetSpeciesID; + UpdateField<ObjectGuid, 32, 33> field_138; UpdateField<UF::CTROptions, 32, 34> CtrOptions; UpdateField<int32, 32, 35> CovenantID; UpdateField<int32, 32, 36> SoulbindID; UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 37> DungeonScore; - UpdateFieldArray<UF::QuestLog, 175, 38, 39> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 214, 215> VisibleItems; - UpdateFieldArray<float, 6, 234, 235> AvgItemLevel; - UpdateFieldArray<uint32, 19, 241, 242> Field_3120; + UpdateFieldArray<uint8, 2, 38, 39> PartyType; + UpdateFieldArray<UF::QuestLog, 175, 41, 42> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 217, 218> VisibleItems; + UpdateFieldArray<float, 6, 237, 238> AvgItemLevel; + UpdateFieldArray<uint32, 19, 244, 245> Field_3120; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -827,6 +828,17 @@ struct StableInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> void ClearChangesMask(); }; +struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public HasChangesMask<4> +{ + UpdateField<int32, 0, 1> TargetType; + UpdateField<int32, 0, 2> TargetID; + UpdateField<int32, 0, 3> CollectableSourceInfoID; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + void ClearChangesMask(); +}; + struct Research : public IsUpdateFieldStructureTag { int16 ResearchProjectID; @@ -837,154 +849,155 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1618> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1619> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; - UpdateField<bool, 0, 2> BankAutoSortDisabled; - UpdateField<bool, 0, 3> SortBagsRightToLeft; - UpdateField<bool, 0, 4> InsertItemsLeftToRight; - UpdateField<bool, 0, 5> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 35, 36> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 37, 38> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 39, 40> Research; - DynamicUpdateField<uint64, 0, 6> KnownTitles; - DynamicUpdateField<int32, 0, 8> DailyQuestsCompleted; - DynamicUpdateField<int32, 0, 9> AvailableQuestLineXQuestIDs; - DynamicUpdateField<int32, 0, 10> Heirlooms; - DynamicUpdateField<uint32, 0, 11> HeirloomFlags; - DynamicUpdateField<int32, 0, 12> Toys; - DynamicUpdateField<uint32, 0, 13> ToyFlags; - DynamicUpdateField<uint32, 0, 14> Transmog; - DynamicUpdateField<int32, 0, 15> ConditionalTransmog; - DynamicUpdateField<int32, 0, 16> SelfResSpells; - DynamicUpdateField<uint32, 0, 17> RuneforgePowers; - DynamicUpdateField<uint32, 0, 18> TransmogIllusions; - DynamicUpdateField<UF::SpellPctModByLabel, 0, 20> SpellPctModByLabel; - DynamicUpdateField<UF::SpellFlatModByLabel, 0, 21> SpellFlatModByLabel; - DynamicUpdateField<UF::MawPower, 0, 22> MawPowers; - DynamicUpdateField<UF::MultiFloorExplore, 0, 23> MultiFloorExploration; - DynamicUpdateField<UF::RecipeProgressionInfo, 0, 24> RecipeProgression; - DynamicUpdateField<UF::ReplayedQuest, 0, 25> ReplayedQuests; - DynamicUpdateField<UF::QuestLog, 0, 26> TaskQuests; - DynamicUpdateField<int32, 0, 27> DisabledSpells; - DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 30> PersonalCraftingOrderCounts; - DynamicUpdateField<UF::CategoryCooldownMod, 0, 31> CategoryCooldownMods; - DynamicUpdateField<UF::WeeklySpellUse, 32, 33> WeeklySpellUses; - DynamicUpdateField<int64, 32, 34> TrackedCollectableSources; - DynamicUpdateField<UF::PVPInfo, 0, 7> PvpInfo; - DynamicUpdateField<UF::CharacterRestriction, 0, 19> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 0, 28> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 0, 29> CraftingOrders; - UpdateField<ObjectGuid, 32, 41> FarsightObject; - UpdateField<ObjectGuid, 32, 42> SummonedBattlePetGUID; - UpdateField<uint64, 32, 43> Coinage; - UpdateField<int32, 32, 44> XP; - UpdateField<int32, 32, 45> NextLevelXP; - UpdateField<int32, 32, 46> TrialXP; - UpdateField<UF::SkillInfo, 32, 47> Skill; - UpdateField<int32, 32, 48> CharacterPoints; - UpdateField<int32, 32, 49> MaxTalentTiers; - UpdateField<uint32, 32, 50> TrackCreatureMask; - UpdateField<float, 32, 51> MainhandExpertise; - UpdateField<float, 32, 52> OffhandExpertise; - UpdateField<float, 32, 53> RangedExpertise; - UpdateField<float, 32, 54> CombatRatingExpertise; - UpdateField<float, 32, 55> BlockPercentage; - UpdateField<float, 32, 56> DodgePercentage; - UpdateField<float, 32, 57> DodgePercentageFromAttribute; - UpdateField<float, 32, 58> ParryPercentage; - UpdateField<float, 32, 59> ParryPercentageFromAttribute; - UpdateField<float, 32, 60> CritPercentage; - UpdateField<float, 32, 61> RangedCritPercentage; - UpdateField<float, 32, 62> OffhandCritPercentage; - UpdateField<float, 32, 63> SpellCritPercentage; - UpdateField<int32, 32, 64> ShieldBlock; - UpdateField<float, 32, 65> ShieldBlockCritPercentage; - UpdateField<float, 32, 66> Mastery; - UpdateField<float, 32, 67> Speed; - UpdateField<float, 32, 68> Avoidance; - UpdateField<float, 32, 69> Sturdiness; - UpdateField<int32, 70, 71> Versatility; - UpdateField<float, 70, 72> VersatilityBonus; - UpdateField<float, 70, 73> PvpPowerDamage; - UpdateField<float, 70, 74> PvpPowerHealing; - UpdateField<int32, 70, 75> ModHealingDonePos; - UpdateField<float, 70, 76> ModHealingPercent; - UpdateField<float, 70, 77> ModPeriodicHealingDonePercent; - UpdateField<float, 70, 78> ModSpellPowerPercent; - UpdateField<float, 70, 79> ModResiliencePercent; - UpdateField<float, 70, 80> OverrideSpellPowerByAPPercent; - UpdateField<float, 70, 81> OverrideAPBySpellPowerPercent; - UpdateField<int32, 70, 82> ModTargetResistance; - UpdateField<int32, 70, 83> ModTargetPhysicalResistance; - UpdateField<uint32, 70, 84> LocalFlags; - UpdateField<uint8, 70, 85> GrantableLevels; - UpdateField<uint8, 70, 86> MultiActionBars; - UpdateField<uint8, 70, 87> LifetimeMaxRank; - UpdateField<uint8, 70, 88> NumRespecs; - UpdateField<uint32, 70, 89> PvpMedals; - UpdateField<uint16, 70, 90> TodayHonorableKills; - UpdateField<uint16, 70, 91> YesterdayHonorableKills; - UpdateField<uint32, 70, 92> LifetimeHonorableKills; - UpdateField<int32, 70, 93> WatchedFactionIndex; - UpdateField<int32, 70, 94> MaxLevel; - UpdateField<int32, 70, 95> ScalingPlayerLevelDelta; - UpdateField<int32, 70, 96> MaxCreatureScalingLevel; - UpdateField<int32, 70, 97> PetSpellPower; - UpdateField<float, 70, 98> UiHitModifier; - UpdateField<float, 70, 99> UiSpellHitModifier; - UpdateField<int32, 70, 100> HomeRealmTimeOffset; - UpdateField<float, 70, 101> ModPetHaste; - UpdateField<int8, 102, 103> JailersTowerLevelMax; - UpdateField<int8, 102, 104> JailersTowerLevel; - UpdateField<uint8, 102, 105> LocalRegenFlags; - UpdateField<uint8, 102, 106> AuraVision; - UpdateField<uint8, 102, 107> NumBackpackSlots; - UpdateField<int32, 102, 108> OverrideSpellsID; - UpdateField<uint16, 102, 109> LootSpecID; - UpdateField<uint32, 102, 110> OverrideZonePVPType; - UpdateField<ObjectGuid, 102, 111> BnetAccount; - UpdateField<uint64, 102, 112> GuildClubMemberID; - UpdateField<int32, 102, 113> Honor; - UpdateField<int32, 102, 114> HonorNextLevel; - UpdateField<int32, 102, 115> PerksProgramCurrency; - UpdateField<uint8, 102, 116> NumBankSlots; - UpdateField<UF::ResearchHistory, 102, 117> ResearchHistory; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 118> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 102, 120> Field_1410; - OptionalUpdateField<UF::QuestSession, 102, 119> QuestSession; - UpdateField<int32, 102, 121> UiChromieTimeExpansionID; - UpdateField<int32, 102, 122> TransportServerTime; - UpdateField<uint32, 102, 123> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 102, 124> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 125> DungeonScore; - UpdateField<uint32, 102, 126> ActiveCombatTraitConfigID; - UpdateField<int32, 102, 127> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 102, 128> ItemUpgradeHighFingerItemID; - UpdateField<float, 102, 129> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 102, 130> ItemUpgradeHighTrinketItemID; - UpdateField<float, 102, 131> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 102, 132> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 102, 133> PetStable; - UpdateField<uint8, 134, 135> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots; - UpdateFieldArray<uint64, 240, 364, 365> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 605, 606> RestInfo; - UpdateFieldArray<int32, 7, 608, 609> ModDamageDonePos; - UpdateFieldArray<int32, 7, 608, 616> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 608, 623> ModDamageDonePercent; - UpdateFieldArray<float, 7, 608, 630> ModHealingDonePercent; - UpdateFieldArray<float, 3, 637, 638> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 637, 641> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 644, 645> BuybackPrice; - UpdateFieldArray<int64, 12, 644, 657> BuybackTimestamp; - UpdateFieldArray<int32, 32, 669, 670> CombatRatings; - UpdateFieldArray<uint32, 4, 702, 703> NoReagentCostMask; - UpdateFieldArray<int32, 2, 707, 708> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 710, 711> BagSlotFlags; - UpdateFieldArray<uint32, 7, 716, 717> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 724, 725> QuestCompleted; - UpdateFieldArray<float, 17, 1600, 1601> ItemUpgradeHighWatermark; + UpdateField<bool, 0, 2> BackpackSellJunkDisabled; + UpdateField<bool, 0, 3> BankAutoSortDisabled; + UpdateField<bool, 0, 4> SortBagsRightToLeft; + UpdateField<bool, 0, 5> InsertItemsLeftToRight; + UpdateField<bool, 0, 6> HasPerksProgramPendingReward; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 36, 37> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 38, 39> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 40, 41> Research; + DynamicUpdateField<uint64, 0, 7> KnownTitles; + DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 11> Heirlooms; + DynamicUpdateField<uint32, 0, 12> HeirloomFlags; + DynamicUpdateField<int32, 0, 13> Toys; + DynamicUpdateField<uint32, 0, 14> ToyFlags; + DynamicUpdateField<uint32, 0, 15> Transmog; + DynamicUpdateField<int32, 0, 16> ConditionalTransmog; + DynamicUpdateField<int32, 0, 17> SelfResSpells; + DynamicUpdateField<uint32, 0, 18> RuneforgePowers; + DynamicUpdateField<uint32, 0, 19> TransmogIllusions; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel; + DynamicUpdateField<UF::MawPower, 0, 23> MawPowers; + DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration; + DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression; + DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests; + DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests; + DynamicUpdateField<int32, 0, 28> DisabledSpells; + DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses; + DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources; + DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo; + DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; + DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; + DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; + UpdateField<ObjectGuid, 32, 42> FarsightObject; + UpdateField<ObjectGuid, 32, 43> SummonedBattlePetGUID; + UpdateField<uint64, 32, 44> Coinage; + UpdateField<int32, 32, 45> XP; + UpdateField<int32, 32, 46> NextLevelXP; + UpdateField<int32, 32, 47> TrialXP; + UpdateField<UF::SkillInfo, 32, 48> Skill; + UpdateField<int32, 32, 49> CharacterPoints; + UpdateField<int32, 32, 50> MaxTalentTiers; + UpdateField<uint32, 32, 51> TrackCreatureMask; + UpdateField<float, 32, 52> MainhandExpertise; + UpdateField<float, 32, 53> OffhandExpertise; + UpdateField<float, 32, 54> RangedExpertise; + UpdateField<float, 32, 55> CombatRatingExpertise; + UpdateField<float, 32, 56> BlockPercentage; + UpdateField<float, 32, 57> DodgePercentage; + UpdateField<float, 32, 58> DodgePercentageFromAttribute; + UpdateField<float, 32, 59> ParryPercentage; + UpdateField<float, 32, 60> ParryPercentageFromAttribute; + UpdateField<float, 32, 61> CritPercentage; + UpdateField<float, 32, 62> RangedCritPercentage; + UpdateField<float, 32, 63> OffhandCritPercentage; + UpdateField<float, 32, 64> SpellCritPercentage; + UpdateField<int32, 32, 65> ShieldBlock; + UpdateField<float, 32, 66> ShieldBlockCritPercentage; + UpdateField<float, 32, 67> Mastery; + UpdateField<float, 32, 68> Speed; + UpdateField<float, 32, 69> Avoidance; + UpdateField<float, 70, 71> Sturdiness; + UpdateField<int32, 70, 72> Versatility; + UpdateField<float, 70, 73> VersatilityBonus; + UpdateField<float, 70, 74> PvpPowerDamage; + UpdateField<float, 70, 75> PvpPowerHealing; + UpdateField<int32, 70, 76> ModHealingDonePos; + UpdateField<float, 70, 77> ModHealingPercent; + UpdateField<float, 70, 78> ModPeriodicHealingDonePercent; + UpdateField<float, 70, 79> ModSpellPowerPercent; + UpdateField<float, 70, 80> ModResiliencePercent; + UpdateField<float, 70, 81> OverrideSpellPowerByAPPercent; + UpdateField<float, 70, 82> OverrideAPBySpellPowerPercent; + UpdateField<int32, 70, 83> ModTargetResistance; + UpdateField<int32, 70, 84> ModTargetPhysicalResistance; + UpdateField<uint32, 70, 85> LocalFlags; + UpdateField<uint8, 70, 86> GrantableLevels; + UpdateField<uint8, 70, 87> MultiActionBars; + UpdateField<uint8, 70, 88> LifetimeMaxRank; + UpdateField<uint8, 70, 89> NumRespecs; + UpdateField<uint32, 70, 90> PvpMedals; + UpdateField<uint16, 70, 91> TodayHonorableKills; + UpdateField<uint16, 70, 92> YesterdayHonorableKills; + UpdateField<uint32, 70, 93> LifetimeHonorableKills; + UpdateField<int32, 70, 94> WatchedFactionIndex; + UpdateField<int32, 70, 95> MaxLevel; + UpdateField<int32, 70, 96> ScalingPlayerLevelDelta; + UpdateField<int32, 70, 97> MaxCreatureScalingLevel; + UpdateField<int32, 70, 98> PetSpellPower; + UpdateField<float, 70, 99> UiHitModifier; + UpdateField<float, 70, 100> UiSpellHitModifier; + UpdateField<int32, 70, 101> HomeRealmTimeOffset; + UpdateField<float, 102, 103> ModPetHaste; + UpdateField<int8, 102, 104> JailersTowerLevelMax; + UpdateField<int8, 102, 105> JailersTowerLevel; + UpdateField<uint8, 102, 106> LocalRegenFlags; + UpdateField<uint8, 102, 107> AuraVision; + UpdateField<uint8, 102, 108> NumBackpackSlots; + UpdateField<int32, 102, 109> OverrideSpellsID; + UpdateField<uint16, 102, 110> LootSpecID; + UpdateField<uint32, 102, 111> OverrideZonePVPType; + UpdateField<ObjectGuid, 102, 112> BnetAccount; + UpdateField<uint64, 102, 113> GuildClubMemberID; + UpdateField<int32, 102, 114> Honor; + UpdateField<int32, 102, 115> HonorNextLevel; + UpdateField<int32, 102, 116> PerksProgramCurrency; + UpdateField<uint8, 102, 117> NumBankSlots; + UpdateField<UF::ResearchHistory, 102, 118> ResearchHistory; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 119> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 102, 121> Field_1410; + OptionalUpdateField<UF::QuestSession, 102, 120> QuestSession; + UpdateField<int32, 102, 122> UiChromieTimeExpansionID; + UpdateField<int32, 102, 123> TransportServerTime; + UpdateField<uint32, 102, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 102, 125> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 126> DungeonScore; + UpdateField<uint32, 102, 127> ActiveCombatTraitConfigID; + UpdateField<int32, 102, 128> ItemUpgradeHighOnehandWeaponItemID; + UpdateField<int32, 102, 129> ItemUpgradeHighFingerItemID; + UpdateField<float, 102, 130> ItemUpgradeHighFingerWatermark; + UpdateField<int32, 102, 131> ItemUpgradeHighTrinketItemID; + UpdateField<float, 102, 132> ItemUpgradeHighTrinketWatermark; + UpdateField<uint64, 102, 133> LootHistoryInstanceID; + OptionalUpdateField<UF::StableInfo, 134, 135> PetStable; + UpdateField<uint8, 134, 136> RequiredMountCapabilityFlags; + UpdateFieldArray<ObjectGuid, 227, 137, 138> InvSlots; + UpdateFieldArray<uint64, 240, 365, 366> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 606, 607> RestInfo; + UpdateFieldArray<int32, 7, 609, 610> ModDamageDonePos; + UpdateFieldArray<int32, 7, 609, 617> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 609, 624> ModDamageDonePercent; + UpdateFieldArray<float, 7, 609, 631> ModHealingDonePercent; + UpdateFieldArray<float, 3, 638, 639> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 638, 642> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 645, 646> BuybackPrice; + UpdateFieldArray<int64, 12, 645, 658> BuybackTimestamp; + UpdateFieldArray<int32, 32, 670, 671> CombatRatings; + UpdateFieldArray<uint32, 4, 703, 704> NoReagentCostMask; + UpdateFieldArray<int32, 2, 708, 709> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 711, 712> BagSlotFlags; + UpdateFieldArray<uint32, 7, 717, 718> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 725, 726> QuestCompleted; + UpdateFieldArray<float, 17, 1601, 1602> ItemUpgradeHighWatermark; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; |
