diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-05-08 20:55:51 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-05-08 20:55:51 +0200 |
| commit | 468a06baf046b716305ee665e3cfd93c80e99457 (patch) | |
| tree | c44fd1da4d426fa0abca9d5a96d7030dea7102bf /src/server/game/Entities/Object | |
| parent | 83f4763b25891c9fe6c7f01b75cdf0f4ef66fc9a (diff) | |
Core: Update to 10.2.7
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 470 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 332 |
2 files changed, 444 insertions, 358 deletions
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index e05e49e5903..924820bd8ce 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -989,8 +989,6 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << int32(ScalingLevelMax); data << int32(ScalingLevelDelta); data << int32(ScalingFactionGroup); - data << int32(ScalingHealthItemLevelCurveID); - data << int32(ScalingDamageItemLevelCurveID); data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); for (uint32 i = 0; i < 3; ++i) { @@ -1118,6 +1116,8 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(ChannelObjects.size()); data << int32(FlightCapabilityID); data << float(GlideEventSpeedDivisor); + data << uint32(Field_308); + data << uint32(Field_30C); data << uint32(SilencedSchoolMask); data << uint32(CurrentAreaID); data << NameplateAttachToGUID; @@ -1137,7 +1137,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, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1145,16 +1145,16 @@ 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, 0x0F004000u, 0xFFF08000u, 0x000000FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }; + allowedMaskForTarget |= { 0x00000000u, 0x0F000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFC01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1380,333 +1380,333 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[41]) { - data << int32(ScalingHealthItemLevelCurveID); + data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); } if (changesMask[42]) { - data << int32(ScalingDamageItemLevelCurveID); + data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[43]) { - data << int32(ViewerDependentValue<FactionTemplateTag>::GetValue(this, owner, receiver)); + data << uint32(Flags2); } if (changesMask[44]) { - data << uint32(ViewerDependentValue<FlagsTag>::GetValue(this, owner, receiver)); + data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); } if (changesMask[45]) { - data << uint32(Flags2); + data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); } if (changesMask[46]) { - data << uint32(ViewerDependentValue<Flags3Tag>::GetValue(this, owner, receiver)); + data << uint32(RangedAttackRoundBaseTime); } if (changesMask[47]) { - data << uint32(ViewerDependentValue<AuraStateTag>::GetValue(this, owner, receiver)); + data << float(BoundingRadius); } if (changesMask[48]) { - data << uint32(RangedAttackRoundBaseTime); + data << float(CombatReach); } if (changesMask[49]) { - data << float(BoundingRadius); + data << float(DisplayScale); } if (changesMask[50]) { - data << float(CombatReach); + data << int32(CreatureFamily); } if (changesMask[51]) { - data << float(DisplayScale); + data << int32(CreatureType); } if (changesMask[52]) { - data << int32(CreatureFamily); + data << int32(NativeDisplayID); } if (changesMask[53]) { - data << int32(CreatureType); + data << float(NativeXDisplayScale); } if (changesMask[54]) { - data << int32(NativeDisplayID); + data << int32(MountDisplayID); } if (changesMask[55]) { - data << float(NativeXDisplayScale); + data << int32(CosmeticMountDisplayID); } if (changesMask[56]) { - data << int32(MountDisplayID); + data << float(MinDamage); } if (changesMask[57]) { - data << int32(CosmeticMountDisplayID); + data << float(MaxDamage); } if (changesMask[58]) { - data << float(MinDamage); + data << float(MinOffHandDamage); } if (changesMask[59]) { - data << float(MaxDamage); + data << float(MaxOffHandDamage); } if (changesMask[60]) { - data << float(MinOffHandDamage); + data << uint8(StandState); } if (changesMask[61]) { - data << float(MaxOffHandDamage); + data << uint8(PetTalentPoints); } if (changesMask[62]) { - data << uint8(StandState); + data << uint8(VisFlags); } if (changesMask[63]) { - data << uint8(PetTalentPoints); + data << uint8(AnimTier); } } if (changesMask[64]) { if (changesMask[65]) { - data << uint8(VisFlags); + data << uint32(PetNumber); } if (changesMask[66]) { - data << uint8(AnimTier); + data << uint32(PetNameTimestamp); } if (changesMask[67]) { - data << uint32(PetNumber); + data << uint32(PetExperience); } if (changesMask[68]) { - data << uint32(PetNameTimestamp); + data << uint32(PetNextLevelExperience); } if (changesMask[69]) { - data << uint32(PetExperience); + data << float(ModCastingSpeed); } if (changesMask[70]) { - data << uint32(PetNextLevelExperience); + data << float(ModCastingSpeedNeg); } if (changesMask[71]) { - data << float(ModCastingSpeed); + data << float(ModSpellHaste); } if (changesMask[72]) { - data << float(ModCastingSpeedNeg); + data << float(ModHaste); } if (changesMask[73]) { - data << float(ModSpellHaste); + data << float(ModRangedHaste); } if (changesMask[74]) { - data << float(ModHaste); + data << float(ModHasteRegen); } if (changesMask[75]) { - data << float(ModRangedHaste); + data << float(ModTimeRate); } if (changesMask[76]) { - data << float(ModHasteRegen); + data << int32(CreatedBySpell); } if (changesMask[77]) { - data << float(ModTimeRate); + data << int32(EmoteState); } if (changesMask[78]) { - data << int32(CreatedBySpell); + data << int32(BaseMana); } if (changesMask[79]) { - data << int32(EmoteState); + data << int32(BaseHealth); } if (changesMask[80]) { - data << int32(BaseMana); + data << uint8(SheatheState); } if (changesMask[81]) { - data << int32(BaseHealth); + data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver)); } if (changesMask[82]) { - data << uint8(SheatheState); + data << uint8(PetFlags); } if (changesMask[83]) { - data << uint8(ViewerDependentValue<PvpFlagsTag>::GetValue(this, owner, receiver)); + data << uint8(ShapeshiftForm); } if (changesMask[84]) { - data << uint8(PetFlags); + data << int32(AttackPower); } if (changesMask[85]) { - data << uint8(ShapeshiftForm); + data << int32(AttackPowerModPos); } if (changesMask[86]) { - data << int32(AttackPower); + data << int32(AttackPowerModNeg); } if (changesMask[87]) { - data << int32(AttackPowerModPos); + data << float(AttackPowerMultiplier); } if (changesMask[88]) { - data << int32(AttackPowerModNeg); + data << int32(AttackPowerModSupport); } if (changesMask[89]) { - data << float(AttackPowerMultiplier); + data << int32(RangedAttackPower); } if (changesMask[90]) { - data << int32(AttackPowerModSupport); + data << int32(RangedAttackPowerModPos); } if (changesMask[91]) { - data << int32(RangedAttackPower); + data << int32(RangedAttackPowerModNeg); } if (changesMask[92]) { - data << int32(RangedAttackPowerModPos); + data << float(RangedAttackPowerMultiplier); } if (changesMask[93]) { - data << int32(RangedAttackPowerModNeg); + data << int32(RangedAttackPowerModSupport); } if (changesMask[94]) { - data << float(RangedAttackPowerMultiplier); + data << int32(MainHandWeaponAttackPower); } if (changesMask[95]) { - data << int32(RangedAttackPowerModSupport); + data << int32(OffHandWeaponAttackPower); } } if (changesMask[96]) { if (changesMask[97]) { - data << int32(MainHandWeaponAttackPower); + data << int32(RangedWeaponAttackPower); } if (changesMask[98]) { - data << int32(OffHandWeaponAttackPower); + data << int32(SetAttackSpeedAura); } if (changesMask[99]) { - data << int32(RangedWeaponAttackPower); + data << float(Lifesteal); } if (changesMask[100]) { - data << int32(SetAttackSpeedAura); + data << float(MinRangedDamage); } if (changesMask[101]) { - data << float(Lifesteal); + data << float(MaxRangedDamage); } if (changesMask[102]) { - data << float(MinRangedDamage); + data << float(ManaCostMultiplier); } if (changesMask[103]) { - data << float(MaxRangedDamage); + data << float(MaxHealthModifier); } if (changesMask[104]) { - data << float(ManaCostMultiplier); + data << float(HoverHeight); } if (changesMask[105]) { - data << float(MaxHealthModifier); + data << int32(MinItemLevelCutoff); } if (changesMask[106]) { - data << float(HoverHeight); + data << int32(MinItemLevel); } if (changesMask[107]) { - data << int32(MinItemLevelCutoff); + data << int32(MaxItemLevel); } if (changesMask[108]) { - data << int32(MinItemLevel); + data << int32(AzeriteItemLevel); } if (changesMask[109]) { - data << int32(MaxItemLevel); + data << int32(WildBattlePetLevel); } if (changesMask[110]) { - data << int32(AzeriteItemLevel); + data << int32(BattlePetCompanionExperience); } if (changesMask[111]) { - data << int32(WildBattlePetLevel); + data << uint32(BattlePetCompanionNameTimestamp); } if (changesMask[112]) { - data << int32(BattlePetCompanionExperience); + data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver)); } if (changesMask[113]) { - data << uint32(BattlePetCompanionNameTimestamp); + data << int32(ScaleDuration); } if (changesMask[114]) { - data << int32(ViewerDependentValue<InteractSpellIDTag>::GetValue(this, owner, receiver)); + data << int32(LooksLikeMountID); } if (changesMask[115]) { - data << int32(ScaleDuration); + data << int32(LooksLikeCreatureID); } if (changesMask[116]) { - data << int32(LooksLikeMountID); + data << int32(LookAtControllerID); } if (changesMask[117]) { - data << int32(LooksLikeCreatureID); + data << int32(PerksVendorItemID); } if (changesMask[118]) { - data << int32(LookAtControllerID); + data << int32(TaxiNodesID); } if (changesMask[119]) { - data << int32(PerksVendorItemID); + data << GuildGUID; } if (changesMask[120]) { - data << int32(TaxiNodesID); + data << int32(FlightCapabilityID); } if (changesMask[121]) { - data << GuildGUID; + data << float(GlideEventSpeedDivisor); } if (changesMask[122]) { - data << int32(FlightCapabilityID); + data << uint32(Field_308); } if (changesMask[123]) { - data << float(GlideEventSpeedDivisor); + data << uint32(Field_30C); } if (changesMask[124]) { @@ -1856,8 +1856,6 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(ScalingLevelMax); Base::ClearChangesMask(ScalingLevelDelta); Base::ClearChangesMask(ScalingFactionGroup); - Base::ClearChangesMask(ScalingHealthItemLevelCurveID); - Base::ClearChangesMask(ScalingDamageItemLevelCurveID); Base::ClearChangesMask(FactionTemplate); Base::ClearChangesMask(Flags); Base::ClearChangesMask(Flags2); @@ -1937,6 +1935,8 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(FlightCapabilityID); Base::ClearChangesMask(GlideEventSpeedDivisor); + Base::ClearChangesMask(Field_308); + Base::ClearChangesMask(Field_30C); Base::ClearChangesMask(SilencedSchoolMask); Base::ClearChangesMask(CurrentAreaID); Base::ClearChangesMask(NameplateAttachToGUID); @@ -2104,6 +2104,45 @@ void ArenaCooldown::ClearChangesMask() _changesMask.ResetAll(); } +void PetCreatureName::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << uint32(CreatureID); + data.WriteBits(Name->size(), 8); + data.WriteString(Name); + data.FlushBits(); +} + +void PetCreatureName::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 << uint32(CreatureID); + } + if (changesMask[2]) + { + data.WriteBits(Name->size(), 8); + data.WriteString(Name); + } + } + data.FlushBits(); +} + +void PetCreatureName::ClearChangesMask() +{ + Base::ClearChangesMask(CreatureID); + Base::ClearChangesMask(Name); + _changesMask.ResetAll(); +} + void CTROptions::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { data << int32(ContentTuningConditionMask); @@ -2285,6 +2324,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(Field_1AC); data << int32(Field_1B0); data << int32(CurrentBattlePetSpeciesID); + data << uint32(PetNames.size()); CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); @@ -2333,6 +2373,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi { data << VisibleEquipableSpells[i]; } + for (uint32 i = 0; i < PetNames.size(); ++i) + { + PetNames[i].WriteCreate(data, owner, receiver); + } if (DeclinedNames.has_value()) { DeclinedNames->WriteCreate(data, owner, receiver); @@ -2342,7 +2386,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2350,20 +2394,20 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000022u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000022u, 0xFFFE0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0001FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFEu, 0xFFFFFFFFu, 0x00000001u }); 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), 10); + for (uint32 i = 0; i < 10; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -2409,6 +2453,13 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign if (changesMask[7]) { if (!ignoreNestedChangesMask) + PetNames.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(PetNames.size(), data); + } + if (changesMask[8]) + { + if (!ignoreNestedChangesMask) VisualItemReplacements.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(VisualItemReplacements.size(), data); @@ -2460,7 +2511,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[7]) + if (changesMask[8]) { for (uint32 i = 0; i < VisualItemReplacements.size(); ++i) { @@ -2470,156 +2521,166 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[8]) + if (changesMask[7]) { - data << DuelArbiter; + for (uint32 i = 0; i < PetNames.size(); ++i) + { + if (PetNames.HasChanged(i) || ignoreNestedChangesMask) + { + PetNames[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } } if (changesMask[9]) { - data << WowAccount; + data << DuelArbiter; } if (changesMask[10]) { - data << BnetAccount; + data << WowAccount; } if (changesMask[11]) { - data << uint64(GuildClubMemberID); + data << BnetAccount; } if (changesMask[12]) { - data << LootTargetGUID; + data << uint64(GuildClubMemberID); } if (changesMask[13]) { - data << uint32(PlayerFlags); + data << LootTargetGUID; } if (changesMask[14]) { - data << uint32(PlayerFlagsEx); + data << uint32(PlayerFlags); } if (changesMask[15]) { - data << uint32(GuildRankID); + data << uint32(PlayerFlagsEx); } if (changesMask[16]) { - data << uint32(GuildDeleteDate); + data << uint32(GuildRankID); } if (changesMask[17]) { - data << int32(GuildLevel); + data << uint32(GuildDeleteDate); } if (changesMask[18]) { - data << uint8(NativeSex); + data << int32(GuildLevel); } if (changesMask[19]) { - data << uint8(Inebriation); + data << uint8(NativeSex); } if (changesMask[20]) { - data << uint8(PvpTitle); + data << uint8(Inebriation); } if (changesMask[21]) { - data << uint8(ArenaFaction); + data << uint8(PvpTitle); } if (changesMask[22]) { - data << uint32(DuelTeam); + data << uint8(ArenaFaction); } if (changesMask[23]) { - data << int32(GuildTimeStamp); + data << uint32(DuelTeam); } if (changesMask[24]) { - data << int32(PlayerTitle); + data << int32(GuildTimeStamp); } if (changesMask[25]) { - data << int32(FakeInebriation); + data << int32(PlayerTitle); } if (changesMask[26]) { - data << uint32(VirtualPlayerRealm); + data << int32(FakeInebriation); } if (changesMask[27]) { - data << uint32(CurrentSpecID); + data << uint32(VirtualPlayerRealm); } if (changesMask[28]) { - data << int32(TaxiMountAnimKitID); + data << uint32(CurrentSpecID); } if (changesMask[29]) { - data << uint8(CurrentBattlePetBreedQuality); + data << int32(TaxiMountAnimKitID); } if (changesMask[30]) { - data << int32(HonorLevel); + data << uint8(CurrentBattlePetBreedQuality); } if (changesMask[31]) { - data << int64(LogoutTime); + data << int32(HonorLevel); } } if (changesMask[32]) { - if (changesMask[34]) + if (changesMask[33]) { - data << int32(Field_1AC); + data << int64(LogoutTime); } if (changesMask[35]) { - data << int32(Field_1B0); + data << int32(Field_1AC); } if (changesMask[36]) { - data << int32(CurrentBattlePetSpeciesID); + data << int32(Field_1B0); } if (changesMask[37]) { - CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(CurrentBattlePetSpeciesID); } if (changesMask[38]) { - data << int32(CovenantID); + CtrOptions->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[39]) { + data << int32(CovenantID); + } + if (changesMask[40]) + { data << int32(SoulbindID); } - if (changesMask[41]) + if (changesMask[42]) { data << SpectateTarget; } - if (changesMask[42]) + if (changesMask[43]) { data << int32(Field_200); } - if (changesMask[44]) + if (changesMask[45]) { PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[33]) + if (changesMask[34]) { data.WriteBits(Name->size(), 6); } data.WriteBits(DeclinedNames.has_value(), 1); data.FlushBits(); - if (changesMask[40]) + if (changesMask[41]) { data << DungeonScore; } - if (changesMask[33]) + if (changesMask[34]) { data.WriteString(Name); } - if (changesMask[43]) + if (changesMask[44]) { if (DeclinedNames.has_value()) { @@ -2627,21 +2688,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[45]) + if (changesMask[46]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[46 + i]) + if (changesMask[47 + i]) { data << uint8(PartyType[i]); } } } - if (changesMask[48]) + if (changesMask[49]) { for (uint32 i = 0; i < 175; ++i) { - if (changesMask[49 + i]) + if (changesMask[50 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2650,41 +2711,41 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[224]) + if (changesMask[225]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[225 + i]) + if (changesMask[226 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[244]) + if (changesMask[245]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[245 + i]) + if (changesMask[246 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[268]) + if (changesMask[269]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[269 + i]) + if (changesMask[270 + i]) { data << uint32(Field_3120[i]); } } } - if (changesMask[251]) + if (changesMask[252]) { for (uint32 i = 0; i < 16; ++i) { - if (changesMask[252 + i]) + if (changesMask[253 + i]) { data << VisibleEquipableSpells[i]; } @@ -2702,6 +2763,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(QuestSessionQuestLog); Base::ClearChangesMask(ArenaCooldowns); Base::ClearChangesMask(VisualItemReplacements); + Base::ClearChangesMask(PetNames); Base::ClearChangesMask(DuelArbiter); Base::ClearChangesMask(WowAccount); Base::ClearChangesMask(BnetAccount); @@ -3154,23 +3216,23 @@ void ResearchHistory::ClearChangesMask() void MawPower::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const { - data << int32(Field_0); - data << int32(Field_4); - data << int32(Field_8); + data << int32(SpellID); + data << int32(MawPowerID); + data << int32(Stacks); } 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); + data << int32(SpellID); + data << int32(MawPowerID); + data << int32(Stacks); } bool MawPower::operator==(MawPower const& right) const { - return Field_0 == right.Field_0 - && Field_4 == right.Field_4 - && Field_8 == right.Field_8; + return SpellID == right.SpellID + && MawPowerID == right.MawPowerID + && Stacks == right.Stacks; } void MultiFloorExplore::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const @@ -4131,7 +4193,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << float(VersatilityBonus); data << float(PvpPowerDamage); data << float(PvpPowerHealing); - for (uint32 i = 0; i < 8; ++i) + for (uint32 i = 0; i < 9; ++i) { data << uint32(DataFlags[i].size()); for (uint32 j = 0; j < DataFlags[i].size(); ++j) @@ -4263,6 +4325,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << uint32(TaskQuests.size()); data << uint32(DisabledSpells.size()); data << int32(UiChromieTimeExpansionID); + data << int32(TimerunningSeasonID); data << int32(TransportServerTime); data << uint32(WeeklyRewardsPeriodSinceOrigin); data << int16(DEBUGSoulbindConduitRank); @@ -4471,7 +4534,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[36]) { - for (uint32 i = 0; i < 8; ++i) + for (uint32 i = 0; i < 9; ++i) { if (changesMask[37]) { @@ -4484,7 +4547,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[36]) { - for (uint32 i = 0; i < 8; ++i) + for (uint32 i = 0; i < 9; ++i) { if (changesMask[37]) { @@ -5376,48 +5439,58 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[123]) { - data << int32(TransportServerTime); + data << int32(TimerunningSeasonID); } if (changesMask[124]) { - data << uint32(WeeklyRewardsPeriodSinceOrigin); + data << int32(TransportServerTime); } if (changesMask[125]) { + data << uint32(WeeklyRewardsPeriodSinceOrigin); + } + if (changesMask[126]) + { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[127]) + if (changesMask[128]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[128]) + if (changesMask[129]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[129]) + if (changesMask[130]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[130]) + if (changesMask[131]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[131]) + if (changesMask[132]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[132]) + if (changesMask[133]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[133]) + if (changesMask[134]) { data << uint64(LootHistoryInstanceID); } - if (changesMask[135]) + } + if (changesMask[136]) + { + if (changesMask[137]) { data << uint8(RequiredMountCapabilityFlags); } + } + if (changesMask[104]) + { data.WriteBits(QuestSession.has_value(), 1); data.WriteBits(PetStable.has_value(), 1); } @@ -5443,11 +5516,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[126]) + if (changesMask[127]) { data << DungeonScore; } - if (changesMask[134]) + if (changesMask[135]) { if (PetStable.has_value()) { @@ -5455,141 +5528,141 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[136]) + if (changesMask[138]) { for (uint32 i = 0; i < 227; ++i) { - if (changesMask[137 + i]) + if (changesMask[139 + i]) { data << InvSlots[i]; } } } - if (changesMask[364]) + if (changesMask[366]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[365 + i]) + if (changesMask[367 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[367]) + if (changesMask[369]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[368 + i]) + if (changesMask[370 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[375 + i]) + if (changesMask[377 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[382 + i]) + if (changesMask[384 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[389 + i]) + if (changesMask[391 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[396]) + if (changesMask[398]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[397 + i]) + if (changesMask[399 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[400 + i]) + if (changesMask[402 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[403]) + if (changesMask[405]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[404 + i]) + if (changesMask[406 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[416 + i]) + if (changesMask[418 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[428]) + if (changesMask[430]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[429 + i]) + if (changesMask[431 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[461]) + if (changesMask[463]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[462 + i]) + if (changesMask[464 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[466]) + if (changesMask[468]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[467 + i]) + if (changesMask[469 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[469]) + if (changesMask[471]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[470 + i]) + if (changesMask[472 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[475]) + if (changesMask[477]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[476 + i]) + if (changesMask[478 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[483]) + if (changesMask[485]) { for (uint32 i = 0; i < 950; ++i) { - if (changesMask[484 + i]) + if (changesMask[486 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1434]) + if (changesMask[1436]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1435 + i]) + if (changesMask[1437 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -5715,6 +5788,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(Field_1410); Base::ClearChangesMask(QuestSession); Base::ClearChangesMask(UiChromieTimeExpansionID); + Base::ClearChangesMask(TimerunningSeasonID); Base::ClearChangesMask(TransportServerTime); Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin); Base::ClearChangesMask(DEBUGSoulbindConduitRank); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 7132f4beaf6..4a09c05dd3b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -299,93 +299,93 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<217> 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<int32, 32, 41> FactionTemplate; struct FactionTemplateTag : ViewerDependentValueTag<int32> {}; - UpdateField<uint32, 32, 44> Flags; + UpdateField<uint32, 32, 42> Flags; struct FlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 45> Flags2; - UpdateField<uint32, 32, 46> Flags3; + UpdateField<uint32, 32, 43> Flags2; + UpdateField<uint32, 32, 44> Flags3; struct Flags3Tag : ViewerDependentValueTag<uint32> {}; - UpdateField<uint32, 32, 47> AuraState; + UpdateField<uint32, 32, 45> 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, 46> RangedAttackRoundBaseTime; + UpdateField<float, 32, 47> BoundingRadius; + UpdateField<float, 32, 48> CombatReach; + UpdateField<float, 32, 49> DisplayScale; + UpdateField<int32, 32, 50> CreatureFamily; + UpdateField<int32, 32, 51> CreatureType; + UpdateField<int32, 32, 52> NativeDisplayID; + UpdateField<float, 32, 53> NativeXDisplayScale; + UpdateField<int32, 32, 54> MountDisplayID; + UpdateField<int32, 32, 55> CosmeticMountDisplayID; + UpdateField<float, 32, 56> MinDamage; + UpdateField<float, 32, 57> MaxDamage; + UpdateField<float, 32, 58> MinOffHandDamage; + UpdateField<float, 32, 59> MaxOffHandDamage; + UpdateField<uint8, 32, 60> StandState; + UpdateField<uint8, 32, 61> PetTalentPoints; + UpdateField<uint8, 32, 62> VisFlags; + UpdateField<uint8, 32, 63> AnimTier; + UpdateField<uint32, 64, 65> PetNumber; + UpdateField<uint32, 64, 66> PetNameTimestamp; + UpdateField<uint32, 64, 67> PetExperience; + UpdateField<uint32, 64, 68> PetNextLevelExperience; + UpdateField<float, 64, 69> ModCastingSpeed; + UpdateField<float, 64, 70> ModCastingSpeedNeg; + UpdateField<float, 64, 71> ModSpellHaste; + UpdateField<float, 64, 72> ModHaste; + UpdateField<float, 64, 73> ModRangedHaste; + UpdateField<float, 64, 74> ModHasteRegen; + UpdateField<float, 64, 75> ModTimeRate; + UpdateField<int32, 64, 76> CreatedBySpell; + UpdateField<int32, 64, 77> EmoteState; + UpdateField<int32, 64, 78> BaseMana; + UpdateField<int32, 64, 79> BaseHealth; + UpdateField<uint8, 64, 80> SheatheState; + UpdateField<uint8, 64, 81> 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<uint8, 64, 82> PetFlags; + UpdateField<uint8, 64, 83> ShapeshiftForm; + UpdateField<int32, 64, 84> AttackPower; + UpdateField<int32, 64, 85> AttackPowerModPos; + UpdateField<int32, 64, 86> AttackPowerModNeg; + UpdateField<float, 64, 87> AttackPowerMultiplier; + UpdateField<int32, 64, 88> AttackPowerModSupport; + UpdateField<int32, 64, 89> RangedAttackPower; + UpdateField<int32, 64, 90> RangedAttackPowerModPos; + UpdateField<int32, 64, 91> RangedAttackPowerModNeg; + UpdateField<float, 64, 92> RangedAttackPowerMultiplier; + UpdateField<int32, 64, 93> RangedAttackPowerModSupport; + UpdateField<int32, 64, 94> MainHandWeaponAttackPower; + UpdateField<int32, 64, 95> OffHandWeaponAttackPower; + UpdateField<int32, 96, 97> RangedWeaponAttackPower; + UpdateField<int32, 96, 98> SetAttackSpeedAura; + UpdateField<float, 96, 99> Lifesteal; + UpdateField<float, 96, 100> MinRangedDamage; + UpdateField<float, 96, 101> MaxRangedDamage; + UpdateField<float, 96, 102> ManaCostMultiplier; + UpdateField<float, 96, 103> MaxHealthModifier; + UpdateField<float, 96, 104> HoverHeight; + UpdateField<int32, 96, 105> MinItemLevelCutoff; + UpdateField<int32, 96, 106> MinItemLevel; + UpdateField<int32, 96, 107> MaxItemLevel; + UpdateField<int32, 96, 108> AzeriteItemLevel; + UpdateField<int32, 96, 109> WildBattlePetLevel; + UpdateField<int32, 96, 110> BattlePetCompanionExperience; + UpdateField<uint32, 96, 111> BattlePetCompanionNameTimestamp; + UpdateField<int32, 96, 112> InteractSpellID; struct InteractSpellIDTag : ViewerDependentValueTag<int32> {}; - 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<int32, 96, 113> ScaleDuration; + UpdateField<int32, 96, 114> LooksLikeMountID; + UpdateField<int32, 96, 115> LooksLikeCreatureID; + UpdateField<int32, 96, 116> LookAtControllerID; + UpdateField<int32, 96, 117> PerksVendorItemID; + UpdateField<int32, 96, 118> TaxiNodesID; + UpdateField<ObjectGuid, 96, 119> GuildGUID; + UpdateField<int32, 96, 120> FlightCapabilityID; + UpdateField<float, 96, 121> GlideEventSpeedDivisor; // Movement speed gets divided by this value when evaluating what GlideEvents to use + UpdateField<uint32, 96, 122> Field_308; + UpdateField<uint32, 96, 123> Field_30C; 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 @@ -452,6 +452,16 @@ struct ArenaCooldown : public IsUpdateFieldStructureTag, public HasChangesMask<8 void ClearChangesMask(); }; +struct PetCreatureName : public IsUpdateFieldStructureTag, public HasChangesMask<3> +{ + UpdateField<uint32, 0, 1> CreatureID; + UpdateField<std::string, 0, 2> 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 CTROptions : public IsUpdateFieldStructureTag { int32 ContentTuningConditionMask; @@ -486,7 +496,7 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<288> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<289> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -494,49 +504,50 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<288> 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_1AC; - UpdateField<int32, 32, 35> Field_1B0; - 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; - UpdateField<ObjectGuid, 32, 41> SpectateTarget; - UpdateField<int32, 32, 42> Field_200; - OptionalUpdateField<UF::DeclinedNames, 32, 43> DeclinedNames; - UpdateField<UF::CustomTabardInfo, 32, 44> PersonalTabard; - UpdateFieldArray<uint8, 2, 45, 46> PartyType; - UpdateFieldArray<UF::QuestLog, 175, 48, 49> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 224, 225> VisibleItems; - UpdateFieldArray<float, 6, 244, 245> AvgItemLevel; - UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 251, 252> VisibleEquipableSpells; - UpdateFieldArray<uint32, 19, 268, 269> Field_3120; + DynamicUpdateField<int32, 0, 8> VisualItemReplacements; + DynamicUpdateField<UF::PetCreatureName, 0, 7> PetNames; + UpdateField<ObjectGuid, 0, 9> DuelArbiter; + UpdateField<ObjectGuid, 0, 10> WowAccount; + UpdateField<ObjectGuid, 0, 11> BnetAccount; + UpdateField<uint64, 0, 12> GuildClubMemberID; + UpdateField<ObjectGuid, 0, 13> LootTargetGUID; + UpdateField<uint32, 0, 14> PlayerFlags; + UpdateField<uint32, 0, 15> PlayerFlagsEx; + UpdateField<uint32, 0, 16> GuildRankID; + UpdateField<uint32, 0, 17> GuildDeleteDate; + UpdateField<int32, 0, 18> GuildLevel; + UpdateField<uint8, 0, 19> NativeSex; + UpdateField<uint8, 0, 20> Inebriation; + UpdateField<uint8, 0, 21> PvpTitle; + UpdateField<uint8, 0, 22> ArenaFaction; + UpdateField<uint32, 0, 23> DuelTeam; + UpdateField<int32, 0, 24> GuildTimeStamp; + UpdateField<int32, 0, 25> PlayerTitle; + UpdateField<int32, 0, 26> FakeInebriation; + UpdateField<uint32, 0, 27> VirtualPlayerRealm; + UpdateField<uint32, 0, 28> CurrentSpecID; + UpdateField<int32, 0, 29> TaxiMountAnimKitID; + UpdateField<uint8, 0, 30> CurrentBattlePetBreedQuality; + UpdateField<int32, 0, 31> HonorLevel; + UpdateField<int64, 32, 33> LogoutTime; + UpdateField<std::string, 32, 34> Name; + UpdateField<int32, 32, 35> Field_1AC; + UpdateField<int32, 32, 36> Field_1B0; + UpdateField<int32, 32, 37> CurrentBattlePetSpeciesID; + UpdateField<UF::CTROptions, 32, 38> CtrOptions; + UpdateField<int32, 32, 39> CovenantID; + UpdateField<int32, 32, 40> SoulbindID; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 41> DungeonScore; + UpdateField<ObjectGuid, 32, 42> SpectateTarget; + UpdateField<int32, 32, 43> Field_200; + OptionalUpdateField<UF::DeclinedNames, 32, 44> DeclinedNames; + UpdateField<UF::CustomTabardInfo, 32, 45> PersonalTabard; + UpdateFieldArray<uint8, 2, 46, 47> PartyType; + UpdateFieldArray<UF::QuestLog, 175, 49, 50> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 225, 226> VisibleItems; + UpdateFieldArray<float, 6, 245, 246> AvgItemLevel; + UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 252, 253> VisibleEquipableSpells; + UpdateFieldArray<uint32, 19, 269, 270> 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; @@ -657,9 +668,9 @@ struct ResearchHistory : public IsUpdateFieldStructureTag, public HasChangesMask struct MawPower : public IsUpdateFieldStructureTag { - int32 Field_0; - int32 Field_4; - int32 Field_8; + int32 SpellID; + int32 MawPowerID; + int32 Stacks; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -880,7 +891,7 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1452> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1454> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BackpackSellJunkDisabled; @@ -888,7 +899,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<bool, 0, 4> SortBagsRightToLeft; UpdateField<bool, 0, 5> InsertItemsLeftToRight; UpdateField<bool, 0, 6> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 8, 36, 37> DataFlags; + UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 9, 36, 37> DataFlags; UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 38, 39> ResearchSites; UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 40, 41> ResearchSiteProgress; UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 42, 43> Research; @@ -997,36 +1008,37 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<UF::ActivePlayerUnk901, 104, 121> Field_1410; OptionalUpdateField<UF::QuestSession, 104, 120> QuestSession; UpdateField<int32, 104, 122> UiChromieTimeExpansionID; - UpdateField<int32, 104, 123> TransportServerTime; - UpdateField<uint32, 104, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 104, 125> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 126> DungeonScore; - UpdateField<uint32, 104, 127> ActiveCombatTraitConfigID; - UpdateField<int32, 104, 128> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 104, 129> ItemUpgradeHighFingerItemID; - UpdateField<float, 104, 130> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 104, 131> ItemUpgradeHighTrinketItemID; - UpdateField<float, 104, 132> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 104, 133> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 104, 134> PetStable; - UpdateField<uint8, 104, 135> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots; - UpdateFieldArray<UF::RestInfo, 2, 364, 365> RestInfo; - UpdateFieldArray<int32, 7, 367, 368> ModDamageDonePos; - UpdateFieldArray<int32, 7, 367, 375> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 367, 382> ModDamageDonePercent; - UpdateFieldArray<float, 7, 367, 389> ModHealingDonePercent; - UpdateFieldArray<float, 3, 396, 397> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 396, 400> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 403, 404> BuybackPrice; - UpdateFieldArray<int64, 12, 403, 416> BuybackTimestamp; - UpdateFieldArray<int32, 32, 428, 429> CombatRatings; - UpdateFieldArray<uint32, 4, 461, 462> NoReagentCostMask; - UpdateFieldArray<int32, 2, 466, 467> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 469, 470> BagSlotFlags; - UpdateFieldArray<uint32, 7, 475, 476> BankBagSlotFlags; - UpdateFieldArray<uint64, 950, 483, 484> QuestCompleted; - UpdateFieldArray<float, 17, 1434, 1435> ItemUpgradeHighWatermark; + UpdateField<int32, 104, 123> TimerunningSeasonID; + UpdateField<int32, 104, 124> TransportServerTime; + UpdateField<uint32, 104, 125> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 104, 126> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 127> DungeonScore; + UpdateField<uint32, 104, 128> ActiveCombatTraitConfigID; + UpdateField<int32, 104, 129> ItemUpgradeHighOnehandWeaponItemID; + UpdateField<int32, 104, 130> ItemUpgradeHighFingerItemID; + UpdateField<float, 104, 131> ItemUpgradeHighFingerWatermark; + UpdateField<int32, 104, 132> ItemUpgradeHighTrinketItemID; + UpdateField<float, 104, 133> ItemUpgradeHighTrinketWatermark; + UpdateField<uint64, 104, 134> LootHistoryInstanceID; + OptionalUpdateField<UF::StableInfo, 104, 135> PetStable; + UpdateField<uint8, 136, 137> RequiredMountCapabilityFlags; + UpdateFieldArray<ObjectGuid, 227, 138, 139> InvSlots; + UpdateFieldArray<UF::RestInfo, 2, 366, 367> RestInfo; + UpdateFieldArray<int32, 7, 369, 370> ModDamageDonePos; + UpdateFieldArray<int32, 7, 369, 377> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 369, 384> ModDamageDonePercent; + UpdateFieldArray<float, 7, 369, 391> ModHealingDonePercent; + UpdateFieldArray<float, 3, 398, 399> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 398, 402> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 405, 406> BuybackPrice; + UpdateFieldArray<int64, 12, 405, 418> BuybackTimestamp; + UpdateFieldArray<int32, 32, 430, 431> CombatRatings; + UpdateFieldArray<uint32, 4, 463, 464> NoReagentCostMask; + UpdateFieldArray<int32, 2, 468, 469> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 471, 472> BagSlotFlags; + UpdateFieldArray<uint32, 7, 477, 478> BankBagSlotFlags; + UpdateFieldArray<uint64, 950, 485, 486> QuestCompleted; + UpdateFieldArray<float, 17, 1436, 1437> ItemUpgradeHighWatermark; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; |
