diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-08-05 19:37:53 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-08-08 00:18:05 +0200 |
| commit | cd5357dc185f95c6ef78089c5ab8bd2b885dd89f (patch) | |
| tree | 0937cc060467205336311a3ba3bd04f5d334c34b /src/server/game/Entities/Object | |
| parent | 07f51437fc9ddba2810c090caa76ab294bcf777b (diff) | |
Core/PacketIO: 9.1.0 opcodes and packet structures
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/MovementInfo.h | 1 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 236 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 114 |
3 files changed, 181 insertions, 170 deletions
diff --git a/src/server/game/Entities/Object/MovementInfo.h b/src/server/game/Entities/Object/MovementInfo.h index 63efcd18698..7dcc695721e 100644 --- a/src/server/game/Entities/Object/MovementInfo.h +++ b/src/server/game/Entities/Object/MovementInfo.h @@ -118,6 +118,7 @@ struct MovementForce uint32 TransportID = 0; float Magnitude = 0.0f; uint8 Type = 0; + int32 Unused910 = 0; }; class MovementForces diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 316927af52a..55ae7da41aa 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -1115,6 +1115,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << uint32(ChannelObjects.size()); data << SkinningOwnerGUID; data << uint32(SilencedSchoolMask); + data << NameplateAttachToGUID; for (std::size_t i = 0; i < PassiveSpells.size(); ++i) { PassiveSpells[i].WriteCreate(data, owner, receiver); @@ -1131,7 +1132,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, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x03F8007Fu, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1139,16 +1140,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0400007Eu, 0xFC07FF80u, 0x1FFFFFFFu }; + allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0800007Eu, 0xF80FFF00u, 0x3FFFFFFFu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x04000000u, 0x0007FF80u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x000FFF00u, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00007F80u }; + allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x03F8007Fu, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1682,90 +1683,94 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor { data << uint32(SilencedSchoolMask); } + if (changesMask[119]) + { + data << NameplateAttachToGUID; + } } - if (changesMask[119]) + if (changesMask[120]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[120 + i]) + if (changesMask[121 + i]) { data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(NpcFlags[i], i, owner, receiver)); } } } - if (changesMask[122]) + if (changesMask[123]) { for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[123 + i]) + if (changesMask[124 + i]) { data << int32(Power[i]); } - if (changesMask[129 + i]) + if (changesMask[130 + i]) { data << int32(MaxPower[i]); } - if (changesMask[135 + i]) + if (changesMask[136 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[141 + i]) + if (changesMask[142 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[147]) + if (changesMask[148]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[148 + i]) + if (changesMask[149 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[151]) + if (changesMask[152]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[152 + i]) + if (changesMask[153 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[154]) + if (changesMask[155]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[155 + i]) + if (changesMask[156 + i]) { data << int32(Stats[i]); } - if (changesMask[159 + i]) + if (changesMask[160 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[163 + i]) + if (changesMask[164 + i]) { data << int32(StatNegBuff[i]); } } } - if (changesMask[167]) + if (changesMask[168]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[168 + i]) + if (changesMask[169 + i]) { data << int32(Resistances[i]); } - if (changesMask[175 + i]) + if (changesMask[176 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[182 + i]) + if (changesMask[183 + i]) { data << int32(ManaCostModifier[i]); } @@ -1890,6 +1895,7 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(SkinningOwnerGUID); Base::ClearChangesMask(SilencedSchoolMask); + Base::ClearChangesMask(NameplateAttachToGUID); Base::ClearChangesMask(NpcFlags); Base::ClearChangesMask(Power); Base::ClearChangesMask(MaxPower); @@ -2115,7 +2121,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << uint32(VirtualPlayerRealm); data << uint32(CurrentSpecID); data << int32(TaxiMountAnimKitID); - for (std::size_t i = 0; i < 4; ++i) + for (std::size_t i = 0; i < 6; ++i) { data << float(AvgItemLevel[i]); } @@ -2147,12 +2153,13 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data.WriteBit(HasQuestSession); } data.WriteBit(HasLevelLink); + data << DungeonScore; data.FlushBits(); } void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0FFFFFFEu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2160,12 +2167,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFFCu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u }; + allowedMaskForTarget |= { 0x00000012u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000001u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const { - Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000003u, 0x00000000u, 0x00000000u, 0x00000000u, 0x01FFFFFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFEDu, 0x00000007u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0FFFFFFEu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2357,12 +2364,16 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data << int32(SoulbindID); } + if (changesMask[34]) + { + data << DungeonScore; + } } - if (changesMask[34]) + if (changesMask[35]) { for (std::size_t i = 0; i < 125; ++i) { - if (changesMask[35 + i]) + if (changesMask[36 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2371,21 +2382,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[160]) + if (changesMask[161]) { for (std::size_t i = 0; i < 19; ++i) { - if (changesMask[161 + i]) + if (changesMask[162 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[180]) + if (changesMask[181]) { - for (std::size_t i = 0; i < 4; ++i) + for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[181 + i]) + if (changesMask[182 + i]) { data << float(AvgItemLevel[i]); } @@ -2428,6 +2439,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); + Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); @@ -2555,6 +2567,7 @@ void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* r data << uint32(WeeklyBestRating); data << uint32(SeasonBestRating); data << uint32(PvpTierID); + data << uint32(WeeklyBestWinPvpTierID); data.WriteBit(Disqualified); data.FlushBits(); } @@ -2565,7 +2578,7 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 10); + data.WriteBits(changesMask.GetBlock(0), 11); if (changesMask[0]) { @@ -2609,6 +2622,10 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const { data << uint32(PvpTierID); } + if (changesMask[10]) + { + data << uint32(WeeklyBestWinPvpTierID); + } } data.FlushBits(); } @@ -2624,6 +2641,7 @@ void PVPInfo::ClearChangesMask() Base::ClearChangesMask(WeeklyBestRating); Base::ClearChangesMask(SeasonBestRating); Base::ClearChangesMask(PvpTierID); + Base::ClearChangesMask(WeeklyBestWinPvpTierID); _changesMask.ResetAll(); } @@ -2906,7 +2924,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f Skill->WriteCreate(data, owner, receiver); data << int32(CharacterPoints); data << int32(MaxTalentTiers); - data << int32(TrackCreatureMask); + data << uint32(TrackCreatureMask); for (std::size_t i = 0; i < 2; ++i) { data << uint32(TrackResourceMask[i]); @@ -2934,7 +2952,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << float(VersatilityBonus); data << float(PvpPowerDamage); data << float(PvpPowerHealing); - for (std::size_t i = 0; i < 192; ++i) + for (std::size_t i = 0; i < 240; ++i) { data << uint64(ExploredZones[i]); } @@ -3022,11 +3040,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f } data << int32(Honor); data << int32(HonorNextLevel); - data << int64(PvpRewardAchieved); - data << int32(PvpTierMaxFromWins); - data << int64(PvpLastWeeksRewardAchieved); - data << int32(PvpLastWeeksTierMaxFromWins); - data << int64(PvpLastWeeksRewardClaimed); data << uint8(NumBankSlots); data << uint32(ResearchSites.size()); data << uint32(ResearchSiteProgress.size()); @@ -3060,6 +3073,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << int32(UiChromieTimeExpansionID); data << int32(TransportServerTime); data << uint32(WeeklyRewardsPeriodSinceOrigin); + data << int16(DEBUGSoulbindConduitRank); for (std::size_t i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -3159,6 +3173,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { QuestSession->WriteCreate(data, owner, receiver); } + data << DungeonScore; for (std::size_t i = 0; i < CharacterRestrictions.size(); ++i) { CharacterRestrictions[i].WriteCreate(data, owner, receiver); @@ -3175,8 +3190,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (std::size_t i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 16); - for (std::size_t i = 0; i < 48; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 17); + for (std::size_t i = 0; i < 49; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -3641,7 +3656,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[39]) { - data << int32(TrackCreatureMask); + data << uint32(TrackCreatureMask); } if (changesMask[40]) { @@ -3899,211 +3914,199 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[104]) { - data << int64(PvpRewardAchieved); - } - if (changesMask[105]) - { - data << int32(PvpTierMaxFromWins); - } - if (changesMask[106]) - { - data << int64(PvpLastWeeksRewardAchieved); + data << uint8(NumBankSlots); } if (changesMask[107]) { - data << int32(PvpLastWeeksTierMaxFromWins); + data << int32(UiChromieTimeExpansionID); } if (changesMask[108]) { - data << int64(PvpLastWeeksRewardClaimed); + data << int32(TransportServerTime); } if (changesMask[109]) { - data << uint8(NumBankSlots); - } - if (changesMask[112]) - { - data << int32(UiChromieTimeExpansionID); - } - if (changesMask[113]) - { - data << int32(TransportServerTime); + data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[114]) + if (changesMask[110]) { - data << uint32(WeeklyRewardsPeriodSinceOrigin); + data << int16(DEBUGSoulbindConduitRank); } } if (changesMask[98]) { data.WriteBits(QuestSession.is_initialized(), 1); - if (changesMask[111]) + if (changesMask[106]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[110]) + if (changesMask[105]) { if (QuestSession.is_initialized()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } + if (changesMask[111]) + { + data << DungeonScore; + } } - if (changesMask[115]) + if (changesMask[112]) { for (std::size_t i = 0; i < 199; ++i) { - if (changesMask[116 + i]) + if (changesMask[113 + i]) { data << InvSlots[i]; } } } - if (changesMask[315]) + if (changesMask[312]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[316 + i]) + if (changesMask[313 + i]) { data << uint32(TrackResourceMask[i]); } } } - if (changesMask[318]) + if (changesMask[315]) { - for (std::size_t i = 0; i < 192; ++i) + for (std::size_t i = 0; i < 240; ++i) { - if (changesMask[319 + i]) + if (changesMask[316 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[511]) + if (changesMask[556]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[512 + i]) + if (changesMask[557 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[514]) + if (changesMask[559]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[515 + i]) + if (changesMask[560 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[522 + i]) + if (changesMask[567 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[529 + i]) + if (changesMask[574 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[536 + i]) + if (changesMask[581 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[543]) + if (changesMask[588]) { for (std::size_t i = 0; i < 3; ++i) { - if (changesMask[544 + i]) + if (changesMask[589 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[547 + i]) + if (changesMask[592 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[550]) + if (changesMask[595]) { for (std::size_t i = 0; i < 12; ++i) { - if (changesMask[551 + i]) + if (changesMask[596 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[563 + i]) + if (changesMask[608 + i]) { data << uint32(BuybackTimestamp[i]); } } } - if (changesMask[575]) + if (changesMask[620]) { for (std::size_t i = 0; i < 32; ++i) { - if (changesMask[576 + i]) + if (changesMask[621 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[615]) + if (changesMask[660]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[616 + i]) + if (changesMask[661 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[620]) + if (changesMask[665]) { for (std::size_t i = 0; i < 2; ++i) { - if (changesMask[621 + i]) + if (changesMask[666 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[623]) + if (changesMask[668]) { for (std::size_t i = 0; i < 4; ++i) { - if (changesMask[624 + i]) + if (changesMask[669 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[628]) + if (changesMask[673]) { for (std::size_t i = 0; i < 7; ++i) { - if (changesMask[629 + i]) + if (changesMask[674 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[636]) + if (changesMask[681]) { for (std::size_t i = 0; i < 875; ++i) { - if (changesMask[637 + i]) + if (changesMask[682 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[608]) + if (changesMask[653]) { for (std::size_t i = 0; i < 6; ++i) { - if (changesMask[609 + i]) + if (changesMask[654 + i]) { PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } @@ -4213,17 +4216,14 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(GuildClubMemberID); Base::ClearChangesMask(Honor); Base::ClearChangesMask(HonorNextLevel); - Base::ClearChangesMask(PvpRewardAchieved); - Base::ClearChangesMask(PvpTierMaxFromWins); - Base::ClearChangesMask(PvpLastWeeksRewardAchieved); - Base::ClearChangesMask(PvpLastWeeksTierMaxFromWins); - Base::ClearChangesMask(PvpLastWeeksRewardClaimed); Base::ClearChangesMask(NumBankSlots); Base::ClearChangesMask(Field_1410); Base::ClearChangesMask(QuestSession); Base::ClearChangesMask(UiChromieTimeExpansionID); Base::ClearChangesMask(TransportServerTime); Base::ClearChangesMask(WeeklyRewardsPeriodSinceOrigin); + Base::ClearChangesMask(DEBUGSoulbindConduitRank); + Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(InvSlots); Base::ClearChangesMask(TrackResourceMask); Base::ClearChangesMask(ExploredZones); @@ -4904,11 +4904,13 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { (*Lines)[i].WriteCreate(data, owner, receiver); } + data.WriteBit(DontPlayBroadcastTextSounds); data << uint32(Actors.size()); for (std::size_t 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 @@ -4918,12 +4920,16 @@ 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), 5); + data.WriteBits(changesMask.GetBlock(0), 6); if (changesMask[0]) { if (changesMask[1]) { + data.WriteBit(DontPlayBroadcastTextSounds); + } + if (changesMask[2]) + { data.WriteBits(Lines->size(), 32); for (std::size_t i = 0; i < Lines->size(); ++i) { @@ -4934,7 +4940,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) Actors.WriteUpdateMask(data); @@ -4945,7 +4951,7 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { for (std::size_t i = 0; i < Actors.size(); ++i) { @@ -4955,19 +4961,21 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[3]) + if (changesMask[4]) { data << int32(LastLineEndTime); } - if (changesMask[4]) + if (changesMask[5]) { data << uint32(Progress); } } + data.FlushBits(); } void ConversationData::ClearChangesMask() { + Base::ClearChangesMask(DontPlayBroadcastTextSounds); Base::ClearChangesMask(Lines); Base::ClearChangesMask(Actors); Base::ClearChangesMask(LastLineEndTime); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index d65234a2286..5c3f61e5fae 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -19,6 +19,7 @@ #define UpdateFields_h__ #include "EnumFlag.h" +#include "MythicPlusPacketsCommon.h" #include "ObjectGuid.h" #include "Position.h" #include "QuaternionData.h" @@ -251,7 +252,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<189> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<190> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; @@ -373,20 +374,21 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<189> UpdateField<ObjectGuid, 96, 116> GuildGUID; UpdateField<ObjectGuid, 96, 117> SkinningOwnerGUID; UpdateField<uint32, 96, 118> SilencedSchoolMask; - UpdateFieldArray<uint32, 2, 119, 120> NpcFlags; + UpdateField<ObjectGuid, 96, 119> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + UpdateFieldArray<uint32, 2, 120, 121> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 6, 122, 123> Power; - UpdateFieldArray<int32, 6, 122, 129> MaxPower; - UpdateFieldArray<float, 6, 122, 135> PowerRegenFlatModifier; - UpdateFieldArray<float, 6, 122, 141> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 147, 148> VirtualItems; - UpdateFieldArray<uint32, 2, 151, 152> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 154, 155> Stats; - UpdateFieldArray<int32, 4, 154, 159> StatPosBuff; - UpdateFieldArray<int32, 4, 154, 163> StatNegBuff; - UpdateFieldArray<int32, 7, 167, 168> Resistances; - UpdateFieldArray<int32, 7, 167, 175> BonusResistanceMods; - UpdateFieldArray<int32, 7, 167, 182> ManaCostModifier; + UpdateFieldArray<int32, 6, 123, 124> Power; + UpdateFieldArray<int32, 6, 123, 130> MaxPower; + UpdateFieldArray<float, 6, 123, 136> PowerRegenFlatModifier; + UpdateFieldArray<float, 6, 123, 142> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 148, 149> VirtualItems; + UpdateFieldArray<uint32, 2, 152, 153> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 155, 156> Stats; + UpdateFieldArray<int32, 4, 155, 160> StatPosBuff; + UpdateFieldArray<int32, 4, 155, 164> StatNegBuff; + UpdateFieldArray<int32, 7, 168, 169> Resistances; + UpdateFieldArray<int32, 7, 168, 176> BonusResistanceMods; + UpdateFieldArray<int32, 7, 168, 183> ManaCostModifier; 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; @@ -448,7 +450,7 @@ struct CTROptions : public IsUpdateFieldStructureTag bool operator!=(CTROptions const& right) const { return !(*this == right); } }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<185> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<188> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -482,9 +484,10 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<185> UpdateField<UF::CTROptions, 0, 30> CtrOptions; UpdateField<int32, 0, 31> CovenantID; UpdateField<int32, 32, 33> SoulbindID; - UpdateFieldArray<UF::QuestLog, 125, 34, 35> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 160, 161> VisibleItems; - UpdateFieldArray<float, 4, 180, 181> AvgItemLevel; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 34> DungeonScore; + UpdateFieldArray<UF::QuestLog, 125, 35, 36> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 161, 162> VisibleItems; + UpdateFieldArray<float, 6, 181, 182> AvgItemLevel; 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; @@ -520,7 +523,7 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3> void ClearChangesMask(); }; -struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> +struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<11> { UpdateField<bool, 0, 1> Disqualified; UpdateField<uint32, 0, 2> WeeklyPlayed; @@ -531,6 +534,7 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<10> UpdateField<uint32, 0, 7> WeeklyBestRating; UpdateField<uint32, 0, 8> SeasonBestRating; UpdateField<uint32, 0, 9> PvpTierID; + UpdateField<uint32, 0, 10> WeeklyBestWinPvpTierID; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -647,7 +651,7 @@ struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3 void ClearChangesMask(); }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1512> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1557> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BankAutoSortDisabled; @@ -685,7 +689,7 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<UF::SkillInfo, 34, 36> Skill; UpdateField<int32, 34, 37> CharacterPoints; UpdateField<int32, 34, 38> MaxTalentTiers; - UpdateField<int32, 34, 39> TrackCreatureMask; + UpdateField<uint32, 34, 39> TrackCreatureMask; UpdateField<float, 34, 40> MainhandExpertise; UpdateField<float, 34, 41> OffhandExpertise; UpdateField<float, 34, 42> RangedExpertise; @@ -748,36 +752,33 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<uint64, 98, 101> GuildClubMemberID; UpdateField<int32, 98, 102> Honor; UpdateField<int32, 98, 103> HonorNextLevel; - UpdateField<int64, 98, 104> PvpRewardAchieved; - UpdateField<int32, 98, 105> PvpTierMaxFromWins; - UpdateField<int64, 98, 106> PvpLastWeeksRewardAchieved; - UpdateField<int32, 98, 107> PvpLastWeeksTierMaxFromWins; - UpdateField<int64, 98, 108> PvpLastWeeksRewardClaimed; - UpdateField<uint8, 98, 109> NumBankSlots; - UpdateField<UF::ActivePlayerUnk901, 98, 111> Field_1410; - OptionalUpdateField<UF::QuestSession, 98, 110> QuestSession; - UpdateField<int32, 98, 112> UiChromieTimeExpansionID; - UpdateField<int32, 98, 113> TransportServerTime; - UpdateField<uint32, 98, 114> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateFieldArray<ObjectGuid, 199, 115, 116> InvSlots; - UpdateFieldArray<uint32, 2, 315, 316> TrackResourceMask; - UpdateFieldArray<uint64, 192, 318, 319> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 511, 512> RestInfo; - UpdateFieldArray<int32, 7, 514, 515> ModDamageDonePos; - UpdateFieldArray<int32, 7, 514, 522> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 514, 529> ModDamageDonePercent; - UpdateFieldArray<float, 7, 514, 536> ModHealingDonePercent; - UpdateFieldArray<float, 3, 543, 544> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 543, 547> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 550, 551> BuybackPrice; - UpdateFieldArray<uint32, 12, 550, 563> BuybackTimestamp; - UpdateFieldArray<int32, 32, 575, 576> CombatRatings; - UpdateFieldArray<UF::PVPInfo, 6, 608, 609> 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; + UpdateField<uint8, 98, 104> NumBankSlots; + UpdateField<UF::ActivePlayerUnk901, 98, 106> Field_1410; + OptionalUpdateField<UF::QuestSession, 98, 105> QuestSession; + UpdateField<int32, 98, 107> UiChromieTimeExpansionID; + UpdateField<int32, 98, 108> TransportServerTime; + UpdateField<uint32, 98, 109> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 98, 110> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 111> DungeonScore; + UpdateFieldArray<ObjectGuid, 199, 112, 113> InvSlots; + UpdateFieldArray<uint32, 2, 312, 313> TrackResourceMask; + UpdateFieldArray<uint64, 240, 315, 316> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 556, 557> RestInfo; + UpdateFieldArray<int32, 7, 559, 560> ModDamageDonePos; + UpdateFieldArray<int32, 7, 559, 567> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 559, 574> ModDamageDonePercent; + UpdateFieldArray<float, 7, 559, 581> ModHealingDonePercent; + UpdateFieldArray<float, 3, 588, 589> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 588, 592> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 595, 596> BuybackPrice; + UpdateFieldArray<uint32, 12, 595, 608> BuybackTimestamp; + UpdateFieldArray<int32, 32, 620, 621> CombatRatings; + UpdateFieldArray<UF::PVPInfo, 6, 653, 654> PvpInfo; + UpdateFieldArray<uint32, 4, 660, 661> NoReagentCostMask; + UpdateFieldArray<int32, 2, 665, 666> ProfessionSkillLine; + UpdateFieldArray<uint32, 4, 668, 669> BagSlotFlags; + UpdateFieldArray<uint32, 7, 673, 674> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 681, 682> QuestCompleted; 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; @@ -931,12 +932,13 @@ struct ConversationActor : public IsUpdateFieldStructureTag bool operator!=(ConversationActor const& right) const { return !(*this == right); } }; -struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<5> +struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<6> { - UpdateField<std::vector<UF::ConversationLine>, 0, 1> Lines; - DynamicUpdateField<UF::ConversationActor, 0, 2> Actors; - UpdateField<int32, 0, 3> LastLineEndTime; - UpdateField<uint32, 0, 4> Progress; + 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<uint32, 0, 5> Progress; 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; |
