diff options
| author | Shauren <shauren.trinity@gmail.com> | 2023-01-28 01:53:26 +0100 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2023-01-28 01:53:26 +0100 |
| commit | 4bec7233badf9d3ab71dbdde8b24f66f7c4eedfb (patch) | |
| tree | b0d28e475ba99293fd0ca531a82a3446a027078f /src/server/game/Entities | |
| parent | 1bb9ba457418889d848998ccf6d412b1b369a5d3 (diff) | |
Core: Updated to 10.0.5
Diffstat (limited to 'src/server/game/Entities')
| -rw-r--r-- | src/server/game/Entities/GameObject/GameObjectData.h | 24 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.cpp | 457 | ||||
| -rw-r--r-- | src/server/game/Entities/Object/Updates/UpdateFields.h | 305 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 43 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 9 |
5 files changed, 467 insertions, 371 deletions
diff --git a/src/server/game/Entities/GameObject/GameObjectData.h b/src/server/game/Entities/GameObject/GameObjectData.h index 1012000322c..91b95eb0888 100644 --- a/src/server/game/Entities/GameObject/GameObjectData.h +++ b/src/server/game/Entities/GameObject/GameObjectData.h @@ -40,7 +40,7 @@ struct GameObjectTemplate int32 ContentTuningId; union { - // 0 GAMEOBJECT_TYPE_DOOR + // 0 GAMEOBJECT_TYPE_DOOR struct { uint32 startOpen; // 0 startOpen, enum { false, true, }; Default: false @@ -512,6 +512,7 @@ struct GameObjectTemplate uint32 SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0 uint32 InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 uint32 CustomizationScope; // 4 Customization Scope, int, Min value: 0, Max value: 2147483647, Default value: 0 + uint32 Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false } barberChair; // 33 GAMEOBJECT_TYPE_DESTRUCTIBLE_BUILDING struct @@ -818,6 +819,12 @@ struct GameObjectTemplate { uint32 Profession; // 0 Profession, enum { First Aid, Blacksmithing, Leatherworking, Alchemy, Herbalism, Cooking, Mining, Tailoring, Engineering, Enchanting, Fishing, Skinning, Jewelcrafting, Inscription, Archaeology, }; Default: Blacksmithing } craftingTable; + // 62 GAMEOBJECT_TYPE_PERKS_PROGRAM_CHEST + struct + { + uint32 Script; // 0 Script, References: SpellScript, NoValue = 0 + uint32 autoClose; // 1 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 3000 + } PerksProgramChest; struct { uint32 data[MAX_GAMEOBJECT_DATA]; @@ -1052,13 +1059,14 @@ struct GameObjectTemplate { switch (type) { - case GAMEOBJECT_TYPE_DOOR: return door.autoClose; - case GAMEOBJECT_TYPE_BUTTON: return button.autoClose; - case GAMEOBJECT_TYPE_TRAP: return trap.autoClose; - case GAMEOBJECT_TYPE_GOOBER: return goober.autoClose; - case GAMEOBJECT_TYPE_TRANSPORT: return transport.autoClose; - case GAMEOBJECT_TYPE_AREADAMAGE: return areaDamage.autoClose; - case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.autoClose; + case GAMEOBJECT_TYPE_DOOR: return door.autoClose; + case GAMEOBJECT_TYPE_BUTTON: return button.autoClose; + case GAMEOBJECT_TYPE_TRAP: return trap.autoClose; + case GAMEOBJECT_TYPE_GOOBER: return goober.autoClose; + case GAMEOBJECT_TYPE_TRANSPORT: return transport.autoClose; + case GAMEOBJECT_TYPE_AREADAMAGE: return areaDamage.autoClose; + case GAMEOBJECT_TYPE_TRAPDOOR: return trapdoor.autoClose; + case GAMEOBJECT_TYPE_PERKS_PROGRAM_CHEST: return PerksProgramChest.autoClose; default: return 0; } } diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 1b7632da868..1cb77b9afe2 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -1107,6 +1107,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi data << int32(LooksLikeMountID); data << int32(LooksLikeCreatureID); data << int32(LookAtControllerID); + data << int32(PerksVendorItemID); data << int32(TaxiNodesID); data << GuildGUID; data << uint32(PassiveSpells.size()); @@ -1131,7 +1132,7 @@ void UnitData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Unit const* owner, Player const* receiver) const { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xFC000FFFu, 0x00000001u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xF8001FFFu, 0x00000003u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1139,16 +1140,16 @@ void UnitData::WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisi void UnitData::AppendAllowedFieldsMaskForFlag(Mask& allowedMaskForTarget, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Owner)) - allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x200000FEu, 0x03FFF000u, 0xFFFFFFFEu, 0x0000000Fu }; + allowedMaskForTarget |= { 0x00002000u, 0x3C010000u, 0xFFC20000u, 0x400000FEu, 0x07FFE000u, 0xFFFFFFFCu, 0x0000001Fu }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::UnitAll)) - allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x20000000u, 0x03FFF000u, 0x00000000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x00000000u, 0x00000000u, 0x40000000u, 0x07FFE000u, 0x00000000u, 0x00000000u }; if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag::Empath)) - allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x003FC000u, 0x00000000u }; + allowedMaskForTarget |= { 0x00000000u, 0x3C000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x007F8000u, 0x00000000u }; } void UnitData::FilterDisallowedFieldsMaskForFlag(Mask& changesMask, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags) { - Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xFC000FFFu, 0x00000001u, 0x00000000u }); + Mask allowedMaskForTarget({ 0xFFFFDFFFu, 0xC3FEFFFFu, 0x003DFFFFu, 0xFFFFFF01u, 0xF8001FFFu, 0x00000003u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask &= allowedMaskForTarget; } @@ -1676,108 +1677,112 @@ void UnitData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bool ignor } if (changesMask[117]) { - data << int32(TaxiNodesID); + data << int32(PerksVendorItemID); } if (changesMask[118]) { - data << GuildGUID; + data << int32(TaxiNodesID); } if (changesMask[119]) { - data << int32(FlightCapabilityID); + data << GuildGUID; } if (changesMask[120]) { - data << uint32(SilencedSchoolMask); + data << int32(FlightCapabilityID); } if (changesMask[121]) { + data << uint32(SilencedSchoolMask); + } + if (changesMask[122]) + { data << NameplateAttachToGUID; } } - if (changesMask[122]) + if (changesMask[123]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[123 + i]) + if (changesMask[124 + i]) { data << uint32(ViewerDependentValue<NpcFlagsTag>::GetValue(this, i, owner, receiver)); } } } - if (changesMask[125]) + if (changesMask[126]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[126 + i]) + if (changesMask[127 + i]) { data << int32(Power[i]); } - if (changesMask[133 + i]) + if (changesMask[134 + i]) { data << int32(MaxPower[i]); } - if (changesMask[140 + i]) + if (changesMask[141 + i]) { data << float(PowerRegenFlatModifier[i]); } - if (changesMask[147 + i]) + if (changesMask[148 + i]) { data << float(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[154]) + if (changesMask[155]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[155 + i]) + if (changesMask[156 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[158]) + if (changesMask[159]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[159 + i]) + if (changesMask[160 + i]) { data << uint32(AttackRoundBaseTime[i]); } } } - if (changesMask[161]) + if (changesMask[162]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[162 + i]) + if (changesMask[163 + i]) { data << int32(Stats[i]); } - if (changesMask[166 + i]) + if (changesMask[167 + i]) { data << int32(StatPosBuff[i]); } - if (changesMask[170 + i]) + if (changesMask[171 + i]) { data << int32(StatNegBuff[i]); } } } - if (changesMask[174]) + if (changesMask[175]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[175 + i]) + if (changesMask[176 + i]) { data << int32(Resistances[i]); } - if (changesMask[182 + i]) + if (changesMask[183 + i]) { data << int32(BonusResistanceMods[i]); } - if (changesMask[189 + i]) + if (changesMask[190 + i]) { data << int32(ManaCostModifier[i]); } @@ -1900,6 +1905,7 @@ void UnitData::ClearChangesMask() Base::ClearChangesMask(LooksLikeMountID); Base::ClearChangesMask(LooksLikeCreatureID); Base::ClearChangesMask(LookAtControllerID); + Base::ClearChangesMask(PerksVendorItemID); Base::ClearChangesMask(TaxiNodesID); Base::ClearChangesMask(GuildGUID); Base::ClearChangesMask(FlightCapabilityID); @@ -3499,6 +3505,24 @@ void CraftingOrder::ClearChangesMask() _changesMask.ResetAll(); } +void PersonalCraftingOrderCount::WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const +{ + data << int32(ProfessionID); + data << uint32(Count); +} + +void PersonalCraftingOrderCount::WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const +{ + data << int32(ProfessionID); + data << uint32(Count); +} + +bool PersonalCraftingOrderCount::operator==(PersonalCraftingOrderCount const& right) const +{ + return ProfessionID == right.ProfessionID + && Count == right.Count; +} + void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const { for (uint32 i = 0; i < 218; ++i) @@ -3628,6 +3652,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f } data << int32(Honor); data << int32(HonorNextLevel); + data << int32(PerksProgramCurrency); data << uint8(NumBankSlots); data << uint32(ResearchSites.size()); data << uint32(ResearchSiteProgress.size()); @@ -3665,6 +3690,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << uint32(TraitConfigs.size()); data << uint32(ActiveCombatTraitConfigID); data << uint32(CraftingOrders.size()); + data << uint32(PersonalCraftingOrderCounts.size()); for (uint32 i = 0; i < KnownTitles.size(); ++i) { data << uint64(KnownTitles[i]); @@ -3749,17 +3775,23 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { data << int32(DisabledSpells[i]); } + for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) + { + PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver); + } data.FlushBits(); data.WriteBit(BackpackAutoSortDisabled); data.WriteBit(BankAutoSortDisabled); data.WriteBit(SortBagsRightToLeft); data.WriteBit(InsertItemsLeftToRight); + data.WriteBit(HasPerksProgramPendingReward); data.WriteBits(QuestSession.has_value(), 1); - Field_1410->WriteCreate(data, owner, receiver); + data << FrozenPerksVendorItem; if (QuestSession.has_value()) { QuestSession->WriteCreate(data, owner, receiver); } + Field_1410->WriteCreate(data, owner, receiver); data << DungeonScore; for (uint32 i = 0; i < PvpInfo.size(); ++i) { @@ -3814,124 +3846,128 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[5]) { + data.WriteBit(HasPerksProgramPendingReward); + } + if (changesMask[6]) + { if (!ignoreNestedChangesMask) KnownTitles.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } - if (changesMask[6]) + if (changesMask[7]) { if (!ignoreNestedChangesMask) PvpInfo.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } - if (changesMask[7]) + if (changesMask[8]) { if (!ignoreNestedChangesMask) ResearchSites.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ResearchSites.size(), data); } - if (changesMask[8]) + if (changesMask[9]) { if (!ignoreNestedChangesMask) ResearchSiteProgress.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ResearchSiteProgress.size(), data); } - if (changesMask[9]) + if (changesMask[10]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.size(), data); } - if (changesMask[10]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.size(), data); } - if (changesMask[11]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.size(), data); } - if (changesMask[12]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.size(), data); } - if (changesMask[13]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.size(), data); } - if (changesMask[14]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.size(), data); } - if (changesMask[15]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.size(), data); } - if (changesMask[16]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.size(), data); } - if (changesMask[17]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.size(), data); } - if (changesMask[18]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.size(), data); } - if (changesMask[19]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.size(), data); } - if (changesMask[20]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.size(), data); } - if (changesMask[21]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.size(), data); } - if (changesMask[22]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); @@ -3939,11 +3975,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.size(), data); } } - if (changesMask[30]) + if (changesMask[32]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[31 + i]) + if (changesMask[33 + i]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -3962,60 +3998,67 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.FlushBits(); if (changesMask[0]) { - if (changesMask[23]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.size(), data); } - if (changesMask[24]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.size(), data); } - if (changesMask[25]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.size(), data); } - if (changesMask[26]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.size(), data); } - if (changesMask[27]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.size(), data); } - if (changesMask[28]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.size(), data); } - if (changesMask[29]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.size(), data); } + if (changesMask[31]) + { + if (!ignoreNestedChangesMask) + PersonalCraftingOrderCounts.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.size(), data); + } } data.FlushBits(); if (changesMask[0]) { - if (changesMask[5]) + if (changesMask[6]) { for (uint32 i = 0; i < KnownTitles.size(); ++i) { @@ -4025,7 +4068,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[7]) + if (changesMask[8]) { for (uint32 i = 0; i < ResearchSites.size(); ++i) { @@ -4035,7 +4078,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[8]) + if (changesMask[9]) { for (uint32 i = 0; i < ResearchSiteProgress.size(); ++i) { @@ -4045,7 +4088,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[9]) + if (changesMask[10]) { for (uint32 i = 0; i < DailyQuestsCompleted.size(); ++i) { @@ -4055,7 +4098,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[10]) + if (changesMask[11]) { for (uint32 i = 0; i < AvailableQuestLineXQuestIDs.size(); ++i) { @@ -4065,7 +4108,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[11]) + if (changesMask[12]) { for (uint32 i = 0; i < Heirlooms.size(); ++i) { @@ -4075,7 +4118,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[12]) + if (changesMask[13]) { for (uint32 i = 0; i < HeirloomFlags.size(); ++i) { @@ -4085,7 +4128,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[13]) + if (changesMask[14]) { for (uint32 i = 0; i < Toys.size(); ++i) { @@ -4095,7 +4138,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[14]) + if (changesMask[15]) { for (uint32 i = 0; i < ToyFlags.size(); ++i) { @@ -4105,7 +4148,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[15]) + if (changesMask[16]) { for (uint32 i = 0; i < Transmog.size(); ++i) { @@ -4115,7 +4158,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[16]) + if (changesMask[17]) { for (uint32 i = 0; i < ConditionalTransmog.size(); ++i) { @@ -4125,7 +4168,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[17]) + if (changesMask[18]) { for (uint32 i = 0; i < SelfResSpells.size(); ++i) { @@ -4135,7 +4178,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[18]) + if (changesMask[19]) { for (uint32 i = 0; i < RuneforgePowers.size(); ++i) { @@ -4145,7 +4188,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[19]) + if (changesMask[20]) { for (uint32 i = 0; i < TransmogIllusions.size(); ++i) { @@ -4155,7 +4198,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[21]) + if (changesMask[22]) { for (uint32 i = 0; i < SpellPctModByLabel.size(); ++i) { @@ -4165,7 +4208,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[22]) + if (changesMask[23]) { for (uint32 i = 0; i < SpellFlatModByLabel.size(); ++i) { @@ -4175,7 +4218,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[23]) + if (changesMask[24]) { for (uint32 i = 0; i < MawPowers.size(); ++i) { @@ -4185,7 +4228,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[24]) + if (changesMask[25]) { for (uint32 i = 0; i < MultiFloorExploration.size(); ++i) { @@ -4195,7 +4238,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[25]) + if (changesMask[26]) { for (uint32 i = 0; i < RecipeProgression.size(); ++i) { @@ -4205,7 +4248,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[26]) + if (changesMask[27]) { for (uint32 i = 0; i < ReplayedQuests.size(); ++i) { @@ -4215,7 +4258,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[27]) + if (changesMask[28]) { for (uint32 i = 0; i < DisabledSpells.size(); ++i) { @@ -4225,7 +4268,17 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[6]) + if (changesMask[31]) + { + for (uint32 i = 0; i < PersonalCraftingOrderCounts.size(); ++i) + { + if (PersonalCraftingOrderCounts.HasChanged(i) || ignoreNestedChangesMask) + { + PersonalCraftingOrderCounts[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[7]) { for (uint32 i = 0; i < PvpInfo.size(); ++i) { @@ -4235,7 +4288,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[20]) + if (changesMask[21]) { for (uint32 i = 0; i < CharacterRestrictions.size(); ++i) { @@ -4245,7 +4298,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[28]) + if (changesMask[29]) { for (uint32 i = 0; i < TraitConfigs.size(); ++i) { @@ -4255,7 +4308,7 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[29]) + if (changesMask[30]) { for (uint32 i = 0; i < CraftingOrders.size(); ++i) { @@ -4265,324 +4318,328 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[32]) - { - data << FarsightObject; - } - if (changesMask[33]) - { - data << SummonedBattlePetGUID; - } } if (changesMask[34]) { if (changesMask[35]) { - data << uint64(Coinage); + data << FarsightObject; } if (changesMask[36]) { - data << int32(XP); + data << SummonedBattlePetGUID; } if (changesMask[37]) { - data << int32(NextLevelXP); + data << uint64(Coinage); } if (changesMask[38]) { - data << int32(TrialXP); + data << int32(XP); } if (changesMask[39]) { - Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << int32(NextLevelXP); } if (changesMask[40]) { - data << int32(CharacterPoints); + data << int32(TrialXP); } if (changesMask[41]) { - data << int32(MaxTalentTiers); + Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[42]) { - data << uint32(TrackCreatureMask); + data << int32(CharacterPoints); } if (changesMask[43]) { - data << float(MainhandExpertise); + data << int32(MaxTalentTiers); } if (changesMask[44]) { - data << float(OffhandExpertise); + data << uint32(TrackCreatureMask); } if (changesMask[45]) { - data << float(RangedExpertise); + data << float(MainhandExpertise); } if (changesMask[46]) { - data << float(CombatRatingExpertise); + data << float(OffhandExpertise); } if (changesMask[47]) { - data << float(BlockPercentage); + data << float(RangedExpertise); } if (changesMask[48]) { - data << float(DodgePercentage); + data << float(CombatRatingExpertise); } if (changesMask[49]) { - data << float(DodgePercentageFromAttribute); + data << float(BlockPercentage); } if (changesMask[50]) { - data << float(ParryPercentage); + data << float(DodgePercentage); } if (changesMask[51]) { - data << float(ParryPercentageFromAttribute); + data << float(DodgePercentageFromAttribute); } if (changesMask[52]) { - data << float(CritPercentage); + data << float(ParryPercentage); } if (changesMask[53]) { - data << float(RangedCritPercentage); + data << float(ParryPercentageFromAttribute); } if (changesMask[54]) { - data << float(OffhandCritPercentage); + data << float(CritPercentage); } if (changesMask[55]) { - data << float(SpellCritPercentage); + data << float(RangedCritPercentage); } if (changesMask[56]) { - data << int32(ShieldBlock); + data << float(OffhandCritPercentage); } if (changesMask[57]) { - data << float(ShieldBlockCritPercentage); + data << float(SpellCritPercentage); } if (changesMask[58]) { - data << float(Mastery); + data << int32(ShieldBlock); } if (changesMask[59]) { - data << float(Speed); + data << float(ShieldBlockCritPercentage); } if (changesMask[60]) { - data << float(Avoidance); + data << float(Mastery); } if (changesMask[61]) { - data << float(Sturdiness); + data << float(Speed); } if (changesMask[62]) { - data << int32(Versatility); + data << float(Avoidance); } if (changesMask[63]) { - data << float(VersatilityBonus); + data << float(Sturdiness); } if (changesMask[64]) { - data << float(PvpPowerDamage); + data << int32(Versatility); } if (changesMask[65]) { - data << float(PvpPowerHealing); + data << float(VersatilityBonus); } } if (changesMask[66]) { if (changesMask[67]) { - data << int32(ModHealingDonePos); + data << float(PvpPowerDamage); } if (changesMask[68]) { - data << float(ModHealingPercent); + data << float(PvpPowerHealing); } if (changesMask[69]) { - data << float(ModPeriodicHealingDonePercent); + data << int32(ModHealingDonePos); } if (changesMask[70]) { - data << float(ModSpellPowerPercent); + data << float(ModHealingPercent); } if (changesMask[71]) { - data << float(ModResiliencePercent); + data << float(ModPeriodicHealingDonePercent); } if (changesMask[72]) { - data << float(OverrideSpellPowerByAPPercent); + data << float(ModSpellPowerPercent); } if (changesMask[73]) { - data << float(OverrideAPBySpellPowerPercent); + data << float(ModResiliencePercent); } if (changesMask[74]) { - data << int32(ModTargetResistance); + data << float(OverrideSpellPowerByAPPercent); } if (changesMask[75]) { - data << int32(ModTargetPhysicalResistance); + data << float(OverrideAPBySpellPowerPercent); } if (changesMask[76]) { - data << uint32(LocalFlags); + data << int32(ModTargetResistance); } if (changesMask[77]) { - data << uint8(GrantableLevels); + data << int32(ModTargetPhysicalResistance); } if (changesMask[78]) { - data << uint8(MultiActionBars); + data << uint32(LocalFlags); } if (changesMask[79]) { - data << uint8(LifetimeMaxRank); + data << uint8(GrantableLevels); } if (changesMask[80]) { - data << uint8(NumRespecs); + data << uint8(MultiActionBars); } if (changesMask[81]) { - data << uint32(PvpMedals); + data << uint8(LifetimeMaxRank); } if (changesMask[82]) { - data << uint16(TodayHonorableKills); + data << uint8(NumRespecs); } if (changesMask[83]) { - data << uint16(YesterdayHonorableKills); + data << uint32(PvpMedals); } if (changesMask[84]) { - data << uint32(LifetimeHonorableKills); + data << uint16(TodayHonorableKills); } if (changesMask[85]) { - data << int32(WatchedFactionIndex); + data << uint16(YesterdayHonorableKills); } if (changesMask[86]) { - data << int32(MaxLevel); + data << uint32(LifetimeHonorableKills); } if (changesMask[87]) { - data << int32(ScalingPlayerLevelDelta); + data << int32(WatchedFactionIndex); } if (changesMask[88]) { - data << int32(MaxCreatureScalingLevel); + data << int32(MaxLevel); } if (changesMask[89]) { - data << int32(PetSpellPower); + data << int32(ScalingPlayerLevelDelta); } if (changesMask[90]) { - data << float(UiHitModifier); + data << int32(MaxCreatureScalingLevel); } if (changesMask[91]) { - data << float(UiSpellHitModifier); + data << int32(PetSpellPower); } if (changesMask[92]) { - data << int32(HomeRealmTimeOffset); + data << float(UiHitModifier); } if (changesMask[93]) { - data << float(ModPetHaste); + data << float(UiSpellHitModifier); } if (changesMask[94]) { - data << int8(JailersTowerLevelMax); + data << int32(HomeRealmTimeOffset); } if (changesMask[95]) { - data << int8(JailersTowerLevel); + data << float(ModPetHaste); } if (changesMask[96]) { - data << uint8(LocalRegenFlags); + data << int8(JailersTowerLevelMax); } if (changesMask[97]) { - data << uint8(AuraVision); + data << int8(JailersTowerLevel); } } if (changesMask[98]) { if (changesMask[99]) { - data << uint8(NumBackpackSlots); + data << uint8(LocalRegenFlags); } if (changesMask[100]) { - data << int32(OverrideSpellsID); + data << uint8(AuraVision); } if (changesMask[101]) { - data << uint16(LootSpecID); + data << uint8(NumBackpackSlots); } if (changesMask[102]) { - data << uint32(OverrideZonePVPType); + data << int32(OverrideSpellsID); } if (changesMask[103]) { - data << BnetAccount; + data << uint16(LootSpecID); } if (changesMask[104]) { - data << uint64(GuildClubMemberID); + data << uint32(OverrideZonePVPType); } if (changesMask[105]) { - data << int32(Honor); + data << BnetAccount; } if (changesMask[106]) { - data << int32(HonorNextLevel); + data << uint64(GuildClubMemberID); } if (changesMask[107]) { - data << uint8(NumBankSlots); + data << int32(Honor); + } + if (changesMask[108]) + { + data << int32(HonorNextLevel); + } + if (changesMask[109]) + { + data << int32(PerksProgramCurrency); } if (changesMask[110]) { + data << uint8(NumBankSlots); + } + if (changesMask[114]) + { data << int32(UiChromieTimeExpansionID); } - if (changesMask[111]) + if (changesMask[115]) { data << int32(TransportServerTime); } - if (changesMask[112]) + if (changesMask[116]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[113]) + if (changesMask[117]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[115]) + if (changesMask[119]) { data << uint32(ActiveCombatTraitConfigID); } @@ -4590,157 +4647,161 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo if (changesMask[98]) { data.WriteBits(QuestSession.has_value(), 1); - if (changesMask[109]) + if (changesMask[111]) { - Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data << FrozenPerksVendorItem; } - if (changesMask[108]) + if (changesMask[112]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[114]) + if (changesMask[113]) + { + Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + if (changesMask[118]) { data << DungeonScore; } } - if (changesMask[116]) + if (changesMask[120]) { for (uint32 i = 0; i < 218; ++i) { - if (changesMask[117 + i]) + if (changesMask[121 + i]) { data << InvSlots[i]; } } } - if (changesMask[335]) + if (changesMask[339]) { for (uint32 i = 0; i < 240; ++i) { - if (changesMask[336 + i]) + if (changesMask[340 + i]) { data << uint64(ExploredZones[i]); } } } - if (changesMask[576]) + if (changesMask[580]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[577 + i]) + if (changesMask[581 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[579]) + if (changesMask[583]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[580 + i]) + if (changesMask[584 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[587 + i]) + if (changesMask[591 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[594 + i]) + if (changesMask[598 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[601 + i]) + if (changesMask[605 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[608]) + if (changesMask[612]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[609 + i]) + if (changesMask[613 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[612 + i]) + if (changesMask[616 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[615]) + if (changesMask[619]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[616 + i]) + if (changesMask[620 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[628 + i]) + if (changesMask[632 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[640]) + if (changesMask[644]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[641 + i]) + if (changesMask[645 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[673]) + if (changesMask[677]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[674 + i]) + if (changesMask[678 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[678]) + if (changesMask[682]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[679 + i]) + if (changesMask[683 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[681]) + if (changesMask[685]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[682 + i]) + if (changesMask[686 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[687]) + if (changesMask[691]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[688 + i]) + if (changesMask[692 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[695]) + if (changesMask[699]) { for (uint32 i = 0; i < 875; ++i) { - if (changesMask[696 + i]) + if (changesMask[700 + i]) { data << uint64(QuestCompleted[i]); } @@ -4755,6 +4816,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(BankAutoSortDisabled); Base::ClearChangesMask(SortBagsRightToLeft); Base::ClearChangesMask(InsertItemsLeftToRight); + Base::ClearChangesMask(HasPerksProgramPendingReward); Base::ClearChangesMask(Research); Base::ClearChangesMask(KnownTitles); Base::ClearChangesMask(ResearchSites); @@ -4777,6 +4839,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(RecipeProgression); Base::ClearChangesMask(ReplayedQuests); Base::ClearChangesMask(DisabledSpells); + Base::ClearChangesMask(PersonalCraftingOrderCounts); Base::ClearChangesMask(PvpInfo); Base::ClearChangesMask(CharacterRestrictions); Base::ClearChangesMask(TraitConfigs); @@ -4853,7 +4916,9 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(GuildClubMemberID); Base::ClearChangesMask(Honor); Base::ClearChangesMask(HonorNextLevel); + Base::ClearChangesMask(PerksProgramCurrency); Base::ClearChangesMask(NumBankSlots); + Base::ClearChangesMask(FrozenPerksVendorItem); Base::ClearChangesMask(Field_1410); Base::ClearChangesMask(QuestSession); Base::ClearChangesMask(UiChromieTimeExpansionID); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index a075a11ab81..3048896d2f7 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -22,6 +22,7 @@ #include "ItemPacketsCommon.h" #include "MythicPlusPacketsCommon.h" #include "ObjectGuid.h" +#include "PerksProgramPacketsCommon.h" #include "Position.h" #include "QuaternionData.h" #include "UpdateField.h" @@ -255,7 +256,7 @@ struct PassiveSpellHistory : public IsUpdateFieldStructureTag bool operator!=(PassiveSpellHistory const& right) const { return !(*this == right); } }; -struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<196> +struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<197> { UpdateField<std::vector<uint32>, 0, 1> StateWorldEffectIDs; DynamicUpdateField<UF::PassiveSpellHistory, 0, 2> PassiveSpells; @@ -376,25 +377,26 @@ struct UnitData : public IsUpdateFieldStructureTag, public HasChangesMask<196> UpdateField<int32, 96, 114> LooksLikeMountID; UpdateField<int32, 96, 115> LooksLikeCreatureID; UpdateField<int32, 96, 116> LookAtControllerID; - UpdateField<int32, 96, 117> TaxiNodesID; - UpdateField<ObjectGuid, 96, 118> GuildGUID; - UpdateField<int32, 96, 119> FlightCapabilityID; - UpdateField<uint32, 96, 120> SilencedSchoolMask; - UpdateField<ObjectGuid, 96, 121> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object - UpdateFieldArray<uint32, 2, 122, 123> NpcFlags; + UpdateField<int32, 96, 117> PerksVendorItemID; + UpdateField<int32, 96, 118> TaxiNodesID; + UpdateField<ObjectGuid, 96, 119> GuildGUID; + UpdateField<int32, 96, 120> FlightCapabilityID; + UpdateField<uint32, 96, 121> SilencedSchoolMask; + UpdateField<ObjectGuid, 96, 122> NameplateAttachToGUID; // When set, nameplate of this unit will instead appear on that object + UpdateFieldArray<uint32, 2, 123, 124> NpcFlags; struct NpcFlagsTag : ViewerDependentValueTag<uint32> {}; - UpdateFieldArray<int32, 7, 125, 126> Power; - UpdateFieldArray<int32, 7, 125, 133> MaxPower; - UpdateFieldArray<float, 7, 125, 140> PowerRegenFlatModifier; - UpdateFieldArray<float, 7, 125, 147> PowerRegenInterruptedFlatModifier; - UpdateFieldArray<UF::VisibleItem, 3, 154, 155> VirtualItems; - UpdateFieldArray<uint32, 2, 158, 159> AttackRoundBaseTime; - UpdateFieldArray<int32, 4, 161, 162> Stats; - UpdateFieldArray<int32, 4, 161, 166> StatPosBuff; - UpdateFieldArray<int32, 4, 161, 170> StatNegBuff; - UpdateFieldArray<int32, 7, 174, 175> Resistances; - UpdateFieldArray<int32, 7, 174, 182> BonusResistanceMods; - UpdateFieldArray<int32, 7, 174, 189> ManaCostModifier; + UpdateFieldArray<int32, 7, 126, 127> Power; + UpdateFieldArray<int32, 7, 126, 134> MaxPower; + UpdateFieldArray<float, 7, 126, 141> PowerRegenFlatModifier; + UpdateFieldArray<float, 7, 126, 148> PowerRegenInterruptedFlatModifier; + UpdateFieldArray<UF::VisibleItem, 3, 155, 156> VirtualItems; + UpdateFieldArray<uint32, 2, 159, 160> AttackRoundBaseTime; + UpdateFieldArray<int32, 4, 162, 163> Stats; + UpdateFieldArray<int32, 4, 162, 167> StatPosBuff; + UpdateFieldArray<int32, 4, 162, 171> StatNegBuff; + UpdateFieldArray<int32, 7, 175, 176> Resistances; + UpdateFieldArray<int32, 7, 175, 183> BonusResistanceMods; + UpdateFieldArray<int32, 7, 175, 190> 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; @@ -751,136 +753,151 @@ struct CraftingOrder : public IsUpdateFieldStructureTag, public HasChangesMask<4 void ClearChangesMask(); }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1571> +struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag +{ + int32 ProfessionID; + uint32 Count; + + void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; + void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; + bool operator==(PersonalCraftingOrderCount const& right) const; + bool operator!=(PersonalCraftingOrderCount const& right) const { return !(*this == right); } +}; + +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1575> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BankAutoSortDisabled; UpdateField<bool, 0, 3> SortBagsRightToLeft; UpdateField<bool, 0, 4> InsertItemsLeftToRight; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 30, 31> Research; - DynamicUpdateField<uint64, 0, 5> KnownTitles; - DynamicUpdateField<uint16, 0, 7> ResearchSites; - DynamicUpdateField<uint32, 0, 8> ResearchSiteProgress; - DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; - DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; - DynamicUpdateField<int32, 0, 11> Heirlooms; - DynamicUpdateField<uint32, 0, 12> HeirloomFlags; - DynamicUpdateField<int32, 0, 13> Toys; - DynamicUpdateField<uint32, 0, 14> ToyFlags; - DynamicUpdateField<uint32, 0, 15> Transmog; - DynamicUpdateField<int32, 0, 16> ConditionalTransmog; - DynamicUpdateField<int32, 0, 17> SelfResSpells; - DynamicUpdateField<uint32, 0, 18> RuneforgePowers; - DynamicUpdateField<uint32, 0, 19> TransmogIllusions; - DynamicUpdateField<UF::SpellPctModByLabel, 0, 21> SpellPctModByLabel; - DynamicUpdateField<UF::SpellFlatModByLabel, 0, 22> SpellFlatModByLabel; - DynamicUpdateField<UF::MawPower, 0, 23> MawPowers; - DynamicUpdateField<UF::MultiFloorExplore, 0, 24> MultiFloorExploration; - DynamicUpdateField<UF::RecipeProgressionInfo, 0, 25> RecipeProgression; - DynamicUpdateField<UF::ReplayedQuest, 0, 26> ReplayedQuests; - DynamicUpdateField<int32, 0, 27> DisabledSpells; - DynamicUpdateField<UF::PVPInfo, 0, 6> PvpInfo; - DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; - DynamicUpdateField<UF::TraitConfig, 0, 28> TraitConfigs; - DynamicUpdateField<UF::CraftingOrder, 0, 29> CraftingOrders; - UpdateField<ObjectGuid, 0, 32> FarsightObject; - UpdateField<ObjectGuid, 0, 33> SummonedBattlePetGUID; - UpdateField<uint64, 34, 35> Coinage; - UpdateField<int32, 34, 36> XP; - UpdateField<int32, 34, 37> NextLevelXP; - UpdateField<int32, 34, 38> TrialXP; - UpdateField<UF::SkillInfo, 34, 39> Skill; - UpdateField<int32, 34, 40> CharacterPoints; - UpdateField<int32, 34, 41> MaxTalentTiers; - UpdateField<uint32, 34, 42> TrackCreatureMask; - UpdateField<float, 34, 43> MainhandExpertise; - UpdateField<float, 34, 44> OffhandExpertise; - UpdateField<float, 34, 45> RangedExpertise; - UpdateField<float, 34, 46> CombatRatingExpertise; - UpdateField<float, 34, 47> BlockPercentage; - UpdateField<float, 34, 48> DodgePercentage; - UpdateField<float, 34, 49> DodgePercentageFromAttribute; - UpdateField<float, 34, 50> ParryPercentage; - UpdateField<float, 34, 51> ParryPercentageFromAttribute; - UpdateField<float, 34, 52> CritPercentage; - UpdateField<float, 34, 53> RangedCritPercentage; - UpdateField<float, 34, 54> OffhandCritPercentage; - UpdateField<float, 34, 55> SpellCritPercentage; - UpdateField<int32, 34, 56> ShieldBlock; - UpdateField<float, 34, 57> ShieldBlockCritPercentage; - UpdateField<float, 34, 58> Mastery; - UpdateField<float, 34, 59> Speed; - UpdateField<float, 34, 60> Avoidance; - UpdateField<float, 34, 61> Sturdiness; - UpdateField<int32, 34, 62> Versatility; - UpdateField<float, 34, 63> VersatilityBonus; - UpdateField<float, 34, 64> PvpPowerDamage; - UpdateField<float, 34, 65> PvpPowerHealing; - UpdateField<int32, 66, 67> ModHealingDonePos; - UpdateField<float, 66, 68> ModHealingPercent; - UpdateField<float, 66, 69> ModPeriodicHealingDonePercent; - UpdateField<float, 66, 70> ModSpellPowerPercent; - UpdateField<float, 66, 71> ModResiliencePercent; - UpdateField<float, 66, 72> OverrideSpellPowerByAPPercent; - UpdateField<float, 66, 73> OverrideAPBySpellPowerPercent; - UpdateField<int32, 66, 74> ModTargetResistance; - UpdateField<int32, 66, 75> ModTargetPhysicalResistance; - UpdateField<uint32, 66, 76> LocalFlags; - UpdateField<uint8, 66, 77> GrantableLevels; - UpdateField<uint8, 66, 78> MultiActionBars; - UpdateField<uint8, 66, 79> LifetimeMaxRank; - UpdateField<uint8, 66, 80> NumRespecs; - UpdateField<uint32, 66, 81> PvpMedals; - UpdateField<uint16, 66, 82> TodayHonorableKills; - UpdateField<uint16, 66, 83> YesterdayHonorableKills; - UpdateField<uint32, 66, 84> LifetimeHonorableKills; - UpdateField<int32, 66, 85> WatchedFactionIndex; - UpdateField<int32, 66, 86> MaxLevel; - UpdateField<int32, 66, 87> ScalingPlayerLevelDelta; - UpdateField<int32, 66, 88> MaxCreatureScalingLevel; - UpdateField<int32, 66, 89> PetSpellPower; - UpdateField<float, 66, 90> UiHitModifier; - UpdateField<float, 66, 91> UiSpellHitModifier; - UpdateField<int32, 66, 92> HomeRealmTimeOffset; - UpdateField<float, 66, 93> ModPetHaste; - UpdateField<int8, 66, 94> JailersTowerLevelMax; - UpdateField<int8, 66, 95> JailersTowerLevel; - UpdateField<uint8, 66, 96> LocalRegenFlags; - UpdateField<uint8, 66, 97> AuraVision; - UpdateField<uint8, 98, 99> NumBackpackSlots; - UpdateField<int32, 98, 100> OverrideSpellsID; - UpdateField<uint16, 98, 101> LootSpecID; - UpdateField<uint32, 98, 102> OverrideZonePVPType; - UpdateField<ObjectGuid, 98, 103> BnetAccount; - UpdateField<uint64, 98, 104> GuildClubMemberID; - UpdateField<int32, 98, 105> Honor; - UpdateField<int32, 98, 106> HonorNextLevel; - UpdateField<uint8, 98, 107> NumBankSlots; - UpdateField<UF::ActivePlayerUnk901, 98, 109> Field_1410; - OptionalUpdateField<UF::QuestSession, 98, 108> QuestSession; - UpdateField<int32, 98, 110> UiChromieTimeExpansionID; - UpdateField<int32, 98, 111> TransportServerTime; - UpdateField<uint32, 98, 112> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 98, 113> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 114> DungeonScore; - UpdateField<uint32, 98, 115> ActiveCombatTraitConfigID; - UpdateFieldArray<ObjectGuid, 218, 116, 117> InvSlots; - UpdateFieldArray<uint64, 240, 335, 336> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 576, 577> RestInfo; - UpdateFieldArray<int32, 7, 579, 580> ModDamageDonePos; - UpdateFieldArray<int32, 7, 579, 587> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 579, 594> ModDamageDonePercent; - UpdateFieldArray<float, 7, 579, 601> ModHealingDonePercent; - UpdateFieldArray<float, 3, 608, 609> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 608, 612> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 615, 616> BuybackPrice; - UpdateFieldArray<int64, 12, 615, 628> BuybackTimestamp; - UpdateFieldArray<int32, 32, 640, 641> CombatRatings; - UpdateFieldArray<uint32, 4, 673, 674> NoReagentCostMask; - UpdateFieldArray<int32, 2, 678, 679> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 681, 682> BagSlotFlags; - UpdateFieldArray<uint32, 7, 687, 688> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 695, 696> QuestCompleted; + UpdateField<bool, 0, 5> HasPerksProgramPendingReward; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 32, 33> Research; + DynamicUpdateField<uint64, 0, 6> KnownTitles; + DynamicUpdateField<uint16, 0, 8> ResearchSites; + DynamicUpdateField<uint32, 0, 9> ResearchSiteProgress; + DynamicUpdateField<int32, 0, 10> DailyQuestsCompleted; + DynamicUpdateField<int32, 0, 11> AvailableQuestLineXQuestIDs; + DynamicUpdateField<int32, 0, 12> Heirlooms; + DynamicUpdateField<uint32, 0, 13> HeirloomFlags; + DynamicUpdateField<int32, 0, 14> Toys; + DynamicUpdateField<uint32, 0, 15> ToyFlags; + DynamicUpdateField<uint32, 0, 16> Transmog; + DynamicUpdateField<int32, 0, 17> ConditionalTransmog; + DynamicUpdateField<int32, 0, 18> SelfResSpells; + DynamicUpdateField<uint32, 0, 19> RuneforgePowers; + DynamicUpdateField<uint32, 0, 20> TransmogIllusions; + DynamicUpdateField<UF::SpellPctModByLabel, 0, 22> SpellPctModByLabel; + DynamicUpdateField<UF::SpellFlatModByLabel, 0, 23> SpellFlatModByLabel; + DynamicUpdateField<UF::MawPower, 0, 24> MawPowers; + DynamicUpdateField<UF::MultiFloorExplore, 0, 25> MultiFloorExploration; + DynamicUpdateField<UF::RecipeProgressionInfo, 0, 26> RecipeProgression; + DynamicUpdateField<UF::ReplayedQuest, 0, 27> ReplayedQuests; + DynamicUpdateField<int32, 0, 28> DisabledSpells; + DynamicUpdateField<UF::PersonalCraftingOrderCount, 0, 31> PersonalCraftingOrderCounts; + DynamicUpdateField<UF::PVPInfo, 0, 7> PvpInfo; + DynamicUpdateField<UF::CharacterRestriction, 0, 21> CharacterRestrictions; + DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; + DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; + UpdateField<ObjectGuid, 34, 35> FarsightObject; + UpdateField<ObjectGuid, 34, 36> SummonedBattlePetGUID; + UpdateField<uint64, 34, 37> Coinage; + UpdateField<int32, 34, 38> XP; + UpdateField<int32, 34, 39> NextLevelXP; + UpdateField<int32, 34, 40> TrialXP; + UpdateField<UF::SkillInfo, 34, 41> Skill; + UpdateField<int32, 34, 42> CharacterPoints; + UpdateField<int32, 34, 43> MaxTalentTiers; + UpdateField<uint32, 34, 44> TrackCreatureMask; + UpdateField<float, 34, 45> MainhandExpertise; + UpdateField<float, 34, 46> OffhandExpertise; + UpdateField<float, 34, 47> RangedExpertise; + UpdateField<float, 34, 48> CombatRatingExpertise; + UpdateField<float, 34, 49> BlockPercentage; + UpdateField<float, 34, 50> DodgePercentage; + UpdateField<float, 34, 51> DodgePercentageFromAttribute; + UpdateField<float, 34, 52> ParryPercentage; + UpdateField<float, 34, 53> ParryPercentageFromAttribute; + UpdateField<float, 34, 54> CritPercentage; + UpdateField<float, 34, 55> RangedCritPercentage; + UpdateField<float, 34, 56> OffhandCritPercentage; + UpdateField<float, 34, 57> SpellCritPercentage; + UpdateField<int32, 34, 58> ShieldBlock; + UpdateField<float, 34, 59> ShieldBlockCritPercentage; + UpdateField<float, 34, 60> Mastery; + UpdateField<float, 34, 61> Speed; + UpdateField<float, 34, 62> Avoidance; + UpdateField<float, 34, 63> Sturdiness; + UpdateField<int32, 34, 64> Versatility; + UpdateField<float, 34, 65> VersatilityBonus; + UpdateField<float, 66, 67> PvpPowerDamage; + UpdateField<float, 66, 68> PvpPowerHealing; + UpdateField<int32, 66, 69> ModHealingDonePos; + UpdateField<float, 66, 70> ModHealingPercent; + UpdateField<float, 66, 71> ModPeriodicHealingDonePercent; + UpdateField<float, 66, 72> ModSpellPowerPercent; + UpdateField<float, 66, 73> ModResiliencePercent; + UpdateField<float, 66, 74> OverrideSpellPowerByAPPercent; + UpdateField<float, 66, 75> OverrideAPBySpellPowerPercent; + UpdateField<int32, 66, 76> ModTargetResistance; + UpdateField<int32, 66, 77> ModTargetPhysicalResistance; + UpdateField<uint32, 66, 78> LocalFlags; + UpdateField<uint8, 66, 79> GrantableLevels; + UpdateField<uint8, 66, 80> MultiActionBars; + UpdateField<uint8, 66, 81> LifetimeMaxRank; + UpdateField<uint8, 66, 82> NumRespecs; + UpdateField<uint32, 66, 83> PvpMedals; + UpdateField<uint16, 66, 84> TodayHonorableKills; + UpdateField<uint16, 66, 85> YesterdayHonorableKills; + UpdateField<uint32, 66, 86> LifetimeHonorableKills; + UpdateField<int32, 66, 87> WatchedFactionIndex; + UpdateField<int32, 66, 88> MaxLevel; + UpdateField<int32, 66, 89> ScalingPlayerLevelDelta; + UpdateField<int32, 66, 90> MaxCreatureScalingLevel; + UpdateField<int32, 66, 91> PetSpellPower; + UpdateField<float, 66, 92> UiHitModifier; + UpdateField<float, 66, 93> UiSpellHitModifier; + UpdateField<int32, 66, 94> HomeRealmTimeOffset; + UpdateField<float, 66, 95> ModPetHaste; + UpdateField<int8, 66, 96> JailersTowerLevelMax; + UpdateField<int8, 66, 97> JailersTowerLevel; + UpdateField<uint8, 98, 99> LocalRegenFlags; + UpdateField<uint8, 98, 100> AuraVision; + UpdateField<uint8, 98, 101> NumBackpackSlots; + UpdateField<int32, 98, 102> OverrideSpellsID; + UpdateField<uint16, 98, 103> LootSpecID; + UpdateField<uint32, 98, 104> OverrideZonePVPType; + UpdateField<ObjectGuid, 98, 105> BnetAccount; + UpdateField<uint64, 98, 106> GuildClubMemberID; + UpdateField<int32, 98, 107> Honor; + UpdateField<int32, 98, 108> HonorNextLevel; + UpdateField<int32, 98, 109> PerksProgramCurrency; + UpdateField<uint8, 98, 110> NumBankSlots; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 98, 111> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 98, 113> Field_1410; + OptionalUpdateField<UF::QuestSession, 98, 112> QuestSession; + UpdateField<int32, 98, 114> UiChromieTimeExpansionID; + UpdateField<int32, 98, 115> TransportServerTime; + UpdateField<uint32, 98, 116> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 98, 117> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 98, 118> DungeonScore; + UpdateField<uint32, 98, 119> ActiveCombatTraitConfigID; + UpdateFieldArray<ObjectGuid, 218, 120, 121> InvSlots; + UpdateFieldArray<uint64, 240, 339, 340> ExploredZones; + UpdateFieldArray<UF::RestInfo, 2, 580, 581> RestInfo; + UpdateFieldArray<int32, 7, 583, 584> ModDamageDonePos; + UpdateFieldArray<int32, 7, 583, 591> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 583, 598> ModDamageDonePercent; + UpdateFieldArray<float, 7, 583, 605> ModHealingDonePercent; + UpdateFieldArray<float, 3, 612, 613> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 612, 616> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 619, 620> BuybackPrice; + UpdateFieldArray<int64, 12, 619, 632> BuybackTimestamp; + UpdateFieldArray<int32, 32, 644, 645> CombatRatings; + UpdateFieldArray<uint32, 4, 677, 678> NoReagentCostMask; + UpdateFieldArray<int32, 2, 682, 683> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 685, 686> BagSlotFlags; + UpdateFieldArray<uint32, 7, 691, 692> BankBagSlotFlags; + UpdateFieldArray<uint64, 875, 699, 700> 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; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 3d51060c926..bf5e6a9a4fb 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2650,7 +2650,7 @@ void Player::SendUnlearnSpells() SendDirectMessage(sendUnlearnSpells.Write()); } -void Player::RemoveMail(uint32 id) +void Player::RemoveMail(uint64 id) { for (PlayerMails::iterator itr = m_mail.begin(); itr != m_mail.end(); ++itr) { @@ -2663,7 +2663,7 @@ void Player::RemoveMail(uint32 id) } } -void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, ObjectGuid::LowType item_guid, uint32 item_count) const +void Player::SendMailResult(uint64 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError, ObjectGuid::LowType itemGuid, uint32 itemCount) const { WorldPackets::Mail::MailCommandResult result; @@ -2675,8 +2675,8 @@ void Player::SendMailResult(uint32 mailId, MailResponseType mailAction, MailResp result.BagResult = equipError; else if (mailAction == MAIL_ITEM_TAKEN) { - result.AttachID = item_guid; - result.QtyInInventory = item_count; + result.AttachID = itemGuid; + result.QtyInInventory = itemCount; } SendDirectMessage(result.Write()); } @@ -3578,7 +3578,7 @@ void Player::ResetPvpTalents() RemovePvpTalent(talentInfo, spec); } -Mail* Player::GetMail(uint32 id) +Mail* Player::GetMail(uint64 id) { for (PlayerMails::iterator itr = m_mail.begin(); itr != m_mail.end(); ++itr) if ((*itr)->messageID == id) @@ -3865,7 +3865,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (resultMail) { - std::unordered_map<uint32, std::vector<Item*>> itemsByMail; + std::unordered_map<uint64, std::vector<Item*>> itemsByMail; stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_MAILITEMS); stmt->setUInt64(0, guid); @@ -3900,7 +3900,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe do { Field* fields = resultItems->Fetch(); - uint32 mailId = fields[44].GetUInt32(); + uint64 mailId = fields[44].GetUInt64(); if (Item* mailItem = _LoadMailedItem(playerguid, nullptr, mailId, nullptr, fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64()))) itemsByMail[mailId].push_back(mailItem); @@ -3911,7 +3911,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe { Field* mailFields = resultMail->Fetch(); - uint32 mail_id = mailFields[0].GetUInt32(); + uint64 mail_id = mailFields[0].GetUInt64(); uint8 mailType = mailFields[1].GetUInt8(); uint16 mailTemplateId= mailFields[2].GetUInt16(); ObjectGuid::LowType sender = mailFields[3].GetUInt64(); @@ -3923,7 +3923,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe // We can return mail now // So firstly delete the old one stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_BY_ID); - stmt->setUInt32(0, mail_id); + stmt->setUInt64(0, mail_id); trans->Append(stmt); // Mail is not from player @@ -3932,7 +3932,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe if (has_items) { stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM_BY_ID); - stmt->setUInt32(0, mail_id); + stmt->setUInt64(0, mail_id); trans->Append(stmt); } continue; @@ -3953,7 +3953,7 @@ void Player::DeleteFromDB(ObjectGuid playerguid, uint32 accountId, bool updateRe } stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM_BY_ID); - stmt->setUInt32(0, mail_id); + stmt->setUInt64(0, mail_id); trans->Append(stmt); uint32 pl_account = sCharacterCache->GetCharacterAccountIdByGuid(playerguid); @@ -16749,9 +16749,14 @@ void Player::SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const void Player::SendQuestGiverStatusMultiple() { + SendQuestGiverStatusMultiple(m_clientGUIDs); +} + +void Player::SendQuestGiverStatusMultiple(GuidUnorderedSet const& guids) +{ WorldPackets::Quest::QuestGiverStatusMultiple response; - for (auto itr = m_clientGUIDs.begin(); itr != m_clientGUIDs.end(); ++itr) + for (auto itr = guids.begin(); itr != guids.end(); ++itr) { if (itr->IsAnyTypeCreature()) { @@ -18528,7 +18533,7 @@ Item* Player::_LoadItem(CharacterDatabaseTransaction trans, uint32 zoneId, uint3 } // load mailed item which should receive current player -Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint32 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData) +Item* Player::_LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData) { ObjectGuid::LowType itemGuid = fields[0].GetUInt64(); uint32 itemEntry = fields[1].GetUInt32(); @@ -18600,7 +18605,7 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail { m_mail.clear(); - std::unordered_map<uint32, Mail*> mailById; + std::unordered_map<uint64, Mail*> mailById; if (mailsResult) { @@ -18609,7 +18614,7 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail Field* fields = mailsResult->Fetch(); Mail* m = new Mail(); - m->messageID = fields[0].GetUInt32(); + m->messageID = fields[0].GetUInt64(); m->messageType = fields[1].GetUInt8(); m->sender = fields[2].GetUInt64(); m->receiver = fields[3].GetUInt64(); @@ -18646,7 +18651,7 @@ void Player::_LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mail do { Field* fields = mailItemsResult->Fetch(); - uint32 mailId = fields[52].GetUInt32(); + uint64 mailId = fields[52].GetUInt64(); _LoadMailedItem(GetGUID(), this, mailId, mailById[mailId], fields, Trinity::Containers::MapGetValuePtr(additionalData, fields[0].GetUInt64())); } while (mailItemsResult->NextRow()); } @@ -20113,7 +20118,7 @@ void Player::_SaveMail(CharacterDatabaseTransaction trans) stmt->setUInt64(3, m->money); stmt->setUInt64(4, m->COD); stmt->setUInt8(5, uint8(m->checked)); - stmt->setUInt32(6, m->messageID); + stmt->setUInt64(6, m->messageID); trans->Append(stmt); @@ -20141,11 +20146,11 @@ void Player::_SaveMail(CharacterDatabaseTransaction trans) } } stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_BY_ID); - stmt->setUInt32(0, m->messageID); + stmt->setUInt64(0, m->messageID); trans->Append(stmt); stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_MAIL_ITEM_BY_ID); - stmt->setUInt32(0, m->messageID); + stmt->setUInt64(0, m->messageID); trans->Append(stmt); } } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index d8ca3a8568e..3c795bcee63 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1674,6 +1674,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SendQuestUpdateAddCreditSimple(QuestObjective const& obj) const; void SendQuestUpdateAddPlayer(Quest const* quest, uint16 newCount) const; void SendQuestGiverStatusMultiple(); + void SendQuestGiverStatusMultiple(GuidUnorderedSet const& guids); void SendDisplayToast(uint32 entry, DisplayToastType type, bool isBonusRoll, uint32 quantity, DisplayToastMethod method, uint32 questId = 0, Item* item = nullptr) const; uint32 GetSharedQuestID() const { return m_sharedQuestId; } @@ -1760,16 +1761,16 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void SetTarget(ObjectGuid const& /*guid*/) override { } /// Used for serverside target changes, does not apply to players void SetSelection(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Unit::m_unitData).ModifyValue(&UF::UnitData::Target), guid); } - void SendMailResult(uint32 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, ObjectGuid::LowType item_guid = UI64LIT(0), uint32 item_count = 0) const; + void SendMailResult(uint64 mailId, MailResponseType mailAction, MailResponseResult mailError, uint32 equipError = 0, ObjectGuid::LowType itemGuid = UI64LIT(0), uint32 itemCount = 0) const; void SendNewMail() const; void UpdateNextMailTimeAndUnreads(); void AddNewMailDeliverTime(time_t deliver_time); - void RemoveMail(uint32 id); + void RemoveMail(uint64 id); void AddMail(Mail* mail) { m_mail.push_front(mail);}// for call from WorldSession::SendMailTo uint32 GetMailSize() const { return uint32(m_mail.size()); } - Mail* GetMail(uint32 id); + Mail* GetMail(uint64 id); PlayerMails const& GetMails() const { return m_mail; } @@ -2915,7 +2916,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void _LoadVoidStorage(PreparedQueryResult result); void _LoadMail(PreparedQueryResult mailsResult, PreparedQueryResult mailItemsResult, PreparedQueryResult artifactResult, PreparedQueryResult azeriteItemResult, PreparedQueryResult azeriteItemMilestonePowersResult, PreparedQueryResult azeriteItemUnlockedEssencesResult, PreparedQueryResult azeriteEmpoweredItemResult); - static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint32 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData); + static Item* _LoadMailedItem(ObjectGuid const& playerGuid, Player* player, uint64 mailId, Mail* mail, Field* fields, ItemAdditionalLoadInfo* addionalData); void _LoadQuestStatus(PreparedQueryResult result); void _LoadQuestStatusObjectives(PreparedQueryResult result); void _LoadQuestStatusRewarded(PreparedQueryResult result); |
