From 3f46f8e52ac464d9e2e52fe8c729d10222127745 Mon Sep 17 00:00:00 2001 From: funjoker Date: Tue, 14 Nov 2023 21:04:34 +0100 Subject: Core/Updatefields: Update UFs to 3.4.3 --- .../game/Entities/Object/Updates/UpdateFields.cpp | 3118 +++++--------------- .../game/Entities/Object/Updates/UpdateFields.h | 993 +++---- 2 files changed, 1152 insertions(+), 2959 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 2a4402603e9..c8c741727df 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -82,7 +82,8 @@ void ItemEnchantment::WriteCreate(ByteBuffer& data, Item const* owner, Player co data << int32(ID); data << uint32(Duration); data << int16(Charges); - data << uint16(Inactive); + data << uint8(Field_A); + data << uint8(Field_B); } void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const @@ -91,7 +92,7 @@ void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 5); + data.WriteBits(changesMask.GetBlock(0), 6); data.FlushBits(); if (changesMask[0]) @@ -110,7 +111,11 @@ void ItemEnchantment::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item } if (changesMask[4]) { - data << uint16(Inactive); + data << uint8(Field_A); + } + if (changesMask[5]) + { + data << uint8(Field_B); } } } @@ -120,7 +125,8 @@ void ItemEnchantment::ClearChangesMask() Base::ClearChangesMask(ID); Base::ClearChangesMask(Duration); Base::ClearChangesMask(Charges); - Base::ClearChangesMask(Inactive); + Base::ClearChangesMask(Field_A); + Base::ClearChangesMask(Field_B); _changesMask.ResetAll(); } @@ -280,6 +286,8 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi { Enchantment[i].WriteCreate(data, owner, receiver); } + data << int32(PropertySeed); + data << int32(RandomPropertiesID); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { data << uint32(Durability); @@ -317,7 +325,7 @@ void ItemData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Item const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu }); + Mask allowedMaskForTarget({ 0xE029CE7Fu, 0x000007FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -325,12 +333,12 @@ void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisi void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x07F58D80u, 0x00000000u }; + allowedMaskForTarget |= { 0x1FD63180u, 0x00000000u }; } void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xF80A727Fu, 0x000001FFu }); + Mask allowedMaskForTarget({ 0xE029CE7Fu, 0x000007FFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -412,64 +420,72 @@ void ItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[10]) { - data << uint32(Durability); + data << int32(PropertySeed); } if (changesMask[11]) { - data << uint32(MaxDurability); + data << int32(RandomPropertiesID); } if (changesMask[12]) { - data << uint32(CreatePlayedTime); + data << uint32(Durability); } if (changesMask[13]) { - data << int32(Context); + data << uint32(MaxDurability); } if (changesMask[14]) { - data << int64(CreateTime); + data << uint32(CreatePlayedTime); } if (changesMask[15]) { - data << uint64(ArtifactXP); + data << int32(Context); } if (changesMask[16]) { - data << uint8(ItemAppearanceModID); + data << int64(CreateTime); + } + if (changesMask[17]) + { + data << uint64(ArtifactXP); } if (changesMask[18]) + { + data << uint8(ItemAppearanceModID); + } + if (changesMask[20]) { data << uint32(DynamicFlags2); } - if (changesMask[19]) + if (changesMask[21]) { data << ItemBonusKey; } - if (changesMask[20]) + if (changesMask[22]) { data << uint16(DEBUGItemLevel); } - if (changesMask[17]) + if (changesMask[19]) { Modifiers->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[21]) + if (changesMask[23]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[22 + i]) + if (changesMask[24 + i]) { data << int32(SpellCharges[i]); } } } - if (changesMask[27]) + if (changesMask[29]) { for (uint32 i = 0; i < 13; ++i) { - if (changesMask[28 + i]) + if (changesMask[30 + i]) { Enchantment[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -488,6 +504,8 @@ void ItemData::ClearChangesMask() Base::ClearChangesMask(StackCount); Base::ClearChangesMask(Expiration); Base::ClearChangesMask(DynamicFlags); + Base::ClearChangesMask(PropertySeed); + Base::ClearChangesMask(RandomPropertiesID); Base::ClearChangesMask(Durability); Base::ClearChangesMask(MaxDurability); Base::ClearChangesMask(CreatePlayedTime); @@ -552,315 +570,27 @@ void ContainerData::ClearChangesMask() _changesMask.ResetAll(); } -void AzeriteEmpoweredItemData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const -{ - for (uint32 i = 0; i < 5; ++i) - { - data << int32(Selections[i]); - } -} - -void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const -{ - WriteUpdate(data, _changesMask, false, owner, receiver); -} - -void AzeriteEmpoweredItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const -{ - data.WriteBits(changesMask.GetBlocksMask(0), 1); - if (changesMask.GetBlock(0)) - data.WriteBits(changesMask.GetBlock(0), 32); - - data.FlushBits(); - if (changesMask[0]) - { - for (uint32 i = 0; i < 5; ++i) - { - if (changesMask[1 + i]) - { - data << int32(Selections[i]); - } - } - } -} - -void AzeriteEmpoweredItemData::ClearChangesMask() -{ - Base::ClearChangesMask(Selections); - _changesMask.ResetAll(); -} - -void UnlockedAzeriteEssence::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const -{ - data << uint32(AzeriteEssenceID); - data << uint32(Rank); -} - -void UnlockedAzeriteEssence::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const -{ - data << uint32(AzeriteEssenceID); - data << uint32(Rank); -} - -bool UnlockedAzeriteEssence::operator==(UnlockedAzeriteEssence const& right) const -{ - return AzeriteEssenceID == right.AzeriteEssenceID - && Rank == right.Rank; -} - -void SelectedAzeriteEssences::WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const -{ - for (uint32 i = 0; i < 4; ++i) - { - data << uint32(AzeriteEssenceID[i]); - } - data << uint32(SpecializationID); - data.WriteBit(Enabled); - data.FlushBits(); -} - -void SelectedAzeriteEssences::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlocksMask(0), 1); - if (changesMask.GetBlock(0)) - data.WriteBits(changesMask.GetBlock(0), 32); - - if (changesMask[0]) - { - if (changesMask[1]) - { - data.WriteBit(Enabled); - } - } - data.FlushBits(); - if (changesMask[0]) - { - if (changesMask[2]) - { - data << uint32(SpecializationID); - } - } - if (changesMask[3]) - { - for (uint32 i = 0; i < 4; ++i) - { - if (changesMask[4 + i]) - { - data << uint32(AzeriteEssenceID[i]); - } - } - } - data.FlushBits(); -} - -void SelectedAzeriteEssences::ClearChangesMask() -{ - Base::ClearChangesMask(Enabled); - Base::ClearChangesMask(SpecializationID); - Base::ClearChangesMask(AzeriteEssenceID); - _changesMask.ResetAll(); -} - -void AzeriteItemData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const -{ - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - { - data << uint64(Xp); - data << uint32(Level); - data << uint32(AuraLevel); - data << uint32(KnowledgeLevel); - data << int32(DEBUGknowledgeWeek); - } - data << uint32(UnlockedEssences.size()); - data << uint32(SelectedEssences.size()); - data << uint32(UnlockedEssenceMilestones.size()); - for (uint32 i = 0; i < UnlockedEssences.size(); ++i) - { - UnlockedEssences[i].WriteCreate(data, owner, receiver); - } - for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i) - { - data << uint32(UnlockedEssenceMilestones[i]); - } - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - { - data.WriteBit(Enabled); - } - for (uint32 i = 0; i < SelectedEssences.size(); ++i) - { - SelectedEssences[i].WriteCreate(data, owner, receiver); - } - data.FlushBits(); -} - -void AzeriteItemData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const -{ - Mask allowedMaskForTarget({ 0x0000001Du }); - AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); - WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); -} - -void AzeriteItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) -{ - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x000003E2u }; -} - -void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) -{ - Mask allowedMaskForTarget({ 0x0000001Du }); - AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); - changesMask &= allowedMaskForTarget; -} - -void AzeriteItemData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const -{ - data.WriteBits(changesMask.GetBlock(0), 10); - - if (changesMask[0]) - { - if (changesMask[1]) - { - data.WriteBit(Enabled); - } - if (changesMask[2]) - { - if (!ignoreNestedChangesMask) - UnlockedEssences.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(UnlockedEssences.size(), data); - } - if (changesMask[3]) - { - if (!ignoreNestedChangesMask) - SelectedEssences.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(SelectedEssences.size(), data); - } - if (changesMask[4]) - { - if (!ignoreNestedChangesMask) - UnlockedEssenceMilestones.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(UnlockedEssenceMilestones.size(), data); - } - } - data.FlushBits(); - if (changesMask[0]) - { - if (changesMask[2]) - { - for (uint32 i = 0; i < UnlockedEssences.size(); ++i) - { - if (UnlockedEssences.HasChanged(i) || ignoreNestedChangesMask) - { - UnlockedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[4]) - { - for (uint32 i = 0; i < UnlockedEssenceMilestones.size(); ++i) - { - if (UnlockedEssenceMilestones.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(UnlockedEssenceMilestones[i]); - } - } - } - if (changesMask[3]) - { - for (uint32 i = 0; i < SelectedEssences.size(); ++i) - { - if (SelectedEssences.HasChanged(i) || ignoreNestedChangesMask) - { - SelectedEssences[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[5]) - { - data << uint64(Xp); - } - if (changesMask[6]) - { - data << uint32(Level); - } - if (changesMask[7]) - { - data << uint32(AuraLevel); - } - if (changesMask[8]) - { - data << uint32(KnowledgeLevel); - } - if (changesMask[9]) - { - data << int32(DEBUGknowledgeWeek); - } - } - data.FlushBits(); -} - -void AzeriteItemData::ClearChangesMask() -{ - Base::ClearChangesMask(Enabled); - Base::ClearChangesMask(UnlockedEssences); - Base::ClearChangesMask(UnlockedEssenceMilestones); - Base::ClearChangesMask(SelectedEssences); - Base::ClearChangesMask(Xp); - Base::ClearChangesMask(Level); - Base::ClearChangesMask(AuraLevel); - Base::ClearChangesMask(KnowledgeLevel); - Base::ClearChangesMask(DEBUGknowledgeWeek); - _changesMask.ResetAll(); -} - -void SpellCastVisual::WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const -{ - data << int32(SpellXSpellVisualID); - data << int32(ScriptVisualID); -} - -void SpellCastVisual::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const -{ - data << int32(SpellXSpellVisualID); - data << int32(ScriptVisualID); -} - -bool SpellCastVisual::operator==(SpellCastVisual const& right) const -{ - return SpellXSpellVisualID == right.SpellXSpellVisualID - && ScriptVisualID == right.ScriptVisualID; -} - void UnitChannel::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(SpellID); - SpellVisual.WriteCreate(data, owner, receiver); + data << int32(SpellXSpellVisualID); } void UnitChannel::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const { data << int32(SpellID); - SpellVisual.WriteUpdate(data, ignoreChangesMask, owner, receiver); + data << int32(SpellXSpellVisualID); } bool UnitChannel::operator==(UnitChannel const& right) const { return SpellID == right.SpellID - && SpellVisual == right.SpellVisual; + && SpellXSpellVisualID == right.SpellXSpellVisualID; } void VisibleItem::WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const { data << int32(ItemID); - data << int32(SecondaryItemModifiedAppearanceID); - data << int32(ConditionalItemAppearanceID); data << uint16(ItemAppearanceModID); data << uint16(ItemVisual); } @@ -871,7 +601,7 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 6); + data.WriteBits(changesMask.GetBlock(0), 4); data.FlushBits(); if (changesMask[0]) @@ -881,18 +611,10 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con data << int32(ItemID); } if (changesMask[2]) - { - data << int32(SecondaryItemModifiedAppearanceID); - } - if (changesMask[3]) - { - data << int32(ConditionalItemAppearanceID); - } - if (changesMask[4]) { data << uint16(ItemAppearanceModID); } - if (changesMask[5]) + if (changesMask[3]) { data << uint16(ItemVisual); } @@ -902,8 +624,6 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con void VisibleItem::ClearChangesMask() { Base::ClearChangesMask(ItemID); - Base::ClearChangesMask(SecondaryItemModifiedAppearanceID); - Base::ClearChangesMask(ConditionalItemAppearanceID); Base::ClearChangesMask(ItemAppearanceModID); Base::ClearChangesMask(ItemVisual); _changesMask.ResetAll(); @@ -929,6 +649,8 @@ bool PassiveSpellHistory::operator==(PassiveSpellHistory const& right) const void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { + data << int64(Health); + data << int64(MaxHealth); data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); for (uint32 i = 0; i < 2; ++i) { @@ -938,8 +660,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << uint32(StateAnimID); data << uint32(StateAnimKitID); data << uint32(StateWorldEffectIDs->size()); - data << uint32(StateWorldEffectsQuestObjectiveID); - data << int32(SpellOverrideNameID); for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i) { data << uint32((*StateWorldEffectIDs)[i]); @@ -959,7 +679,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << BattlePetCompanionGUID; data << uint64(BattlePetDBID); ChannelData->WriteCreate(data, owner, receiver); - data << int8(SpellEmpowerStage); data << uint32(SummonedByHomeRealm); data << uint8(Race); data << uint8(ClassId); @@ -967,12 +686,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << uint8(Sex); data << uint8(DisplayPower); data << uint32(OverrideDisplayPowerID); - data << int64(Health); - for (uint32 i = 0; i < 10; ++i) - { - data << int32(Power[i]); - data << int32(MaxPower[i]); - } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll)) { for (uint32 i = 0; i < 10; ++i) @@ -981,7 +694,12 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << float(PowerRegenInterruptedFlatModifier[i]); } } - data << int64(MaxHealth); + for (uint32 i = 0; i < 10; ++i) + { + data << int32(Power[i]); + data << int32(MaxPower[i]); + data << float(ModPowerRegen[i]); + } data << int32(Level); data << int32(EffectiveLevel); data << int32(ContentTuningID); @@ -1011,12 +729,9 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << float(BoundingRadius); data << float(CombatReach); data << float(DisplayScale); - data << int32(CreatureFamily); - data << int32(CreatureType); data << int32(NativeDisplayID); data << float(NativeXDisplayScale); data << int32(MountDisplayID); - data << int32(CosmeticMountDisplayID); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath)) { data << float(MinDamage); @@ -1033,7 +748,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << uint32(PetExperience); data << uint32(PetNextLevelExperience); data << float(ModCastingSpeed); - data << float(ModCastingSpeedNeg); data << float(ModSpellHaste); data << float(ModHaste); data << float(ModRangedHaste); @@ -1041,14 +755,15 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << float(ModTimeRate); data << int32(CreatedBySpell); data << int32(EmoteState); + data << int16(TrainingPointsUsed); + data << int16(TrainingPointsTotal); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { - for (uint32 i = 0; i < 4; ++i) + for (uint32 i = 0; i < 5; ++i) { data << int32(Stats[i]); data << int32(StatPosBuff[i]); data << int32(StatNegBuff[i]); - data << int32(StatSupportBuff[i]); } } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::Empath)) @@ -1062,11 +777,16 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi { for (uint32 i = 0; i < 7; ++i) { - data << int32(BonusResistanceMods[i]); - data << int32(ManaCostModifier[i]); + data << int32(PowerCostModifier[i]); + data << float(PowerCostMultiplier[i]); } } - data << int32(BaseMana); + for (uint32 i = 0; i < 7; ++i) + { + data << int32(ResistanceBuffModsPositive[i]); + data << int32(ResistanceBuffModsNegative[i]); + } + data << int32(BaseMana); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { data << int32(BaseHealth); @@ -1081,29 +801,21 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << int32(AttackPowerModPos); data << int32(AttackPowerModNeg); data << float(AttackPowerMultiplier); - data << int32(AttackPowerModSupport); data << int32(RangedAttackPower); data << int32(RangedAttackPowerModPos); data << int32(RangedAttackPowerModNeg); data << float(RangedAttackPowerMultiplier); - data << int32(RangedAttackPowerModSupport); - data << int32(MainHandWeaponAttackPower); - data << int32(OffHandWeaponAttackPower); - data << int32(RangedWeaponAttackPower); data << int32(SetAttackSpeedAura); data << float(Lifesteal); data << float(MinRangedDamage); data << float(MaxRangedDamage); - data << float(ManaCostMultiplier); data << float(MaxHealthModifier); } data << float(HoverHeight); data << int32(MinItemLevelCutoff); data << int32(MinItemLevel); data << int32(MaxItemLevel); - data << int32(AzeriteItemLevel); data << int32(WildBattlePetLevel); - data << int32(BattlePetCompanionExperience); data << uint32(BattlePetCompanionNameTimestamp); data << int32(InteractSpellID); data << int32(ScaleDuration); @@ -1111,16 +823,18 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi data << int32(LooksLikeCreatureID); data << int32(LookAtControllerID); data << int32(PerksVendorItemID); - data << int32(TaxiNodesID); data << GuildGUID; data << uint32(PassiveSpells.size()); data << uint32(WorldEffects.size()); data << uint32(ChannelObjects.size()); + data << SkinningOwnerGUID; data << int32(FlightCapabilityID); data << float(GlideEventSpeedDivisor); - data << uint32(SilencedSchoolMask); data << uint32(CurrentAreaID); - data << NameplateAttachToGUID; + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) + { + data << ComboTarget; + } for (uint32 i = 0; i < PassiveSpells.size(); ++i) { PassiveSpells[i].WriteCreate(data, owner, receiver); @@ -1137,7 +851,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xFF0FDFFFu, 0xC001EFFFu, 0x001EFFFFu, 0xFFFFFE00u, 0x00003FFFu, 0xFFF00000u, 0x00000007u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1145,24 +859,24 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x000003FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu }; + allowedMaskForTarget |= { 0x00002000u, 0x00F02000u, 0x3FFE1000u, 0xFFF10000u, 0x000001FFu, 0xFFFFC000u, 0x000FFFFFu, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0xFFF00000u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }; + allowedMaskForTarget |= { 0x00000000u, 0x00F00000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0x0000003Fu, 0x00000000u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xFF0FDFFFu, 0xC001EFFFu, 0x001EFFFFu, 0xFFFFFE00u, 0x00003FFFu, 0xFFF00000u, 0x00000007u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 7); - for (uint32 i = 0; i < 7; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 8); + for (uint32 i = 0; i < 8; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -1237,27 +951,27 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[5]) { - data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << int64(Health); } if (changesMask[6]) { - data << uint32(StateSpellVisualID); + data << int64(MaxHealth); } if (changesMask[7]) { - data << uint32(StateAnimID); + data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[8]) { - data << uint32(StateAnimKitID); + data << uint32(StateSpellVisualID); } if (changesMask[9]) { - data << uint32(StateWorldEffectsQuestObjectiveID); + data << uint32(StateAnimID); } if (changesMask[10]) { - data << int32(SpellOverrideNameID); + data << uint32(StateAnimKitID); } if (changesMask[11]) { @@ -1309,507 +1023,465 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[23]) { - data << int8(SpellEmpowerStage); + data << uint32(SummonedByHomeRealm); } if (changesMask[24]) { - data << uint32(SummonedByHomeRealm); + data << uint8(Race); } if (changesMask[25]) { - data << uint8(Race); + data << uint8(ClassId); } if (changesMask[26]) { - data << uint8(ClassId); + data << uint8(PlayerClassId); } if (changesMask[27]) { - data << uint8(PlayerClassId); + data << uint8(Sex); } if (changesMask[28]) { - data << uint8(Sex); + data << uint8(DisplayPower); } if (changesMask[29]) { - data << uint8(DisplayPower); + data << uint32(OverrideDisplayPowerID); } if (changesMask[30]) { - data << uint32(OverrideDisplayPowerID); + data << int32(Level); } if (changesMask[31]) { - data << int64(Health); + data << int32(EffectiveLevel); } } if (changesMask[32]) { if (changesMask[33]) { - data << int64(MaxHealth); + data << int32(ContentTuningID); } if (changesMask[34]) { - data << int32(Level); + data << int32(ScalingLevelMin); } if (changesMask[35]) { - data << int32(EffectiveLevel); + data << int32(ScalingLevelMax); } if (changesMask[36]) { - data << int32(ContentTuningID); + data << int32(ScalingLevelDelta); } if (changesMask[37]) { - data << int32(ScalingLevelMin); + data << int32(ScalingFactionGroup); } if (changesMask[38]) { - data << int32(ScalingLevelMax); + data << int32(ScalingHealthItemLevelCurveID); } if (changesMask[39]) { - data << int32(ScalingLevelDelta); + data << int32(ScalingDamageItemLevelCurveID); } if (changesMask[40]) { - data << int32(ScalingFactionGroup); + data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[41]) { - data << int32(ScalingHealthItemLevelCurveID); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[42]) { - data << int32(ScalingDamageItemLevelCurveID); + data << uint32(Flags2); } if (changesMask[43]) { - data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[44]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[45]) { - data << uint32(Flags2); + data << uint32(RangedAttackRoundBaseTime); } if (changesMask[46]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << float(BoundingRadius); } if (changesMask[47]) { - data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); + data << float(CombatReach); } if (changesMask[48]) { - data << uint32(RangedAttackRoundBaseTime); + data << float(DisplayScale); } if (changesMask[49]) { - data << float(BoundingRadius); + data << int32(NativeDisplayID); } if (changesMask[50]) { - data << float(CombatReach); + data << float(NativeXDisplayScale); } if (changesMask[51]) { - data << float(DisplayScale); + data << int32(MountDisplayID); } if (changesMask[52]) { - data << int32(CreatureFamily); + data << float(MinDamage); } if (changesMask[53]) { - data << int32(CreatureType); + data << float(MaxDamage); } if (changesMask[54]) { - data << int32(NativeDisplayID); + data << float(MinOffHandDamage); } if (changesMask[55]) { - data << float(NativeXDisplayScale); + data << float(MaxOffHandDamage); } if (changesMask[56]) { - data << int32(MountDisplayID); + data << uint8(StandState); } if (changesMask[57]) { - data << int32(CosmeticMountDisplayID); + data << uint8(PetTalentPoints); } if (changesMask[58]) { - data << float(MinDamage); + data << uint8(VisFlags); } if (changesMask[59]) { - data << float(MaxDamage); + data << uint8(AnimTier); } if (changesMask[60]) { - data << float(MinOffHandDamage); + data << uint32(PetNumber); } if (changesMask[61]) { - data << float(MaxOffHandDamage); + data << uint32(PetNameTimestamp); } if (changesMask[62]) { - data << uint8(StandState); + data << uint32(PetExperience); } if (changesMask[63]) { - data << uint8(PetTalentPoints); + data << uint32(PetNextLevelExperience); } } if (changesMask[64]) { if (changesMask[65]) { - data << uint8(VisFlags); + data << float(ModCastingSpeed); } if (changesMask[66]) { - data << uint8(AnimTier); + data << float(ModSpellHaste); } if (changesMask[67]) { - data << uint32(PetNumber); + data << float(ModHaste); } if (changesMask[68]) { - data << uint32(PetNameTimestamp); + data << float(ModRangedHaste); } if (changesMask[69]) { - data << uint32(PetExperience); + data << float(ModHasteRegen); } if (changesMask[70]) { - data << uint32(PetNextLevelExperience); + data << float(ModTimeRate); } if (changesMask[71]) { - data << float(ModCastingSpeed); + data << int32(CreatedBySpell); } if (changesMask[72]) { - data << float(ModCastingSpeedNeg); + data << int32(EmoteState); } if (changesMask[73]) { - data << float(ModSpellHaste); + data << int16(TrainingPointsUsed); } if (changesMask[74]) { - data << float(ModHaste); + data << int16(TrainingPointsTotal); } if (changesMask[75]) { - data << float(ModRangedHaste); + data << int32(BaseMana); } if (changesMask[76]) { - data << float(ModHasteRegen); + data << int32(BaseHealth); } if (changesMask[77]) { - data << float(ModTimeRate); + data << uint8(SheatheState); } if (changesMask[78]) { - data << int32(CreatedBySpell); + data << uint8(ViewerDependentValue::GetValue(this, owner, receiver)); } if (changesMask[79]) { - data << int32(EmoteState); + data << uint8(PetFlags); } if (changesMask[80]) { - data << int32(BaseMana); + data << uint8(ShapeshiftForm); } if (changesMask[81]) { - data << int32(BaseHealth); + data << int32(AttackPower); } if (changesMask[82]) { - data << uint8(SheatheState); + data << int32(AttackPowerModPos); } if (changesMask[83]) { - data << uint8(ViewerDependentValue::GetValue(this, owner, receiver)); + data << int32(AttackPowerModNeg); } if (changesMask[84]) { - data << uint8(PetFlags); + data << float(AttackPowerMultiplier); } if (changesMask[85]) { - data << uint8(ShapeshiftForm); + data << int32(RangedAttackPower); } if (changesMask[86]) { - data << int32(AttackPower); + data << int32(RangedAttackPowerModPos); } if (changesMask[87]) { - data << int32(AttackPowerModPos); + data << int32(RangedAttackPowerModNeg); } if (changesMask[88]) { - data << int32(AttackPowerModNeg); + data << float(RangedAttackPowerMultiplier); } if (changesMask[89]) { - data << float(AttackPowerMultiplier); + data << int32(SetAttackSpeedAura); } if (changesMask[90]) { - data << int32(AttackPowerModSupport); + data << float(Lifesteal); } if (changesMask[91]) { - data << int32(RangedAttackPower); + data << float(MinRangedDamage); } if (changesMask[92]) { - data << int32(RangedAttackPowerModPos); + data << float(MaxRangedDamage); } if (changesMask[93]) { - data << int32(RangedAttackPowerModNeg); + data << float(MaxHealthModifier); } if (changesMask[94]) { - data << float(RangedAttackPowerMultiplier); + data << float(HoverHeight); } if (changesMask[95]) { - data << int32(RangedAttackPowerModSupport); + data << int32(MinItemLevelCutoff); } } if (changesMask[96]) { if (changesMask[97]) { - data << int32(MainHandWeaponAttackPower); + data << int32(MinItemLevel); } if (changesMask[98]) { - data << int32(OffHandWeaponAttackPower); + data << int32(MaxItemLevel); } if (changesMask[99]) { - data << int32(RangedWeaponAttackPower); + data << int32(WildBattlePetLevel); } if (changesMask[100]) { - data << int32(SetAttackSpeedAura); + data << uint32(BattlePetCompanionNameTimestamp); } if (changesMask[101]) { - data << float(Lifesteal); + data << int32(InteractSpellID); } if (changesMask[102]) { - data << float(MinRangedDamage); + data << int32(ScaleDuration); } if (changesMask[103]) { - data << float(MaxRangedDamage); + data << int32(LooksLikeMountID); } if (changesMask[104]) { - data << float(ManaCostMultiplier); + data << int32(LooksLikeCreatureID); } if (changesMask[105]) { - data << float(MaxHealthModifier); + data << int32(LookAtControllerID); } if (changesMask[106]) { - data << float(HoverHeight); + data << int32(PerksVendorItemID); } if (changesMask[107]) { - data << int32(MinItemLevelCutoff); + data << GuildGUID; } if (changesMask[108]) { - data << int32(MinItemLevel); + data << SkinningOwnerGUID; } if (changesMask[109]) - { - data << int32(MaxItemLevel); - } - if (changesMask[110]) - { - data << int32(AzeriteItemLevel); - } - if (changesMask[111]) - { - data << int32(WildBattlePetLevel); - } - if (changesMask[112]) - { - data << int32(BattlePetCompanionExperience); - } - if (changesMask[113]) - { - data << uint32(BattlePetCompanionNameTimestamp); - } - if (changesMask[114]) - { - data << int32(InteractSpellID); - } - if (changesMask[115]) - { - data << int32(ScaleDuration); - } - if (changesMask[116]) - { - data << int32(LooksLikeMountID); - } - if (changesMask[117]) - { - data << int32(LooksLikeCreatureID); - } - if (changesMask[118]) - { - data << int32(LookAtControllerID); - } - if (changesMask[119]) - { - data << int32(PerksVendorItemID); - } - if (changesMask[120]) - { - data << int32(TaxiNodesID); - } - if (changesMask[121]) - { - data << GuildGUID; - } - if (changesMask[122]) { data << int32(FlightCapabilityID); } - if (changesMask[123]) + if (changesMask[110]) { data << float(GlideEventSpeedDivisor); } - if (changesMask[124]) - { - data << uint32(SilencedSchoolMask); - } - if (changesMask[125]) + if (changesMask[111]) { data << uint32(CurrentAreaID); } - if (changesMask[126]) + if (changesMask[112]) { - data << NameplateAttachToGUID; + data << ComboTarget; } } - if (changesMask[127]) + if (changesMask[113]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[128 + i]) + if (changesMask[114 + i]) { data << uint32(ViewerDependentValue::GetValue(this, i, owner, receiver)); } } } - if (changesMask[130]) + if (changesMask[116]) { for (uint32 i = 0; i < 10; ++i) { - if (changesMask[131 + i]) + if (changesMask[117 + i]) { - data << int32(Power[i]); + data << float(PowerRegenFlatModifier[i]); } - if (changesMask[141 + i]) + if (changesMask[127 + i]) { - data << int32(MaxPower[i]); + data << float(PowerRegenInterruptedFlatModifier[i]); } - if (changesMask[151 + i]) + if (changesMask[137 + i]) { - data << float(PowerRegenFlatModifier[i]); + data << int32(Power[i]); } - if (changesMask[161 + i]) + if (changesMask[147 + i]) { - data << float(PowerRegenInterruptedFlatModifier[i]); + data << int32(MaxPower[i]); + } + if (changesMask[157 + i]) + { + data << float(ModPowerRegen[i]); } } } - if (changesMask[171]) + if (changesMask[167]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[172 + i]) + if (changesMask[168 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[175]) + if (changesMask[171]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[176 + i]) + if (changesMask[172 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[178]) + if (changesMask[174]) { - for (uint32 i = 0; i < 4; ++i) + for (uint32 i = 0; i < 5; ++i) { - if (changesMask[179 + i]) + if (changesMask[175 + i]) { data << int32(Stats[i]); } - if (changesMask[183 + i]) + if (changesMask[180 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[187 + i]) + if (changesMask[185 + i]) { data << int32(StatNegBuff[i]); } - if (changesMask[191 + i]) - { - data << int32(StatSupportBuff[i]); - } } } - if (changesMask[195]) + if (changesMask[190]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[196 + i]) + if (changesMask[191 + i]) { data << int32(Resistances[i]); } - if (changesMask[203 + i]) + if (changesMask[198 + i]) + { + data << int32(PowerCostModifier[i]); + } + if (changesMask[205 + i]) + { + data << float(PowerCostMultiplier[i]); + } + } + } + if (changesMask[212]) + { + for (uint32 i = 0; i < 7; ++i) + { + if (changesMask[213 + i]) { - data << int32(BonusResistanceMods[i]); + data << int32(ResistanceBuffModsPositive[i]); } - if (changesMask[210 + i]) + if (changesMask[220 + i]) { - data << int32(ManaCostModifier[i]); + data << int32(ResistanceBuffModsNegative[i]); } } } @@ -1821,12 +1493,12 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(PassiveSpells); Base::ClearChangesMask(WorldEffects); Base::ClearChangesMask(ChannelObjects); + Base::ClearChangesMask(Health); + Base::ClearChangesMask(MaxHealth); Base::ClearChangesMask(DisplayID); Base::ClearChangesMask(StateSpellVisualID); Base::ClearChangesMask(StateAnimID); Base::ClearChangesMask(StateAnimKitID); - Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID); - Base::ClearChangesMask(SpellOverrideNameID); Base::ClearChangesMask(Charm); Base::ClearChangesMask(Summon); Base::ClearChangesMask(Critter); @@ -1839,7 +1511,6 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(BattlePetCompanionGUID); Base::ClearChangesMask(BattlePetDBID); Base::ClearChangesMask(ChannelData); - Base::ClearChangesMask(SpellEmpowerStage); Base::ClearChangesMask(SummonedByHomeRealm); Base::ClearChangesMask(Race); Base::ClearChangesMask(ClassId); @@ -1847,8 +1518,6 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(Sex); Base::ClearChangesMask(DisplayPower); Base::ClearChangesMask(OverrideDisplayPowerID); - Base::ClearChangesMask(Health); - Base::ClearChangesMask(MaxHealth); Base::ClearChangesMask(Level); Base::ClearChangesMask(EffectiveLevel); Base::ClearChangesMask(ContentTuningID); @@ -1867,12 +1536,9 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(BoundingRadius); Base::ClearChangesMask(CombatReach); Base::ClearChangesMask(DisplayScale); - Base::ClearChangesMask(CreatureFamily); - Base::ClearChangesMask(CreatureType); Base::ClearChangesMask(NativeDisplayID); Base::ClearChangesMask(NativeXDisplayScale); Base::ClearChangesMask(MountDisplayID); - Base::ClearChangesMask(CosmeticMountDisplayID); Base::ClearChangesMask(MinDamage); Base::ClearChangesMask(MaxDamage); Base::ClearChangesMask(MinOffHandDamage); @@ -1886,7 +1552,6 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(PetExperience); Base::ClearChangesMask(PetNextLevelExperience); Base::ClearChangesMask(ModCastingSpeed); - Base::ClearChangesMask(ModCastingSpeedNeg); Base::ClearChangesMask(ModSpellHaste); Base::ClearChangesMask(ModHaste); Base::ClearChangesMask(ModRangedHaste); @@ -1894,6 +1559,8 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(ModTimeRate); Base::ClearChangesMask(CreatedBySpell); Base::ClearChangesMask(EmoteState); + Base::ClearChangesMask(TrainingPointsUsed); + Base::ClearChangesMask(TrainingPointsTotal); Base::ClearChangesMask(BaseMana); Base::ClearChangesMask(BaseHealth); Base::ClearChangesMask(SheatheState); @@ -1904,28 +1571,20 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(AttackPowerModPos); Base::ClearChangesMask(AttackPowerModNeg); Base::ClearChangesMask(AttackPowerMultiplier); - Base::ClearChangesMask(AttackPowerModSupport); Base::ClearChangesMask(RangedAttackPower); Base::ClearChangesMask(RangedAttackPowerModPos); Base::ClearChangesMask(RangedAttackPowerModNeg); Base::ClearChangesMask(RangedAttackPowerMultiplier); - Base::ClearChangesMask(RangedAttackPowerModSupport); - Base::ClearChangesMask(MainHandWeaponAttackPower); - Base::ClearChangesMask(OffHandWeaponAttackPower); - Base::ClearChangesMask(RangedWeaponAttackPower); Base::ClearChangesMask(SetAttackSpeedAura); Base::ClearChangesMask(Lifesteal); Base::ClearChangesMask(MinRangedDamage); Base::ClearChangesMask(MaxRangedDamage); - Base::ClearChangesMask(ManaCostMultiplier); Base::ClearChangesMask(MaxHealthModifier); Base::ClearChangesMask(HoverHeight); Base::ClearChangesMask(MinItemLevelCutoff); Base::ClearChangesMask(MinItemLevel); Base::ClearChangesMask(MaxItemLevel); - Base::ClearChangesMask(AzeriteItemLevel); Base::ClearChangesMask(WildBattlePetLevel); - Base::ClearChangesMask(BattlePetCompanionExperience); Base::ClearChangesMask(BattlePetCompanionNameTimestamp); Base::ClearChangesMask(InteractSpellID); Base::ClearChangesMask(ScaleDuration); @@ -1933,27 +1592,28 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(LooksLikeCreatureID); Base::ClearChangesMask(LookAtControllerID); Base::ClearChangesMask(PerksVendorItemID); - Base::ClearChangesMask(TaxiNodesID); Base::ClearChangesMask(GuildGUID); + Base::ClearChangesMask(SkinningOwnerGUID); Base::ClearChangesMask(FlightCapabilityID); Base::ClearChangesMask(GlideEventSpeedDivisor); - Base::ClearChangesMask(SilencedSchoolMask); Base::ClearChangesMask(CurrentAreaID); - Base::ClearChangesMask(NameplateAttachToGUID); + Base::ClearChangesMask(ComboTarget); Base::ClearChangesMask(NpcFlags); - Base::ClearChangesMask(Power); - Base::ClearChangesMask(MaxPower); Base::ClearChangesMask(PowerRegenFlatModifier); Base::ClearChangesMask(PowerRegenInterruptedFlatModifier); + Base::ClearChangesMask(Power); + Base::ClearChangesMask(MaxPower); + Base::ClearChangesMask(ModPowerRegen); Base::ClearChangesMask(VirtualItems); Base::ClearChangesMask(AttackRoundBaseTime); Base::ClearChangesMask(Stats); Base::ClearChangesMask(StatPosBuff); Base::ClearChangesMask(StatNegBuff); - Base::ClearChangesMask(StatSupportBuff); Base::ClearChangesMask(Resistances); - Base::ClearChangesMask(BonusResistanceMods); - Base::ClearChangesMask(ManaCostModifier); + Base::ClearChangesMask(PowerCostModifier); + Base::ClearChangesMask(PowerCostMultiplier); + Base::ClearChangesMask(ResistanceBuffModsPositive); + Base::ClearChangesMask(ResistanceBuffModsNegative); _changesMask.ResetAll(); } @@ -1980,10 +1640,9 @@ void QuestLog::WriteCreate(ByteBuffer& data, Player const* owner, Player const* data << int64(EndTime); data << int32(QuestID); data << uint32(StateFlags); - data << uint32(ObjectiveFlags); for (uint32 i = 0; i < 24; ++i) { - data << int16(ObjectiveProgress[i]); + data << uint16(ObjectiveProgress[i]); } } @@ -2012,18 +1671,14 @@ void QuestLog::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player cons { data << uint32(StateFlags); } - if (changesMask[4]) - { - data << uint32(ObjectiveFlags); - } } - if (changesMask[5]) + if (changesMask[4]) { for (uint32 i = 0; i < 24; ++i) { - if (changesMask[6 + i]) + if (changesMask[5 + i]) { - data << int16(ObjectiveProgress[i]); + data << uint16(ObjectiveProgress[i]); } } } @@ -2034,7 +1689,6 @@ void QuestLog::ClearChangesMask() Base::ClearChangesMask(EndTime); Base::ClearChangesMask(QuestID); Base::ClearChangesMask(StateFlags); - Base::ClearChangesMask(ObjectiveFlags); Base::ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } @@ -2042,6 +1696,7 @@ void QuestLog::ClearChangesMask() void ArenaCooldown::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(SpellID); + data << int32(ItemID); data << int32(Charges); data << uint32(Flags); data << uint32(StartTime); @@ -2056,7 +1711,7 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 8); + data.WriteBits(changesMask.GetBlock(0), 9); data.FlushBits(); if (changesMask[0]) @@ -2067,25 +1722,29 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player } if (changesMask[2]) { - data << int32(Charges); + data << int32(ItemID); } if (changesMask[3]) { - data << uint32(Flags); + data << int32(Charges); } if (changesMask[4]) { - data << uint32(StartTime); + data << uint32(Flags); } if (changesMask[5]) { - data << uint32(EndTime); + data << uint32(StartTime); } if (changesMask[6]) { - data << uint32(NextChargeTime); + data << uint32(EndTime); } if (changesMask[7]) + { + data << uint32(NextChargeTime); + } + if (changesMask[8]) { data << uint8(MaxCharges); } @@ -2095,6 +1754,7 @@ void ArenaCooldown::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player void ArenaCooldown::ClearChangesMask() { Base::ClearChangesMask(SpellID); + Base::ClearChangesMask(ItemID); Base::ClearChangesMask(Charges); Base::ClearChangesMask(Flags); Base::ClearChangesMask(StartTime); @@ -2104,141 +1764,10 @@ void ArenaCooldown::ClearChangesMask() _changesMask.ResetAll(); } -void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(ContentTuningConditionMask); - data << uint32(Field_4); - data << uint32(ExpansionLevelMask); -} - -void CTROptions::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << int32(ContentTuningConditionMask); - data << uint32(Field_4); - data << uint32(ExpansionLevelMask); -} - -bool CTROptions::operator==(CTROptions const& right) const -{ - return ContentTuningConditionMask == right.ContentTuningConditionMask - && Field_4 == right.Field_4 - && ExpansionLevelMask == right.ExpansionLevelMask; -} - -void DeclinedNames::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - for (uint32 i = 0; i < 5; ++i) - { - data.WriteBits(Name[i].size(), 10); - } - data.FlushBits(); - for (uint32 i = 0; i < 5; ++i) - { - data.WriteString(Name[i]); - } - data.FlushBits(); -} - -void DeclinedNames::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlocksMask(0), 1); - if (changesMask.GetBlock(0)) - data.WriteBits(changesMask.GetBlock(0), 32); - - data.FlushBits(); - if (changesMask[0]) - { - for (uint32 i = 0; i < 5; ++i) - { - if (changesMask[1 + i]) - { - data.WriteBits(Name[i].size(), 10); - } - } - } - data.FlushBits(); - if (changesMask[0]) - { - for (uint32 i = 0; i < 5; ++i) - { - if (changesMask[1 + i]) - { - data.WriteString(Name[i]); - } - } - } - data.FlushBits(); -} - -void DeclinedNames::ClearChangesMask() -{ - Base::ClearChangesMask(Name); - _changesMask.ResetAll(); -} - -void CustomTabardInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(EmblemStyle); - data << int32(EmblemColor); - data << int32(BorderStyle); - data << int32(BorderColor); - data << int32(BackgroundColor); -} - -void CustomTabardInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlock(0), 6); - - data.FlushBits(); - if (changesMask[0]) - { - if (changesMask[1]) - { - data << int32(EmblemStyle); - } - if (changesMask[2]) - { - data << int32(EmblemColor); - } - if (changesMask[3]) - { - data << int32(BorderStyle); - } - if (changesMask[4]) - { - data << int32(BorderColor); - } - if (changesMask[5]) - { - data << int32(BackgroundColor); - } - } -} - -void CustomTabardInfo::ClearChangesMask() -{ - Base::ClearChangesMask(EmblemStyle); - Base::ClearChangesMask(EmblemColor); - Base::ClearChangesMask(BorderStyle); - Base::ClearChangesMask(BorderColor); - Base::ClearChangesMask(BackgroundColor); - _changesMask.ResetAll(); -} - void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const { data << DuelArbiter; data << WowAccount; - data << BnetAccount; - data << uint64(GuildClubMemberID); data << LootTargetGUID; data << uint32(PlayerFlags); data << uint32(PlayerFlagsEx); @@ -2246,24 +1775,25 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVi data << uint32(GuildDeleteDate); data << int32(GuildLevel); data << uint32(Customizations.size()); - data << uint32(QaCustomizations.size()); for (uint32 i = 0; i < 2; ++i) { data << uint8(PartyType[i]); } + data << uint8(NumBankSlots); data << uint8(NativeSex); data << uint8(Inebriation); data << uint8(PvpTitle); data << uint8(ArenaFaction); + data << uint8(PvpRank); + data << int32(Field_88); data << uint32(DuelTeam); data << int32(GuildTimeStamp); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) { - for (uint32 i = 0; i < 175; ++i) + for (uint32 i = 0; i < 25; ++i) { QuestLog[i].WriteCreate(data, owner, receiver); } - data << uint32(QuestSessionQuestLog.size()); } for (uint32 i = 0; i < 19; ++i) { @@ -2282,33 +1812,17 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVi data << int32(HonorLevel); data << int64(LogoutTime); data << uint32(ArenaCooldowns.size()); - data << int32(Field_B0); - data << int32(Field_B4); data << int32(CurrentBattlePetSpeciesID); - CtrOptions->WriteCreate(data, owner, receiver); - data << int32(CovenantID); - data << int32(SoulbindID); + data << BnetAccount; data << uint32(VisualItemReplacements.size()); for (uint32 i = 0; i < 19; ++i) { data << uint32(Field_3120[i]); } - PersonalTabard->WriteCreate(data, owner, receiver); for (uint32 i = 0; i < Customizations.size(); ++i) { Customizations[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < QaCustomizations.size(); ++i) - { - QaCustomizations[i].WriteCreate(data, owner, receiver); - } - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - { - for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i) - { - QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); - } - } for (uint32 i = 0; i < ArenaCooldowns.size(); ++i) { ArenaCooldowns[i].WriteCreate(data, owner, receiver); @@ -2317,26 +1831,12 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVi { data << int32(VisualItemReplacements[i]); } - data.FlushBits(); - data.WriteBits(Name->size(), 6); - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - { - data.WriteBit(HasQuestSession); - } - data.WriteBit(HasLevelLink); - data.WriteBits(DeclinedNames.has_value(), 1); data << DungeonScore; - data.WriteString(Name); - if (DeclinedNames.has_value()) - { - DeclinedNames->WriteCreate(data, owner, receiver); - } - data.FlushBits(); } void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFFFu, 0xE0000007u, 0xFFFFFFFFu, 0x00000FFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2344,20 +1844,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x1FFFFFF8u, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFFFu, 0xE0000007u, 0xFFFFFFFFu, 0x00000FFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Player const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 9); - for (uint32 i = 0; i < 9; ++i) + data.WriteBits(changesMask.GetBlocksMask(0), 4); + for (uint32 i = 0; i < 4; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -2365,42 +1865,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign if (changesMask[0]) { if (changesMask[1]) - { - data.WriteBit(HasQuestSession); - } - if (changesMask[2]) - { - data.WriteBit(HasLevelLink); - } - if (changesMask[3]) { if (!ignoreNestedChangesMask) Customizations.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Customizations.size(), data); } - if (changesMask[4]) - { - if (!ignoreNestedChangesMask) - QaCustomizations.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(QaCustomizations.size(), data); - } - if (changesMask[5]) - { - if (!ignoreNestedChangesMask) - QuestSessionQuestLog.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(QuestSessionQuestLog.size(), data); - } - if (changesMask[6]) + if (changesMask[2]) { if (!ignoreNestedChangesMask) ArenaCooldowns.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ArenaCooldowns.size(), data); } - if (changesMask[7]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) VisualItemReplacements.WriteUpdateMask(data); @@ -2411,7 +1889,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign data.FlushBits(); if (changesMask[0]) { - if (changesMask[3]) + if (changesMask[1]) { for (uint32 i = 0; i < Customizations.size(); ++i) { @@ -2421,30 +1899,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[4]) - { - for (uint32 i = 0; i < QaCustomizations.size(); ++i) - { - if (QaCustomizations.HasChanged(i) || ignoreNestedChangesMask) - { - QaCustomizations[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[5]) - { - for (uint32 i = 0; i < QuestSessionQuestLog.size(); ++i) - { - if (QuestSessionQuestLog.HasChanged(i) || ignoreNestedChangesMask) - { - if (noQuestLogChangesMask) - QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); - else - QuestSessionQuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[6]) + if (changesMask[2]) { for (uint32 i = 0; i < ArenaCooldowns.size(); ++i) { @@ -2454,7 +1909,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[7]) + if (changesMask[3]) { for (uint32 i = 0; i < VisualItemReplacements.size(); ++i) { @@ -2464,234 +1919,194 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[8]) + if (changesMask[4]) { data << DuelArbiter; } - if (changesMask[9]) + if (changesMask[5]) { data << WowAccount; } + if (changesMask[6]) + { + data << LootTargetGUID; + } + if (changesMask[7]) + { + data << uint32(PlayerFlags); + } + if (changesMask[8]) + { + data << uint32(PlayerFlagsEx); + } + if (changesMask[9]) + { + data << uint32(GuildRankID); + } if (changesMask[10]) { - data << BnetAccount; + data << uint32(GuildDeleteDate); } if (changesMask[11]) { - data << uint64(GuildClubMemberID); + data << int32(GuildLevel); } if (changesMask[12]) { - data << LootTargetGUID; + data << uint8(NumBankSlots); } if (changesMask[13]) { - data << uint32(PlayerFlags); + data << uint8(NativeSex); } if (changesMask[14]) { - data << uint32(PlayerFlagsEx); + data << uint8(Inebriation); } if (changesMask[15]) { - data << uint32(GuildRankID); + data << uint8(PvpTitle); } if (changesMask[16]) { - data << uint32(GuildDeleteDate); + data << uint8(ArenaFaction); } if (changesMask[17]) { - data << int32(GuildLevel); + data << uint8(PvpRank); } if (changesMask[18]) { - data << uint8(NativeSex); + data << int32(Field_88); } if (changesMask[19]) { - data << uint8(Inebriation); + data << uint32(DuelTeam); } if (changesMask[20]) { - data << uint8(PvpTitle); + data << int32(GuildTimeStamp); } if (changesMask[21]) { - data << uint8(ArenaFaction); + data << int32(PlayerTitle); } if (changesMask[22]) { - data << uint32(DuelTeam); + data << int32(FakeInebriation); } if (changesMask[23]) { - data << int32(GuildTimeStamp); + data << uint32(VirtualPlayerRealm); } if (changesMask[24]) { - data << int32(PlayerTitle); + data << uint32(CurrentSpecID); } if (changesMask[25]) { - data << int32(FakeInebriation); + data << int32(TaxiMountAnimKitID); } if (changesMask[26]) { - data << uint32(VirtualPlayerRealm); + data << uint8(CurrentBattlePetBreedQuality); } if (changesMask[27]) { - data << uint32(CurrentSpecID); + data << int32(HonorLevel); } if (changesMask[28]) { - data << int32(TaxiMountAnimKitID); + data << int64(LogoutTime); } if (changesMask[29]) { - data << uint8(CurrentBattlePetBreedQuality); + data << int32(CurrentBattlePetSpeciesID); } if (changesMask[30]) { - data << int32(HonorLevel); + data << BnetAccount; } if (changesMask[31]) { - data << int64(LogoutTime); + data << DungeonScore; } } if (changesMask[32]) { - if (changesMask[34]) + for (uint32 i = 0; i < 2; ++i) { - data << int32(Field_B0); + if (changesMask[33 + i]) + { + data << uint8(PartyType[i]); + } } - if (changesMask[35]) + } + if (changesMask[35]) + { + for (uint32 i = 0; i < 25; ++i) { - data << int32(Field_B4); - } - if (changesMask[36]) - { - data << int32(CurrentBattlePetSpeciesID); - } - if (changesMask[37]) - { - CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - if (changesMask[38]) - { - data << int32(CovenantID); - } - if (changesMask[39]) - { - data << int32(SoulbindID); - } - if (changesMask[42]) - { - PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - if (changesMask[33]) - { - data.WriteBits(Name->size(), 32); - } - data.WriteBits(DeclinedNames.has_value(), 1); - data.FlushBits(); - if (changesMask[40]) - { - data << DungeonScore; - } - if (changesMask[33]) - { - data.WriteString(Name); - } - if (changesMask[41]) - { - if (DeclinedNames.has_value()) - { - DeclinedNames->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } - } - if (changesMask[43]) - { - for (uint32 i = 0; i < 2; ++i) - { - if (changesMask[44 + i]) - { - data << uint8(PartyType[i]); - } - } - } - if (changesMask[46]) - { - for (uint32 i = 0; i < 175; ++i) - { - if (changesMask[47 + i]) - { - if (noQuestLogChangesMask) - QuestLog[i].WriteCreate(data, owner, receiver); - else - QuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } + if (changesMask[36 + i]) + { + if (noQuestLogChangesMask) + QuestLog[i].WriteCreate(data, owner, receiver); + else + QuestLog[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } } } - if (changesMask[222]) + if (changesMask[61]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[223 + i]) + if (changesMask[62 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[242]) + if (changesMask[81]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[243 + i]) + if (changesMask[82 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[249]) + if (changesMask[88]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[250 + i]) + if (changesMask[89 + i]) { data << uint32(Field_3120[i]); } } } - data.FlushBits(); } void PlayerData::ClearChangesMask() { - Base::ClearChangesMask(HasQuestSession); - Base::ClearChangesMask(HasLevelLink); Base::ClearChangesMask(Customizations); - Base::ClearChangesMask(QaCustomizations); - Base::ClearChangesMask(QuestSessionQuestLog); Base::ClearChangesMask(ArenaCooldowns); Base::ClearChangesMask(VisualItemReplacements); Base::ClearChangesMask(DuelArbiter); Base::ClearChangesMask(WowAccount); - Base::ClearChangesMask(BnetAccount); - Base::ClearChangesMask(GuildClubMemberID); Base::ClearChangesMask(LootTargetGUID); Base::ClearChangesMask(PlayerFlags); Base::ClearChangesMask(PlayerFlagsEx); Base::ClearChangesMask(GuildRankID); Base::ClearChangesMask(GuildDeleteDate); Base::ClearChangesMask(GuildLevel); + Base::ClearChangesMask(NumBankSlots); Base::ClearChangesMask(NativeSex); Base::ClearChangesMask(Inebriation); Base::ClearChangesMask(PvpTitle); Base::ClearChangesMask(ArenaFaction); + Base::ClearChangesMask(PvpRank); + Base::ClearChangesMask(Field_88); Base::ClearChangesMask(DuelTeam); Base::ClearChangesMask(GuildTimeStamp); Base::ClearChangesMask(PlayerTitle); @@ -2702,16 +2117,9 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(CurrentBattlePetBreedQuality); Base::ClearChangesMask(HonorLevel); Base::ClearChangesMask(LogoutTime); - Base::ClearChangesMask(Name); - Base::ClearChangesMask(Field_B0); - Base::ClearChangesMask(Field_B4); Base::ClearChangesMask(CurrentBattlePetSpeciesID); - Base::ClearChangesMask(CtrOptions); - Base::ClearChangesMask(CovenantID); - Base::ClearChangesMask(SoulbindID); + Base::ClearChangesMask(BnetAccount); Base::ClearChangesMask(DungeonScore); - Base::ClearChangesMask(DeclinedNames); - Base::ClearChangesMask(PersonalTabard); Base::ClearChangesMask(PartyType); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); @@ -3125,186 +2533,6 @@ void ResearchHistory::ClearChangesMask() _changesMask.ResetAll(); } -void MawPower::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(Field_0); - data << int32(Field_4); - data << int32(Field_8); -} - -void MawPower::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << int32(Field_0); - data << int32(Field_4); - data << int32(Field_8); -} - -bool MawPower::operator==(MawPower const& right) const -{ - return Field_0 == right.Field_0 - && Field_4 == right.Field_4 - && Field_8 == right.Field_8; -} - -void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << uint32(WorldMapOverlayIDs.size()); - for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i) - { - data << int32(WorldMapOverlayIDs[i]); - } -} - -void MultiFloorExplore::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << uint32(WorldMapOverlayIDs.size()); - for (uint32 i = 0; i < WorldMapOverlayIDs.size(); ++i) - { - data << int32(WorldMapOverlayIDs[i]); - } - data.FlushBits(); -} - -bool MultiFloorExplore::operator==(MultiFloorExplore const& right) const -{ - return WorldMapOverlayIDs == right.WorldMapOverlayIDs; -} - -void RecipeProgressionInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << uint16(RecipeProgressionGroupID); - data << uint16(Experience); -} - -void RecipeProgressionInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << uint16(RecipeProgressionGroupID); - data << uint16(Experience); -} - -bool RecipeProgressionInfo::operator==(RecipeProgressionInfo const& right) const -{ - return RecipeProgressionGroupID == right.RecipeProgressionGroupID - && Experience == right.Experience; -} - -void ActivePlayerUnk901::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << Field_0; - data << int32(Field_10); -} - -void ActivePlayerUnk901::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlock(0), 3); - - data.FlushBits(); - if (changesMask[0]) - { - if (changesMask[1]) - { - data << Field_0; - } - if (changesMask[2]) - { - data << int32(Field_10); - } - } -} - -void ActivePlayerUnk901::ClearChangesMask() -{ - Base::ClearChangesMask(Field_0); - Base::ClearChangesMask(Field_10); - _changesMask.ResetAll(); -} - -void QuestSession::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << Owner; - for (uint32 i = 0; i < 875; ++i) - { - data << uint64(QuestCompleted[i]); - } -} - -void QuestSession::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlocksMask(0), 28); - for (uint32 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 (uint32 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 ReplayedQuest::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(QuestID); - data << uint32(ReplayTime); -} - -void ReplayedQuest::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - 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 TraitEntry::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(TraitNodeID); @@ -3463,426 +2691,41 @@ void TraitConfig::ClearChangesMask() _changesMask.ResetAll(); } -void CraftingOrderItem::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data << uint64(Field_0); - data << ItemGUID; - data << OwnerGUID; - data << int32(ItemID); - data << uint32(Quantity); - data << int32(ReagentQuality); - data.WriteBits(DataSlotIndex.has_value(), 1); - data.FlushBits(); - if (DataSlotIndex.has_value()) - { - data << uint8(DataSlotIndex); - } + data << int32(SpellCategoryID); + data << int32(ModCooldown); } -void CraftingOrderItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +void CategoryCooldownMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const { - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlock(0), 7); + data << int32(SpellCategoryID); + data << int32(ModCooldown); +} - data.FlushBits(); - if (changesMask[0]) - { - data << uint64(Field_0); - } - if (changesMask[1]) - { - data << ItemGUID; - } - if (changesMask[2]) - { - data << OwnerGUID; - } - if (changesMask[3]) - { - data << int32(ItemID); - } - if (changesMask[4]) - { - data << uint32(Quantity); - } - if (changesMask[5]) - { - data << int32(ReagentQuality); - } - data.WriteBits(DataSlotIndex.has_value(), 1); - data.FlushBits(); - if (changesMask[6]) - { - if (DataSlotIndex.has_value()) - { - data << uint8(DataSlotIndex); - } - } +bool CategoryCooldownMod::operator==(CategoryCooldownMod const& right) const +{ + return SpellCategoryID == right.SpellCategoryID + && ModCooldown == right.ModCooldown; } -void CraftingOrderItem::ClearChangesMask() +void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - Base::ClearChangesMask(Field_0); - Base::ClearChangesMask(ItemGUID); - Base::ClearChangesMask(OwnerGUID); - Base::ClearChangesMask(ItemID); - Base::ClearChangesMask(Quantity); - Base::ClearChangesMask(ReagentQuality); - Base::ClearChangesMask(DataSlotIndex); - _changesMask.ResetAll(); + data << int32(SpellCategoryID); + data << uint8(Uses); } -void CraftingOrderData::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +void WeeklySpellUse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const { - data << int32(Field_0); - data << uint64(OrderID); - data << int32(SkillLineAbilityID); - data << uint8(OrderState); - data << uint8(OrderType); - data << uint8(MinQuality); - data << int64(ExpirationTime); - data << int64(ClaimEndTime); - data << int64(TipAmount); - data << int64(ConsortiumCut); - data << uint32(Flags); - data << CustomerGUID; - data << CustomerAccountGUID; - data << CrafterGUID; - data << PersonalCrafterGUID; - data << uint32(Reagents.size()); - data.WriteBits(CustomerNotes->size(), 10); - data.WriteBits(OutputItem.has_value(), 1); - data.WriteBits(OutputItemData.has_value(), 1); - data.FlushBits(); - for (uint32 i = 0; i < Reagents.size(); ++i) - { - Reagents[i].WriteCreate(data, owner, receiver); - } - data.WriteString(CustomerNotes); - if (OutputItem.has_value()) - { - OutputItem->WriteCreate(data, owner, receiver); - } - if (OutputItemData.has_value()) - { - data << OutputItemData; - } - data.FlushBits(); + data << int32(SpellCategoryID); + data << uint8(Uses); } -void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +bool WeeklySpellUse::operator==(WeeklySpellUse const& right) const { - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlock(0), 24); - - if (changesMask[0]) - { - if (changesMask[1]) - { - if (!ignoreChangesMask) - Reagents.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(Reagents.size(), data); - } - } - data.FlushBits(); - if (changesMask[0]) - { - if (changesMask[1]) - { - for (uint32 i = 0; i < Reagents.size(); ++i) - { - if (Reagents.HasChanged(i) || ignoreChangesMask) - { - Reagents[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); - } - } - } - if (changesMask[2]) - { - data << int32(Field_0); - } - if (changesMask[3]) - { - data << uint64(OrderID); - } - if (changesMask[4]) - { - data << int32(SkillLineAbilityID); - } - } - if (changesMask[5]) - { - if (changesMask[6]) - { - data << uint8(OrderState); - } - if (changesMask[7]) - { - data << uint8(OrderType); - } - if (changesMask[8]) - { - data << uint8(MinQuality); - } - if (changesMask[9]) - { - data << int64(ExpirationTime); - } - } - if (changesMask[10]) - { - if (changesMask[11]) - { - data << int64(ClaimEndTime); - } - if (changesMask[12]) - { - data << int64(TipAmount); - } - if (changesMask[13]) - { - data << int64(ConsortiumCut); - } - if (changesMask[14]) - { - data << uint32(Flags); - } - } - if (changesMask[15]) - { - if (changesMask[16]) - { - data << CustomerGUID; - } - if (changesMask[17]) - { - data << CustomerAccountGUID; - } - if (changesMask[18]) - { - data << CrafterGUID; - } - if (changesMask[19]) - { - data << PersonalCrafterGUID; - } - } - if (changesMask[20]) - { - if (changesMask[21]) - { - data.WriteBits(CustomerNotes->size(), 10); - data.WriteString(CustomerNotes); - } - data.WriteBits(OutputItem.has_value(), 1); - data.WriteBits(OutputItemData.has_value(), 1); - data.FlushBits(); - if (changesMask[22]) - { - if (OutputItem.has_value()) - { - OutputItem->WriteUpdate(data, ignoreChangesMask, owner, receiver); - } - } - if (changesMask[23]) - { - if (OutputItemData.has_value()) - { - data << OutputItemData; - } - } - } - data.FlushBits(); -} - -void CraftingOrderData::ClearChangesMask() -{ - Base::ClearChangesMask(Reagents); - Base::ClearChangesMask(Field_0); - Base::ClearChangesMask(OrderID); - Base::ClearChangesMask(SkillLineAbilityID); - Base::ClearChangesMask(OrderState); - Base::ClearChangesMask(OrderType); - Base::ClearChangesMask(MinQuality); - Base::ClearChangesMask(ExpirationTime); - Base::ClearChangesMask(ClaimEndTime); - Base::ClearChangesMask(TipAmount); - Base::ClearChangesMask(ConsortiumCut); - Base::ClearChangesMask(Flags); - Base::ClearChangesMask(CustomerGUID); - Base::ClearChangesMask(CustomerAccountGUID); - Base::ClearChangesMask(CrafterGUID); - Base::ClearChangesMask(PersonalCrafterGUID); - Base::ClearChangesMask(CustomerNotes); - Base::ClearChangesMask(OutputItem); - Base::ClearChangesMask(OutputItemData); - _changesMask.ResetAll(); -} - -void CraftingOrder::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - Data->WriteCreate(data, owner, receiver); - data.WriteBits(RecraftItemInfo.has_value(), 1); - data.WriteBits(Enchantments.size(), 4); - data.WriteBits(Gems.size(), 2); - data.FlushBits(); - if (RecraftItemInfo.has_value()) - { - data << RecraftItemInfo; - } - for (uint32 i = 0; i < Enchantments.size(); ++i) - { - data << Enchantments[i]; - } - for (uint32 i = 0; i < Gems.size(); ++i) - { - data << Gems[i]; - } - data.FlushBits(); -} - -void CraftingOrder::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); - - if (changesMask[0]) - { - if (!ignoreChangesMask) - Enchantments.WriteUpdateMask(data, 4); - else - WriteCompleteDynamicFieldUpdateMask(Enchantments.size(), data, 4); - } - if (changesMask[1]) - { - if (!ignoreChangesMask) - Gems.WriteUpdateMask(data, 2); - else - WriteCompleteDynamicFieldUpdateMask(Gems.size(), data, 2); - } - data.FlushBits(); - if (changesMask[0]) - { - for (uint32 i = 0; i < Enchantments.size(); ++i) - { - if (Enchantments.HasChanged(i) || ignoreChangesMask) - { - data << Enchantments[i]; - } - } - } - if (changesMask[1]) - { - for (uint32 i = 0; i < Gems.size(); ++i) - { - if (Gems.HasChanged(i) || ignoreChangesMask) - { - data << Gems[i]; - } - } - } - if (changesMask[2]) - { - Data->WriteUpdate(data, ignoreChangesMask, owner, receiver); - } - data.WriteBits(RecraftItemInfo.has_value(), 1); - data.FlushBits(); - if (changesMask[3]) - { - if (RecraftItemInfo.has_value()) - { - data << RecraftItemInfo; - } - } - data.FlushBits(); -} - -void CraftingOrder::ClearChangesMask() -{ - Base::ClearChangesMask(Enchantments); - Base::ClearChangesMask(Gems); - Base::ClearChangesMask(Data); - Base::ClearChangesMask(RecraftItemInfo); - _changesMask.ResetAll(); -} - -void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(ProfessionID); - data << uint32(Count); -} - -void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - Mask changesMask = _changesMask; - if (ignoreChangesMask) - changesMask.SetAll(); - - data.WriteBits(changesMask.GetBlock(0), 2); - - data.FlushBits(); - if (changesMask[0]) - { - data << int32(ProfessionID); - } - if (changesMask[1]) - { - data << uint32(Count); - } -} - -void PersonalCraftingOrderCount::ClearChangesMask() -{ - Base::ClearChangesMask(ProfessionID); - Base::ClearChangesMask(Count); - _changesMask.ResetAll(); -} - -void CategoryCooldownMod::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(SpellCategoryID); - data << int32(ModCooldown); -} - -void CategoryCooldownMod::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << int32(SpellCategoryID); - data << int32(ModCooldown); -} - -bool CategoryCooldownMod::operator==(CategoryCooldownMod const& right) const -{ - return SpellCategoryID == right.SpellCategoryID - && ModCooldown == right.ModCooldown; -} - -void WeeklySpellUse::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const -{ - data << int32(SpellCategoryID); - data << uint8(Uses); -} - -void WeeklySpellUse::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const -{ - data << int32(SpellCategoryID); - data << uint8(Uses); -} - -bool WeeklySpellUse::operator==(WeeklySpellUse const& right) const -{ - return SpellCategoryID == right.SpellCategoryID - && Uses == right.Uses; -} + return SpellCategoryID == right.SpellCategoryID + && Uses == right.Uses; +} void StablePetInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { @@ -4008,47 +2851,6 @@ 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); @@ -4066,7 +2868,7 @@ bool Research::operator==(Research const& right) const void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - for (uint32 i = 0; i < 227; ++i) + for (uint32 i = 0; i < 141; ++i) { data << InvSlots[i]; } @@ -4081,6 +2883,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << int32(CharacterPoints); data << int32(MaxTalentTiers); data << uint32(TrackCreatureMask); + for (uint32 i = 0; i < 2; ++i) + { + data << uint32(TrackResourceMask[i]); + } data << float(MainhandExpertise); data << float(OffhandExpertise); data << float(RangedExpertise); @@ -4093,7 +2899,13 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << float(CritPercentage); data << float(RangedCritPercentage); data << float(OffhandCritPercentage); - data << float(SpellCritPercentage); + for (uint32 i = 0; i < 7; ++i) + { + data << float(SpellCritPercentage[i]); + data << int32(ModDamageDonePos[i]); + data << int32(ModDamageDoneNeg[i]); + data << float(ModDamageDonePercent[i]); + } data << int32(ShieldBlock); data << float(ShieldBlockCritPercentage); data << float(Mastery); @@ -4112,15 +2924,9 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { RestInfo[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < 7; ++i) - { - data << int32(ModDamageDonePos[i]); - data << int32(ModDamageDoneNeg[i]); - data << float(ModDamageDonePercent[i]); - data << float(ModHealingDonePercent[i]); - } data << int32(ModHealingDonePos); data << float(ModHealingPercent); + data << float(ModHealingDonePercent); data << float(ModPeriodicHealingDonePercent); for (uint32 i = 0; i < 3; ++i) { @@ -4138,6 +2944,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << uint8(MultiActionBars); data << uint8(LifetimeMaxRank); data << uint8(NumRespecs); + data << int32(AmmoID); data << uint32(PvpMedals); for (uint32 i = 0; i < 12; ++i) { @@ -4145,14 +2952,25 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << int64(BuybackTimestamp[i]); } data << uint16(TodayHonorableKills); + data << uint16(TodayDishonorableKills); data << uint16(YesterdayHonorableKills); + data << uint16(YesterdayDishonorableKills); + data << uint16(LastWeekHonorableKills); + data << uint16(LastWeekDishonorableKills); + data << uint16(ThisWeekHonorableKills); + data << uint16(ThisWeekDishonorableKills); + data << uint32(ThisWeekContribution); data << uint32(LifetimeHonorableKills); + data << uint32(LifetimeDishonorableKills); + data << uint32(Field_F24); + data << uint32(YesterdayContribution); + data << uint32(LastWeekContribution); + data << uint32(LastWeekRank); data << int32(WatchedFactionIndex); for (uint32 i = 0; i < 32; ++i) { data << int32(CombatRatings[i]); } - data << uint32(PvpInfo.size()); data << int32(MaxLevel); data << int32(ScalingPlayerLevelDelta); data << int32(MaxCreatureScalingLevel); @@ -4169,15 +2987,14 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f data << float(UiSpellHitModifier); data << int32(HomeRealmTimeOffset); data << float(ModPetHaste); - data << int8(JailersTowerLevelMax); - data << int8(JailersTowerLevel); data << uint8(LocalRegenFlags); data << uint8(AuraVision); data << uint8(NumBackpackSlots); data << int32(OverrideSpellsID); + data << int32(LfgBonusFactionID); data << uint16(LootSpecID); data << uint32(OverrideZonePVPType); - for (uint32 i = 0; i < 5; ++i) + for (uint32 i = 0; i < 4; ++i) { data << uint32(BagSlotFlags[i]); } @@ -4191,8 +3008,11 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f } data << int32(Honor); data << int32(HonorNextLevel); + data << int32(Field_F74); + data << int32(PvpTierMaxFromWins); + data << int32(PvpLastWeeksTierMaxFromWins); + data << uint8(PvpRankProgress); data << int32(PerksProgramCurrency); - data << uint8(NumBankSlots); for (uint32 i = 0; i < 1; ++i) { data << uint32(ResearchSites[i].size()); @@ -4213,46 +3033,30 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f } data << uint32(DailyQuestsCompleted.size()); data << uint32(AvailableQuestLineXQuestIDs.size()); + data << uint32(Field_1000.size()); data << uint32(Heirlooms.size()); data << uint32(HeirloomFlags.size()); data << uint32(Toys.size()); - data << uint32(ToyFlags.size()); data << uint32(Transmog.size()); data << uint32(ConditionalTransmog.size()); data << uint32(SelfResSpells.size()); - data << uint32(RuneforgePowers.size()); - data << uint32(TransmogIllusions.size()); data << uint32(CharacterRestrictions.size()); data << uint32(SpellPctModByLabel.size()); data << uint32(SpellFlatModByLabel.size()); - data << uint32(MawPowers.size()); - data << uint32(MultiFloorExploration.size()); - data << uint32(RecipeProgression.size()); - data << uint32(ReplayedQuests.size()); data << uint32(TaskQuests.size()); - data << uint32(DisabledSpells.size()); - data << int32(UiChromieTimeExpansionID); data << int32(TransportServerTime); - data << uint32(WeeklyRewardsPeriodSinceOrigin); - data << int16(DEBUGSoulbindConduitRank); data << uint32(TraitConfigs.size()); data << uint32(ActiveCombatTraitConfigID); - data << uint32(CraftingOrders.size()); - data << uint32(PersonalCraftingOrderCounts.size()); + for (uint32 i = 0; i < 6; ++i) + { + data << uint32(GlyphSlots[i]); + data << uint32(Glyphs[i]); + } + data << uint8(GlyphsEnabled); + data << uint8(LfgRoles); data << uint32(CategoryCooldownMods.size()); data << uint32(WeeklySpellUses.size()); - for (uint32 i = 0; i < 17; ++i) - { - data << float(ItemUpgradeHighWatermark[i]); - } - data << int32(ItemUpgradeHighOnehandWeaponItemID); - data << int32(ItemUpgradeHighFingerItemID); - data << float(ItemUpgradeHighFingerWatermark); - data << int32(ItemUpgradeHighTrinketItemID); - data << float(ItemUpgradeHighTrinketWatermark); - data << uint64(LootHistoryInstanceID); - data << uint32(TrackedCollectableSources.size()); - data << uint8(RequiredMountCapabilityFlags); + data << uint8(NumStableSlots); for (uint32 i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -4265,6 +3069,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { data << int32(AvailableQuestLineXQuestIDs[i]); } + for (uint32 i = 0; i < Field_1000.size(); ++i) + { + data << int32(Field_1000[i]); + } for (uint32 i = 0; i < Heirlooms.size(); ++i) { data << int32(Heirlooms[i]); @@ -4277,10 +3085,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { data << int32(Toys[i]); } - for (uint32 i = 0; i < ToyFlags.size(); ++i) - { - data << uint32(ToyFlags[i]); - } for (uint32 i = 0; i < Transmog.size(); ++i) { data << uint32(Transmog[i]); @@ -4293,14 +3097,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { data << int32(SelfResSpells[i]); } - for (uint32 i = 0; i < RuneforgePowers.size(); ++i) - { - data << uint32(RuneforgePowers[i]); - } - for (uint32 i = 0; i < TransmogIllusions.size(); ++i) - { - data << uint32(TransmogIllusions[i]); - } for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { SpellPctModByLabel[i].WriteCreate(data, owner, receiver); @@ -4309,34 +3105,10 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { SpellFlatModByLabel[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < MawPowers.size(); ++i) - { - MawPowers[i].WriteCreate(data, owner, receiver); - } - for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) - { - MultiFloorExploration[i].WriteCreate(data, owner, receiver); - } - for (uint32 i = 0; i < RecipeProgression.size(); ++i) - { - RecipeProgression[i].WriteCreate(data, owner, receiver); - } - for (uint32 i = 0; i < ReplayedQuests.size(); ++i) - { - ReplayedQuests[i].WriteCreate(data, owner, receiver); - } for (uint32 i = 0; i < TaskQuests.size(); ++i) { TaskQuests[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < DisabledSpells.size(); ++i) - { - data << int32(DisabledSpells[i]); - } - for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) - { - PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver); - } for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { CategoryCooldownMods[i].WriteCreate(data, owner, receiver); @@ -4345,32 +3117,17 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { WeeklySpellUses[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) + for (uint32 i = 0; i < 7; ++i) { - TrackedCollectableSources[i].WriteCreate(data, owner, receiver); + PvpInfo[i].WriteCreate(data, owner, receiver); } data.FlushBits(); - data.WriteBit(BackpackAutoSortDisabled); - data.WriteBit(BackpackSellJunkDisabled); - data.WriteBit(BankAutoSortDisabled); data.WriteBit(SortBagsRightToLeft); data.WriteBit(InsertItemsLeftToRight); - data.WriteBit(HasPerksProgramPendingReward); - data.WriteBits(QuestSession.has_value(), 1); data.WriteBits(PetStable.has_value(), 1); data.FlushBits(); ResearchHistory->WriteCreate(data, owner, receiver); - if (QuestSession.has_value()) - { - QuestSession->WriteCreate(data, owner, receiver); - } data << FrozenPerksVendorItem; - Field_1410->WriteCreate(data, owner, receiver); - data << DungeonScore; - for (uint32 i = 0; i < PvpInfo.size(); ++i) - { - PvpInfo[i].WriteCreate(data, owner, receiver); - } for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { CharacterRestrictions[i].WriteCreate(data, owner, receiver); @@ -4379,10 +3136,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag f { TraitConfigs[i].WriteCreate(data, owner, receiver); } - for (uint32 i = 0; i < CraftingOrders.size(); ++i) - { - CraftingOrders[i].WriteCreate(data, owner, receiver); - } if (PetStable.has_value()) { PetStable->WriteCreate(data, owner, receiver); @@ -4399,57 +3152,34 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (uint32 i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 19); - for (uint32 i = 0; i < 51; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 16); + for (uint32 i = 0; i < 48; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); if (changesMask[0]) { if (changesMask[1]) - { - data.WriteBit(BackpackAutoSortDisabled); - } - if (changesMask[2]) - { - data.WriteBit(BackpackSellJunkDisabled); - } - if (changesMask[3]) - { - data.WriteBit(BankAutoSortDisabled); - } - if (changesMask[4]) { data.WriteBit(SortBagsRightToLeft); } - if (changesMask[5]) + if (changesMask[2]) { data.WriteBit(InsertItemsLeftToRight); } - if (changesMask[6]) - { - data.WriteBit(HasPerksProgramPendingReward); - } - if (changesMask[7]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) KnownTitles.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } - if (changesMask[8]) - { - if (!ignoreNestedChangesMask) - PvpInfo.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); - } } - if (changesMask[36]) + if (changesMask[20]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[21 + i]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -4458,11 +3188,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[22]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[23 + i]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -4471,11 +3201,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[24]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[25 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4484,11 +3214,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[36]) + if (changesMask[20]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[21 + i]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -4500,11 +3230,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[22]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[23 + i]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -4516,11 +3246,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[24]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[25 + i]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -4535,452 +3265,273 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[9]) + if (changesMask[4]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data); } - if (changesMask[10]) + if (changesMask[5]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data); } - if (changesMask[11]) + if (changesMask[6]) + { + if (!ignoreNestedChangesMask) + Field_1000.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_1000.size(), data); + } + if (changesMask[7]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data); } - if (changesMask[12]) + if (changesMask[8]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data); } - if (changesMask[13]) + if (changesMask[9]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.size(), data); } - if (changesMask[14]) - { - if (!ignoreNestedChangesMask) - ToyFlags.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data); - } - if (changesMask[15]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data); } - if (changesMask[16]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data); } - if (changesMask[17]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data); } - if (changesMask[18]) - { - if (!ignoreNestedChangesMask) - RuneforgePowers.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data); - } - if (changesMask[19]) - { - if (!ignoreNestedChangesMask) - TransmogIllusions.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data); - } - if (changesMask[20]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } - if (changesMask[21]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } - if (changesMask[22]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } - if (changesMask[23]) - { - if (!ignoreNestedChangesMask) - MawPowers.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); - } - if (changesMask[24]) - { - if (!ignoreNestedChangesMask) - MultiFloorExploration.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); - } - if (changesMask[25]) - { - if (!ignoreNestedChangesMask) - RecipeProgression.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); - } - if (changesMask[26]) - { - if (!ignoreNestedChangesMask) - ReplayedQuests.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); - } - if (changesMask[27]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.size(), data); } - if (changesMask[28]) - { - if (!ignoreNestedChangesMask) - DisabledSpells.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); - } - if (changesMask[29]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); } - if (changesMask[30]) - { - if (!ignoreNestedChangesMask) - CraftingOrders.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); - } - if (changesMask[31]) - { - if (!ignoreNestedChangesMask) - PersonalCraftingOrderCounts.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); - } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.size(), data); } - if (changesMask[34]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.size(), data); } - if (changesMask[35]) - { - if (!ignoreNestedChangesMask) - TrackedCollectableSources.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(TrackedCollectableSources.size(), data); - } } data.FlushBits(); if (changesMask[0]) { - if (changesMask[7]) + if (changesMask[3]) { for (uint32 i = 0; i < KnownTitles.size(); ++i) { - if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint64(KnownTitles[i]); - } - } - } - if (changesMask[9]) - { - for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) - { - if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(DailyQuestsCompleted[i]); - } - } - } - if (changesMask[10]) - { - for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) - { - if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(AvailableQuestLineXQuestIDs[i]); - } - } - } - if (changesMask[11]) - { - for (uint32 i = 0; i < Heirlooms.size(); ++i) - { - if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(Heirlooms[i]); - } - } - } - if (changesMask[12]) - { - for (uint32 i = 0; i < HeirloomFlags.size(); ++i) - { - if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(HeirloomFlags[i]); - } - } - } - if (changesMask[13]) - { - for (uint32 i = 0; i < Toys.size(); ++i) - { - if (Toys.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(Toys[i]); - } - } - } - if (changesMask[14]) - { - for (uint32 i = 0; i < ToyFlags.size(); ++i) - { - if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(ToyFlags[i]); - } - } - } - if (changesMask[15]) - { - for (uint32 i = 0; i < Transmog.size(); ++i) - { - if (Transmog.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(Transmog[i]); - } - } - } - if (changesMask[16]) - { - for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) - { - if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(ConditionalTransmog[i]); - } - } - } - if (changesMask[17]) - { - for (uint32 i = 0; i < SelfResSpells.size(); ++i) - { - if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(SelfResSpells[i]); - } - } - } - if (changesMask[18]) - { - for (uint32 i = 0; i < RuneforgePowers.size(); ++i) - { - if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask) + if (KnownTitles.HasChanged(i) || ignoreNestedChangesMask) { - data << uint32(RuneforgePowers[i]); + data << uint64(KnownTitles[i]); } } } - if (changesMask[19]) + if (changesMask[4]) { - for (uint32 i = 0; i < TransmogIllusions.size(); ++i) + for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { - if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask) + if (DailyQuestsCompleted.HasChanged(i) || ignoreNestedChangesMask) { - data << uint32(TransmogIllusions[i]); + data << int32(DailyQuestsCompleted[i]); } } } - if (changesMask[21]) + if (changesMask[5]) { - for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) + for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { - if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask) + if (AvailableQuestLineXQuestIDs.HasChanged(i) || ignoreNestedChangesMask) { - SpellPctModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(AvailableQuestLineXQuestIDs[i]); } } } - if (changesMask[22]) + if (changesMask[6]) { - for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) + for (uint32 i = 0; i < Field_1000.size(); ++i) { - if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask) + if (Field_1000.HasChanged(i) || ignoreNestedChangesMask) { - SpellFlatModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(Field_1000[i]); } } } - if (changesMask[23]) + if (changesMask[7]) { - for (uint32 i = 0; i < MawPowers.size(); ++i) + for (uint32 i = 0; i < Heirlooms.size(); ++i) { - if (MawPowers.HasChanged(i) || ignoreNestedChangesMask) + if (Heirlooms.HasChanged(i) || ignoreNestedChangesMask) { - MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(Heirlooms[i]); } } } - if (changesMask[24]) + if (changesMask[8]) { - for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) + for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { - if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask) + if (HeirloomFlags.HasChanged(i) || ignoreNestedChangesMask) { - MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << uint32(HeirloomFlags[i]); } } } - if (changesMask[25]) + if (changesMask[9]) { - for (uint32 i = 0; i < RecipeProgression.size(); ++i) + for (uint32 i = 0; i < Toys.size(); ++i) { - if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask) + if (Toys.HasChanged(i) || ignoreNestedChangesMask) { - RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(Toys[i]); } } } - if (changesMask[26]) + if (changesMask[10]) { - for (uint32 i = 0; i < ReplayedQuests.size(); ++i) + for (uint32 i = 0; i < Transmog.size(); ++i) { - if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask) + if (Transmog.HasChanged(i) || ignoreNestedChangesMask) { - ReplayedQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << uint32(Transmog[i]); } } } - if (changesMask[27]) + if (changesMask[11]) { - for (uint32 i = 0; i < TaskQuests.size(); ++i) + for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { - if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask) + if (ConditionalTransmog.HasChanged(i) || ignoreNestedChangesMask) { - TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(ConditionalTransmog[i]); } } } - if (changesMask[28]) + if (changesMask[12]) { - for (uint32 i = 0; i < DisabledSpells.size(); ++i) + for (uint32 i = 0; i < SelfResSpells.size(); ++i) { - if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask) + if (SelfResSpells.HasChanged(i) || ignoreNestedChangesMask) { - data << int32(DisabledSpells[i]); + data << int32(SelfResSpells[i]); } } } - if (changesMask[31]) + if (changesMask[14]) { - for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) + for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { - if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask) + if (SpellPctModByLabel.HasChanged(i) || ignoreNestedChangesMask) { - PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + SpellPctModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[15]) { - for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) + for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { - if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask) + if (SpellFlatModByLabel.HasChanged(i) || ignoreNestedChangesMask) { - CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + SpellFlatModByLabel[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[34]) + if (changesMask[16]) { - for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) + for (uint32 i = 0; i < TaskQuests.size(); ++i) { - if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask) + if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask) { - WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[35]) + if (changesMask[18]) { - for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) + for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { - if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask) + if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask) { - TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - } - if (changesMask[0]) - { - if (changesMask[8]) + if (changesMask[19]) { - for (uint32 i = 0; i < PvpInfo.size(); ++i) + for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { - if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask) + if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask) { - PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[20]) + if (changesMask[13]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -4990,7 +3541,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[17]) { for (uint32 i = 0; i < TraitConfigs.size(); ++i) { @@ -5000,391 +3551,397 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } + if (changesMask[26]) + { + data << FarsightObject; + } + if (changesMask[27]) + { + data << SummonedBattlePetGUID; + } + if (changesMask[28]) + { + data << uint64(Coinage); + } + if (changesMask[29]) + { + data << int32(XP); + } if (changesMask[30]) { - for (uint32 i = 0; i < CraftingOrders.size(); ++i) - { - if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask) - { - CraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << int32(NextLevelXP); + } + if (changesMask[31]) + { + data << int32(TrialXP); + } + if (changesMask[32]) + { + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[33]) + { + data << int32(CharacterPoints); + } + if (changesMask[34]) + { + data << int32(MaxTalentTiers); + } + if (changesMask[35]) + { + data << uint32(TrackCreatureMask); + } + if (changesMask[36]) + { + data << float(MainhandExpertise); + } + if (changesMask[37]) + { + data << float(OffhandExpertise); } } - if (changesMask[32]) + if (changesMask[38]) { + if (changesMask[39]) + { + data << float(RangedExpertise); + } + if (changesMask[40]) + { + data << float(CombatRatingExpertise); + } + if (changesMask[41]) + { + data << float(BlockPercentage); + } if (changesMask[42]) { - data << FarsightObject; + data << float(DodgePercentage); } if (changesMask[43]) { - data << SummonedBattlePetGUID; + data << float(DodgePercentageFromAttribute); } if (changesMask[44]) { - data << uint64(Coinage); + data << float(ParryPercentage); } if (changesMask[45]) { - data << int32(XP); + data << float(ParryPercentageFromAttribute); } if (changesMask[46]) { - data << int32(NextLevelXP); + data << float(CritPercentage); } if (changesMask[47]) { - data << int32(TrialXP); + data << float(RangedCritPercentage); } if (changesMask[48]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << float(OffhandCritPercentage); } if (changesMask[49]) { - data << int32(CharacterPoints); + data << int32(ShieldBlock); } if (changesMask[50]) { - data << int32(MaxTalentTiers); + data << float(ShieldBlockCritPercentage); } if (changesMask[51]) { - data << uint32(TrackCreatureMask); + data << float(Mastery); } if (changesMask[52]) { - data << float(MainhandExpertise); + data << float(Speed); } if (changesMask[53]) { - data << float(OffhandExpertise); + data << float(Avoidance); } if (changesMask[54]) { - data << float(RangedExpertise); + data << float(Sturdiness); } if (changesMask[55]) { - data << float(CombatRatingExpertise); + data << int32(Versatility); } if (changesMask[56]) { - data << float(BlockPercentage); + data << float(VersatilityBonus); } if (changesMask[57]) { - data << float(DodgePercentage); + data << float(PvpPowerDamage); } if (changesMask[58]) { - data << float(DodgePercentageFromAttribute); + data << float(PvpPowerHealing); } if (changesMask[59]) { - data << float(ParryPercentage); + data << int32(ModHealingDonePos); } if (changesMask[60]) { - data << float(ParryPercentageFromAttribute); + data << float(ModHealingPercent); } if (changesMask[61]) { - data << float(CritPercentage); + data << float(ModHealingDonePercent); } if (changesMask[62]) { - data << float(RangedCritPercentage); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[63]) { - data << float(OffhandCritPercentage); + data << float(ModSpellPowerPercent); } if (changesMask[64]) { - data << float(SpellCritPercentage); + data << float(ModResiliencePercent); } if (changesMask[65]) { - data << int32(ShieldBlock); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[66]) { - data << float(ShieldBlockCritPercentage); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[67]) { - data << float(Mastery); + data << int32(ModTargetResistance); } if (changesMask[68]) { - data << float(Speed); + data << int32(ModTargetPhysicalResistance); } if (changesMask[69]) { - data << float(Avoidance); + data << uint32(LocalFlags); } } if (changesMask[70]) { if (changesMask[71]) { - data << float(Sturdiness); + data << uint8(GrantableLevels); } if (changesMask[72]) { - data << int32(Versatility); + data << uint8(MultiActionBars); } if (changesMask[73]) { - data << float(VersatilityBonus); + data << uint8(LifetimeMaxRank); } if (changesMask[74]) { - data << float(PvpPowerDamage); + data << uint8(NumRespecs); } if (changesMask[75]) { - data << float(PvpPowerHealing); + data << int32(AmmoID); } if (changesMask[76]) { - data << int32(ModHealingDonePos); + data << uint32(PvpMedals); } if (changesMask[77]) { - data << float(ModHealingPercent); + data << uint16(TodayHonorableKills); } if (changesMask[78]) { - data << float(ModPeriodicHealingDonePercent); + data << uint16(TodayDishonorableKills); } if (changesMask[79]) { - data << float(ModSpellPowerPercent); + data << uint16(YesterdayHonorableKills); } if (changesMask[80]) { - data << float(ModResiliencePercent); + data << uint16(YesterdayDishonorableKills); } if (changesMask[81]) { - data << float(OverrideSpellPowerByAPPercent); + data << uint16(LastWeekHonorableKills); } if (changesMask[82]) { - data << float(OverrideAPBySpellPowerPercent); + data << uint16(LastWeekDishonorableKills); } if (changesMask[83]) { - data << int32(ModTargetResistance); + data << uint16(ThisWeekHonorableKills); } if (changesMask[84]) { - data << int32(ModTargetPhysicalResistance); + data << uint16(ThisWeekDishonorableKills); } if (changesMask[85]) { - data << uint32(LocalFlags); + data << uint32(ThisWeekContribution); } if (changesMask[86]) { - data << uint8(GrantableLevels); + data << uint32(LifetimeHonorableKills); } if (changesMask[87]) { - data << uint8(MultiActionBars); + data << uint32(LifetimeDishonorableKills); } if (changesMask[88]) { - data << uint8(LifetimeMaxRank); + data << uint32(Field_F24); } if (changesMask[89]) { - data << uint8(NumRespecs); + data << uint32(YesterdayContribution); } if (changesMask[90]) { - data << uint32(PvpMedals); + data << uint32(LastWeekContribution); } if (changesMask[91]) { - data << uint16(TodayHonorableKills); + data << uint32(LastWeekRank); } if (changesMask[92]) { - data << uint16(YesterdayHonorableKills); + data << int32(WatchedFactionIndex); } if (changesMask[93]) { - data << uint32(LifetimeHonorableKills); + data << int32(MaxLevel); } if (changesMask[94]) { - data << int32(WatchedFactionIndex); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[95]) { - data << int32(MaxLevel); + data << int32(MaxCreatureScalingLevel); } if (changesMask[96]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(PetSpellPower); } if (changesMask[97]) { - data << int32(MaxCreatureScalingLevel); + data << float(UiHitModifier); } if (changesMask[98]) { - data << int32(PetSpellPower); + data << float(UiSpellHitModifier); } if (changesMask[99]) { - data << float(UiHitModifier); + data << int32(HomeRealmTimeOffset); } if (changesMask[100]) { - data << float(UiSpellHitModifier); + data << float(ModPetHaste); } if (changesMask[101]) { - data << int32(HomeRealmTimeOffset); + data << uint8(LocalRegenFlags); } } if (changesMask[102]) { if (changesMask[103]) { - data << float(ModPetHaste); + data << uint8(AuraVision); } if (changesMask[104]) { - data << int8(JailersTowerLevelMax); + data << uint8(NumBackpackSlots); } if (changesMask[105]) { - data << int8(JailersTowerLevel); + data << int32(OverrideSpellsID); } if (changesMask[106]) { - data << uint8(LocalRegenFlags); + data << int32(LfgBonusFactionID); } if (changesMask[107]) { - data << uint8(AuraVision); + data << uint16(LootSpecID); } if (changesMask[108]) { - data << uint8(NumBackpackSlots); + data << uint32(OverrideZonePVPType); } if (changesMask[109]) { - data << int32(OverrideSpellsID); + data << int32(Honor); } if (changesMask[110]) { - data << uint16(LootSpecID); + data << int32(HonorNextLevel); } if (changesMask[111]) { - data << uint32(OverrideZonePVPType); + data << int32(Field_F74); } if (changesMask[112]) { - data << int32(Honor); + data << int32(PvpTierMaxFromWins); } if (changesMask[113]) { - data << int32(HonorNextLevel); + data << int32(PvpLastWeeksTierMaxFromWins); } if (changesMask[114]) { - data << int32(PerksProgramCurrency); + data << uint8(PvpRankProgress); } if (changesMask[115]) { - data << uint8(NumBankSlots); - } - if (changesMask[120]) - { - data << int32(UiChromieTimeExpansionID); + data << int32(PerksProgramCurrency); } - if (changesMask[121]) + if (changesMask[118]) { data << int32(TransportServerTime); } - if (changesMask[122]) - { - data << uint32(WeeklyRewardsPeriodSinceOrigin); - } - if (changesMask[123]) - { - data << int16(DEBUGSoulbindConduitRank); - } - if (changesMask[125]) + if (changesMask[119]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[126]) - { - data << int32(ItemUpgradeHighOnehandWeaponItemID); - } - if (changesMask[127]) - { - data << int32(ItemUpgradeHighFingerItemID); - } - if (changesMask[128]) - { - data << float(ItemUpgradeHighFingerWatermark); - } - if (changesMask[129]) - { - data << int32(ItemUpgradeHighTrinketItemID); - } - if (changesMask[130]) + if (changesMask[120]) { - data << float(ItemUpgradeHighTrinketWatermark); + data << uint8(GlyphsEnabled); } - if (changesMask[131]) + if (changesMask[121]) { - data << uint64(LootHistoryInstanceID); + data << uint8(LfgRoles); } - if (changesMask[133]) + if (changesMask[123]) { - data << uint8(RequiredMountCapabilityFlags); + data << uint8(NumStableSlots); } - data.WriteBits(QuestSession.has_value(), 1); - data.WriteBits(PetStable.has_value(), 1); } data.FlushBits(); if (changesMask[102]) { + data.WriteBits(PetStable.has_value(), 1); if (changesMask[116]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[118]) - { - if (QuestSession.has_value()) - { - QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } if (changesMask[117]) { data << FrozenPerksVendorItem; } - if (changesMask[119]) - { - Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - if (changesMask[124]) - { - data << DungeonScore; - } - if (changesMask[132]) + if (changesMask[122]) { if (PetStable.has_value()) { @@ -5392,153 +3949,177 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[134]) + if (changesMask[124]) { - for (uint32 i = 0; i < 227; ++i) + for (uint32 i = 0; i < 141; ++i) { - if (changesMask[135 + i]) + if (changesMask[125 + i]) { data << InvSlots[i]; } } } - if (changesMask[362]) - { - for (uint32 i = 0; i < 240; ++i) - { - if (changesMask[363 + i]) - { - data << uint64(ExploredZones[i]); - } - } - } - if (changesMask[603]) + if (changesMask[266]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[604 + i]) + if (changesMask[267 + i]) { - RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << uint32(TrackResourceMask[i]); } } } - if (changesMask[606]) + if (changesMask[269]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[607 + i]) + if (changesMask[270 + i]) + { + data << float(SpellCritPercentage[i]); + } + if (changesMask[277 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[614 + i]) + if (changesMask[284 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[621 + i]) + if (changesMask[291 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[628 + i]) + } + } + if (changesMask[298]) + { + for (uint32 i = 0; i < 240; ++i) + { + if (changesMask[299 + i]) + { + data << uint64(ExploredZones[i]); + } + } + } + if (changesMask[539]) + { + for (uint32 i = 0; i < 2; ++i) + { + if (changesMask[540 + i]) { - data << float(ModHealingDonePercent[i]); + RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[635]) + if (changesMask[542]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[636 + i]) + if (changesMask[543 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[639 + i]) + if (changesMask[546 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[642]) + if (changesMask[549]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[643 + i]) + if (changesMask[550 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[655 + i]) + if (changesMask[562 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[667]) + if (changesMask[574]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[668 + i]) + if (changesMask[575 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[700]) + if (changesMask[615]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[701 + i]) + if (changesMask[616 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[705]) + if (changesMask[620]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[706 + i]) + if (changesMask[621 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[708]) + if (changesMask[623]) { - for (uint32 i = 0; i < 5; ++i) + for (uint32 i = 0; i < 4; ++i) { - if (changesMask[709 + i]) + if (changesMask[624 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[714]) + if (changesMask[628]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[715 + i]) + if (changesMask[629 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[722]) + if (changesMask[636]) { for (uint32 i = 0; i < 875; ++i) { - if (changesMask[723 + i]) + if (changesMask[637 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1598]) + if (changesMask[1512]) + { + for (uint32 i = 0; i < 6; ++i) + { + if (changesMask[1513 + i]) + { + data << uint32(GlyphSlots[i]); + } + if (changesMask[1519 + i]) + { + data << uint32(Glyphs[i]); + } + } + } + if (changesMask[607]) { - for (uint32 i = 0; i < 17; ++i) + for (uint32 i = 0; i < 7; ++i) { - if (changesMask[1599 + i]) + if (changesMask[608 + i]) { - data << float(ItemUpgradeHighWatermark[i]); + PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } @@ -5547,43 +4128,28 @@ 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); - Base::ClearChangesMask(HasPerksProgramPendingReward); Base::ClearChangesMask(ResearchSites); Base::ClearChangesMask(ResearchSiteProgress); Base::ClearChangesMask(Research); Base::ClearChangesMask(KnownTitles); Base::ClearChangesMask(DailyQuestsCompleted); Base::ClearChangesMask(AvailableQuestLineXQuestIDs); + Base::ClearChangesMask(Field_1000); Base::ClearChangesMask(Heirlooms); Base::ClearChangesMask(HeirloomFlags); Base::ClearChangesMask(Toys); - Base::ClearChangesMask(ToyFlags); Base::ClearChangesMask(Transmog); Base::ClearChangesMask(ConditionalTransmog); Base::ClearChangesMask(SelfResSpells); - Base::ClearChangesMask(RuneforgePowers); - Base::ClearChangesMask(TransmogIllusions); Base::ClearChangesMask(SpellPctModByLabel); Base::ClearChangesMask(SpellFlatModByLabel); - Base::ClearChangesMask(MawPowers); - Base::ClearChangesMask(MultiFloorExploration); - Base::ClearChangesMask(RecipeProgression); - Base::ClearChangesMask(ReplayedQuests); Base::ClearChangesMask(TaskQuests); - Base::ClearChangesMask(DisabledSpells); - Base::ClearChangesMask(PersonalCraftingOrderCounts); Base::ClearChangesMask(CategoryCooldownMods); Base::ClearChangesMask(WeeklySpellUses); - Base::ClearChangesMask(TrackedCollectableSources); - Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(TraitConfigs); - Base::ClearChangesMask(CraftingOrders); Base::ClearChangesMask(FarsightObject); Base::ClearChangesMask(SummonedBattlePetGUID); Base::ClearChangesMask(Coinage); @@ -5606,7 +4172,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(CritPercentage); Base::ClearChangesMask(RangedCritPercentage); Base::ClearChangesMask(OffhandCritPercentage); - Base::ClearChangesMask(SpellCritPercentage); Base::ClearChangesMask(ShieldBlock); Base::ClearChangesMask(ShieldBlockCritPercentage); Base::ClearChangesMask(Mastery); @@ -5619,6 +4184,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(PvpPowerHealing); Base::ClearChangesMask(ModHealingDonePos); Base::ClearChangesMask(ModHealingPercent); + Base::ClearChangesMask(ModHealingDonePercent); Base::ClearChangesMask(ModPeriodicHealingDonePercent); Base::ClearChangesMask(ModSpellPowerPercent); Base::ClearChangesMask(ModResiliencePercent); @@ -5631,10 +4197,23 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(MultiActionBars); Base::ClearChangesMask(LifetimeMaxRank); Base::ClearChangesMask(NumRespecs); + Base::ClearChangesMask(AmmoID); Base::ClearChangesMask(PvpMedals); Base::ClearChangesMask(TodayHonorableKills); + Base::ClearChangesMask(TodayDishonorableKills); Base::ClearChangesMask(YesterdayHonorableKills); + Base::ClearChangesMask(YesterdayDishonorableKills); + Base::ClearChangesMask(LastWeekHonorableKills); + Base::ClearChangesMask(LastWeekDishonorableKills); + Base::ClearChangesMask(ThisWeekHonorableKills); + Base::ClearChangesMask(ThisWeekDishonorableKills); + Base::ClearChangesMask(ThisWeekContribution); Base::ClearChangesMask(LifetimeHonorableKills); + Base::ClearChangesMask(LifetimeDishonorableKills); + Base::ClearChangesMask(Field_F24); + Base::ClearChangesMask(YesterdayContribution); + Base::ClearChangesMask(LastWeekContribution); + Base::ClearChangesMask(LastWeekRank); Base::ClearChangesMask(WatchedFactionIndex); Base::ClearChangesMask(MaxLevel); Base::ClearChangesMask(ScalingPlayerLevelDelta); @@ -5644,54 +4223,49 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(UiSpellHitModifier); Base::ClearChangesMask(HomeRealmTimeOffset); Base::ClearChangesMask(ModPetHaste); - Base::ClearChangesMask(JailersTowerLevelMax); - Base::ClearChangesMask(JailersTowerLevel); Base::ClearChangesMask(LocalRegenFlags); Base::ClearChangesMask(AuraVision); Base::ClearChangesMask(NumBackpackSlots); Base::ClearChangesMask(OverrideSpellsID); + Base::ClearChangesMask(LfgBonusFactionID); Base::ClearChangesMask(LootSpecID); Base::ClearChangesMask(OverrideZonePVPType); Base::ClearChangesMask(Honor); Base::ClearChangesMask(HonorNextLevel); + Base::ClearChangesMask(Field_F74); + Base::ClearChangesMask(PvpTierMaxFromWins); + Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins); + Base::ClearChangesMask(PvpRankProgress); Base::ClearChangesMask(PerksProgramCurrency); - Base::ClearChangesMask(NumBankSlots); Base::ClearChangesMask(ResearchHistory); Base::ClearChangesMask(FrozenPerksVendorItem); - Base::ClearChangesMask(Field_1410); - Base::ClearChangesMask(QuestSession); - Base::ClearChangesMask(UiChromieTimeExpansionID); Base::ClearChangesMask(TransportServerTime); - Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin); - Base::ClearChangesMask(DEBUGSoulbindConduitRank); - Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(ActiveCombatTraitConfigID); - Base::ClearChangesMask(ItemUpgradeHighOnehandWeaponItemID); - Base::ClearChangesMask(ItemUpgradeHighFingerItemID); - Base::ClearChangesMask(ItemUpgradeHighFingerWatermark); - Base::ClearChangesMask(ItemUpgradeHighTrinketItemID); - Base::ClearChangesMask(ItemUpgradeHighTrinketWatermark); - Base::ClearChangesMask(LootHistoryInstanceID); + Base::ClearChangesMask(GlyphsEnabled); + Base::ClearChangesMask(LfgRoles); Base::ClearChangesMask(PetStable); - Base::ClearChangesMask(RequiredMountCapabilityFlags); + Base::ClearChangesMask(NumStableSlots); Base::ClearChangesMask(InvSlots); - Base::ClearChangesMask(ExploredZones); - Base::ClearChangesMask(RestInfo); + Base::ClearChangesMask(TrackResourceMask); + Base::ClearChangesMask(SpellCritPercentage); Base::ClearChangesMask(ModDamageDonePos); Base::ClearChangesMask(ModDamageDoneNeg); Base::ClearChangesMask(ModDamageDonePercent); - Base::ClearChangesMask(ModHealingDonePercent); + Base::ClearChangesMask(ExploredZones); + Base::ClearChangesMask(RestInfo); Base::ClearChangesMask(WeaponDmgMultipliers); Base::ClearChangesMask(WeaponAtkSpeedMultipliers); Base::ClearChangesMask(BuybackPrice); Base::ClearChangesMask(BuybackTimestamp); Base::ClearChangesMask(CombatRatings); + Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(NoReagentCostMask); Base::ClearChangesMask(ProfessionSkillLine); Base::ClearChangesMask(BagSlotFlags); Base::ClearChangesMask(BankBagSlotFlags); Base::ClearChangesMask(QuestCompleted); - Base::ClearChangesMask(ItemUpgradeHighWatermark); + Base::ClearChangesMask(GlyphSlots); + Base::ClearChangesMask(Glyphs); _changesMask.ResetAll(); } @@ -5703,7 +4277,6 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag fie data << uint32(SpawnTrackingStateAnimID); data << uint32(SpawnTrackingStateAnimKitID); data << uint32(StateWorldEffectIDs->size()); - data << uint32(StateWorldEffectsQuestObjectiveID); for (uint32 i = 0; i < StateWorldEffectIDs->size(); ++i) { data << uint32((*StateWorldEffectIDs)[i]); @@ -5716,17 +4289,13 @@ void GameObjectData::WriteCreate(ByteBuffer& data, EnumFlag fie data << float(ParentRotation->z); data << float(ParentRotation->w); data << int32(FactionTemplate); + data << int32(Level); data << int8(ViewerDependentValue::GetValue(this, owner, receiver)); data << int8(TypeID); data << uint8(PercentHealth); data << uint32(ArtKit); data << uint32(EnableDoodadSets.size()); data << uint32(CustomParam); - data << int32(Level); - data << uint32(AnimGroupInstance); - data << uint32(UiWidgetItemID); - data << uint32(UiWidgetItemQuality); - data << uint32(UiWidgetItemUnknown1000); data << uint32(WorldEffects.size()); for (uint32 i = 0; i < EnableDoodadSets.size(); ++i) { @@ -5745,7 +4314,7 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, EnumFlag fie void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, GameObject const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 25); + data.WriteBits(changesMask.GetBlock(0), 20); if (changesMask[0]) { @@ -5820,32 +4389,32 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool data << uint32(SpawnTrackingStateAnimKitID); } if (changesMask[9]) - { - data << uint32(StateWorldEffectsQuestObjectiveID); - } - if (changesMask[10]) { data << CreatedBy; } - if (changesMask[11]) + if (changesMask[10]) { data << GuildGUID; } - if (changesMask[12]) + if (changesMask[11]) { data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); } - if (changesMask[13]) + if (changesMask[12]) { data << float(ParentRotation->x); data << float(ParentRotation->y); data << float(ParentRotation->z); data << float(ParentRotation->w); } - if (changesMask[14]) + if (changesMask[13]) { data << int32(FactionTemplate); } + if (changesMask[14]) + { + data << int32(Level); + } if (changesMask[15]) { data << int8(ViewerDependentValue::GetValue(this, owner, receiver)); @@ -5866,26 +4435,6 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool { data << uint32(CustomParam); } - if (changesMask[20]) - { - data << int32(Level); - } - if (changesMask[21]) - { - data << uint32(AnimGroupInstance); - } - if (changesMask[22]) - { - data << uint32(UiWidgetItemID); - } - if (changesMask[23]) - { - data << uint32(UiWidgetItemQuality); - } - if (changesMask[24]) - { - data << uint32(UiWidgetItemUnknown1000); - } } } @@ -5899,22 +4448,17 @@ void GameObjectData::ClearChangesMask() Base::ClearChangesMask(StateSpellVisualID); Base::ClearChangesMask(SpawnTrackingStateAnimID); Base::ClearChangesMask(SpawnTrackingStateAnimKitID); - Base::ClearChangesMask(StateWorldEffectsQuestObjectiveID); Base::ClearChangesMask(CreatedBy); Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(Flags); Base::ClearChangesMask(ParentRotation); Base::ClearChangesMask(FactionTemplate); + Base::ClearChangesMask(Level); Base::ClearChangesMask(State); Base::ClearChangesMask(TypeID); Base::ClearChangesMask(PercentHealth); Base::ClearChangesMask(ArtKit); Base::ClearChangesMask(CustomParam); - Base::ClearChangesMask(Level); - Base::ClearChangesMask(AnimGroupInstance); - Base::ClearChangesMask(UiWidgetItemID); - Base::ClearChangesMask(UiWidgetItemQuality); - Base::ClearChangesMask(UiWidgetItemUnknown1000); _changesMask.ResetAll(); } @@ -5922,7 +4466,7 @@ void DynamicObjectData::WriteCreate(ByteBuffer& data, EnumFlag { data << Caster; data << uint8(Type); - SpellVisual->WriteCreate(data, owner, receiver); + data << int32(SpellXSpellVisualID); data << int32(SpellID); data << float(Radius); data << uint32(CastTime); @@ -5950,7 +4494,7 @@ void DynamicObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, b } if (changesMask[3]) { - SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(SpellXSpellVisualID); } if (changesMask[4]) { @@ -5971,7 +4515,7 @@ void DynamicObjectData::ClearChangesMask() { Base::ClearChangesMask(Caster); Base::ClearChangesMask(Type); - Base::ClearChangesMask(SpellVisual); + Base::ClearChangesMask(SpellXSpellVisualID); Base::ClearChangesMask(SpellID); Base::ClearChangesMask(Radius); Base::ClearChangesMask(CastTime); @@ -5995,7 +4539,6 @@ void CorpseData::WriteCreate(ByteBuffer& data, EnumFlag fieldVi data << uint32(Customizations.size()); data << uint32(Flags); data << int32(FactionTemplate); - data << uint32(StateSpellVisualKitID); for (uint32 i = 0; i < Customizations.size(); ++i) { Customizations[i].WriteCreate(data, owner, receiver); @@ -6009,10 +4552,7 @@ void CorpseData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVi void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Corpse const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlocksMask(0), 2); - for (uint32 i = 0; i < 2; ++i) - if (changesMask.GetBlock(i)) - data.WriteBits(changesMask.GetBlock(i), 32); + data.WriteBits(changesMask.GetBlock(0), 32); if (changesMask[0]) { @@ -6077,16 +4617,12 @@ void CorpseData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data << int32(FactionTemplate); } - if (changesMask[12]) - { - data << uint32(StateSpellVisualKitID); - } } - if (changesMask[13]) + if (changesMask[12]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[14 + i]) + if (changesMask[13 + i]) { data << uint32(Items[i]); } @@ -6107,7 +4643,6 @@ void CorpseData::ClearChangesMask() Base::ClearChangesMask(Class); Base::ClearChangesMask(Flags); Base::ClearChangesMask(FactionTemplate); - Base::ClearChangesMask(StateSpellVisualKitID); Base::ClearChangesMask(Items); _changesMask.ResetAll(); } @@ -6236,24 +4771,16 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag fi data << uint32(TimeToTargetPos); data << int32(SpellID); data << int32(SpellForVisuals); - SpellVisual->WriteCreate(data, owner, receiver); + data << int32(SpellXSpellVisualID); data << float(BoundsRadius2D); data << uint32(DecalPropertiesID); data << CreatingEffectGUID; - data << uint32(NumUnitsInside); - data << uint32(NumPlayersInside); data << OrbitPathTarget; - data << RollPitchYaw; - data << int32(PositionalSoundKitID); ExtraScaleCurve->WriteCreate(data, owner, receiver); - data.FlushBits(); - data.WriteBit(HeightIgnoresScale); - data.WriteBit(Field_261); OverrideMoveCurveX->WriteCreate(data, owner, receiver); OverrideMoveCurveY->WriteCreate(data, owner, receiver); OverrideMoveCurveZ->WriteCreate(data, owner, receiver); VisualAnim->WriteCreate(data, owner, receiver); - data.FlushBits(); } void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const @@ -6263,122 +4790,92 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag fi void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 26); + data.WriteBits(changesMask.GetBlock(0), 20); - if (changesMask[0]) - { - if (changesMask[1]) - { - data.WriteBit(HeightIgnoresScale); - } - if (changesMask[2]) - { - data.WriteBit(Field_261); - } - } data.FlushBits(); if (changesMask[0]) { - if (changesMask[3]) + if (changesMask[1]) { OverrideScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[8]) + if (changesMask[6]) { data << Caster; } - if (changesMask[9]) + if (changesMask[7]) { data << uint32(Duration); } - if (changesMask[10]) + if (changesMask[8]) { data << uint32(TimeToTarget); } - if (changesMask[11]) + if (changesMask[9]) { data << uint32(TimeToTargetScale); } - if (changesMask[12]) + if (changesMask[10]) { data << uint32(TimeToTargetExtraScale); } - if (changesMask[13]) + if (changesMask[11]) { data << uint32(TimeToTargetPos); } - if (changesMask[14]) + if (changesMask[12]) { data << int32(SpellID); } - if (changesMask[15]) + if (changesMask[13]) { data << int32(SpellForVisuals); } - if (changesMask[16]) + if (changesMask[14]) { - SpellVisual->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(SpellXSpellVisualID); } - if (changesMask[17]) + if (changesMask[15]) { data << float(BoundsRadius2D); } - if (changesMask[18]) + if (changesMask[16]) { data << uint32(DecalPropertiesID); } - if (changesMask[19]) + if (changesMask[17]) { data << CreatingEffectGUID; } - if (changesMask[20]) - { - data << uint32(NumUnitsInside); - } - if (changesMask[21]) - { - data << uint32(NumPlayersInside); - } - if (changesMask[22]) + if (changesMask[18]) { data << OrbitPathTarget; } - if (changesMask[23]) - { - data << RollPitchYaw; - } - if (changesMask[24]) - { - data << int32(PositionalSoundKitID); - } - if (changesMask[4]) + if (changesMask[2]) { ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[5]) + if (changesMask[3]) { OverrideMoveCurveX->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[6]) + if (changesMask[4]) { OverrideMoveCurveY->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[7]) + if (changesMask[5]) { OverrideMoveCurveZ->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[25]) + if (changesMask[19]) { VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - data.FlushBits(); } void AreaTriggerData::ClearChangesMask() { - Base::ClearChangesMask(HeightIgnoresScale); - Base::ClearChangesMask(Field_261); Base::ClearChangesMask(OverrideScaleCurve); Base::ClearChangesMask(ExtraScaleCurve); Base::ClearChangesMask(OverrideMoveCurveX); @@ -6392,15 +4889,11 @@ void AreaTriggerData::ClearChangesMask() Base::ClearChangesMask(TimeToTargetPos); Base::ClearChangesMask(SpellID); Base::ClearChangesMask(SpellForVisuals); - Base::ClearChangesMask(SpellVisual); + Base::ClearChangesMask(SpellXSpellVisualID); Base::ClearChangesMask(BoundsRadius2D); Base::ClearChangesMask(DecalPropertiesID); Base::ClearChangesMask(CreatingEffectGUID); - Base::ClearChangesMask(NumUnitsInside); - Base::ClearChangesMask(NumPlayersInside); Base::ClearChangesMask(OrbitPathTarget); - Base::ClearChangesMask(RollPitchYaw); - Base::ClearChangesMask(PositionalSoundKitID); Base::ClearChangesMask(VisualAnim); _changesMask.ResetAll(); } @@ -6456,85 +4949,84 @@ void SceneObjectData::ClearChangesMask() void ConversationLine::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { data << int32(ConversationLineID); - data << int32(BroadcastTextID); data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); data << int32(UiCameraID); data << uint8(ActorIndex); data << uint8(Flags); - data << uint8(ChatType); } void ConversationLine::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const { data << int32(ConversationLineID); - data << int32(BroadcastTextID); data << uint32(ViewerDependentValue::GetValue(this, owner, receiver)); data << int32(UiCameraID); data << uint8(ActorIndex); data << uint8(Flags); - data << uint8(ChatType); } bool ConversationLine::operator==(ConversationLine const& right) const { return ConversationLineID == right.ConversationLineID - && BroadcastTextID == right.BroadcastTextID && StartTime == right.StartTime && UiCameraID == right.UiCameraID && ActorIndex == right.ActorIndex - && Flags == right.Flags - && ChatType == right.ChatType; + && Flags == right.Flags; } void ConversationActor::WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const { - data << uint32(CreatureID); - data << uint32(CreatureDisplayInfoID); - data << ActorGUID; - data << int32(Id); data.WriteBits(Type, 1); - data.WriteBits(NoActorObject, 1); + data << int32(Id); + if (Type == 1) + { + data << uint32(CreatureID); + data << uint32(CreatureDisplayInfoID); + } + if (Type == 0) + { + data << ActorGUID; + } data.FlushBits(); } void ConversationActor::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const { - data << uint32(CreatureID); - data << uint32(CreatureDisplayInfoID); - data << ActorGUID; - data << int32(Id); data.WriteBits(Type, 1); - data.WriteBits(NoActorObject, 1); + data << int32(Id); + if (Type == 1) + { + data << uint32(CreatureID); + data << uint32(CreatureDisplayInfoID); + } + if (Type == 0) + { + data << ActorGUID; + } data.FlushBits(); } bool ConversationActor::operator==(ConversationActor const& right) const { - return CreatureID == right.CreatureID - && CreatureDisplayInfoID == right.CreatureDisplayInfoID - && ActorGUID == right.ActorGUID + return Type == right.Type && Id == right.Id - && Type == right.Type - && NoActorObject == right.NoActorObject; + && CreatureID == right.CreatureID + && CreatureDisplayInfoID == right.CreatureDisplayInfoID + && ActorGUID == right.ActorGUID; } void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const { data << uint32(Lines->size()); data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); - data << uint32(Progress); for (uint32 i = 0; i < Lines->size(); ++i) { (*Lines)[i].WriteCreate(data, owner, receiver); } - data.WriteBit(DontPlayBroadcastTextSounds); data << uint32(Actors.size()); - data << uint32(Flags); for (uint32 i = 0; i < Actors.size(); ++i) { Actors[i].WriteCreate(data, owner, receiver); } - data.FlushBits(); } void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const @@ -6544,15 +5036,11 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag f void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Conversation const* owner, Player const* receiver) const { - data.WriteBits(changesMask.GetBlock(0), 7); + data.WriteBits(changesMask.GetBlock(0), 4); if (changesMask[0]) { if (changesMask[1]) - { - data.WriteBit(DontPlayBroadcastTextSounds); - } - if (changesMask[2]) { data.WriteBits(Lines->size(), 32); for (uint32 i = 0; i < Lines->size(); ++i) @@ -6564,7 +5052,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[3]) + if (changesMask[2]) { if (!ignoreNestedChangesMask) Actors.WriteUpdateMask(data); @@ -6575,7 +5063,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[3]) + if (changesMask[2]) { for (uint32 i = 0; i < Actors.size(); ++i) { @@ -6585,30 +5073,18 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[4]) + if (changesMask[3]) { data << int32(ViewerDependentValue::GetValue(this, owner, receiver)); } - if (changesMask[5]) - { - data << uint32(Progress); - } - if (changesMask[6]) - { - data << uint32(Flags); - } } - data.FlushBits(); } void ConversationData::ClearChangesMask() { - Base::ClearChangesMask(DontPlayBroadcastTextSounds); Base::ClearChangesMask(Lines); Base::ClearChangesMask(Actors); Base::ClearChangesMask(LastLineEndTime); - Base::ClearChangesMask(Progress); - Base::ClearChangesMask(Flags); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 96eb02620b3..a9ef8420760 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -31,8 +31,6 @@ // This file is automatically generated, DO NOT EDIT class AreaTrigger; -class AzeriteEmpoweredItem; -class AzeriteItem; class Bag; class ByteBuffer; class Conversation; @@ -60,12 +58,13 @@ struct ObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<4> void ClearChangesMask(); }; -struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<5> +struct ItemEnchantment : public IsUpdateFieldStructureTag, public HasChangesMask<6> { UpdateField ID; UpdateField Duration; UpdateField Charges; - UpdateField Inactive; + UpdateField Field_A; + UpdateField Field_B; void WriteCreate(ByteBuffer& data, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Item const* owner, Player const* receiver) const; @@ -115,7 +114,7 @@ struct SocketedGem : public IsUpdateFieldStructureTag, public HasChangesMask<20> void ClearChangesMask(); }; -struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> +struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<43> { DynamicUpdateField ArtifactPowers; DynamicUpdateField Gems; @@ -126,19 +125,21 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> UpdateField StackCount; UpdateField Expiration; UpdateField DynamicFlags; - UpdateField Durability; - UpdateField MaxDurability; - UpdateField CreatePlayedTime; - UpdateField Context; - UpdateField CreateTime; - UpdateField ArtifactXP; - UpdateField ItemAppearanceModID; - UpdateField Modifiers; - UpdateField DynamicFlags2; - UpdateField ItemBonusKey; - UpdateField DEBUGItemLevel; - UpdateFieldArray SpellCharges; - UpdateFieldArray Enchantment; + UpdateField PropertySeed; + UpdateField RandomPropertiesID; + UpdateField Durability; + UpdateField MaxDurability; + UpdateField CreatePlayedTime; + UpdateField Context; + UpdateField CreateTime; + UpdateField ArtifactXP; + UpdateField ItemAppearanceModID; + UpdateField Modifiers; + UpdateField DynamicFlags2; + UpdateField ItemBonusKey; + UpdateField DEBUGItemLevel; + UpdateFieldArray SpellCharges; + UpdateFieldArray Enchantment; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Item const* owner, Player const* receiver) const; @@ -159,73 +160,10 @@ struct ContainerData : public IsUpdateFieldStructureTag, public HasChangesMask<3 void ClearChangesMask(); }; -struct AzeriteEmpoweredItemData : public IsUpdateFieldStructureTag, public HasChangesMask<6> -{ - UpdateFieldArray Selections; - - void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteEmpoweredItem const* owner, Player const* receiver) const; - void ClearChangesMask(); -}; - -struct UnlockedAzeriteEssence : public IsUpdateFieldStructureTag -{ - uint32 AzeriteEssenceID; - uint32 Rank; - - void WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const; - bool operator==(UnlockedAzeriteEssence const& right) const; - bool operator!=(UnlockedAzeriteEssence const& right) const { return !(*this == right); } -}; - -struct SelectedAzeriteEssences : public IsUpdateFieldStructureTag, public HasChangesMask<8> -{ - UpdateField Enabled; - UpdateField SpecializationID; - UpdateFieldArray AzeriteEssenceID; - - void WriteCreate(ByteBuffer& data, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AzeriteItem const* owner, Player const* receiver) const; - void ClearChangesMask(); -}; - -struct AzeriteItemData : public IsUpdateFieldStructureTag, public HasChangesMask<10> -{ - UpdateField Enabled; - DynamicUpdateField UnlockedEssences; - DynamicUpdateField UnlockedEssenceMilestones; - DynamicUpdateField SelectedEssences; - UpdateField Xp; - UpdateField Level; - UpdateField AuraLevel; - UpdateField KnowledgeLevel; - UpdateField DEBUGknowledgeWeek; - - void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AzeriteItem const* owner, Player const* receiver) const; - static void AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag fieldVisibilityFlags); - static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag fieldVisibilityFlags); - void ClearChangesMask(); -}; - -struct SpellCastVisual : public IsUpdateFieldStructureTag -{ - int32 SpellXSpellVisualID; - int32 ScriptVisualID; - - void WriteCreate(ByteBuffer& data, Object const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Object const* owner, Player const* receiver) const; - bool operator==(SpellCastVisual const& right) const; - bool operator!=(SpellCastVisual const& right) const { return !(*this == right); } -}; - struct UnitChannel : public IsUpdateFieldStructureTag { int32 SpellID; - UF::SpellCastVisual SpellVisual; + int32 SpellXSpellVisualID; void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const; @@ -233,13 +171,11 @@ struct UnitChannel : public IsUpdateFieldStructureTag bool operator!=(UnitChannel const& right) const { return !(*this == right); } }; -struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<6> +struct VisibleItem : public IsUpdateFieldStructureTag, public HasChangesMask<4> { UpdateField ItemID; - UpdateField SecondaryItemModifiedAppearanceID; - UpdateField ConditionalItemAppearanceID; - UpdateField ItemAppearanceModID; - UpdateField ItemVisual; + UpdateField ItemAppearanceModID; + UpdateField ItemVisual; void WriteCreate(ByteBuffer& data, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit const* owner, Player const* receiver) const; @@ -257,19 +193,19 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<227> { UpdateField, 0, 1> StateWorldEffectIDs; DynamicUpdateField PassiveSpells; DynamicUpdateField WorldEffects; DynamicUpdateField ChannelObjects; - UpdateField DisplayID; + UpdateField Health; + UpdateField MaxHealth; + UpdateField DisplayID; struct DisplayIDTag : ViewerDependentValueTag {}; - UpdateField StateSpellVisualID; - UpdateField StateAnimID; - UpdateField StateAnimKitID; - UpdateField StateWorldEffectsQuestObjectiveID; - UpdateField SpellOverrideNameID; + UpdateField StateSpellVisualID; + UpdateField StateAnimID; + UpdateField StateAnimKitID; UpdateField Charm; UpdateField Summon; UpdateField Critter; @@ -282,127 +218,115 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217> UpdateField BattlePetCompanionGUID; UpdateField BattlePetDBID; UpdateField ChannelData; - UpdateField SpellEmpowerStage; - UpdateField SummonedByHomeRealm; - UpdateField Race; - UpdateField ClassId; - UpdateField PlayerClassId; - UpdateField Sex; - UpdateField DisplayPower; - UpdateField OverrideDisplayPowerID; - UpdateField Health; - UpdateField MaxHealth; - UpdateField Level; - UpdateField EffectiveLevel; - UpdateField ContentTuningID; - UpdateField ScalingLevelMin; - UpdateField ScalingLevelMax; - UpdateField ScalingLevelDelta; - UpdateField ScalingFactionGroup; - UpdateField ScalingHealthItemLevelCurveID; - UpdateField ScalingDamageItemLevelCurveID; - UpdateField FactionTemplate; + UpdateField SummonedByHomeRealm; + UpdateField Race; + UpdateField ClassId; + UpdateField PlayerClassId; + UpdateField Sex; + UpdateField DisplayPower; + UpdateField OverrideDisplayPowerID; + UpdateField Level; + UpdateField EffectiveLevel; + UpdateField ContentTuningID; + UpdateField ScalingLevelMin; + UpdateField ScalingLevelMax; + UpdateField ScalingLevelDelta; + UpdateField ScalingFactionGroup; + UpdateField ScalingHealthItemLevelCurveID; + UpdateField ScalingDamageItemLevelCurveID; + UpdateField FactionTemplate; struct FactionTemplateTag : ViewerDependentValueTag {}; - UpdateField Flags; + UpdateField Flags; struct FlagsTag : ViewerDependentValueTag {}; - UpdateField Flags2; - UpdateField Flags3; + UpdateField Flags2; + UpdateField Flags3; struct Flags3Tag : ViewerDependentValueTag {}; - UpdateField AuraState; + UpdateField AuraState; struct AuraStateTag : ViewerDependentValueTag {}; - UpdateField RangedAttackRoundBaseTime; - UpdateField BoundingRadius; - UpdateField CombatReach; - UpdateField DisplayScale; - UpdateField CreatureFamily; - UpdateField CreatureType; - UpdateField NativeDisplayID; - UpdateField NativeXDisplayScale; - UpdateField MountDisplayID; - UpdateField CosmeticMountDisplayID; - UpdateField MinDamage; - UpdateField MaxDamage; - UpdateField MinOffHandDamage; - UpdateField MaxOffHandDamage; - UpdateField StandState; - UpdateField PetTalentPoints; - UpdateField VisFlags; - UpdateField AnimTier; - UpdateField PetNumber; - UpdateField PetNameTimestamp; - UpdateField PetExperience; - UpdateField PetNextLevelExperience; - UpdateField ModCastingSpeed; - UpdateField ModCastingSpeedNeg; - UpdateField ModSpellHaste; - UpdateField ModHaste; - UpdateField ModRangedHaste; - UpdateField ModHasteRegen; - UpdateField ModTimeRate; - UpdateField CreatedBySpell; - UpdateField EmoteState; - UpdateField BaseMana; - UpdateField BaseHealth; - UpdateField SheatheState; - UpdateField PvpFlags; + UpdateField RangedAttackRoundBaseTime; + UpdateField BoundingRadius; + UpdateField CombatReach; + UpdateField DisplayScale; + UpdateField NativeDisplayID; + UpdateField NativeXDisplayScale; + UpdateField MountDisplayID; + UpdateField MinDamage; + UpdateField MaxDamage; + UpdateField MinOffHandDamage; + UpdateField MaxOffHandDamage; + UpdateField StandState; + UpdateField PetTalentPoints; + UpdateField VisFlags; + UpdateField AnimTier; + UpdateField PetNumber; + UpdateField PetNameTimestamp; + UpdateField PetExperience; + UpdateField PetNextLevelExperience; + UpdateField ModCastingSpeed; + UpdateField ModSpellHaste; + UpdateField ModHaste; + UpdateField ModRangedHaste; + UpdateField ModHasteRegen; + UpdateField ModTimeRate; + UpdateField CreatedBySpell; + UpdateField EmoteState; + UpdateField TrainingPointsUsed; + UpdateField TrainingPointsTotal; + UpdateField BaseMana; + UpdateField BaseHealth; + UpdateField SheatheState; + UpdateField PvpFlags; struct PvpFlagsTag : ViewerDependentValueTag {}; - UpdateField PetFlags; - UpdateField ShapeshiftForm; - UpdateField AttackPower; - UpdateField AttackPowerModPos; - UpdateField AttackPowerModNeg; - UpdateField AttackPowerMultiplier; - UpdateField AttackPowerModSupport; - UpdateField RangedAttackPower; - UpdateField RangedAttackPowerModPos; - UpdateField RangedAttackPowerModNeg; - UpdateField RangedAttackPowerMultiplier; - UpdateField RangedAttackPowerModSupport; - UpdateField MainHandWeaponAttackPower; - UpdateField OffHandWeaponAttackPower; - UpdateField RangedWeaponAttackPower; - UpdateField SetAttackSpeedAura; - UpdateField Lifesteal; - UpdateField MinRangedDamage; - UpdateField MaxRangedDamage; - UpdateField ManaCostMultiplier; - UpdateField MaxHealthModifier; - UpdateField HoverHeight; - UpdateField MinItemLevelCutoff; - UpdateField MinItemLevel; - UpdateField MaxItemLevel; - UpdateField AzeriteItemLevel; - UpdateField WildBattlePetLevel; - UpdateField BattlePetCompanionExperience; - UpdateField BattlePetCompanionNameTimestamp; - UpdateField InteractSpellID; - UpdateField ScaleDuration; - UpdateField LooksLikeMountID; - UpdateField LooksLikeCreatureID; - UpdateField LookAtControllerID; - UpdateField PerksVendorItemID; - UpdateField TaxiNodesID; - UpdateField GuildGUID; - UpdateField FlightCapabilityID; - UpdateField GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use - UpdateField SilencedSchoolMask; - UpdateField CurrentAreaID; - UpdateField NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - UpdateFieldArray NpcFlags; + UpdateField PetFlags; + UpdateField ShapeshiftForm; + UpdateField AttackPower; + UpdateField AttackPowerModPos; + UpdateField AttackPowerModNeg; + UpdateField AttackPowerMultiplier; + UpdateField RangedAttackPower; + UpdateField RangedAttackPowerModPos; + UpdateField RangedAttackPowerModNeg; + UpdateField RangedAttackPowerMultiplier; + UpdateField SetAttackSpeedAura; + UpdateField Lifesteal; + UpdateField MinRangedDamage; + UpdateField MaxRangedDamage; + UpdateField MaxHealthModifier; + UpdateField HoverHeight; + UpdateField MinItemLevelCutoff; + UpdateField MinItemLevel; + UpdateField MaxItemLevel; + UpdateField WildBattlePetLevel; + UpdateField BattlePetCompanionNameTimestamp; + UpdateField InteractSpellID; + UpdateField ScaleDuration; + UpdateField LooksLikeMountID; + UpdateField LooksLikeCreatureID; + UpdateField LookAtControllerID; + UpdateField PerksVendorItemID; + UpdateField GuildGUID; + UpdateField SkinningOwnerGUID; + UpdateField FlightCapabilityID; + UpdateField GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use + UpdateField CurrentAreaID; + UpdateField ComboTarget; + UpdateFieldArray NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag {}; - UpdateFieldArray Power; - UpdateFieldArray MaxPower; - UpdateFieldArray PowerRegenFlatModifier; - UpdateFieldArray PowerRegenInterruptedFlatModifier; - UpdateFieldArray VirtualItems; - UpdateFieldArray AttackRoundBaseTime; - UpdateFieldArray Stats; - UpdateFieldArray StatPosBuff; - UpdateFieldArray StatNegBuff; - UpdateFieldArray StatSupportBuff; - UpdateFieldArray Resistances; - UpdateFieldArray BonusResistanceMods; - UpdateFieldArray ManaCostModifier; + UpdateFieldArray PowerRegenFlatModifier; + UpdateFieldArray PowerRegenInterruptedFlatModifier; + UpdateFieldArray Power; + UpdateFieldArray MaxPower; + UpdateFieldArray ModPowerRegen; // Applies to power regen only if expansion < 2, hidden from lua + UpdateFieldArray VirtualItems; + UpdateFieldArray AttackRoundBaseTime; + UpdateFieldArray Stats; + UpdateFieldArray StatPosBuff; + UpdateFieldArray StatNegBuff; + UpdateFieldArray Resistances; + UpdateFieldArray PowerCostModifier; + UpdateFieldArray PowerCostMultiplier; + UpdateFieldArray ResistanceBuffModsPositive; + UpdateFieldArray ResistanceBuffModsNegative; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; @@ -423,116 +347,72 @@ struct ChrCustomizationChoice : public IsUpdateFieldStructureTag bool operator!=(ChrCustomizationChoice const& right) const { return !(*this == right); } }; -struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<30> +struct QuestLog : public IsUpdateFieldStructureTag, public HasChangesMask<29> { UpdateField EndTime; UpdateField QuestID; UpdateField StateFlags; - UpdateField ObjectiveFlags; - UpdateFieldArray ObjectiveProgress; + UpdateFieldArray ObjectiveProgress; 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 ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8> +struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<9> { UpdateField SpellID; - UpdateField Charges; - UpdateField Flags; - UpdateField StartTime; - UpdateField EndTime; - UpdateField NextChargeTime; - UpdateField MaxCharges; + UpdateField ItemID; + UpdateField Charges; + UpdateField Flags; + UpdateField StartTime; + UpdateField EndTime; + UpdateField NextChargeTime; + UpdateField MaxCharges; 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 CTROptions : public IsUpdateFieldStructureTag +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<108> { - int32 ContentTuningConditionMask; - uint32 Field_4; - uint32 ExpansionLevelMask; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - bool operator==(CTROptions const& right) const; - bool operator!=(CTROptions const& right) const { return !(*this == right); } -}; - -struct DeclinedNames : public IsUpdateFieldStructureTag, public HasChangesMask<6> -{ - UpdateFieldArray Name; - - 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 CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMask<6> -{ - UpdateField EmblemStyle; - UpdateField EmblemColor; - UpdateField BorderStyle; - UpdateField BorderColor; - UpdateField BackgroundColor; - - 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 PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269> -{ - UpdateField HasQuestSession; - UpdateField HasLevelLink; - DynamicUpdateField Customizations; - DynamicUpdateField QaCustomizations; - DynamicUpdateField QuestSessionQuestLog; - DynamicUpdateField ArenaCooldowns; - DynamicUpdateField VisualItemReplacements; - UpdateField DuelArbiter; - UpdateField WowAccount; - UpdateField BnetAccount; - UpdateField GuildClubMemberID; - UpdateField LootTargetGUID; - UpdateField PlayerFlags; - UpdateField PlayerFlagsEx; - UpdateField GuildRankID; - UpdateField GuildDeleteDate; - UpdateField GuildLevel; - UpdateField NativeSex; - UpdateField Inebriation; - UpdateField PvpTitle; - UpdateField ArenaFaction; - UpdateField DuelTeam; - UpdateField GuildTimeStamp; - UpdateField PlayerTitle; - UpdateField FakeInebriation; - UpdateField VirtualPlayerRealm; - UpdateField CurrentSpecID; - UpdateField TaxiMountAnimKitID; - UpdateField CurrentBattlePetBreedQuality; - UpdateField HonorLevel; - UpdateField LogoutTime; - UpdateField Name; - UpdateField Field_B0; - UpdateField Field_B4; - UpdateField CurrentBattlePetSpeciesID; - UpdateField CtrOptions; - UpdateField CovenantID; - UpdateField SoulbindID; - UpdateField DungeonScore; - OptionalUpdateField DeclinedNames; - UpdateField PersonalTabard; - UpdateFieldArray PartyType; - UpdateFieldArray QuestLog; - UpdateFieldArray VisibleItems; - UpdateFieldArray AvgItemLevel; - UpdateFieldArray Field_3120; + DynamicUpdateField Customizations; + DynamicUpdateField ArenaCooldowns; + DynamicUpdateField VisualItemReplacements; + UpdateField DuelArbiter; + UpdateField WowAccount; + UpdateField LootTargetGUID; + UpdateField PlayerFlags; + UpdateField PlayerFlagsEx; + UpdateField GuildRankID; + UpdateField GuildDeleteDate; + UpdateField GuildLevel; + UpdateField NumBankSlots; + UpdateField NativeSex; + UpdateField Inebriation; + UpdateField PvpTitle; + UpdateField ArenaFaction; + UpdateField PvpRank; + UpdateField Field_88; + UpdateField DuelTeam; + UpdateField GuildTimeStamp; + UpdateField PlayerTitle; + UpdateField FakeInebriation; + UpdateField VirtualPlayerRealm; + UpdateField CurrentSpecID; + UpdateField TaxiMountAnimKitID; + UpdateField CurrentBattlePetBreedQuality; + UpdateField HonorLevel; + UpdateField LogoutTime; + UpdateField CurrentBattlePetSpeciesID; + UpdateField BnetAccount; // For telemetry + UpdateField DungeonScore; + UpdateFieldArray PartyType; + UpdateFieldArray QuestLog; + UpdateFieldArray VisibleItems; + UpdateFieldArray AvgItemLevel; + UpdateFieldArray Field_3120; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -651,69 +531,6 @@ struct ResearchHistory : public IsUpdateFieldStructureTag, public HasChangesMask void ClearChangesMask(); }; -struct MawPower : public IsUpdateFieldStructureTag -{ - int32 Field_0; - int32 Field_4; - int32 Field_8; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - bool operator==(MawPower const& right) const; - bool operator!=(MawPower const& right) const { return !(*this == right); } -}; - -struct MultiFloorExplore : public IsUpdateFieldStructureTag -{ - std::vector WorldMapOverlayIDs; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - bool operator==(MultiFloorExplore const& right) const; - bool operator!=(MultiFloorExplore const& right) const { return !(*this == right); } -}; - -struct RecipeProgressionInfo : public IsUpdateFieldStructureTag -{ - uint16 RecipeProgressionGroupID; - uint16 Experience; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - bool operator==(RecipeProgressionInfo const& right) const; - bool operator!=(RecipeProgressionInfo const& right) const { return !(*this == right); } -}; - -struct ActivePlayerUnk901 : public IsUpdateFieldStructureTag, public HasChangesMask<3> -{ - UpdateField Field_0; - UpdateField Field_10; - - 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 QuestSession : public IsUpdateFieldStructureTag, public HasChangesMask<878> -{ - UpdateField Owner; - UpdateFieldArray QuestCompleted; - - 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 ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3> -{ - UpdateField QuestID; - UpdateField ReplayTime; - - 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 TraitEntry : public IsUpdateFieldStructureTag { int32 TraitNodeID; @@ -744,70 +561,6 @@ struct TraitConfig : public IsUpdateFieldStructureTag, public HasChangesMask<12> void ClearChangesMask(); }; -struct CraftingOrderItem : public IsUpdateFieldStructureTag, public HasChangesMask<7> -{ - UpdateField Field_0; - UpdateField ItemGUID; - UpdateField OwnerGUID; - UpdateField ItemID; - UpdateField Quantity; - UpdateField ReagentQuality; - OptionalUpdateField DataSlotIndex; - - 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 CraftingOrderData : public IsUpdateFieldStructureTag, public HasChangesMask<24> -{ - DynamicUpdateField Reagents; - UpdateField Field_0; - UpdateField OrderID; - UpdateField SkillLineAbilityID; - UpdateField OrderState; - UpdateField OrderType; - UpdateField MinQuality; - UpdateField ExpirationTime; - UpdateField ClaimEndTime; - UpdateField TipAmount; - UpdateField ConsortiumCut; - UpdateField Flags; - UpdateField CustomerGUID; - UpdateField CustomerAccountGUID; - UpdateField CrafterGUID; - UpdateField PersonalCrafterGUID; - UpdateField CustomerNotes; - OptionalUpdateField OutputItem; - OptionalUpdateField OutputItemData; - - 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 CraftingOrder : public IsUpdateFieldStructureTag, public HasChangesMask<4> -{ - DynamicUpdateField Enchantments; - DynamicUpdateField Gems; - UpdateField Data; - OptionalUpdateField RecraftItemInfo; - - 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 PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public HasChangesMask<3> -{ - UpdateField ProfessionID; - UpdateField Count; - - 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 CategoryCooldownMod : public IsUpdateFieldStructureTag { int32 SpellCategoryID; @@ -855,17 +608,6 @@ struct StableInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> void ClearChangesMask(); }; -struct CollectableSourceTrackedData : public IsUpdateFieldStructureTag, public HasChangesMask<4> -{ - UpdateField TargetType; - UpdateField TargetID; - UpdateField 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; @@ -876,153 +618,146 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1616> -{ - UpdateField BackpackAutoSortDisabled; - UpdateField BackpackSellJunkDisabled; - UpdateField BankAutoSortDisabled; - UpdateField SortBagsRightToLeft; - UpdateField InsertItemsLeftToRight; - UpdateField HasPerksProgramPendingReward; - UpdateFieldArray, 1, 36, 37> ResearchSites; - UpdateFieldArray, 1, 38, 39> ResearchSiteProgress; - UpdateFieldArray, 1, 40, 41> Research; - DynamicUpdateField KnownTitles; - DynamicUpdateField DailyQuestsCompleted; - DynamicUpdateField AvailableQuestLineXQuestIDs; - DynamicUpdateField Heirlooms; - DynamicUpdateField HeirloomFlags; - DynamicUpdateField Toys; - DynamicUpdateField ToyFlags; - DynamicUpdateField Transmog; - DynamicUpdateField ConditionalTransmog; - DynamicUpdateField SelfResSpells; - DynamicUpdateField RuneforgePowers; - DynamicUpdateField TransmogIllusions; - DynamicUpdateField SpellPctModByLabel; - DynamicUpdateField SpellFlatModByLabel; - DynamicUpdateField MawPowers; - DynamicUpdateField MultiFloorExploration; - DynamicUpdateField RecipeProgression; - DynamicUpdateField ReplayedQuests; - DynamicUpdateField TaskQuests; - DynamicUpdateField DisabledSpells; - DynamicUpdateField PersonalCraftingOrderCounts; - DynamicUpdateField CategoryCooldownMods; - DynamicUpdateField WeeklySpellUses; - DynamicUpdateField TrackedCollectableSources; - DynamicUpdateField PvpInfo; - DynamicUpdateField CharacterRestrictions; - DynamicUpdateField TraitConfigs; - DynamicUpdateField CraftingOrders; - UpdateField FarsightObject; - UpdateField SummonedBattlePetGUID; - UpdateField Coinage; - UpdateField XP; - UpdateField NextLevelXP; - UpdateField TrialXP; - UpdateField Skill; - UpdateField CharacterPoints; - UpdateField MaxTalentTiers; - UpdateField TrackCreatureMask; - UpdateField MainhandExpertise; - UpdateField OffhandExpertise; - UpdateField RangedExpertise; - UpdateField CombatRatingExpertise; - UpdateField BlockPercentage; - UpdateField DodgePercentage; - UpdateField DodgePercentageFromAttribute; - UpdateField ParryPercentage; - UpdateField ParryPercentageFromAttribute; - UpdateField CritPercentage; - UpdateField RangedCritPercentage; - UpdateField OffhandCritPercentage; - UpdateField SpellCritPercentage; - UpdateField ShieldBlock; - UpdateField ShieldBlockCritPercentage; - UpdateField Mastery; - UpdateField Speed; - UpdateField Avoidance; - UpdateField Sturdiness; - UpdateField Versatility; - UpdateField VersatilityBonus; - UpdateField PvpPowerDamage; - UpdateField PvpPowerHealing; - UpdateField ModHealingDonePos; - UpdateField ModHealingPercent; - UpdateField ModPeriodicHealingDonePercent; - UpdateField ModSpellPowerPercent; - UpdateField ModResiliencePercent; - UpdateField OverrideSpellPowerByAPPercent; - UpdateField OverrideAPBySpellPowerPercent; - UpdateField ModTargetResistance; - UpdateField ModTargetPhysicalResistance; - UpdateField LocalFlags; - UpdateField GrantableLevels; - UpdateField MultiActionBars; - UpdateField LifetimeMaxRank; - UpdateField NumRespecs; - UpdateField PvpMedals; - UpdateField TodayHonorableKills; - UpdateField YesterdayHonorableKills; - UpdateField LifetimeHonorableKills; - UpdateField WatchedFactionIndex; - UpdateField MaxLevel; - UpdateField ScalingPlayerLevelDelta; - UpdateField MaxCreatureScalingLevel; - UpdateField PetSpellPower; - UpdateField UiHitModifier; - UpdateField UiSpellHitModifier; - UpdateField HomeRealmTimeOffset; - UpdateField ModPetHaste; - UpdateField JailersTowerLevelMax; - UpdateField JailersTowerLevel; - UpdateField LocalRegenFlags; - UpdateField AuraVision; - UpdateField NumBackpackSlots; - UpdateField OverrideSpellsID; - UpdateField LootSpecID; - UpdateField OverrideZonePVPType; - UpdateField Honor; - UpdateField HonorNextLevel; - UpdateField PerksProgramCurrency; - UpdateField NumBankSlots; +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1525> +{ + UpdateField SortBagsRightToLeft; + UpdateField InsertItemsLeftToRight; + UpdateFieldArray, 1, 20, 21> ResearchSites; + UpdateFieldArray, 1, 22, 23> ResearchSiteProgress; + UpdateFieldArray, 1, 24, 25> Research; + DynamicUpdateField KnownTitles; + DynamicUpdateField DailyQuestsCompleted; + DynamicUpdateField AvailableQuestLineXQuestIDs; + DynamicUpdateField Field_1000; + DynamicUpdateField Heirlooms; + DynamicUpdateField HeirloomFlags; + DynamicUpdateField Toys; + DynamicUpdateField Transmog; + DynamicUpdateField ConditionalTransmog; + DynamicUpdateField SelfResSpells; + DynamicUpdateField SpellPctModByLabel; + DynamicUpdateField SpellFlatModByLabel; + DynamicUpdateField TaskQuests; + DynamicUpdateField CategoryCooldownMods; + DynamicUpdateField WeeklySpellUses; + DynamicUpdateField CharacterRestrictions; + DynamicUpdateField TraitConfigs; + UpdateField FarsightObject; + UpdateField SummonedBattlePetGUID; + UpdateField Coinage; + UpdateField XP; + UpdateField NextLevelXP; + UpdateField TrialXP; + UpdateField Skill; + UpdateField CharacterPoints; + UpdateField MaxTalentTiers; + UpdateField TrackCreatureMask; + UpdateField MainhandExpertise; + UpdateField OffhandExpertise; + UpdateField RangedExpertise; + UpdateField CombatRatingExpertise; + UpdateField BlockPercentage; + UpdateField DodgePercentage; + UpdateField DodgePercentageFromAttribute; + UpdateField ParryPercentage; + UpdateField ParryPercentageFromAttribute; + UpdateField CritPercentage; + UpdateField RangedCritPercentage; + UpdateField OffhandCritPercentage; + UpdateField ShieldBlock; + UpdateField ShieldBlockCritPercentage; + UpdateField Mastery; + UpdateField Speed; + UpdateField Avoidance; + UpdateField Sturdiness; + UpdateField Versatility; + UpdateField VersatilityBonus; + UpdateField PvpPowerDamage; + UpdateField PvpPowerHealing; + UpdateField ModHealingDonePos; + UpdateField ModHealingPercent; + UpdateField ModHealingDonePercent; + UpdateField ModPeriodicHealingDonePercent; + UpdateField ModSpellPowerPercent; + UpdateField ModResiliencePercent; + UpdateField OverrideSpellPowerByAPPercent; + UpdateField OverrideAPBySpellPowerPercent; + UpdateField ModTargetResistance; + UpdateField ModTargetPhysicalResistance; + UpdateField LocalFlags; + UpdateField GrantableLevels; + UpdateField MultiActionBars; + UpdateField LifetimeMaxRank; + UpdateField NumRespecs; + UpdateField AmmoID; + UpdateField PvpMedals; + UpdateField TodayHonorableKills; + UpdateField TodayDishonorableKills; + UpdateField YesterdayHonorableKills; + UpdateField YesterdayDishonorableKills; + UpdateField LastWeekHonorableKills; + UpdateField LastWeekDishonorableKills; + UpdateField ThisWeekHonorableKills; + UpdateField ThisWeekDishonorableKills; + UpdateField ThisWeekContribution; + UpdateField LifetimeHonorableKills; + UpdateField LifetimeDishonorableKills; + UpdateField Field_F24; + UpdateField YesterdayContribution; + UpdateField LastWeekContribution; + UpdateField LastWeekRank; + UpdateField WatchedFactionIndex; + UpdateField MaxLevel; + UpdateField ScalingPlayerLevelDelta; + UpdateField MaxCreatureScalingLevel; + UpdateField PetSpellPower; + UpdateField UiHitModifier; + UpdateField UiSpellHitModifier; + UpdateField HomeRealmTimeOffset; + UpdateField ModPetHaste; + UpdateField LocalRegenFlags; + UpdateField AuraVision; + UpdateField NumBackpackSlots; + UpdateField OverrideSpellsID; + UpdateField LfgBonusFactionID; + UpdateField LootSpecID; + UpdateField OverrideZonePVPType; + UpdateField Honor; + UpdateField HonorNextLevel; + UpdateField Field_F74; + UpdateField PvpTierMaxFromWins; + UpdateField PvpLastWeeksTierMaxFromWins; + UpdateField PvpRankProgress; + UpdateField PerksProgramCurrency; UpdateField ResearchHistory; UpdateField FrozenPerksVendorItem; - UpdateField Field_1410; - OptionalUpdateField QuestSession; - UpdateField UiChromieTimeExpansionID; - UpdateField TransportServerTime; - UpdateField WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField DEBUGSoulbindConduitRank; - UpdateField DungeonScore; - UpdateField ActiveCombatTraitConfigID; - UpdateField ItemUpgradeHighOnehandWeaponItemID; - UpdateField ItemUpgradeHighFingerItemID; - UpdateField ItemUpgradeHighFingerWatermark; - UpdateField ItemUpgradeHighTrinketItemID; - UpdateField ItemUpgradeHighTrinketWatermark; - UpdateField LootHistoryInstanceID; - OptionalUpdateField PetStable; - UpdateField RequiredMountCapabilityFlags; - UpdateFieldArray InvSlots; - UpdateFieldArray ExploredZones; - UpdateFieldArray RestInfo; - UpdateFieldArray ModDamageDonePos; - UpdateFieldArray ModDamageDoneNeg; - UpdateFieldArray ModDamageDonePercent; - UpdateFieldArray ModHealingDonePercent; - UpdateFieldArray WeaponDmgMultipliers; - UpdateFieldArray WeaponAtkSpeedMultipliers; - UpdateFieldArray BuybackPrice; - UpdateFieldArray BuybackTimestamp; - UpdateFieldArray CombatRatings; - UpdateFieldArray NoReagentCostMask; - UpdateFieldArray ProfessionSkillLine; - UpdateFieldArray BagSlotFlags; - UpdateFieldArray BankBagSlotFlags; - UpdateFieldArray QuestCompleted; - UpdateFieldArray ItemUpgradeHighWatermark; + UpdateField TransportServerTime; + UpdateField ActiveCombatTraitConfigID; + UpdateField GlyphsEnabled; + UpdateField LfgRoles; + OptionalUpdateField PetStable; + UpdateField NumStableSlots; + UpdateFieldArray InvSlots; + UpdateFieldArray TrackResourceMask; + UpdateFieldArray SpellCritPercentage; + UpdateFieldArray ModDamageDonePos; + UpdateFieldArray ModDamageDoneNeg; + UpdateFieldArray ModDamageDonePercent; + UpdateFieldArray ExploredZones; + UpdateFieldArray RestInfo; + UpdateFieldArray WeaponDmgMultipliers; + UpdateFieldArray WeaponAtkSpeedMultipliers; + UpdateFieldArray BuybackPrice; + UpdateFieldArray BuybackTimestamp; + UpdateFieldArray CombatRatings; + UpdateFieldArray PvpInfo; + UpdateFieldArray NoReagentCostMask; + UpdateFieldArray ProfessionSkillLine; + UpdateFieldArray BagSlotFlags; + UpdateFieldArray BankBagSlotFlags; + UpdateFieldArray QuestCompleted; + UpdateFieldArray GlyphSlots; + UpdateFieldArray Glyphs; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -1030,7 +765,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; -struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<25> +struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask<20> { UpdateField, 0, 1> StateWorldEffectIDs; DynamicUpdateField EnableDoodadSets; @@ -1040,24 +775,19 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask< UpdateField StateSpellVisualID; UpdateField SpawnTrackingStateAnimID; UpdateField SpawnTrackingStateAnimKitID; - UpdateField StateWorldEffectsQuestObjectiveID; - UpdateField CreatedBy; - UpdateField GuildGUID; - UpdateField Flags; + UpdateField CreatedBy; + UpdateField GuildGUID; + UpdateField Flags; struct FlagsTag : ViewerDependentValueTag {}; - UpdateField ParentRotation; - UpdateField FactionTemplate; + UpdateField ParentRotation; + UpdateField FactionTemplate; + UpdateField Level; UpdateField State; struct StateTag : ViewerDependentValueTag {}; UpdateField TypeID; UpdateField PercentHealth; UpdateField ArtKit; UpdateField CustomParam; - UpdateField Level; - UpdateField AnimGroupInstance; - UpdateField UiWidgetItemID; - UpdateField UiWidgetItemQuality; - UpdateField UiWidgetItemUnknown1000; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; @@ -1069,7 +799,7 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa { UpdateField Caster; UpdateField Type; - UpdateField SpellVisual; + UpdateField SpellXSpellVisualID; UpdateField SpellID; UpdateField Radius; UpdateField CastTime; @@ -1080,7 +810,7 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa void ClearChangesMask(); }; -struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<33> +struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<32> { DynamicUpdateField Customizations; UpdateField DynamicFlags; @@ -1093,8 +823,7 @@ struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<33> UpdateField Class; UpdateField Flags; UpdateField FactionTemplate; - UpdateField StateSpellVisualKitID; - UpdateFieldArray Items; + UpdateFieldArray Items; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; @@ -1126,33 +855,27 @@ struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5> void ClearChangesMask(); }; -struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<26> -{ - UpdateField HeightIgnoresScale; - UpdateField Field_261; - UpdateField OverrideScaleCurve; - UpdateField ExtraScaleCurve; - UpdateField OverrideMoveCurveX; - UpdateField OverrideMoveCurveY; - UpdateField OverrideMoveCurveZ; - UpdateField Caster; - UpdateField Duration; - UpdateField TimeToTarget; - UpdateField TimeToTargetScale; - UpdateField TimeToTargetExtraScale; - UpdateField TimeToTargetPos; // Linked to m_overrideMoveCurve - UpdateField SpellID; - UpdateField SpellForVisuals; - UpdateField SpellVisual; - UpdateField BoundsRadius2D; - UpdateField DecalPropertiesID; - UpdateField CreatingEffectGUID; - UpdateField NumUnitsInside; - UpdateField NumPlayersInside; // When not 0 this causes SpellVisualEvent 14 to trigger, playing alternate visuals, typically used by "SOAK THIS" areatriggers - UpdateField OrbitPathTarget; - UpdateField, 0, 23> RollPitchYaw; - UpdateField PositionalSoundKitID; - UpdateField VisualAnim; +struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<20> +{ + UpdateField OverrideScaleCurve; + UpdateField ExtraScaleCurve; + UpdateField OverrideMoveCurveX; + UpdateField OverrideMoveCurveY; + UpdateField OverrideMoveCurveZ; + UpdateField Caster; + UpdateField Duration; + UpdateField TimeToTarget; + UpdateField TimeToTargetScale; + UpdateField TimeToTargetExtraScale; + UpdateField TimeToTargetPos; // Linked to m_overrideMoveCurve + UpdateField SpellID; + UpdateField SpellForVisuals; + UpdateField SpellXSpellVisualID; + UpdateField BoundsRadius2D; + UpdateField DecalPropertiesID; + UpdateField CreatingEffectGUID; + UpdateField OrbitPathTarget; + UpdateField VisualAnim; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; @@ -1176,13 +899,11 @@ struct SceneObjectData : public IsUpdateFieldStructureTag, public HasChangesMask struct ConversationLine : public IsUpdateFieldStructureTag { int32 ConversationLineID; - int32 BroadcastTextID; uint32 StartTime; struct StartTimeTag : ViewerDependentValueTag {}; int32 UiCameraID; uint8 ActorIndex; uint8 Flags; - uint8 ChatType; void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const; @@ -1192,12 +913,11 @@ struct ConversationLine : public IsUpdateFieldStructureTag struct ConversationActor : public IsUpdateFieldStructureTag { + uint32 Type; + int32 Id; uint32 CreatureID; uint32 CreatureDisplayInfoID; ObjectGuid ActorGUID; - int32 Id; - uint32 Type; - uint32 NoActorObject; void WriteCreate(ByteBuffer& data, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Conversation const* owner, Player const* receiver) const; @@ -1205,15 +925,12 @@ struct ConversationActor : public IsUpdateFieldStructureTag bool operator!=(ConversationActor const& right) const { return !(*this == right); } }; -struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<7> +struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<4> { - UpdateField DontPlayBroadcastTextSounds; - UpdateField, 0, 2> Lines; - DynamicUpdateField Actors; - UpdateField LastLineEndTime; + UpdateField, 0, 1> Lines; + DynamicUpdateField Actors; + UpdateField LastLineEndTime; struct LastLineEndTimeTag : ViewerDependentValueTag {}; - UpdateField Progress; - UpdateField Flags; void WriteCreate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; -- cgit v1.2.3