diff options
| author | Shauren <shauren.trinity@gmail.com> | 2021-11-04 21:47:03 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2021-11-04 21:47:03 +0100 |
| commit | 5c8a058120dcf2c3ff8592886cb842ca889e0411 (patch) | |
| tree | 951397fd3cc69637d4c399510a725b9a3385a80d /src/server/game/Entities/Object | |
| parent | 792721ad6450065ec81da6472c1e2a143ad57341 (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.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 243 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 111 |
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; |
