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 | |
| parent | 792721ad6450065ec81da6472c1e2a143ad57341 (diff) | |
Core/PacketIO: 9.1.5 updatefields and SMSG_UPDATE_OBJECT structure
Diffstat (limited to 'src/server/game')
| -rw-r--r-- | src/server/game/Entities/AreaTrigger/AreaTrigger.cpp | 5 | ||||
| -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 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 4 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 3 | ||||
| -rw-r--r-- | src/server/game/Miscellaneous/SharedDefines.h | 2 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp | 12 | ||||
| -rw-r--r-- | src/server/game/Server/Packets/MythicPlusPacketsCommon.h | 12 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.cpp | 20 | ||||
| -rw-r--r-- | src/server/game/Spells/Auras/SpellAuraEffects.h | 1 |
11 files changed, 243 insertions, 190 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index cd4c495b64e..a3720060d6f 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -148,6 +148,11 @@ bool AreaTrigger::Create(uint32 areaTriggerCreatePropertiesId, Unit* caster, Uni if (GetCreateProperties()->ExtraScale.Data.Structured.OverrideActive) SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ExtraScaleCurve).ModifyValue(&UF::ScaleCurve::OverrideActive), GetCreateProperties()->ExtraScale.Data.Structured.OverrideActive); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimationDataID), GetCreateProperties()->AnimId); + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::AnimKitID), GetCreateProperties()->AnimKitId); + if (GetTemplate() && GetTemplate()->HasFlag(AREATRIGGER_FLAG_UNK3)) + SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::VisualAnim).ModifyValue(&UF::VisualAnim::Field_C), true); + PhasingHandler::InheritPhaseShift(this, caster); if (target && GetTemplate() && GetTemplate()->HasFlag(AREATRIGGER_FLAG_HAS_ATTACHED)) 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; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2fb445583cc..24d2fd3f033 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -17703,7 +17703,7 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder* holder) // "position_x, position_y, position_z, map, orientation, taximask, createTime, createMode, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " // "resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " // "totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, " - // "health, power1, power2, power3, power4, power5, power6, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, " + // "health, power1, power2, power3, power4, power5, power6, power7, instance_id, activeTalentGroup, lootSpecId, exploredZones, knownTitles, actionBars, raidDifficulty, legacyRaidDifficulty, fishingSteps, " // "honor, honorLevel, honorRestState, honorRestBonus, numRespecs " // "FROM characters c LEFT JOIN character_fishingsteps cfs ON c.guid = cfs.guid WHERE c.guid = ?", CONNECTION_ASYNC); @@ -21487,7 +21487,7 @@ void Player::_SaveStats(CharacterDatabaseTransaction& trans) const stmt->setUInt32(index++, GetMaxHealth()); for (uint8 i = 0; i < MAX_POWERS_PER_CLASS; ++i) - stmt->setUInt32(index++, GetMaxPower(Powers(i))); + stmt->setUInt32(index++, m_unitData->MaxPower[i]); for (uint8 i = 0; i < MAX_STATS; ++i) stmt->setUInt32(index++, GetStat(Stats(i))); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 252cb202ffc..2f1c19b1fa2 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2685,9 +2685,6 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void AddTrackCreatureFlag(uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } void RemoveTrackCreatureFlag(uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackCreatureMask), flags); } - void AddTrackResourceFlag(uint32 index, uint32 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); } - void RemoveTrackResourceFlag(uint32 index, uint32 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::TrackResourceMask, index), flags); } - void SetVersatilityBonus(float value) { SetUpdateFieldStatValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::VersatilityBonus), value); } void ApplyModOverrideSpellPowerByAPPercent(float mod, bool apply) { ApplyModUpdateFieldValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::OverrideSpellPowerByAPPercent), mod, apply); } diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 6ecad771c96..e5ad3203c63 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -286,7 +286,7 @@ enum Powers : int8 POWER_HEALTH = -2 // (-2 as signed value) }; -#define MAX_POWERS_PER_CLASS 6 +#define MAX_POWERS_PER_CLASS 7 enum SpellSchools : uint16 { diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp index 91206bbb847..fd20e6fd25c 100644 --- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.cpp @@ -24,7 +24,7 @@ namespace MythicPlus ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapSummary const& dungeonScoreMapSummary) { data << int32(dungeonScoreMapSummary.ChallengeModeID); - data << int32(dungeonScoreMapSummary.MapScore); + data << float(dungeonScoreMapSummary.MapScore); data << int32(dungeonScoreMapSummary.BestRunLevel); data << int32(dungeonScoreMapSummary.BestRunDurationMS); data.WriteBit(dungeonScoreMapSummary.FinishedSuccess); @@ -35,7 +35,7 @@ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapSummary const& dungeonSc ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSummary const& dungeonScoreSummary) { - data << int32(dungeonScoreSummary.CurrentSeasonScore); + data << float(dungeonScoreSummary.CurrentSeasonScore); data << uint32(dungeonScoreSummary.Runs.size()); for (DungeonScoreMapSummary const& dungeonScoreMapSummary : dungeonScoreSummary.Runs) data << dungeonScoreMapSummary; @@ -70,7 +70,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MythicPlusRun const& mythicPlusRun) data << int32(mythicPlusRun.Season); data.append(mythicPlusRun.KeystoneAffixIDs.data(), mythicPlusRun.KeystoneAffixIDs.size()); data << uint32(mythicPlusRun.Members.size()); - data << int32(mythicPlusRun.RunScore); + data << float(mythicPlusRun.RunScore); for (MythicPlusMember const& member : mythicPlusRun.Members) data << member; @@ -83,7 +83,7 @@ ByteBuffer& operator<<(ByteBuffer& data, MythicPlusRun const& mythicPlusRun) ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreBestRunForAffix const& dungeonScoreBestRunForAffix) { data << int32(dungeonScoreBestRunForAffix.KeystoneAffixID); - data << int32(dungeonScoreBestRunForAffix.Score); + data << float(dungeonScoreBestRunForAffix.Score); data << dungeonScoreBestRunForAffix.Run; return data; @@ -93,7 +93,7 @@ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreMapData const& dungeonScore { data << int32(dungeonScoreMapData.MapChallengeModeID); data << uint32(dungeonScoreMapData.BestRuns.size()); - data << int32(dungeonScoreMapData.OverAllScore); + data << float(dungeonScoreMapData.OverAllScore); for (DungeonScoreBestRunForAffix const& bestRun : dungeonScoreMapData.BestRuns) data << bestRun; @@ -104,7 +104,7 @@ ByteBuffer& operator<<(ByteBuffer& data, DungeonScoreSeasonData const& dungeonSc { data << int32(dungeonScoreSeasonData.Season); data << uint32(dungeonScoreSeasonData.Maps.size()); - data << int32(dungeonScoreSeasonData.SeasonScore); + data << float(dungeonScoreSeasonData.SeasonScore); for (DungeonScoreMapData const& map : dungeonScoreSeasonData.Maps) data << map; diff --git a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h index dc48360aea7..b0ada2e947e 100644 --- a/src/server/game/Server/Packets/MythicPlusPacketsCommon.h +++ b/src/server/game/Server/Packets/MythicPlusPacketsCommon.h @@ -29,7 +29,7 @@ namespace WorldPackets struct DungeonScoreMapSummary { int32 ChallengeModeID = 0; - int32 MapScore = 0; + float MapScore = 0; int32 BestRunLevel = 0; int32 BestRunDurationMS = 0; bool FinishedSuccess = false; @@ -37,7 +37,7 @@ namespace WorldPackets struct DungeonScoreSummary { - int32 CurrentSeasonScore = 0; + float CurrentSeasonScore = 0; std::vector<DungeonScoreMapSummary> Runs; }; @@ -66,7 +66,7 @@ namespace WorldPackets Timestamp<> CompletionDate; int32 Season; std::vector<MythicPlusMember> Members; - int32 RunScore; + float RunScore; std::array<int32, 4> KeystoneAffixIDs; }; @@ -74,14 +74,14 @@ namespace WorldPackets { int32 KeystoneAffixID = 0; MythicPlusRun Run; - int32 Score = 0; + float Score = 0; }; struct DungeonScoreMapData { int32 MapChallengeModeID = 0; std::vector<DungeonScoreBestRunForAffix> BestRuns; - int32 OverAllScore = 0; + float OverAllScore = 0; }; @@ -89,7 +89,7 @@ namespace WorldPackets { int32 Season = 0; std::vector<DungeonScoreMapData> Maps; - int32 SeasonScore = 0; + float SeasonScore = 0; }; struct DungeonScoreData diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.cpp b/src/server/game/Spells/Auras/SpellAuraEffects.cpp index 691b54a3f03..a9bfb2cdb82 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.cpp +++ b/src/server/game/Spells/Auras/SpellAuraEffects.cpp @@ -113,7 +113,7 @@ NonDefaultConstructible<pAuraEffectHandler> AuraEffectHandler[TOTAL_AURAS]= &AuraEffect::HandleNoImmediateEffect, // 42 SPELL_AURA_PROC_TRIGGER_SPELL implemented in AuraEffect::HandleProc &AuraEffect::HandleNoImmediateEffect, // 43 SPELL_AURA_PROC_TRIGGER_DAMAGE implemented in AuraEffect::HandleProc &AuraEffect::HandleAuraTrackCreatures, // 44 SPELL_AURA_TRACK_CREATURES - &AuraEffect::HandleAuraTrackResources, // 45 SPELL_AURA_TRACK_RESOURCES + &AuraEffect::HandleNULL, // 45 SPELL_AURA_TRACK_RESOURCES implemented clientside &AuraEffect::HandleNULL, // 46 SPELL_AURA_46 (used in test spells 54054 and 54058, and spell 48050) (3.0.8a) &AuraEffect::HandleAuraModParryPercent, // 47 SPELL_AURA_MOD_PARRY_PERCENT &AuraEffect::HandleNULL, // 48 SPELL_AURA_48 spell Napalm (area damage spell with additional delayed damage effect) @@ -2386,24 +2386,6 @@ void AuraEffect::HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 m target->RemoveTrackCreatureFlag(uint32(1) << (GetMiscValue() - 1)); } -void AuraEffect::HandleAuraTrackResources(AuraApplication const* aurApp, uint8 mode, bool apply) const -{ - if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) - return; - - Player* target = aurApp->GetTarget()->ToPlayer(); - if (!target) - return; - - uint32 bitIndex = GetMiscValue() - 1; - uint32 index = bitIndex / 32; - uint32 flag = 1 << (bitIndex % 32); - if (apply) - target->AddTrackResourceFlag(index, flag); - else - target->RemoveTrackResourceFlag(index, flag); -} - void AuraEffect::HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const { if (!(mode & AURA_EFFECT_HANDLE_SEND_FOR_CLIENT_MASK)) diff --git a/src/server/game/Spells/Auras/SpellAuraEffects.h b/src/server/game/Spells/Auras/SpellAuraEffects.h index bc9f3c5ff18..7f62550a250 100644 --- a/src/server/game/Spells/Auras/SpellAuraEffects.h +++ b/src/server/game/Spells/Auras/SpellAuraEffects.h @@ -167,7 +167,6 @@ class TC_GAME_API AuraEffect void HandleAuraDisableAttackingExceptAbilities(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModNoActions(AuraApplication const* aurApp, uint8 mode, bool apply) const; // tracking - void HandleAuraTrackResources(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraTrackCreatures(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraTrackStealthed(AuraApplication const* aurApp, uint8 mode, bool apply) const; void HandleAuraModStalked(AuraApplication const* aurApp, uint8 mode, bool apply) const; |
