aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Entities/Object
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2021-11-04 21:47:03 +0100
committerShauren <shauren.trinity@gmail.com>2021-11-04 21:47:03 +0100
commit5c8a058120dcf2c3ff8592886cb842ca889e0411 (patch)
tree951397fd3cc69637d4c399510a725b9a3385a80d /src/server/game/Entities/Object
parent792721ad6450065ec81da6472c1e2a143ad57341 (diff)
Core/PacketIO: 9.1.5 updatefields and SMSG_UPDATE_OBJECT structure
Diffstat (limited to 'src/server/game/Entities/Object')
-rw-r--r--src/server/game/Entities/Object/Object.cpp20
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.cpp243
-rw-r--r--src/server/game/Entities/Object/Updates/UpdateFields.h111
3 files changed, 222 insertions, 152 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp
index 6544e584240..123a4e416ce 100644
--- a/src/server/game/Entities/Object/Object.cpp
+++ b/src/server/game/Entities/Object/Object.cpp
@@ -474,10 +474,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
bool hasMorphCurveID = createProperties && createProperties->MorphCurveId != 0;
bool hasFacingCurveID = createProperties && createProperties->FacingCurveId != 0;
bool hasMoveCurveID = createProperties && createProperties->MoveCurveId != 0;
- bool hasAnimation = createProperties && createProperties->AnimId;
- bool hasUnk3 = areaTriggerTemplate && areaTrigger->GetTemplate()->HasFlag(AREATRIGGER_FLAG_UNK3);
- bool hasAnimKitID = createProperties && createProperties->AnimKitId;
- bool hasAnimProgress = false;
bool hasAreaTriggerSphere = shape.IsSphere();
bool hasAreaTriggerBox = shape.IsBox();
bool hasAreaTriggerPolygon = createProperties && shape.IsPolygon();
@@ -497,10 +493,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
data->WriteBit(hasMorphCurveID);
data->WriteBit(hasFacingCurveID);
data->WriteBit(hasMoveCurveID);
- data->WriteBit(hasAnimation);
- data->WriteBit(hasAnimKitID);
- data->WriteBit(hasUnk3);
- data->WriteBit(hasAnimProgress);
data->WriteBit(hasAreaTriggerSphere);
data->WriteBit(hasAreaTriggerBox);
data->WriteBit(hasAreaTriggerPolygon);
@@ -509,9 +501,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
data->WriteBit(hasOrbit);
data->WriteBit(hasMovementScript);
- if (hasUnk3)
- data->WriteBit(false);
-
data->FlushBits();
if (hasAreaTriggerSpline)
@@ -537,15 +526,6 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags) const
if (hasMoveCurveID)
*data << uint32(createProperties->MoveCurveId);
- if (hasAnimation)
- *data << int32(createProperties->AnimId);
-
- if (hasAnimKitID)
- *data << int32(createProperties->AnimKitId);
-
- if (hasAnimProgress)
- *data << uint32(0);
-
if (hasAreaTriggerSphere)
{
*data << float(shape.SphereDatas.Radius);
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
index 0fa4e8c1c8b..ac3727ca7c0 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp
@@ -970,14 +970,14 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << uint8(DisplayPower);
data << uint32(OverrideDisplayPowerID);
data << int64(Health);
- for (std::size_t i = 0; i < 6; ++i)
+ for (std::size_t i = 0; i < 7; ++i)
{
data << int32(Power[i]);
data << int32(MaxPower[i]);
}
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner | UpdateFieldFlag::UnitAll))
{
- for (std::size_t i = 0; i < 6; ++i)
+ for (std::size_t i = 0; i < 7; ++i)
{
data << float(PowerRegenFlatModifier[i]);
data << float(PowerRegenInterruptedFlatModifier[i]);
@@ -1102,6 +1102,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi
data << int32(MaxItemLevel);
data << int32(AzeriteItemLevel);
data << int32(WildBattlePetLevel);
+ data << int32(Field_220);
data << uint32(BattlePetCompanionNameTimestamp);
data << int32(InteractSpellID);
data << int32(ScaleDuration);
@@ -1132,7 +1133,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, 0x07F000FFu, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver);
}
@@ -1140,24 +1141,24 @@ 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, 0x0800007Eu, 0xF80FFF00u, 0x3FFFFFFFu };
+ allowedMaskForTarget |= { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x1000007Eu, 0x01FFF800u, 0xFFFFFFFFu, 0x00000007u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll))
- allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x000FFF00u, 0x00000000u };
+ allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x10000000u, 0x01FFF800u, 0x00000000u, 0x00000000u };
if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath))
- allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x0000FF00u };
+ allowedMaskForTarget |= { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x001FE000u, 0x00000000u };
}
void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) const
{
- Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x07F000FFu, 0x00000000u });
+ Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u });
AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags);
changesMask &= allowedMaskForTarget;
}
void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, Unit const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlocksMask(0), 6);
- for (std::size_t i = 0; i < 6; ++i)
+ data.WriteBits(changesMask.GetBlocksMask(0), 7);
+ for (std::size_t i = 0; i < 7; ++i)
if (changesMask.GetBlock(i))
data.WriteBits(changesMask.GetBlock(i), 32);
@@ -1645,132 +1646,136 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor
}
if (changesMask[109])
{
- data << uint32(BattlePetCompanionNameTimestamp);
+ data << int32(Field_220);
}
if (changesMask[110])
{
- data << int32(InteractSpellID);
+ data << uint32(BattlePetCompanionNameTimestamp);
}
if (changesMask[111])
{
- data << int32(ScaleDuration);
+ data << int32(InteractSpellID);
}
if (changesMask[112])
{
- data << int32(LooksLikeMountID);
+ data << int32(ScaleDuration);
}
if (changesMask[113])
{
- data << int32(LooksLikeCreatureID);
+ data << int32(LooksLikeMountID);
}
if (changesMask[114])
{
- data << int32(LookAtControllerID);
+ data << int32(LooksLikeCreatureID);
}
if (changesMask[115])
{
- data << int32(TaxiNodesID);
+ data << int32(LookAtControllerID);
}
if (changesMask[116])
{
- data << GuildGUID;
+ data << int32(TaxiNodesID);
}
if (changesMask[117])
{
- data << SkinningOwnerGUID;
+ data << GuildGUID;
}
if (changesMask[118])
{
- data << uint32(SilencedSchoolMask);
+ data << SkinningOwnerGUID;
}
if (changesMask[119])
{
+ data << uint32(SilencedSchoolMask);
+ }
+ if (changesMask[120])
+ {
data << NameplateAttachToGUID;
}
}
- if (changesMask[120])
+ if (changesMask[121])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[121 + i])
+ if (changesMask[122 + i])
{
data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver));
}
}
}
- if (changesMask[123])
+ if (changesMask[124])
{
- for (std::size_t i = 0; i < 6; ++i)
+ for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[124 + i])
+ if (changesMask[125 + i])
{
data << int32(Power[i]);
}
- if (changesMask[130 + i])
+ if (changesMask[132 + i])
{
data << int32(MaxPower[i]);
}
- if (changesMask[136 + i])
+ if (changesMask[139 + i])
{
data << float(PowerRegenFlatModifier[i]);
}
- if (changesMask[142 + i])
+ if (changesMask[146 + i])
{
data << float(PowerRegenInterruptedFlatModifier[i]);
}
}
}
- if (changesMask[148])
+ if (changesMask[153])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[149 + i])
+ if (changesMask[154 + i])
{
VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[152])
+ if (changesMask[157])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[153 + i])
+ if (changesMask[158 + i])
{
data << uint32(AttackRoundBaseTime[i]);
}
}
}
- if (changesMask[155])
+ if (changesMask[160])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[156 + i])
+ if (changesMask[161 + i])
{
data << int32(Stats[i]);
}
- if (changesMask[160 + i])
+ if (changesMask[165 + i])
{
data << int32(StatPosBuff[i]);
}
- if (changesMask[164 + i])
+ if (changesMask[169 + i])
{
data << int32(StatNegBuff[i]);
}
}
}
- if (changesMask[168])
+ if (changesMask[173])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[169 + i])
+ if (changesMask[174 + i])
{
data << int32(Resistances[i]);
}
- if (changesMask[176 + i])
+ if (changesMask[181 + i])
{
data << int32(BonusResistanceMods[i]);
}
- if (changesMask[183 + i])
+ if (changesMask[188 + i])
{
data << int32(ManaCostModifier[i]);
}
@@ -1885,6 +1890,7 @@ void UnitData::ClearChangesMask()
Base::ClearChangesMask(MaxItemLevel);
Base::ClearChangesMask(AzeriteItemLevel);
Base::ClearChangesMask(WildBattlePetLevel);
+ Base::ClearChangesMask(Field_220);
Base::ClearChangesMask(BattlePetCompanionNameTimestamp);
Base::ClearChangesMask(InteractSpellID);
Base::ClearChangesMask(ScaleDuration);
@@ -2568,6 +2574,8 @@ void PVPInfo::WriteCreate(ByteBuffer& data, Player const* owner, Player const* r
data << uint32(SeasonBestRating);
data << uint32(PvpTierID);
data << uint32(WeeklyBestWinPvpTierID);
+ data << uint32(Field_28);
+ data << uint32(Field_2C);
data.WriteBit(Disqualified);
data.FlushBits();
}
@@ -2578,7 +2586,7 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const
if (ignoreChangesMask)
changesMask.SetAll();
- data.WriteBits(changesMask.GetBlock(0), 11);
+ data.WriteBits(changesMask.GetBlock(0), 13);
if (changesMask[0])
{
@@ -2626,6 +2634,14 @@ void PVPInfo::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const
{
data << uint32(WeeklyBestWinPvpTierID);
}
+ if (changesMask[11])
+ {
+ data << uint32(Field_28);
+ }
+ if (changesMask[12])
+ {
+ data << uint32(Field_2C);
+ }
}
data.FlushBits();
}
@@ -2642,6 +2658,8 @@ void PVPInfo::ClearChangesMask()
Base::ClearChangesMask(SeasonBestRating);
Base::ClearChangesMask(PvpTierID);
Base::ClearChangesMask(WeeklyBestWinPvpTierID);
+ Base::ClearChangesMask(Field_28);
+ Base::ClearChangesMask(Field_2C);
_changesMask.ResetAll();
}
@@ -2925,10 +2943,6 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
data << int32(CharacterPoints);
data << int32(MaxTalentTiers);
data << uint32(TrackCreatureMask);
- for (std::size_t i = 0; i < 2; ++i)
- {
- data << uint32(TrackResourceMask[i]);
- }
data << float(MainhandExpertise);
data << float(OffhandExpertise);
data << float(RangedExpertise);
@@ -3964,149 +3978,139 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
}
if (changesMask[312])
{
- for (std::size_t i = 0; i < 2; ++i)
- {
- if (changesMask[313 + i])
- {
- data << uint32(TrackResourceMask[i]);
- }
- }
- }
- if (changesMask[315])
- {
for (std::size_t i = 0; i < 240; ++i)
{
- if (changesMask[316 + i])
+ if (changesMask[313 + i])
{
data << uint64(ExploredZones[i]);
}
}
}
- if (changesMask[556])
+ if (changesMask[553])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[557 + i])
+ if (changesMask[554 + i])
{
RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
}
}
- if (changesMask[559])
+ if (changesMask[556])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[560 + i])
+ if (changesMask[557 + i])
{
data << int32(ModDamageDonePos[i]);
}
- if (changesMask[567 + i])
+ if (changesMask[564 + i])
{
data << int32(ModDamageDoneNeg[i]);
}
- if (changesMask[574 + i])
+ if (changesMask[571 + i])
{
data << float(ModDamageDonePercent[i]);
}
- if (changesMask[581 + i])
+ if (changesMask[578 + i])
{
data << float(ModHealingDonePercent[i]);
}
}
}
- if (changesMask[588])
+ if (changesMask[585])
{
for (std::size_t i = 0; i < 3; ++i)
{
- if (changesMask[589 + i])
+ if (changesMask[586 + i])
{
data << float(WeaponDmgMultipliers[i]);
}
- if (changesMask[592 + i])
+ if (changesMask[589 + i])
{
data << float(WeaponAtkSpeedMultipliers[i]);
}
}
}
- if (changesMask[595])
+ if (changesMask[592])
{
for (std::size_t i = 0; i < 12; ++i)
{
- if (changesMask[596 + i])
+ if (changesMask[593 + i])
{
data << uint32(BuybackPrice[i]);
}
- if (changesMask[608 + i])
+ if (changesMask[605 + i])
{
data << uint32(BuybackTimestamp[i]);
}
}
}
- if (changesMask[620])
+ if (changesMask[617])
{
for (std::size_t i = 0; i < 32; ++i)
{
- if (changesMask[621 + i])
+ if (changesMask[618 + i])
{
data << int32(CombatRatings[i]);
}
}
}
- if (changesMask[660])
+ if (changesMask[657])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[661 + i])
+ if (changesMask[658 + i])
{
data << uint32(NoReagentCostMask[i]);
}
}
}
- if (changesMask[665])
+ if (changesMask[662])
{
for (std::size_t i = 0; i < 2; ++i)
{
- if (changesMask[666 + i])
+ if (changesMask[663 + i])
{
data << int32(ProfessionSkillLine[i]);
}
}
}
- if (changesMask[668])
+ if (changesMask[665])
{
for (std::size_t i = 0; i < 4; ++i)
{
- if (changesMask[669 + i])
+ if (changesMask[666 + i])
{
data << uint32(BagSlotFlags[i]);
}
}
}
- if (changesMask[673])
+ if (changesMask[670])
{
for (std::size_t i = 0; i < 7; ++i)
{
- if (changesMask[674 + i])
+ if (changesMask[671 + i])
{
data << uint32(BankBagSlotFlags[i]);
}
}
}
- if (changesMask[681])
+ if (changesMask[678])
{
for (std::size_t i = 0; i < 875; ++i)
{
- if (changesMask[682 + i])
+ if (changesMask[679 + i])
{
data << uint64(QuestCompleted[i]);
}
}
}
- if (changesMask[653])
+ if (changesMask[650])
{
for (std::size_t i = 0; i < 6; ++i)
{
- if (changesMask[654 + i])
+ if (changesMask[651 + i])
{
PvpInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
@@ -4225,7 +4229,6 @@ void ActivePlayerData::ClearChangesMask()
Base::ClearChangesMask(DEBUGSoulbindConduitRank);
Base::ClearChangesMask(DungeonScore);
Base::ClearChangesMask(InvSlots);
- Base::ClearChangesMask(TrackResourceMask);
Base::ClearChangesMask(ExploredZones);
Base::ClearChangesMask(RestInfo);
Base::ClearChangesMask(ModDamageDonePos);
@@ -4683,6 +4686,58 @@ void ScaleCurve::ClearChangesMask()
_changesMask.ResetAll();
}
+void VisualAnim::WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const
+{
+ data << uint32(AnimationDataID);
+ data << uint32(AnimKitID);
+ data << uint32(AnimProgress);
+ data.WriteBit(Field_C);
+ data.FlushBits();
+}
+
+void VisualAnim::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const
+{
+ Mask changesMask = _changesMask;
+ if (ignoreChangesMask)
+ changesMask.SetAll();
+
+ data.WriteBits(changesMask.GetBlock(0), 5);
+
+ if (changesMask[0])
+ {
+ if (changesMask[1])
+ {
+ data.WriteBit(Field_C);
+ }
+ }
+ data.FlushBits();
+ if (changesMask[0])
+ {
+ if (changesMask[2])
+ {
+ data << uint32(AnimationDataID);
+ }
+ if (changesMask[3])
+ {
+ data << uint32(AnimKitID);
+ }
+ if (changesMask[4])
+ {
+ data << uint32(AnimProgress);
+ }
+ }
+ data.FlushBits();
+}
+
+void VisualAnim::ClearChangesMask()
+{
+ Base::ClearChangesMask(Field_C);
+ Base::ClearChangesMask(AnimationDataID);
+ Base::ClearChangesMask(AnimKitID);
+ Base::ClearChangesMask(AnimProgress);
+ _changesMask.ResetAll();
+}
+
void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
{
OverrideScaleCurve->WriteCreate(data, owner, receiver);
@@ -4697,7 +4752,9 @@ void AreaTriggerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
data << float(BoundsRadius2D);
data << uint32(DecalPropertiesID);
data << CreatingEffectGUID;
+ data << Field_80;
ExtraScaleCurve->WriteCreate(data, owner, receiver);
+ VisualAnim->WriteCreate(data, owner, receiver);
}
void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const
@@ -4707,7 +4764,7 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fi
void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignoreNestedChangesMask, AreaTrigger const* owner, Player const* receiver) const
{
- data.WriteBits(changesMask.GetBlock(0), 14);
+ data.WriteBits(changesMask.GetBlock(0), 16);
data.FlushBits();
if (changesMask[0])
@@ -4760,10 +4817,18 @@ void AreaTriggerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, boo
{
data << CreatingEffectGUID;
}
+ if (changesMask[14])
+ {
+ data << Field_80;
+ }
if (changesMask[2])
{
ExtraScaleCurve->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
}
+ if (changesMask[15])
+ {
+ VisualAnim->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver);
+ }
}
}
@@ -4782,6 +4847,8 @@ void AreaTriggerData::ClearChangesMask()
Base::ClearChangesMask(BoundsRadius2D);
Base::ClearChangesMask(DecalPropertiesID);
Base::ClearChangesMask(CreatingEffectGUID);
+ Base::ClearChangesMask(Field_80);
+ Base::ClearChangesMask(VisualAnim);
_changesMask.ResetAll();
}
@@ -4906,6 +4973,7 @@ void ConversationData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f
}
data.WriteBit(DontPlayBroadcastTextSounds);
data << uint32(Actors.size());
+ data << uint32(Flags);
for (std::size_t i = 0; i < Actors.size(); ++i)
{
Actors[i].WriteCreate(data, owner, receiver);
@@ -4920,7 +4988,7 @@ 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), 6);
+ data.WriteBits(changesMask.GetBlock(0), 7);
if (changesMask[0])
{
@@ -4969,6 +5037,10 @@ void ConversationData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo
{
data << uint32(Progress);
}
+ if (changesMask[6])
+ {
+ data << uint32(Flags);
+ }
}
data.FlushBits();
}
@@ -4980,6 +5052,7 @@ void ConversationData::ClearChangesMask()
Base::ClearChangesMask(Actors);
Base::ClearChangesMask(LastLineEndTime);
Base::ClearChangesMask(Progress);
+ Base::ClearChangesMask(Flags);
_changesMask.ResetAll();
}
diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h
index 813838755aa..7c253229d54 100644
--- a/src/server/game/Entities/Object/Updates/UpdateFields.h
+++ b/src/server/game/Entities/Object/Updates/UpdateFields.h
@@ -252,7 +252,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag
bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); }
};
-struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<190>
+struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<195>
{
UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs;
DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells;
@@ -364,31 +364,32 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<190>
UpdateField<int32, 96, 106> MaxItemLevel;
UpdateField<int32, 96, 107> AzeriteItemLevel;
UpdateField<int32, 96, 108> WildBattlePetLevel;
- UpdateField<uint32, 96, 109> BattlePetCompanionNameTimestamp;
- UpdateField<int32, 96, 110> InteractSpellID;
- UpdateField<int32, 96, 111> ScaleDuration;
- UpdateField<int32, 96, 112> LooksLikeMountID;
- UpdateField<int32, 96, 113> LooksLikeCreatureID;
- UpdateField<int32, 96, 114> LookAtControllerID;
- UpdateField<int32, 96, 115> TaxiNodesID;
- UpdateField<ObjectGuid, 96, 116> GuildGUID;
- UpdateField<ObjectGuid, 96, 117> SkinningOwnerGUID;
- UpdateField<uint32, 96, 118> SilencedSchoolMask;
- UpdateField<ObjectGuid, 96, 119> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
- UpdateFieldArray<uint32, 2, 120, 121> NpcFlags;
+ UpdateField<int32, 96, 109> Field_220;
+ UpdateField<uint32, 96, 110> BattlePetCompanionNameTimestamp;
+ UpdateField<int32, 96, 111> InteractSpellID;
+ UpdateField<int32, 96, 112> ScaleDuration;
+ UpdateField<int32, 96, 113> LooksLikeMountID;
+ UpdateField<int32, 96, 114> LooksLikeCreatureID;
+ UpdateField<int32, 96, 115> LookAtControllerID;
+ UpdateField<int32, 96, 116> TaxiNodesID;
+ UpdateField<ObjectGuid, 96, 117> GuildGUID;
+ UpdateField<ObjectGuid, 96, 118> SkinningOwnerGUID;
+ UpdateField<uint32, 96, 119> SilencedSchoolMask;
+ UpdateField<ObjectGuid, 96, 120> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object
+ UpdateFieldArray<uint32, 2, 121, 122> NpcFlags;
struct NpcFlagsTag : ViewerDependentValueTag<uint32> {};
- 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;
+ UpdateFieldArray<int32, 7, 124, 125> Power;
+ UpdateFieldArray<int32, 7, 124, 132> MaxPower;
+ UpdateFieldArray<float, 7, 124, 139> PowerRegenFlatModifier;
+ UpdateFieldArray<float, 7, 124, 146> PowerRegenInterruptedFlatModifier;
+ UpdateFieldArray<UF::VisibleItem, 3, 153, 154> VirtualItems;
+ UpdateFieldArray<uint32, 2, 157, 158> AttackRoundBaseTime;
+ UpdateFieldArray<int32, 4, 160, 161> Stats;
+ UpdateFieldArray<int32, 4, 160, 165> StatPosBuff;
+ UpdateFieldArray<int32, 4, 160, 169> StatNegBuff;
+ UpdateFieldArray<int32, 7, 173, 174> Resistances;
+ UpdateFieldArray<int32, 7, 173, 181> BonusResistanceMods;
+ UpdateFieldArray<int32, 7, 173, 188> 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;
@@ -523,7 +524,7 @@ struct RestInfo : public IsUpdateFieldStructureTag, public HasChangesMask<3>
void ClearChangesMask();
};
-struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<11>
+struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<13>
{
UpdateField<bool, 0, 1> Disqualified;
UpdateField<uint32, 0, 2> WeeklyPlayed;
@@ -535,6 +536,8 @@ struct PVPInfo : public IsUpdateFieldStructureTag, public HasChangesMask<11>
UpdateField<uint32, 0, 8> SeasonBestRating;
UpdateField<uint32, 0, 9> PvpTierID;
UpdateField<uint32, 0, 10> WeeklyBestWinPvpTierID;
+ UpdateField<uint32, 0, 11> Field_28;
+ UpdateField<uint32, 0, 12> Field_2C;
void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const;
@@ -651,7 +654,7 @@ struct ReplayedQuest : public IsUpdateFieldStructureTag, public HasChangesMask<3
void ClearChangesMask();
};
-struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1557>
+struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1554>
{
UpdateField<bool, 0, 1> BackpackAutoSortDisabled;
UpdateField<bool, 0, 2> BankAutoSortDisabled;
@@ -761,24 +764,23 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas
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;
+ UpdateFieldArray<uint64, 240, 312, 313> ExploredZones;
+ UpdateFieldArray<UF::RestInfo, 2, 553, 554> RestInfo;
+ UpdateFieldArray<int32, 7, 556, 557> ModDamageDonePos;
+ UpdateFieldArray<int32, 7, 556, 564> ModDamageDoneNeg;
+ UpdateFieldArray<float, 7, 556, 571> ModDamageDonePercent;
+ UpdateFieldArray<float, 7, 556, 578> ModHealingDonePercent;
+ UpdateFieldArray<float, 3, 585, 586> WeaponDmgMultipliers;
+ UpdateFieldArray<float, 3, 585, 589> WeaponAtkSpeedMultipliers;
+ UpdateFieldArray<uint32, 12, 592, 593> BuybackPrice;
+ UpdateFieldArray<uint32, 12, 592, 605> BuybackTimestamp;
+ UpdateFieldArray<int32, 32, 617, 618> CombatRatings;
+ UpdateFieldArray<UF::PVPInfo, 6, 650, 651> PvpInfo;
+ UpdateFieldArray<uint32, 4, 657, 658> NoReagentCostMask;
+ UpdateFieldArray<int32, 2, 662, 663> ProfessionSkillLine;
+ UpdateFieldArray<uint32, 4, 665, 666> BagSlotFlags;
+ UpdateFieldArray<uint32, 7, 670, 671> BankBagSlotFlags;
+ UpdateFieldArray<uint64, 875, 678, 679> 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;
@@ -867,7 +869,19 @@ struct ScaleCurve : public IsUpdateFieldStructureTag, public HasChangesMask<7>
void ClearChangesMask();
};
-struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<14>
+struct VisualAnim : public IsUpdateFieldStructureTag, public HasChangesMask<5>
+{
+ UpdateField<bool, 0, 1> Field_C;
+ UpdateField<uint32, 0, 2> AnimationDataID;
+ UpdateField<uint32, 0, 3> AnimKitID;
+ UpdateField<uint32, 0, 4> AnimProgress;
+
+ void WriteCreate(ByteBuffer& data, AreaTrigger const* owner, Player const* receiver) const;
+ void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, AreaTrigger const* owner, Player const* receiver) const;
+ void ClearChangesMask();
+};
+
+struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask<16>
{
UpdateField<UF::ScaleCurve, 0, 1> OverrideScaleCurve;
UpdateField<UF::ScaleCurve, 0, 2> ExtraScaleCurve;
@@ -882,6 +896,8 @@ struct AreaTriggerData : public IsUpdateFieldStructureTag, public HasChangesMask
UpdateField<float, 0, 11> BoundsRadius2D;
UpdateField<uint32, 0, 12> DecalPropertiesID;
UpdateField<ObjectGuid, 0, 13> CreatingEffectGUID;
+ UpdateField<ObjectGuid, 0, 14> Field_80;
+ UpdateField<UF::VisualAnim, 0, 15> VisualAnim;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, AreaTrigger const* owner, Player const* receiver) const;
@@ -933,7 +949,7 @@ struct ConversationActor : public IsUpdateFieldStructureTag
bool operator!=(ConversationActor const& right) const { return !(*this == right); }
};
-struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<6>
+struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMask<7>
{
UpdateField<bool, 0, 1> DontPlayBroadcastTextSounds;
UpdateField<std::vector<UF::ConversationLine>, 0, 2> Lines;
@@ -941,6 +957,7 @@ struct ConversationData : public IsUpdateFieldStructureTag, public HasChangesMas
UpdateField<int32, 0, 4> LastLineEndTime;
struct LastLineEndTimeTag : ViewerDependentValueTag<int32> {};
UpdateField<uint32, 0, 5> Progress;
+ UpdateField<uint32, 0, 6> Flags;
void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;
void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Conversation const* owner, Player const* receiver) const;