diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 2972 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 993 |
2 files changed, 1079 insertions, 2886 deletions
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<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisi void ItemData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisi void ItemData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x07F58D80u, 0x00000000u }; + allowedMaskForTarget |= { 0x1FD63180u, 0x00000000u }; } void ItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisibilityFlags) -{ - if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x000003E2u }; -} - -void AzeriteItemData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> 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]) @@ -882,17 +612,9 @@ void VisibleItem::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Unit con } 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<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { + data << int64(Health); + data << int64(MaxHealth); data << int32(ViewerDependentValue<DisplayIDTag>::GetValue(this, owner, receiver)); for (uint32 i = 0; i < 2; ++i) { @@ -938,8 +660,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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,10 +777,15 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi { for (uint32 i = 0; i < 7; ++i) { - data << int32(BonusResistanceMods[i]); - data << int32(ManaCostModifier[i]); + data << int32(PowerCostModifier[i]); + data << float(PowerCostMultiplier[i]); } } + for (uint32 i = 0; i < 7; ++i) + { + data << int32(ResistanceBuffModsPositive[i]); + data << int32(ResistanceBuffModsNegative[i]); + } data << int32(BaseMana); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) { @@ -1081,29 +801,21 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> 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<DisplayIDTag>::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<DisplayIDTag>::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<FactionTemplateTag>::GetValue(this, owner, receiver)); } if (changesMask[41]) { - data << int32(ScalingHealthItemLevelCurveID); + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[42]) { - data << int32(ScalingDamageItemLevelCurveID); + data << uint32(Flags2); } if (changesMask[43]) { - data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); } if (changesMask[44]) { - data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); } if (changesMask[45]) { - data << uint32(Flags2); + data << uint32(RangedAttackRoundBaseTime); } if (changesMask[46]) { - data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); + data << float(BoundingRadius); } if (changesMask[47]) { - data << uint32(ViewerDependentValue<AuraStateTag>::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<PvpFlagsTag>::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<PvpFlagsTag>::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<NpcFlagsTag>::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,26 +1722,30 @@ 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> 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); @@ -2366,41 +1866,19 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { 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,170 +1919,134 @@ 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[10]) - { - data << BnetAccount; - } - if (changesMask[11]) - { - data << uint64(GuildClubMemberID); - } - if (changesMask[12]) + if (changesMask[6]) { data << LootTargetGUID; } - if (changesMask[13]) + if (changesMask[7]) { data << uint32(PlayerFlags); } - if (changesMask[14]) + if (changesMask[8]) { data << uint32(PlayerFlagsEx); } - if (changesMask[15]) + if (changesMask[9]) { data << uint32(GuildRankID); } - if (changesMask[16]) + if (changesMask[10]) { data << uint32(GuildDeleteDate); } - if (changesMask[17]) + if (changesMask[11]) { data << int32(GuildLevel); } - if (changesMask[18]) + if (changesMask[12]) + { + data << uint8(NumBankSlots); + } + if (changesMask[13]) { data << uint8(NativeSex); } - if (changesMask[19]) + if (changesMask[14]) { data << uint8(Inebriation); } - if (changesMask[20]) + if (changesMask[15]) { data << uint8(PvpTitle); } - if (changesMask[21]) + if (changesMask[16]) { data << uint8(ArenaFaction); } - if (changesMask[22]) + if (changesMask[17]) + { + data << uint8(PvpRank); + } + if (changesMask[18]) + { + data << int32(Field_88); + } + if (changesMask[19]) { data << uint32(DuelTeam); } - if (changesMask[23]) + if (changesMask[20]) { data << int32(GuildTimeStamp); } - if (changesMask[24]) + if (changesMask[21]) { data << int32(PlayerTitle); } - if (changesMask[25]) + if (changesMask[22]) { data << int32(FakeInebriation); } - if (changesMask[26]) + if (changesMask[23]) { data << uint32(VirtualPlayerRealm); } - if (changesMask[27]) + if (changesMask[24]) { data << uint32(CurrentSpecID); } - if (changesMask[28]) + if (changesMask[25]) { data << int32(TaxiMountAnimKitID); } - if (changesMask[29]) + if (changesMask[26]) { data << uint8(CurrentBattlePetBreedQuality); } - if (changesMask[30]) + if (changesMask[27]) { data << int32(HonorLevel); } - if (changesMask[31]) + if (changesMask[28]) { data << int64(LogoutTime); } - } - if (changesMask[32]) - { - if (changesMask[34]) - { - data << int32(Field_B0); - } - if (changesMask[35]) - { - data << int32(Field_B4); - } - if (changesMask[36]) + if (changesMask[29]) { 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]) + if (changesMask[30]) { - data.WriteBits(Name->size(), 32); + data << BnetAccount; } - data.WriteBits(DeclinedNames.has_value(), 1); - data.FlushBits(); - if (changesMask[40]) + if (changesMask[31]) { data << DungeonScore; } - if (changesMask[33]) - { - data.WriteString(Name); - } - if (changesMask[41]) - { - if (DeclinedNames.has_value()) - { - DeclinedNames->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } } - if (changesMask[43]) + if (changesMask[32]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[44 + i]) + if (changesMask[33 + i]) { data << uint8(PartyType[i]); } } } - if (changesMask[46]) + if (changesMask[35]) { - for (uint32 i = 0; i < 175; ++i) + for (uint32 i = 0; i < 25; ++i) { - if (changesMask[47 + i]) + if (changesMask[36 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2636,62 +2055,58 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - 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,391 +2691,6 @@ void TraitConfig::ClearChangesMask() _changesMask.ResetAll(); } -void CraftingOrderItem::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); - } -} - -void CraftingOrderItem::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.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); - } - } -} - -void CraftingOrderItem::ClearChangesMask() -{ - Base::ClearChangesMask(Field_0); - Base::ClearChangesMask(ItemGUID); - Base::ClearChangesMask(OwnerGUID); - Base::ClearChangesMask(ItemID); - Base::ClearChangesMask(Quantity); - Base::ClearChangesMask(ReagentQuality); - Base::ClearChangesMask(DataSlotIndex); - _changesMask.ResetAll(); -} - -void CraftingOrderData::WriteCreate(ByteBuffer& data, 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(); -} - -void CraftingOrderData::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) 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); @@ -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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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,8 +3152,8 @@ 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); @@ -4408,48 +3161,25 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { 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,196 +3265,123 @@ 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) { @@ -4734,7 +3391,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[9]) + if (changesMask[4]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { @@ -4744,7 +3401,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[10]) + if (changesMask[5]) { for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { @@ -4754,7 +3411,17 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[11]) + if (changesMask[6]) + { + for (uint32 i = 0; i < Field_1000.size(); ++i) + { + if (Field_1000.HasChanged(i) || ignoreNestedChangesMask) + { + data << int32(Field_1000[i]); + } + } + } + if (changesMask[7]) { for (uint32 i = 0; i < Heirlooms.size(); ++i) { @@ -4764,7 +3431,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[12]) + if (changesMask[8]) { for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { @@ -4774,7 +3441,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[13]) + if (changesMask[9]) { for (uint32 i = 0; i < Toys.size(); ++i) { @@ -4784,17 +3451,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[14]) - { - for (uint32 i = 0; i < ToyFlags.size(); ++i) - { - if (ToyFlags.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(ToyFlags[i]); - } - } - } - if (changesMask[15]) + if (changesMask[10]) { for (uint32 i = 0; i < Transmog.size(); ++i) { @@ -4804,7 +3461,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[16]) + if (changesMask[11]) { for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { @@ -4814,7 +3471,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[17]) + if (changesMask[12]) { for (uint32 i = 0; i < SelfResSpells.size(); ++i) { @@ -4824,27 +3481,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[18]) - { - for (uint32 i = 0; i < RuneforgePowers.size(); ++i) - { - if (RuneforgePowers.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(RuneforgePowers[i]); - } - } - } - if (changesMask[19]) - { - for (uint32 i = 0; i < TransmogIllusions.size(); ++i) - { - if (TransmogIllusions.HasChanged(i) || ignoreNestedChangesMask) - { - data << uint32(TransmogIllusions[i]); - } - } - } - if (changesMask[21]) + if (changesMask[14]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -4854,7 +3491,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[22]) + if (changesMask[15]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -4864,527 +3501,447 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[23]) + if (changesMask[16]) { - for (uint32 i = 0; i < MawPowers.size(); ++i) + for (uint32 i = 0; i < TaskQuests.size(); ++i) { - if (MawPowers.HasChanged(i) || ignoreNestedChangesMask) + if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask) { - MawPowers[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[24]) + if (changesMask[18]) { - for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) + for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) { - if (MultiFloorExploration.HasChanged(i) || ignoreNestedChangesMask) + if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask) { - MultiFloorExploration[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[25]) + if (changesMask[19]) { - for (uint32 i = 0; i < RecipeProgression.size(); ++i) + for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) { - if (RecipeProgression.HasChanged(i) || ignoreNestedChangesMask) + if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask) { - RecipeProgression[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[26]) + if (changesMask[13]) { - for (uint32 i = 0; i < ReplayedQuests.size(); ++i) + for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { - if (ReplayedQuests.HasChanged(i) || ignoreNestedChangesMask) + if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask) { - ReplayedQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[27]) + if (changesMask[17]) { - for (uint32 i = 0; i < TaskQuests.size(); ++i) + for (uint32 i = 0; i < TraitConfigs.size(); ++i) { - if (TaskQuests.HasChanged(i) || ignoreNestedChangesMask) + if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask) { - TaskQuests[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } + if (changesMask[26]) + { + data << FarsightObject; + } + if (changesMask[27]) + { + data << SummonedBattlePetGUID; + } if (changesMask[28]) { - for (uint32 i = 0; i < DisabledSpells.size(); ++i) - { - if (DisabledSpells.HasChanged(i) || ignoreNestedChangesMask) - { - data << int32(DisabledSpells[i]); - } - } + data << uint64(Coinage); + } + if (changesMask[29]) + { + data << int32(XP); + } + if (changesMask[30]) + { + data << int32(NextLevelXP); } if (changesMask[31]) { - for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) - { - if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask) - { - PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << int32(TrialXP); + } + if (changesMask[32]) + { + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - } - if (changesMask[32]) - { if (changesMask[33]) { - for (uint32 i = 0; i < CategoryCooldownMods.size(); ++i) - { - if (CategoryCooldownMods.HasChanged(i) || ignoreNestedChangesMask) - { - CategoryCooldownMods[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << int32(CharacterPoints); } if (changesMask[34]) { - for (uint32 i = 0; i < WeeklySpellUses.size(); ++i) - { - if (WeeklySpellUses.HasChanged(i) || ignoreNestedChangesMask) - { - WeeklySpellUses[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << int32(MaxTalentTiers); } if (changesMask[35]) { - for (uint32 i = 0; i < TrackedCollectableSources.size(); ++i) - { - if (TrackedCollectableSources.HasChanged(i) || ignoreNestedChangesMask) - { - TrackedCollectableSources[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << uint32(TrackCreatureMask); } - } - if (changesMask[0]) - { - if (changesMask[8]) + if (changesMask[36]) { - for (uint32 i = 0; i < PvpInfo.size(); ++i) - { - if (PvpInfo.HasChanged(i) || ignoreNestedChangesMask) - { - PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << float(MainhandExpertise); } - if (changesMask[20]) + if (changesMask[37]) { - for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) - { - if (CharacterRestrictions.HasChanged(i) || ignoreNestedChangesMask) - { - CharacterRestrictions[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << float(OffhandExpertise); } - if (changesMask[29]) + } + if (changesMask[38]) + { + if (changesMask[39]) { - for (uint32 i = 0; i < TraitConfigs.size(); ++i) - { - if (TraitConfigs.HasChanged(i) || ignoreNestedChangesMask) - { - TraitConfigs[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << float(RangedExpertise); } - if (changesMask[30]) + if (changesMask[40]) { - for (uint32 i = 0; i < CraftingOrders.size(); ++i) - { - if (CraftingOrders.HasChanged(i) || ignoreNestedChangesMask) - { - CraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); - } - } + data << float(CombatRatingExpertise); + } + if (changesMask[41]) + { + data << float(BlockPercentage); } - } - if (changesMask[32]) - { 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 << float(ModHealingDonePercent[i]); + data << uint64(ExploredZones[i]); } } } - if (changesMask[635]) + if (changesMask[539]) + { + for (uint32 i = 0; i < 2; ++i) + { + if (changesMask[540 + i]) + { + RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + 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<UpdateFieldFlag> 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<UpdateFieldFlag> fie data << float(ParentRotation->z); data << float(ParentRotation->w); data << int32(FactionTemplate); + data << int32(Level); data << int8(ViewerDependentValue<StateTag>::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<UpdateFieldFlag> 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]) { @@ -5821,31 +4390,31 @@ void GameObjectData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool } 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<FlagsTag>::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<StateTag>::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<UpdateFieldFlag> { 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const @@ -6263,122 +4790,92 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<StartTimeTag>::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<StartTimeTag>::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<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const { data << uint32(Lines->size()); data << int32(ViewerDependentValue<LastLineEndTimeTag>::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<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const @@ -6544,16 +5036,12 @@ void ConversationData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<LastLineEndTimeTag>::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<int32, 0, 1> ID; UpdateField<uint32, 0, 2> Duration; UpdateField<int16, 0, 3> Charges; - UpdateField<uint16, 0, 4> Inactive; + UpdateField<uint8, 0, 4> Field_A; + UpdateField<uint8, 0, 5> 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<UF::ArtifactPower, 0, 1> ArtifactPowers; DynamicUpdateField<UF::SocketedGem, 0, 2> Gems; @@ -126,19 +125,21 @@ struct ItemData : public IsUpdateFieldStructureTag, public HasChangesMask<41> UpdateField<uint32, 0, 7> StackCount; UpdateField<uint32, 0, 8> Expiration; UpdateField<uint32, 0, 9> DynamicFlags; - UpdateField<uint32, 0, 10> Durability; - UpdateField<uint32, 0, 11> MaxDurability; - UpdateField<uint32, 0, 12> CreatePlayedTime; - UpdateField<int32, 0, 13> Context; - UpdateField<int64, 0, 14> CreateTime; - UpdateField<uint64, 0, 15> ArtifactXP; - UpdateField<uint8, 0, 16> ItemAppearanceModID; - UpdateField<UF::ItemModList, 0, 17> Modifiers; - UpdateField<uint32, 0, 18> DynamicFlags2; - UpdateField<WorldPackets::Item::ItemBonusKey, 0, 19> ItemBonusKey; - UpdateField<uint16, 0, 20> DEBUGItemLevel; - UpdateFieldArray<int32, 5, 21, 22> SpellCharges; - UpdateFieldArray<UF::ItemEnchantment, 13, 27, 28> Enchantment; + UpdateField<int32, 0, 10> PropertySeed; + UpdateField<int32, 0, 11> RandomPropertiesID; + UpdateField<uint32, 0, 12> Durability; + UpdateField<uint32, 0, 13> MaxDurability; + UpdateField<uint32, 0, 14> CreatePlayedTime; + UpdateField<int32, 0, 15> Context; + UpdateField<int64, 0, 16> CreateTime; + UpdateField<uint64, 0, 17> ArtifactXP; + UpdateField<uint8, 0, 18> ItemAppearanceModID; + UpdateField<UF::ItemModList, 0, 19> Modifiers; + UpdateField<uint32, 0, 20> DynamicFlags2; + UpdateField<WorldPackets::Item::ItemBonusKey, 0, 21> ItemBonusKey; + UpdateField<uint16, 0, 22> DEBUGItemLevel; + UpdateFieldArray<int32, 5, 23, 24> SpellCharges; + UpdateFieldArray<UF::ItemEnchantment, 13, 29, 30> Enchantment; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Item const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<int32, 5, 0, 1> Selections; - - void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteEmpoweredItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<bool, 0, 1> Enabled; - UpdateField<uint32, 0, 2> SpecializationID; - UpdateFieldArray<uint32, 4, 3, 4> 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<bool, 0, 1> Enabled; - DynamicUpdateField<UF::UnlockedAzeriteEssence, 0, 2> UnlockedEssences; - DynamicUpdateField<uint32, 0, 4> UnlockedEssenceMilestones; - DynamicUpdateField<UF::SelectedAzeriteEssences, 0, 3> SelectedEssences; - UpdateField<uint64, 0, 5> Xp; - UpdateField<uint32, 0, 6> Level; - UpdateField<uint32, 0, 7> AuraLevel; - UpdateField<uint32, 0, 8> KnowledgeLevel; - UpdateField<int32, 0, 9> DEBUGknowledgeWeek; - - void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AzeriteItem const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<UpdateFieldFlag> fieldVisibilityFlags); - static void FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> 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<int32, 0, 1> ItemID; - UpdateField<int32, 0, 2> SecondaryItemModifiedAppearanceID; - UpdateField<int32, 0, 3> ConditionalItemAppearanceID; - UpdateField<uint16, 0, 4> ItemAppearanceModID; - UpdateField<uint16, 0, 5> ItemVisual; + UpdateField<uint16, 0, 2> ItemAppearanceModID; + UpdateField<uint16, 0, 3> 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<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; DynamicUpdateField<int32, 0, 3> WorldEffects; DynamicUpdateField<ObjectGuid, 0, 4> ChannelObjects; - UpdateField<int32, 0, 5> DisplayID; + UpdateField<int64, 0, 5> Health; + UpdateField<int64, 0, 6> MaxHealth; + UpdateField<int32, 0, 7> DisplayID; struct DisplayIDTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 0, 6> StateSpellVisualID; - UpdateField<uint32, 0, 7> StateAnimID; - UpdateField<uint32, 0, 8> StateAnimKitID; - UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID; - UpdateField<int32, 0, 10> SpellOverrideNameID; + UpdateField<uint32, 0, 8> StateSpellVisualID; + UpdateField<uint32, 0, 9> StateAnimID; + UpdateField<uint32, 0, 10> StateAnimKitID; UpdateField<ObjectGuid, 0, 11> Charm; UpdateField<ObjectGuid, 0, 12> Summon; UpdateField<ObjectGuid, 0, 13> Critter; @@ -282,127 +218,115 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217> UpdateField<ObjectGuid, 0, 20> BattlePetCompanionGUID; UpdateField<uint64, 0, 21> BattlePetDBID; UpdateField<UF::UnitChannel, 0, 22> ChannelData; - UpdateField<int8, 0, 23> SpellEmpowerStage; - UpdateField<uint32, 0, 24> SummonedByHomeRealm; - UpdateField<uint8, 0, 25> Race; - UpdateField<uint8, 0, 26> ClassId; - UpdateField<uint8, 0, 27> PlayerClassId; - UpdateField<uint8, 0, 28> Sex; - UpdateField<uint8, 0, 29> DisplayPower; - UpdateField<uint32, 0, 30> OverrideDisplayPowerID; - UpdateField<int64, 0, 31> Health; - UpdateField<int64, 32, 33> MaxHealth; - UpdateField<int32, 32, 34> Level; - UpdateField<int32, 32, 35> EffectiveLevel; - UpdateField<int32, 32, 36> ContentTuningID; - UpdateField<int32, 32, 37> ScalingLevelMin; - UpdateField<int32, 32, 38> ScalingLevelMax; - UpdateField<int32, 32, 39> ScalingLevelDelta; - UpdateField<int32, 32, 40> ScalingFactionGroup; - UpdateField<int32, 32, 41> ScalingHealthItemLevelCurveID; - UpdateField<int32, 32, 42> ScalingDamageItemLevelCurveID; - UpdateField<int32, 32, 43> FactionTemplate; + UpdateField<uint32, 0, 23> SummonedByHomeRealm; + UpdateField<uint8, 0, 24> Race; + UpdateField<uint8, 0, 25> ClassId; + UpdateField<uint8, 0, 26> PlayerClassId; + UpdateField<uint8, 0, 27> Sex; + UpdateField<uint8, 0, 28> DisplayPower; + UpdateField<uint32, 0, 29> OverrideDisplayPowerID; + UpdateField<int32, 0, 30> Level; + UpdateField<int32, 0, 31> EffectiveLevel; + UpdateField<int32, 32, 33> ContentTuningID; + UpdateField<int32, 32, 34> ScalingLevelMin; + UpdateField<int32, 32, 35> ScalingLevelMax; + UpdateField<int32, 32, 36> ScalingLevelDelta; + UpdateField<int32, 32, 37> ScalingFactionGroup; + UpdateField<int32, 32, 38> ScalingHealthItemLevelCurveID; + UpdateField<int32, 32, 39> ScalingDamageItemLevelCurveID; + UpdateField<int32, 32, 40> FactionTemplate; struct FactionTemplateTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 32, 44> Flags; + UpdateField<uint32, 32, 41> Flags; struct FlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 45> Flags2; - UpdateField<uint32, 32, 46> Flags3; + UpdateField<uint32, 32, 42> Flags2; + UpdateField<uint32, 32, 43> Flags3; struct Flags3Tag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 47> AuraState; + UpdateField<uint32, 32, 44> AuraState; struct AuraStateTag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 48> RangedAttackRoundBaseTime; - UpdateField<float, 32, 49> BoundingRadius; - UpdateField<float, 32, 50> CombatReach; - UpdateField<float, 32, 51> DisplayScale; - UpdateField<int32, 32, 52> CreatureFamily; - UpdateField<int32, 32, 53> CreatureType; - UpdateField<int32, 32, 54> NativeDisplayID; - UpdateField<float, 32, 55> NativeXDisplayScale; - UpdateField<int32, 32, 56> MountDisplayID; - UpdateField<int32, 32, 57> CosmeticMountDisplayID; - UpdateField<float, 32, 58> MinDamage; - UpdateField<float, 32, 59> MaxDamage; - UpdateField<float, 32, 60> MinOffHandDamage; - UpdateField<float, 32, 61> MaxOffHandDamage; - UpdateField<uint8, 32, 62> StandState; - UpdateField<uint8, 32, 63> PetTalentPoints; - UpdateField<uint8, 64, 65> VisFlags; - UpdateField<uint8, 64, 66> AnimTier; - UpdateField<uint32, 64, 67> PetNumber; - UpdateField<uint32, 64, 68> PetNameTimestamp; - UpdateField<uint32, 64, 69> PetExperience; - UpdateField<uint32, 64, 70> PetNextLevelExperience; - UpdateField<float, 64, 71> ModCastingSpeed; - UpdateField<float, 64, 72> ModCastingSpeedNeg; - UpdateField<float, 64, 73> ModSpellHaste; - UpdateField<float, 64, 74> ModHaste; - UpdateField<float, 64, 75> ModRangedHaste; - UpdateField<float, 64, 76> ModHasteRegen; - UpdateField<float, 64, 77> ModTimeRate; - UpdateField<int32, 64, 78> CreatedBySpell; - UpdateField<int32, 64, 79> EmoteState; - UpdateField<int32, 64, 80> BaseMana; - UpdateField<int32, 64, 81> BaseHealth; - UpdateField<uint8, 64, 82> SheatheState; - UpdateField<uint8, 64, 83> PvpFlags; + UpdateField<uint32, 32, 45> RangedAttackRoundBaseTime; + UpdateField<float, 32, 46> BoundingRadius; + UpdateField<float, 32, 47> CombatReach; + UpdateField<float, 32, 48> DisplayScale; + UpdateField<int32, 32, 49> NativeDisplayID; + UpdateField<float, 32, 50> NativeXDisplayScale; + UpdateField<int32, 32, 51> MountDisplayID; + UpdateField<float, 32, 52> MinDamage; + UpdateField<float, 32, 53> MaxDamage; + UpdateField<float, 32, 54> MinOffHandDamage; + UpdateField<float, 32, 55> MaxOffHandDamage; + UpdateField<uint8, 32, 56> StandState; + UpdateField<uint8, 32, 57> PetTalentPoints; + UpdateField<uint8, 32, 58> VisFlags; + UpdateField<uint8, 32, 59> AnimTier; + UpdateField<uint32, 32, 60> PetNumber; + UpdateField<uint32, 32, 61> PetNameTimestamp; + UpdateField<uint32, 32, 62> PetExperience; + UpdateField<uint32, 32, 63> PetNextLevelExperience; + UpdateField<float, 64, 65> ModCastingSpeed; + UpdateField<float, 64, 66> ModSpellHaste; + UpdateField<float, 64, 67> ModHaste; + UpdateField<float, 64, 68> ModRangedHaste; + UpdateField<float, 64, 69> ModHasteRegen; + UpdateField<float, 64, 70> ModTimeRate; + UpdateField<int32, 64, 71> CreatedBySpell; + UpdateField<int32, 64, 72> EmoteState; + UpdateField<int16, 64, 73> TrainingPointsUsed; + UpdateField<int16, 64, 74> TrainingPointsTotal; + UpdateField<int32, 64, 75> BaseMana; + UpdateField<int32, 64, 76> BaseHealth; + UpdateField<uint8, 64, 77> SheatheState; + UpdateField<uint8, 64, 78> PvpFlags; struct PvpFlagsTag : ViewerDependentValueTag<uint8> {}; - UpdateField<uint8, 64, 84> PetFlags; - UpdateField<uint8, 64, 85> ShapeshiftForm; - UpdateField<int32, 64, 86> AttackPower; - UpdateField<int32, 64, 87> AttackPowerModPos; - UpdateField<int32, 64, 88> AttackPowerModNeg; - UpdateField<float, 64, 89> AttackPowerMultiplier; - UpdateField<int32, 64, 90> AttackPowerModSupport; - UpdateField<int32, 64, 91> RangedAttackPower; - UpdateField<int32, 64, 92> RangedAttackPowerModPos; - UpdateField<int32, 64, 93> RangedAttackPowerModNeg; - UpdateField<float, 64, 94> RangedAttackPowerMultiplier; - UpdateField<int32, 64, 95> RangedAttackPowerModSupport; - UpdateField<int32, 96, 97> MainHandWeaponAttackPower; - UpdateField<int32, 96, 98> OffHandWeaponAttackPower; - UpdateField<int32, 96, 99> RangedWeaponAttackPower; - UpdateField<int32, 96, 100> SetAttackSpeedAura; - UpdateField<float, 96, 101> Lifesteal; - UpdateField<float, 96, 102> MinRangedDamage; - UpdateField<float, 96, 103> MaxRangedDamage; - UpdateField<float, 96, 104> ManaCostMultiplier; - UpdateField<float, 96, 105> MaxHealthModifier; - UpdateField<float, 96, 106> HoverHeight; - UpdateField<int32, 96, 107> MinItemLevelCutoff; - UpdateField<int32, 96, 108> MinItemLevel; - UpdateField<int32, 96, 109> MaxItemLevel; - UpdateField<int32, 96, 110> AzeriteItemLevel; - UpdateField<int32, 96, 111> WildBattlePetLevel; - UpdateField<int32, 96, 112> BattlePetCompanionExperience; - UpdateField<uint32, 96, 113> BattlePetCompanionNameTimestamp; - UpdateField<int32, 96, 114> InteractSpellID; - UpdateField<int32, 96, 115> ScaleDuration; - UpdateField<int32, 96, 116> LooksLikeMountID; - UpdateField<int32, 96, 117> LooksLikeCreatureID; - UpdateField<int32, 96, 118> LookAtControllerID; - UpdateField<int32, 96, 119> PerksVendorItemID; - UpdateField<int32, 96, 120> TaxiNodesID; - UpdateField<ObjectGuid, 96, 121> GuildGUID; - UpdateField<int32, 96, 122> FlightCapabilityID; - UpdateField<float, 96, 123> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use - UpdateField<uint32, 96, 124> SilencedSchoolMask; - UpdateField<uint32, 96, 125> CurrentAreaID; - UpdateField<ObjectGuid, 96, 126> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - UpdateFieldArray<uint32, 2, 127, 128> NpcFlags; + UpdateField<uint8, 64, 79> PetFlags; + UpdateField<uint8, 64, 80> ShapeshiftForm; + UpdateField<int32, 64, 81> AttackPower; + UpdateField<int32, 64, 82> AttackPowerModPos; + UpdateField<int32, 64, 83> AttackPowerModNeg; + UpdateField<float, 64, 84> AttackPowerMultiplier; + UpdateField<int32, 64, 85> RangedAttackPower; + UpdateField<int32, 64, 86> RangedAttackPowerModPos; + UpdateField<int32, 64, 87> RangedAttackPowerModNeg; + UpdateField<float, 64, 88> RangedAttackPowerMultiplier; + UpdateField<int32, 64, 89> SetAttackSpeedAura; + UpdateField<float, 64, 90> Lifesteal; + UpdateField<float, 64, 91> MinRangedDamage; + UpdateField<float, 64, 92> MaxRangedDamage; + UpdateField<float, 64, 93> MaxHealthModifier; + UpdateField<float, 64, 94> HoverHeight; + UpdateField<int32, 64, 95> MinItemLevelCutoff; + UpdateField<int32, 96, 97> MinItemLevel; + UpdateField<int32, 96, 98> MaxItemLevel; + UpdateField<int32, 96, 99> WildBattlePetLevel; + UpdateField<uint32, 96, 100> BattlePetCompanionNameTimestamp; + UpdateField<int32, 96, 101> InteractSpellID; + UpdateField<int32, 96, 102> ScaleDuration; + UpdateField<int32, 96, 103> LooksLikeMountID; + UpdateField<int32, 96, 104> LooksLikeCreatureID; + UpdateField<int32, 96, 105> LookAtControllerID; + UpdateField<int32, 96, 106> PerksVendorItemID; + UpdateField<ObjectGuid, 96, 107> GuildGUID; + UpdateField<ObjectGuid, 96, 108> SkinningOwnerGUID; + UpdateField<int32, 96, 109> FlightCapabilityID; + UpdateField<float, 96, 110> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use + UpdateField<uint32, 96, 111> CurrentAreaID; + UpdateField<ObjectGuid, 96, 112> ComboTarget; + UpdateFieldArray<uint32, 2, 113, 114> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 10, 130, 131> Power; - UpdateFieldArray<int32, 10, 130, 141> MaxPower; - UpdateFieldArray<float, 10, 130, 151> PowerRegenFlatModifier; - UpdateFieldArray<float, 10, 130, 161> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 171, 172> VirtualItems; - UpdateFieldArray<uint32, 2, 175, 176> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 178, 179> Stats; - UpdateFieldArray<int32, 4, 178, 183> StatPosBuff; - UpdateFieldArray<int32, 4, 178, 187> StatNegBuff; - UpdateFieldArray<int32, 4, 178, 191> StatSupportBuff; - UpdateFieldArray<int32, 7, 195, 196> Resistances; - UpdateFieldArray<int32, 7, 195, 203> BonusResistanceMods; - UpdateFieldArray<int32, 7, 195, 210> ManaCostModifier; + UpdateFieldArray<float, 10, 116, 117> PowerRegenFlatModifier; + UpdateFieldArray<float, 10, 116, 127> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<int32, 10, 116, 137> Power; + UpdateFieldArray<int32, 10, 116, 147> MaxPower; + UpdateFieldArray<float, 10, 116, 157> ModPowerRegen; // Applies to power regen only if expansion < 2, hidden from lua + UpdateFieldArray<UF::VisibleItem, 3, 167, 168> VirtualItems; + UpdateFieldArray<uint32, 2, 171, 172> AttackRoundBaseTime; + UpdateFieldArray<int32, 5, 174, 175> Stats; + UpdateFieldArray<int32, 5, 174, 180> StatPosBuff; + UpdateFieldArray<int32, 5, 174, 185> StatNegBuff; + UpdateFieldArray<int32, 7, 190, 191> Resistances; + UpdateFieldArray<int32, 7, 190, 198> PowerCostModifier; + UpdateFieldArray<float, 7, 190, 205> PowerCostMultiplier; + UpdateFieldArray<int32, 7, 212, 213> ResistanceBuffModsPositive; + UpdateFieldArray<int32, 7, 212, 220> ResistanceBuffModsNegative; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<int64, 0, 1> EndTime; UpdateField<int32, 0, 2> QuestID; UpdateField<uint32, 0, 3> StateFlags; - UpdateField<uint32, 0, 4> ObjectiveFlags; - UpdateFieldArray<int16, 24, 5, 6> ObjectiveProgress; + UpdateFieldArray<uint16, 24, 4, 5> 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<int32, 0, 1> SpellID; - UpdateField<int32, 0, 2> Charges; - UpdateField<uint32, 0, 3> Flags; - UpdateField<uint32, 0, 4> StartTime; - UpdateField<uint32, 0, 5> EndTime; - UpdateField<uint32, 0, 6> NextChargeTime; - UpdateField<uint8, 0, 7> MaxCharges; + UpdateField<int32, 0, 2> ItemID; + UpdateField<int32, 0, 3> Charges; + UpdateField<uint32, 0, 4> Flags; + UpdateField<uint32, 0, 5> StartTime; + UpdateField<uint32, 0, 6> EndTime; + UpdateField<uint32, 0, 7> NextChargeTime; + UpdateField<uint8, 0, 8> 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<std::string, 5, 0, 1> 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<int32, 0, 1> EmblemStyle; - UpdateField<int32, 0, 2> EmblemColor; - UpdateField<int32, 0, 3> BorderStyle; - UpdateField<int32, 0, 4> BorderColor; - UpdateField<int32, 0, 5> 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<bool, 0, 1> HasQuestSession; - UpdateField<bool, 0, 2> HasLevelLink; - DynamicUpdateField<UF::ChrCustomizationChoice, 0, 3> Customizations; - DynamicUpdateField<UF::ChrCustomizationChoice, 0, 4> QaCustomizations; - DynamicUpdateField<UF::QuestLog, 0, 5> QuestSessionQuestLog; - DynamicUpdateField<UF::ArenaCooldown, 0, 6> ArenaCooldowns; - DynamicUpdateField<int32, 0, 7> VisualItemReplacements; - UpdateField<ObjectGuid, 0, 8> DuelArbiter; - UpdateField<ObjectGuid, 0, 9> WowAccount; - UpdateField<ObjectGuid, 0, 10> BnetAccount; - UpdateField<uint64, 0, 11> GuildClubMemberID; - UpdateField<ObjectGuid, 0, 12> LootTargetGUID; - UpdateField<uint32, 0, 13> PlayerFlags; - UpdateField<uint32, 0, 14> PlayerFlagsEx; - UpdateField<uint32, 0, 15> GuildRankID; - UpdateField<uint32, 0, 16> GuildDeleteDate; - UpdateField<int32, 0, 17> GuildLevel; - UpdateField<uint8, 0, 18> NativeSex; - UpdateField<uint8, 0, 19> Inebriation; - UpdateField<uint8, 0, 20> PvpTitle; - UpdateField<uint8, 0, 21> ArenaFaction; - UpdateField<uint32, 0, 22> DuelTeam; - UpdateField<int32, 0, 23> GuildTimeStamp; - UpdateField<int32, 0, 24> PlayerTitle; - UpdateField<int32, 0, 25> FakeInebriation; - UpdateField<uint32, 0, 26> VirtualPlayerRealm; - UpdateField<uint32, 0, 27> CurrentSpecID; - UpdateField<int32, 0, 28> TaxiMountAnimKitID; - UpdateField<uint8, 0, 29> CurrentBattlePetBreedQuality; - UpdateField<int32, 0, 30> HonorLevel; - UpdateField<int64, 0, 31> LogoutTime; - UpdateField<std::string, 32, 33> Name; - UpdateField<int32, 32, 34> Field_B0; - UpdateField<int32, 32, 35> Field_B4; - UpdateField<int32, 32, 36> CurrentBattlePetSpeciesID; - UpdateField<UF::CTROptions, 32, 37> CtrOptions; - UpdateField<int32, 32, 38> CovenantID; - UpdateField<int32, 32, 39> SoulbindID; - UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40> DungeonScore; - OptionalUpdateField<UF::DeclinedNames, 32, 41> DeclinedNames; - UpdateField<UF::CustomTabardInfo, 32, 42> PersonalTabard; - UpdateFieldArray<uint8, 2, 43, 44> PartyType; - UpdateFieldArray<UF::QuestLog, 175, 46, 47> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 222, 223> VisibleItems; - UpdateFieldArray<float, 6, 242, 243> AvgItemLevel; - UpdateFieldArray<uint32, 19, 249, 250> Field_3120; + DynamicUpdateField<UF::ChrCustomizationChoice, 0, 1> Customizations; + DynamicUpdateField<UF::ArenaCooldown, 0, 2> ArenaCooldowns; + DynamicUpdateField<int32, 0, 3> VisualItemReplacements; + UpdateField<ObjectGuid, 0, 4> DuelArbiter; + UpdateField<ObjectGuid, 0, 5> WowAccount; + UpdateField<ObjectGuid, 0, 6> LootTargetGUID; + UpdateField<uint32, 0, 7> PlayerFlags; + UpdateField<uint32, 0, 8> PlayerFlagsEx; + UpdateField<uint32, 0, 9> GuildRankID; + UpdateField<uint32, 0, 10> GuildDeleteDate; + UpdateField<int32, 0, 11> GuildLevel; + UpdateField<uint8, 0, 12> NumBankSlots; + UpdateField<uint8, 0, 13> NativeSex; + UpdateField<uint8, 0, 14> Inebriation; + UpdateField<uint8, 0, 15> PvpTitle; + UpdateField<uint8, 0, 16> ArenaFaction; + UpdateField<uint8, 0, 17> PvpRank; + UpdateField<int32, 0, 18> Field_88; + UpdateField<uint32, 0, 19> DuelTeam; + UpdateField<int32, 0, 20> GuildTimeStamp; + UpdateField<int32, 0, 21> PlayerTitle; + UpdateField<int32, 0, 22> FakeInebriation; + UpdateField<uint32, 0, 23> VirtualPlayerRealm; + UpdateField<uint32, 0, 24> CurrentSpecID; + UpdateField<int32, 0, 25> TaxiMountAnimKitID; + UpdateField<uint8, 0, 26> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 27> HonorLevel; + UpdateField<int64, 0, 28> LogoutTime; + UpdateField<int32, 0, 29> CurrentBattlePetSpeciesID; + UpdateField<ObjectGuid, 0, 30> BnetAccount; // For telemetry + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 0, 31> DungeonScore; + UpdateFieldArray<uint8, 2, 32, 33> PartyType; + UpdateFieldArray<UF::QuestLog, 25, 35, 36> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 61, 62> VisibleItems; + UpdateFieldArray<float, 6, 81, 82> AvgItemLevel; + UpdateFieldArray<uint32, 19, 88, 89> Field_3120; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -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<int32> 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<ObjectGuid, 0, 1> Field_0; - UpdateField<int32, 0, 2> 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<ObjectGuid, 0, 1> Owner; - UpdateFieldArray<uint64, 875, 2, 3> QuestCompleted; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - void ClearChangesMask(); -}; - -struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3> -{ - UpdateField<int32, 0, 1> QuestID; - UpdateField<uint32, 0, 2> ReplayTime; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, 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<uint64, -1, 0> Field_0; - UpdateField<ObjectGuid, -1, 1> ItemGUID; - UpdateField<ObjectGuid, -1, 2> OwnerGUID; - UpdateField<int32, -1, 3> ItemID; - UpdateField<uint32, -1, 4> Quantity; - UpdateField<int32, -1, 5> ReagentQuality; - OptionalUpdateField<uint8, -1, 6> 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<UF::CraftingOrderItem, 0, 1> Reagents; - UpdateField<int32, 0, 2> Field_0; - UpdateField<uint64, 0, 3> OrderID; - UpdateField<int32, 0, 4> SkillLineAbilityID; - UpdateField<uint8, 5, 6> OrderState; - UpdateField<uint8, 5, 7> OrderType; - UpdateField<uint8, 5, 8> MinQuality; - UpdateField<int64, 5, 9> ExpirationTime; - UpdateField<int64, 10, 11> ClaimEndTime; - UpdateField<int64, 10, 12> TipAmount; - UpdateField<int64, 10, 13> ConsortiumCut; - UpdateField<uint32, 10, 14> Flags; - UpdateField<ObjectGuid, 15, 16> CustomerGUID; - UpdateField<ObjectGuid, 15, 17> CustomerAccountGUID; - UpdateField<ObjectGuid, 15, 18> CrafterGUID; - UpdateField<ObjectGuid, 15, 19> PersonalCrafterGUID; - UpdateField<std::string, 20, 21> CustomerNotes; - OptionalUpdateField<UF::CraftingOrderItem, 20, 22> OutputItem; - OptionalUpdateField<WorldPackets::Item::ItemInstance, 20, 23> 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<WorldPackets::Item::ItemEnchantData, -1, 0> Enchantments; - DynamicUpdateField<WorldPackets::Item::ItemGemData, -1, 1> Gems; - UpdateField<UF::CraftingOrderData, -1, 2> Data; - OptionalUpdateField<WorldPackets::Item::ItemInstance, -1, 3> 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<int32, 0, 1> ProfessionID; - UpdateField<uint32, 0, 2> 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<int32, 0, 1> TargetType; - UpdateField<int32, 0, 2> TargetID; - UpdateField<int32, 0, 3> CollectableSourceInfoID; - - void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; - void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; - void ClearChangesMask(); -}; - struct Research : public IsUpdateFieldStructureTag { int16 ResearchProjectID; @@ -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<bool, 0, 1> BackpackAutoSortDisabled; - UpdateField<bool, 0, 2> BackpackSellJunkDisabled; - UpdateField<bool, 0, 3> BankAutoSortDisabled; - UpdateField<bool, 0, 4> SortBagsRightToLeft; - UpdateField<bool, 0, 5> InsertItemsLeftToRight; - UpdateField<bool, 0, 6> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 36, 37> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 38, 39> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 40, 41> Research; - DynamicUpdateField<uint64, 0, 7> KnownTitles; - DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; - DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; - DynamicUpdateField<int32, 0, 11> Heirlooms; - DynamicUpdateField<uint32, 0, 12> HeirloomFlags; - DynamicUpdateField<int32, 0, 13> Toys; - DynamicUpdateField<uint32, 0, 14> ToyFlags; - DynamicUpdateField<uint32, 0, 15> Transmog; - DynamicUpdateField<int32, 0, 16> ConditionalTransmog; - DynamicUpdateField<int32, 0, 17> SelfResSpells; - DynamicUpdateField<uint32, 0, 18> RuneforgePowers; - DynamicUpdateField<uint32, 0, 19> TransmogIllusions; - DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel; - DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel; - DynamicUpdateField<UF::MawPower, 0, 23> MawPowers; - DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration; - DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression; - DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests; - DynamicUpdateField<UF::QuestLog, 0, 27> TaskQuests; - DynamicUpdateField<int32, 0, 28> DisabledSpells; - DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; - DynamicUpdateField<UF::CategoryCooldownMod, 32, 33> CategoryCooldownMods; - DynamicUpdateField<UF::WeeklySpellUse, 32, 34> WeeklySpellUses; - DynamicUpdateField<UF::CollectableSourceTrackedData, 32, 35> TrackedCollectableSources; - DynamicUpdateField<UF::PVPInfo, 0, 8> PvpInfo; - DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; - UpdateField<ObjectGuid, 32, 42> FarsightObject; - UpdateField<ObjectGuid, 32, 43> SummonedBattlePetGUID; - UpdateField<uint64, 32, 44> Coinage; - UpdateField<int32, 32, 45> XP; - UpdateField<int32, 32, 46> NextLevelXP; - UpdateField<int32, 32, 47> TrialXP; - UpdateField<UF::SkillInfo, 32, 48> Skill; - UpdateField<int32, 32, 49> CharacterPoints; - UpdateField<int32, 32, 50> MaxTalentTiers; - UpdateField<uint32, 32, 51> TrackCreatureMask; - UpdateField<float, 32, 52> MainhandExpertise; - UpdateField<float, 32, 53> OffhandExpertise; - UpdateField<float, 32, 54> RangedExpertise; - UpdateField<float, 32, 55> CombatRatingExpertise; - UpdateField<float, 32, 56> BlockPercentage; - UpdateField<float, 32, 57> DodgePercentage; - UpdateField<float, 32, 58> DodgePercentageFromAttribute; - UpdateField<float, 32, 59> ParryPercentage; - UpdateField<float, 32, 60> ParryPercentageFromAttribute; - UpdateField<float, 32, 61> CritPercentage; - UpdateField<float, 32, 62> RangedCritPercentage; - UpdateField<float, 32, 63> OffhandCritPercentage; - UpdateField<float, 32, 64> SpellCritPercentage; - UpdateField<int32, 32, 65> ShieldBlock; - UpdateField<float, 32, 66> ShieldBlockCritPercentage; - UpdateField<float, 32, 67> Mastery; - UpdateField<float, 32, 68> Speed; - UpdateField<float, 32, 69> Avoidance; - UpdateField<float, 70, 71> Sturdiness; - UpdateField<int32, 70, 72> Versatility; - UpdateField<float, 70, 73> VersatilityBonus; - UpdateField<float, 70, 74> PvpPowerDamage; - UpdateField<float, 70, 75> PvpPowerHealing; - UpdateField<int32, 70, 76> ModHealingDonePos; - UpdateField<float, 70, 77> ModHealingPercent; - UpdateField<float, 70, 78> ModPeriodicHealingDonePercent; - UpdateField<float, 70, 79> ModSpellPowerPercent; - UpdateField<float, 70, 80> ModResiliencePercent; - UpdateField<float, 70, 81> OverrideSpellPowerByAPPercent; - UpdateField<float, 70, 82> OverrideAPBySpellPowerPercent; - UpdateField<int32, 70, 83> ModTargetResistance; - UpdateField<int32, 70, 84> ModTargetPhysicalResistance; - UpdateField<uint32, 70, 85> LocalFlags; - UpdateField<uint8, 70, 86> GrantableLevels; - UpdateField<uint8, 70, 87> MultiActionBars; - UpdateField<uint8, 70, 88> LifetimeMaxRank; - UpdateField<uint8, 70, 89> NumRespecs; - UpdateField<uint32, 70, 90> PvpMedals; - UpdateField<uint16, 70, 91> TodayHonorableKills; - UpdateField<uint16, 70, 92> YesterdayHonorableKills; - UpdateField<uint32, 70, 93> LifetimeHonorableKills; - UpdateField<int32, 70, 94> WatchedFactionIndex; - UpdateField<int32, 70, 95> MaxLevel; - UpdateField<int32, 70, 96> ScalingPlayerLevelDelta; - UpdateField<int32, 70, 97> MaxCreatureScalingLevel; - UpdateField<int32, 70, 98> PetSpellPower; - UpdateField<float, 70, 99> UiHitModifier; - UpdateField<float, 70, 100> UiSpellHitModifier; - UpdateField<int32, 70, 101> HomeRealmTimeOffset; - UpdateField<float, 102, 103> ModPetHaste; - UpdateField<int8, 102, 104> JailersTowerLevelMax; - UpdateField<int8, 102, 105> JailersTowerLevel; - UpdateField<uint8, 102, 106> LocalRegenFlags; - UpdateField<uint8, 102, 107> AuraVision; - UpdateField<uint8, 102, 108> NumBackpackSlots; - UpdateField<int32, 102, 109> OverrideSpellsID; - UpdateField<uint16, 102, 110> LootSpecID; - UpdateField<uint32, 102, 111> OverrideZonePVPType; - UpdateField<int32, 102, 112> Honor; - UpdateField<int32, 102, 113> HonorNextLevel; - UpdateField<int32, 102, 114> PerksProgramCurrency; - UpdateField<uint8, 102, 115> NumBankSlots; +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1525> +{ + UpdateField<bool, 0, 1> SortBagsRightToLeft; + UpdateField<bool, 0, 2> InsertItemsLeftToRight; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 20, 21> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 22, 23> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 24, 25> Research; + DynamicUpdateField<uint64, 0, 3> KnownTitles; + DynamicUpdateField<int32, 0, 4> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 5> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 6> Field_1000; + DynamicUpdateField<int32, 0, 7> Heirlooms; + DynamicUpdateField<uint32, 0, 8> HeirloomFlags; + DynamicUpdateField<int32, 0, 9> Toys; + DynamicUpdateField<uint32, 0, 10> Transmog; + DynamicUpdateField<int32, 0, 11> ConditionalTransmog; + DynamicUpdateField<int32, 0, 12> SelfResSpells; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 14> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 15> SpellFlatModByLabel; + DynamicUpdateField<UF::QuestLog, 0, 16> TaskQuests; + DynamicUpdateField<UF::CategoryCooldownMod, 0, 18> CategoryCooldownMods; + DynamicUpdateField<UF::WeeklySpellUse, 0, 19> WeeklySpellUses; + DynamicUpdateField<UF::CharacterRestriction, 0, 13> CharacterRestrictions; + DynamicUpdateField<UF::TraitConfig, 0, 17> TraitConfigs; + UpdateField<ObjectGuid, 0, 26> FarsightObject; + UpdateField<ObjectGuid, 0, 27> SummonedBattlePetGUID; + UpdateField<uint64, 0, 28> Coinage; + UpdateField<int32, 0, 29> XP; + UpdateField<int32, 0, 30> NextLevelXP; + UpdateField<int32, 0, 31> TrialXP; + UpdateField<UF::SkillInfo, 0, 32> Skill; + UpdateField<int32, 0, 33> CharacterPoints; + UpdateField<int32, 0, 34> MaxTalentTiers; + UpdateField<uint32, 0, 35> TrackCreatureMask; + UpdateField<float, 0, 36> MainhandExpertise; + UpdateField<float, 0, 37> OffhandExpertise; + UpdateField<float, 38, 39> RangedExpertise; + UpdateField<float, 38, 40> CombatRatingExpertise; + UpdateField<float, 38, 41> BlockPercentage; + UpdateField<float, 38, 42> DodgePercentage; + UpdateField<float, 38, 43> DodgePercentageFromAttribute; + UpdateField<float, 38, 44> ParryPercentage; + UpdateField<float, 38, 45> ParryPercentageFromAttribute; + UpdateField<float, 38, 46> CritPercentage; + UpdateField<float, 38, 47> RangedCritPercentage; + UpdateField<float, 38, 48> OffhandCritPercentage; + UpdateField<int32, 38, 49> ShieldBlock; + UpdateField<float, 38, 50> ShieldBlockCritPercentage; + UpdateField<float, 38, 51> Mastery; + UpdateField<float, 38, 52> Speed; + UpdateField<float, 38, 53> Avoidance; + UpdateField<float, 38, 54> Sturdiness; + UpdateField<int32, 38, 55> Versatility; + UpdateField<float, 38, 56> VersatilityBonus; + UpdateField<float, 38, 57> PvpPowerDamage; + UpdateField<float, 38, 58> PvpPowerHealing; + UpdateField<int32, 38, 59> ModHealingDonePos; + UpdateField<float, 38, 60> ModHealingPercent; + UpdateField<float, 38, 61> ModHealingDonePercent; + UpdateField<float, 38, 62> ModPeriodicHealingDonePercent; + UpdateField<float, 38, 63> ModSpellPowerPercent; + UpdateField<float, 38, 64> ModResiliencePercent; + UpdateField<float, 38, 65> OverrideSpellPowerByAPPercent; + UpdateField<float, 38, 66> OverrideAPBySpellPowerPercent; + UpdateField<int32, 38, 67> ModTargetResistance; + UpdateField<int32, 38, 68> ModTargetPhysicalResistance; + UpdateField<uint32, 38, 69> LocalFlags; + UpdateField<uint8, 70, 71> GrantableLevels; + UpdateField<uint8, 70, 72> MultiActionBars; + UpdateField<uint8, 70, 73> LifetimeMaxRank; + UpdateField<uint8, 70, 74> NumRespecs; + UpdateField<int32, 70, 75> AmmoID; + UpdateField<uint32, 70, 76> PvpMedals; + UpdateField<uint16, 70, 77> TodayHonorableKills; + UpdateField<uint16, 70, 78> TodayDishonorableKills; + UpdateField<uint16, 70, 79> YesterdayHonorableKills; + UpdateField<uint16, 70, 80> YesterdayDishonorableKills; + UpdateField<uint16, 70, 81> LastWeekHonorableKills; + UpdateField<uint16, 70, 82> LastWeekDishonorableKills; + UpdateField<uint16, 70, 83> ThisWeekHonorableKills; + UpdateField<uint16, 70, 84> ThisWeekDishonorableKills; + UpdateField<uint32, 70, 85> ThisWeekContribution; + UpdateField<uint32, 70, 86> LifetimeHonorableKills; + UpdateField<uint32, 70, 87> LifetimeDishonorableKills; + UpdateField<uint32, 70, 88> Field_F24; + UpdateField<uint32, 70, 89> YesterdayContribution; + UpdateField<uint32, 70, 90> LastWeekContribution; + UpdateField<uint32, 70, 91> LastWeekRank; + UpdateField<int32, 70, 92> WatchedFactionIndex; + UpdateField<int32, 70, 93> MaxLevel; + UpdateField<int32, 70, 94> ScalingPlayerLevelDelta; + UpdateField<int32, 70, 95> MaxCreatureScalingLevel; + UpdateField<int32, 70, 96> PetSpellPower; + UpdateField<float, 70, 97> UiHitModifier; + UpdateField<float, 70, 98> UiSpellHitModifier; + UpdateField<int32, 70, 99> HomeRealmTimeOffset; + UpdateField<float, 70, 100> ModPetHaste; + UpdateField<uint8, 70, 101> LocalRegenFlags; + UpdateField<uint8, 102, 103> AuraVision; + UpdateField<uint8, 102, 104> NumBackpackSlots; + UpdateField<int32, 102, 105> OverrideSpellsID; + UpdateField<int32, 102, 106> LfgBonusFactionID; + UpdateField<uint16, 102, 107> LootSpecID; + UpdateField<uint32, 102, 108> OverrideZonePVPType; + UpdateField<int32, 102, 109> Honor; + UpdateField<int32, 102, 110> HonorNextLevel; + UpdateField<int32, 102, 111> Field_F74; + UpdateField<int32, 102, 112> PvpTierMaxFromWins; + UpdateField<int32, 102, 113> PvpLastWeeksTierMaxFromWins; + UpdateField<uint8, 102, 114> PvpRankProgress; + UpdateField<int32, 102, 115> PerksProgramCurrency; UpdateField<UF::ResearchHistory, 102, 116> ResearchHistory; UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 117> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 102, 119> Field_1410; - OptionalUpdateField<UF::QuestSession, 102, 118> QuestSession; - UpdateField<int32, 102, 120> UiChromieTimeExpansionID; - UpdateField<int32, 102, 121> TransportServerTime; - UpdateField<uint32, 102, 122> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 102, 123> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 124> DungeonScore; - UpdateField<uint32, 102, 125> ActiveCombatTraitConfigID; - UpdateField<int32, 102, 126> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 102, 127> ItemUpgradeHighFingerItemID; - UpdateField<float, 102, 128> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 102, 129> ItemUpgradeHighTrinketItemID; - UpdateField<float, 102, 130> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 102, 131> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 102, 132> PetStable; - UpdateField<uint8, 102, 133> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 134, 135> InvSlots; - UpdateFieldArray<uint64, 240, 362, 363> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 603, 604> RestInfo; - UpdateFieldArray<int32, 7, 606, 607> ModDamageDonePos; - UpdateFieldArray<int32, 7, 606, 614> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 606, 621> ModDamageDonePercent; - UpdateFieldArray<float, 7, 606, 628> ModHealingDonePercent; - UpdateFieldArray<float, 3, 635, 636> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 635, 639> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 642, 643> BuybackPrice; - UpdateFieldArray<int64, 12, 642, 655> BuybackTimestamp; - UpdateFieldArray<int32, 32, 667, 668> CombatRatings; - UpdateFieldArray<uint32, 4, 700, 701> NoReagentCostMask; - UpdateFieldArray<int32, 2, 705, 706> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 708, 709> BagSlotFlags; - UpdateFieldArray<uint32, 7, 714, 715> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 722, 723> QuestCompleted; - UpdateFieldArray<float, 17, 1598, 1599> ItemUpgradeHighWatermark; + UpdateField<int32, 102, 118> TransportServerTime; + UpdateField<uint32, 102, 119> ActiveCombatTraitConfigID; + UpdateField<uint8, 102, 120> GlyphsEnabled; + UpdateField<uint8, 102, 121> LfgRoles; + OptionalUpdateField<UF::StableInfo, 102, 122> PetStable; + UpdateField<uint8, 102, 123> NumStableSlots; + UpdateFieldArray<ObjectGuid, 141, 124, 125> InvSlots; + UpdateFieldArray<uint32, 2, 266, 267> TrackResourceMask; + UpdateFieldArray<float, 7, 269, 270> SpellCritPercentage; + UpdateFieldArray<int32, 7, 269, 277> ModDamageDonePos; + UpdateFieldArray<int32, 7, 269, 284> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 269, 291> ModDamageDonePercent; + UpdateFieldArray<uint64, 240, 298, 299> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 539, 540> RestInfo; + UpdateFieldArray<float, 3, 542, 543> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 542, 546> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 549, 550> BuybackPrice; + UpdateFieldArray<int64, 12, 549, 562> BuybackTimestamp; + UpdateFieldArray<int32, 32, 574, 575> CombatRatings; + UpdateFieldArray<UF::PVPInfo, 7, 607, 608> PvpInfo; + UpdateFieldArray<uint32, 4, 615, 616> NoReagentCostMask; + UpdateFieldArray<int32, 2, 620, 621> ProfessionSkillLine; + UpdateFieldArray<uint32, 4, 623, 624> BagSlotFlags; + UpdateFieldArray<uint32, 7, 628, 629> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 636, 637> QuestCompleted; + UpdateFieldArray<uint32, 6, 1512, 1513> GlyphSlots; + UpdateFieldArray<uint32, 6, 1512, 1519> Glyphs; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; @@ -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<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<int32, 0, 2> EnableDoodadSets; @@ -1040,24 +775,19 @@ struct GameObjectData : public IsUpdateFieldStructureTag, public HasChangesMask< UpdateField<uint32, 0, 6> StateSpellVisualID; UpdateField<uint32, 0, 7> SpawnTrackingStateAnimID; UpdateField<uint32, 0, 8> SpawnTrackingStateAnimKitID; - UpdateField<uint32, 0, 9> StateWorldEffectsQuestObjectiveID; - UpdateField<ObjectGuid, 0, 10> CreatedBy; - UpdateField<ObjectGuid, 0, 11> GuildGUID; - UpdateField<uint32, 0, 12> Flags; + UpdateField<ObjectGuid, 0, 9> CreatedBy; + UpdateField<ObjectGuid, 0, 10> GuildGUID; + UpdateField<uint32, 0, 11> Flags; struct FlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateField<QuaternionData, 0, 13> ParentRotation; - UpdateField<int32, 0, 14> FactionTemplate; + UpdateField<QuaternionData, 0, 12> ParentRotation; + UpdateField<int32, 0, 13> FactionTemplate; + UpdateField<int32, 0, 14> Level; UpdateField<int8, 0, 15> State; struct StateTag : ViewerDependentValueTag<int8> {}; UpdateField<int8, 0, 16> TypeID; UpdateField<uint8, 0, 17> PercentHealth; UpdateField<uint32, 0, 18> ArtKit; UpdateField<uint32, 0, 19> CustomParam; - UpdateField<int32, 0, 20> Level; - UpdateField<uint32, 0, 21> AnimGroupInstance; - UpdateField<uint32, 0, 22> UiWidgetItemID; - UpdateField<uint32, 0, 23> UiWidgetItemQuality; - UpdateField<uint32, 0, 24> UiWidgetItemUnknown1000; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, GameObject const* owner, Player const* receiver) const; @@ -1069,7 +799,7 @@ struct DynamicObjectData : public IsUpdateFieldStructureTag, public HasChangesMa { UpdateField<ObjectGuid, 0, 1> Caster; UpdateField<uint8, 0, 2> Type; - UpdateField<UF::SpellCastVisual, 0, 3> SpellVisual; + UpdateField<int32, 0, 3> SpellXSpellVisualID; UpdateField<int32, 0, 4> SpellID; UpdateField<float, 0, 5> Radius; UpdateField<uint32, 0, 6> 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<UF::ChrCustomizationChoice, 0, 1> Customizations; UpdateField<uint32, 0, 2> DynamicFlags; @@ -1093,8 +823,7 @@ struct CorpseData : public IsUpdateFieldStructureTag, public HasChangesMask<33> UpdateField<uint8, 0, 9> Class; UpdateField<uint32, 0, 10> Flags; UpdateField<int32, 0, 11> FactionTemplate; - UpdateField<uint32, 0, 12> StateSpellVisualKitID; - UpdateFieldArray<uint32, 19, 13, 14> Items; + UpdateFieldArray<uint32, 19, 12, 13> Items; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Corpse const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<bool, 0, 1> HeightIgnoresScale; - UpdateField<bool, 0, 2> Field_261; - UpdateField<UF::ScaleCurve, 0, 3> OverrideScaleCurve; - UpdateField<UF::ScaleCurve, 0, 4> ExtraScaleCurve; - UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveX; - UpdateField<UF::ScaleCurve, 0, 6> OverrideMoveCurveY; - UpdateField<UF::ScaleCurve, 0, 7> OverrideMoveCurveZ; - UpdateField<ObjectGuid, 0, 8> Caster; - UpdateField<uint32, 0, 9> Duration; - UpdateField<uint32, 0, 10> TimeToTarget; - UpdateField<uint32, 0, 11> TimeToTargetScale; - UpdateField<uint32, 0, 12> TimeToTargetExtraScale; - UpdateField<uint32, 0, 13> TimeToTargetPos; // Linked to m_overrideMoveCurve - UpdateField<int32, 0, 14> SpellID; - UpdateField<int32, 0, 15> SpellForVisuals; - UpdateField<UF::SpellCastVisual, 0, 16> SpellVisual; - UpdateField<float, 0, 17> BoundsRadius2D; - UpdateField<uint32, 0, 18> DecalPropertiesID; - UpdateField<ObjectGuid, 0, 19> CreatingEffectGUID; - UpdateField<uint32, 0, 20> NumUnitsInside; - UpdateField<uint32, 0, 21> NumPlayersInside; // When not 0 this causes SpellVisualEvent 14 to trigger, playing alternate visuals, typically used by "SOAK THIS" areatriggers - UpdateField<ObjectGuid, 0, 22> OrbitPathTarget; - UpdateField<TaggedPosition<Position::XYZ>, 0, 23> RollPitchYaw; - UpdateField<int32, 0, 24> PositionalSoundKitID; - UpdateField<UF::VisualAnim, 0, 25> VisualAnim; +struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<20> +{ + UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve; + UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve; + UpdateField<UF::ScaleCurve, 0, 3> OverrideMoveCurveX; + UpdateField<UF::ScaleCurve, 0, 4> OverrideMoveCurveY; + UpdateField<UF::ScaleCurve, 0, 5> OverrideMoveCurveZ; + UpdateField<ObjectGuid, 0, 6> Caster; + UpdateField<uint32, 0, 7> Duration; + UpdateField<uint32, 0, 8> TimeToTarget; + UpdateField<uint32, 0, 9> TimeToTargetScale; + UpdateField<uint32, 0, 10> TimeToTargetExtraScale; + UpdateField<uint32, 0, 11> TimeToTargetPos; // Linked to m_overrideMoveCurve + UpdateField<int32, 0, 12> SpellID; + UpdateField<int32, 0, 13> SpellForVisuals; + UpdateField<int32, 0, 14> SpellXSpellVisualID; + UpdateField<float, 0, 15> BoundsRadius2D; + UpdateField<uint32, 0, 16> DecalPropertiesID; + UpdateField<ObjectGuid, 0, 17> CreatingEffectGUID; + UpdateField<ObjectGuid, 0, 18> OrbitPathTarget; + UpdateField<UF::VisualAnim, 0, 19> VisualAnim; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> 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<uint32> {}; 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<bool, 0, 1> DontPlayBroadcastTextSounds; - UpdateField<std::vector<UF::ConversationLine>, 0, 2> Lines; - DynamicUpdateField<UF::ConversationActor, 0, 3> Actors; - UpdateField<int32, 0, 4> LastLineEndTime; + UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines; + DynamicUpdateField<UF::ConversationActor, 0, 2> Actors; + UpdateField<int32, 0, 3> LastLineEndTime; struct LastLineEndTimeTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 0, 5> Progress; - UpdateField<uint32, 0, 6> Flags; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const; |
