aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-08-05 19:37:53 +0200
committerShauren <shauren.trinity@gmail.com>2021-08-08 00:18:05 +0200
commitcd5357dc185f95c6ef78089c5ab8bd2b885dd89f (patch)
tree0937cc060467205336311a3ba3bd04f5d334c34b /src/server/game/Entities/Object
parent07f51437fc9ddba2810c090caa76ab294bcf777b (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.h1
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp236
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h114
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;