diff options
| author | Shauren <shauren.trinity@gmail.com> | 2024-03-21 21:07:23 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-03-21 21:07:23 +0100 |
| commit | ac5aee6a98be6434e1f93bf5c973701e41a4540a (patch) | |
| tree | 0cb621804e753e0afd81b5230b04a41f04220a5f /src/server/game/Entities/Object | |
| parent | e99482ce9bb7918e23a104fe28305c60d28ed598 (diff) | |
Core: Updated to 10.2.6.53840
Diffstat (limited to 'src/server/game/Entities/Object')
| -rw-r--r-- | src/server/game/Entities/Object/Object.cpp | 7 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 73 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 25 |
3 files changed, 70 insertions, 35 deletions
diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index 149ed7b1742..1748dfa587f 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -468,13 +468,14 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe bool hasMoveCurveID = createProperties && createProperties->MoveCurveId != 0; bool hasAreaTriggerSphere = shape.IsSphere(); bool hasAreaTriggerBox = shape.IsBox(); - bool hasAreaTriggerPolygon = createProperties && shape.IsPolygon(); + bool hasAreaTriggerPolygon = shape.IsPolygon(); bool hasAreaTriggerCylinder = shape.IsCylinder(); bool hasDisk = shape.IsDisk(); bool hasBoundedPlane = shape.IsBoundedPlane(); bool hasAreaTriggerSpline = areaTrigger->HasSplines(); bool hasOrbit = areaTrigger->HasOrbit(); bool hasMovementScript = false; + bool hasPositionalSoundKitID= false; data->WriteBit(hasAbsoluteOrientation); data->WriteBit(hasDynamicShape); @@ -488,6 +489,7 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe data->WriteBit(hasMorphCurveID); data->WriteBit(hasFacingCurveID); data->WriteBit(hasMoveCurveID); + data->WriteBit(hasPositionalSoundKitID); data->WriteBit(hasAreaTriggerSphere); data->WriteBit(hasAreaTriggerBox); data->WriteBit(hasAreaTriggerPolygon); @@ -523,6 +525,9 @@ void Object::BuildMovementUpdate(ByteBuffer* data, CreateObjectBits flags, Playe if (hasMoveCurveID) *data << uint32(createProperties->MoveCurveId); + if (hasPositionalSoundKitID) + *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 2e012897754..de4b2123202 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -2282,12 +2282,14 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data << int32(HonorLevel); data << int64(LogoutTime); data << uint32(ArenaCooldowns.size()); - data << int32(Field_B0); - data << int32(Field_B4); + data << int32(Field_1AC); + data << int32(Field_1B0); data << int32(CurrentBattlePetSpeciesID); CtrOptions->WriteCreate(data, owner, receiver); data << int32(CovenantID); data << int32(SoulbindID); + data << Field_1F0; + data << int32(Field_200); data << uint32(VisualItemReplacements.size()); for (uint32 i = 0; i < 19; ++i) { @@ -2327,6 +2329,10 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi data.WriteBits(DeclinedNames.has_value(), 1); data << DungeonScore; data.WriteString(Name); + for (uint32 i = 0; i < 16; ++i) + { + data << VisibleEquipableSpells[i]; + } if (DeclinedNames.has_value()) { DeclinedNames->WriteCreate(data, owner, receiver); @@ -2336,7 +2342,7 @@ void PlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -2344,12 +2350,12 @@ void PlayerData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVi void PlayerData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::PartyMember)) - allowedMaskForTarget |= { 0x00000022u, 0xFFFFC000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x3FFFFFFFu, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000022u, 0xFFFF0000u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x00000000u, 0x00000000u }; } void PlayerData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x00003FFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xC0000000u, 0xFFFFFFFFu, 0x00001FFFu }); + Mask allowedMaskForTarget({ 0xFFFFFFDDu, 0x0000FFFFu, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFFFFu, 0xFFFFFFFFu }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -2565,11 +2571,11 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { if (changesMask[34]) { - data << int32(Field_B0); + data << int32(Field_1AC); } if (changesMask[35]) { - data << int32(Field_B4); + data << int32(Field_1B0); } if (changesMask[36]) { @@ -2587,17 +2593,25 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data << int32(SoulbindID); } - if (changesMask[42]) + if (changesMask[40]) + { + data << Field_1F0; + } + if (changesMask[41]) + { + data << int32(Field_200); + } + if (changesMask[44]) { PersonalTabard->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[33]) { - data.WriteBits(Name->size(), 32); + data.WriteBits(Name->size(), 6); } data.WriteBits(DeclinedNames.has_value(), 1); data.FlushBits(); - if (changesMask[40]) + if (changesMask[42]) { data << DungeonScore; } @@ -2605,7 +2619,7 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign { data.WriteString(Name); } - if (changesMask[41]) + if (changesMask[43]) { if (DeclinedNames.has_value()) { @@ -2613,21 +2627,21 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[43]) + if (changesMask[45]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[44 + i]) + if (changesMask[46 + i]) { data << uint8(PartyType[i]); } } } - if (changesMask[46]) + if (changesMask[48]) { for (uint32 i = 0; i < 175; ++i) { - if (changesMask[47 + i]) + if (changesMask[49 + i]) { if (noQuestLogChangesMask) QuestLog[i].WriteCreate(data, owner, receiver); @@ -2636,36 +2650,46 @@ void PlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ign } } } - if (changesMask[222]) + if (changesMask[224]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[223 + i]) + if (changesMask[225 + i]) { VisibleItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[242]) + if (changesMask[244]) { for (uint32 i = 0; i < 6; ++i) { - if (changesMask[243 + i]) + if (changesMask[245 + i]) { data << float(AvgItemLevel[i]); } } } - if (changesMask[249]) + if (changesMask[268]) { for (uint32 i = 0; i < 19; ++i) { - if (changesMask[250 + i]) + if (changesMask[269 + i]) { data << uint32(Field_3120[i]); } } } + if (changesMask[251]) + { + for (uint32 i = 0; i < 16; ++i) + { + if (changesMask[252 + i]) + { + data << VisibleEquipableSpells[i]; + } + } + } data.FlushBits(); } @@ -2703,12 +2727,14 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(HonorLevel); Base::ClearChangesMask(LogoutTime); Base::ClearChangesMask(Name); - Base::ClearChangesMask(Field_B0); - Base::ClearChangesMask(Field_B4); + Base::ClearChangesMask(Field_1AC); + Base::ClearChangesMask(Field_1B0); Base::ClearChangesMask(CurrentBattlePetSpeciesID); Base::ClearChangesMask(CtrOptions); Base::ClearChangesMask(CovenantID); Base::ClearChangesMask(SoulbindID); + Base::ClearChangesMask(Field_1F0); + Base::ClearChangesMask(Field_200); Base::ClearChangesMask(DungeonScore); Base::ClearChangesMask(DeclinedNames); Base::ClearChangesMask(PersonalTabard); @@ -2716,6 +2742,7 @@ void PlayerData::ClearChangesMask() Base::ClearChangesMask(QuestLog); Base::ClearChangesMask(VisibleItems); Base::ClearChangesMask(AvgItemLevel); + Base::ClearChangesMask(VisibleEquipableSpells); Base::ClearChangesMask(Field_3120); _changesMask.ResetAll(); } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 078f0e5738c..7440d41d65b 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -486,7 +486,7 @@ struct CustomTabardInfo : public IsUpdateFieldStructureTag, public HasChangesMas void ClearChangesMask(); }; -struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269> +struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<288> { UpdateField<bool, 0, 1> HasQuestSession; UpdateField<bool, 0, 2> HasLevelLink; @@ -520,20 +520,23 @@ struct PlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<269> UpdateField<int32, 0, 30> HonorLevel; UpdateField<int64, 0, 31> LogoutTime; UpdateField<std::string, 32, 33> Name; - UpdateField<int32, 32, 34> Field_B0; - UpdateField<int32, 32, 35> Field_B4; + UpdateField<int32, 32, 34> Field_1AC; + UpdateField<int32, 32, 35> Field_1B0; UpdateField<int32, 32, 36> CurrentBattlePetSpeciesID; UpdateField<UF::CTROptions, 32, 37> CtrOptions; UpdateField<int32, 32, 38> CovenantID; UpdateField<int32, 32, 39> SoulbindID; - UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 40> DungeonScore; - OptionalUpdateField<UF::DeclinedNames, 32, 41> DeclinedNames; - UpdateField<UF::CustomTabardInfo, 32, 42> PersonalTabard; - UpdateFieldArray<uint8, 2, 43, 44> PartyType; - UpdateFieldArray<UF::QuestLog, 175, 46, 47> QuestLog; - UpdateFieldArray<UF::VisibleItem, 19, 222, 223> VisibleItems; - UpdateFieldArray<float, 6, 242, 243> AvgItemLevel; - UpdateFieldArray<uint32, 19, 249, 250> Field_3120; + UpdateField<ObjectGuid, 32, 40> Field_1F0; + UpdateField<int32, 32, 41> Field_200; + UpdateField<WorldPackets::MythicPlus::DungeonScoreSummary, 32, 42> DungeonScore; + OptionalUpdateField<UF::DeclinedNames, 32, 43> DeclinedNames; + UpdateField<UF::CustomTabardInfo, 32, 44> PersonalTabard; + UpdateFieldArray<uint8, 2, 45, 46> PartyType; + UpdateFieldArray<UF::QuestLog, 175, 48, 49> QuestLog; + UpdateFieldArray<UF::VisibleItem, 19, 224, 225> VisibleItems; + UpdateFieldArray<float, 6, 244, 245> AvgItemLevel; + UpdateFieldArray<WorldPackets::Item::ItemInstance, 16, 251, 252> VisibleEquipableSpells; + UpdateFieldArray<uint32, 19, 268, 269> Field_3120; 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; |
