From ebd9c9e636c0911ea816eea9b997443bea8cfb84 Mon Sep 17 00:00:00 2001 From: Hondacrx Date: Mon, 18 Aug 2025 14:47:48 -0400 Subject: [PATCH] Core: Updated to 11.1.7 Port From (https://github.com/TrinityCore/TrinityCore/commit/ceb8d561b44579118b109a9ff71ba415df53bbdc) --- Source/Framework/Constants/AccountConst.cs | 2 +- Source/Framework/Constants/CliDBConst.cs | 6 + .../Constants/Movement/SplineConst.cs | 4 +- Source/Framework/Constants/Network/Opcodes.cs | 671 +++---- Source/Framework/Constants/PlayerConst.cs | 1 + Source/Framework/Constants/SharedConst.cs | 1633 +++++++++-------- .../Database/Databases/HotfixDatabase.cs | 8 +- .../Game/BattleGrounds/BattleGroundManager.cs | 8 +- Source/Game/Conditions/ConditionManager.cs | 24 +- Source/Game/DataStorage/DB2Manager.cs | 2 +- Source/Game/DataStorage/Structs/B_Records.cs | 3 +- Source/Game/DataStorage/Structs/C_Records.cs | 2 + Source/Game/DataStorage/Structs/P_Records.cs | 2 +- Source/Game/DataStorage/Structs/Q_Records.cs | 2 +- Source/Game/DataStorage/Structs/T_Records.cs | 2 +- Source/Game/DataStorage/Structs/W_Records.cs | 2 +- .../Entities/Object/Update/UpdateFields.cs | 717 ++++---- Source/Game/Entities/Object/WorldObject.cs | 5 +- Source/Game/Entities/Player/Player.Map.cs | 2 +- Source/Game/Handlers/MiscHandler.cs | 13 + Source/Game/Movement/MoveSpline.cs | 21 +- Source/Game/Movement/MoveSplineInit.cs | 17 + Source/Game/Movement/MoveSplineInitArgs.cs | 9 + .../Packets/AuthenticationPackets.cs | 4 +- .../Networking/Packets/CharacterPackets.cs | 11 +- .../Networking/Packets/ClientConfigPackets.cs | 16 + .../Networking/Packets/GarrisonPackets.cs | 16 +- .../Game/Networking/Packets/GuildPackets.cs | 5 +- .../Networking/Packets/InstancePackets.cs | 26 +- Source/Game/Networking/Packets/MiscPackets.cs | 16 +- .../Networking/Packets/MovementPackets.cs | 47 +- .../Game/Networking/Packets/PartyPackets.cs | 20 +- .../Game/Networking/Packets/SpellPackets.cs | 29 +- .../Game/Networking/Packets/SystemPackets.cs | 62 +- Source/Game/Spells/SpellManager.cs | 19 + 35 files changed, 1824 insertions(+), 1603 deletions(-) diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index 59bd38bbf..9b320445d 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -704,7 +704,7 @@ namespace Framework.Constants CommandPetLevel = 838, CommandServerShutdownForce = 839, CommandServerRestartForce = 840, - CommandNearGraveyard = 841, + // 841 previously used, do not reuse CommandReloadCharacterTemplate = 842, CommandReloadQuestGreeting = 843, CommandScene = 844, diff --git a/Source/Framework/Constants/CliDBConst.cs b/Source/Framework/Constants/CliDBConst.cs index fed3ecdfb..935cc3549 100644 --- a/Source/Framework/Constants/CliDBConst.cs +++ b/Source/Framework/Constants/CliDBConst.cs @@ -1106,6 +1106,12 @@ namespace Framework.Constants ForceMaxQuantityOnConversion = 0x100, // NYI } + public enum BattlemasterType + { + Battleground = 0, + Arena = 1, + } + [Flags] public enum BattlemasterListFlags : int { diff --git a/Source/Framework/Constants/Movement/SplineConst.cs b/Source/Framework/Constants/Movement/SplineConst.cs index 25547880a..19dfe29bf 100644 --- a/Source/Framework/Constants/Movement/SplineConst.cs +++ b/Source/Framework/Constants/Movement/SplineConst.cs @@ -31,7 +31,7 @@ namespace Framework.Constants Catmullrom = 0x00000800, // Used Catmullrom interpolation mode Cyclic = 0x00001000, // Movement by cycled spline EnterCycle = 0x00002000, // Everytimes appears with cyclic flag in monster move packet, erases first spline vertex after first cycle done - Frozen = 0x00004000, // Will never arrive + Turning = 0x00004000, // Turns in place TransportEnter = 0x00008000, TransportExit = 0x00010000, Unknown_0x20000 = 0x00020000, // NOT VERIFIED @@ -53,7 +53,7 @@ namespace Framework.Constants // flags that shouldn't be appended into SMSG_MONSTER_MOVE\SMSG_MONSTER_MOVE_TRANSPORT packet, should be more probably MaskNoMonsterMove = Done, // Unused, not suported flags - MaskUnused = NoSpline | Frozen | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000 + MaskUnused = NoSpline | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000 | Unknown_0x800000 | FadeObject | UnlimitedSpeed | Unknown_0x40000000 | Unknown_0x80000000 } } diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index a252d8c59..09776f39b 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -907,20 +907,20 @@ namespace Framework.Constants public enum ServerOpcodes : uint { AbortNewWorld = 0x380030, - AccountCharacterCurrencyLists = 0x380341, - AccountConversionStateUpdate = 0x380346, - AccountCosmeticAdded = 0x3802fa, - AccountCriteriaUpdate = 0x3802e2, - AccountDataTimes = 0x3801a3, - AccountExportResponse = 0x380332, - AccountItemCollectionData = 0x38034c, + AccountCharacterCurrencyLists = 0x380342, + AccountConversionStateUpdate = 0x380347, + AccountCosmeticAdded = 0x3802fb, + AccountCriteriaUpdate = 0x3802e3, + AccountDataTimes = 0x3801a4, + AccountExportResponse = 0x380333, + AccountItemCollectionData = 0x38034d, AccountMountRemoved = 0x380047, AccountMountUpdate = 0x380046, - AccountNotificationsResponse = 0x3802f9, - AccountStoreCurrencyUpdate = 0x38031b, - AccountStoreFrontUpdate = 0x38031c, - AccountStoreItemStateChanged = 0x38031d, - AccountStoreResult = 0x38031e, + AccountNotificationsResponse = 0x3802fa, + AccountStoreCurrencyUpdate = 0x38031c, + AccountStoreFrontUpdate = 0x38031d, + AccountStoreItemStateChanged = 0x38031e, + AccountStoreResult = 0x38031f, AccountToyUpdate = 0x380048, AccountTransmogSetFavoritesUpdate = 0x38004c, AccountTransmogUpdate = 0x38004b, @@ -931,29 +931,29 @@ namespace Framework.Constants ActivateSoulbindFailed = 0x4b0022, ActivateTaxiReply = 0x380118, ActiveGlyphs = 0x4e0045, - ActiveScheduledWorldStateInfo = 0x3801de, + ActiveScheduledWorldStateInfo = 0x3801df, AddonListRequest = 0x3800da, AddBattlenetFriendResponse = 0x3800d5, AddItemPassive = 0x380042, AddLossOfControl = 0x38010b, AddRunePower = 0x380152, AdjustSplineDuration = 0x380069, - AdvancedCombatLog = 0x3802f7, - AdventureJournalDataResponse = 0x3802f2, + AdvancedCombatLog = 0x3802f8, + AdventureJournalDataResponse = 0x3802f3, AeLootTargets = 0x3800b0, AeLootTargetAck = 0x3800b1, AiReaction = 0x38014f, - AlliedRaceDetails = 0x38028c, + AlliedRaceDetails = 0x38028d, AllAccountCriteria = 0x380005, AllAchievementData = 0x380004, AllGuildAchievements = 0x440000, - ApplyMountEquipmentResult = 0x3802cf, + ApplyMountEquipmentResult = 0x3802d0, ArchaeologySurveryCast = 0x38001d, AreaPoiUpdateResponse = 0x4b0018, - AreaSpiritHealerTime = 0x3801d7, + AreaSpiritHealerTime = 0x3801d8, AreaTriggerDenied = 0x390009, AreaTriggerForceSetPositionAndFacing = 0x390006, - AreaTriggerNoCorpse = 0x3801af, + AreaTriggerNoCorpse = 0x3801b0, AreaTriggerPlaySpellVisual = 0x390004, AreaTriggerRePath = 0x390003, AreaTriggerReShape = 0x390008, @@ -962,28 +962,28 @@ namespace Framework.Constants ArenaClearOpponents = 0x3800e1, ArenaCrowdControlSpellResult = 0x3800ca, ArenaPrepOpponentSpecializations = 0x3800e0, - ArtifactEndgamePowersRefunded = 0x380239, - ArtifactForgeError = 0x380237, - ArtifactRespecPrompt = 0x380238, - ArtifactXpGain = 0x38027f, + ArtifactEndgamePowersRefunded = 0x38023a, + ArtifactForgeError = 0x380238, + ArtifactRespecPrompt = 0x380239, + ArtifactXpGain = 0x380280, AttackerStateUpdate = 0x3e002c, AttackStart = 0x3e0017, AttackStop = 0x3e0018, AttackSwingError = 0x3e0026, AttackSwingLandedLog = 0x3e0027, - AuctionableTokenAuctionSold = 0x380268, - AuctionableTokenSellAtMarketPriceResponse = 0x380267, - AuctionableTokenSellConfirmRequired = 0x380266, + AuctionableTokenAuctionSold = 0x380269, + AuctionableTokenSellAtMarketPriceResponse = 0x380268, + AuctionableTokenSellConfirmRequired = 0x380267, AuctionClosedNotification = 0x38018c, AuctionCommandResult = 0x380189, - AuctionDisableNewPostings = 0x38031f, - AuctionFavoriteList = 0x3802e9, - AuctionGetCommodityQuoteResult = 0x3802e1, + AuctionDisableNewPostings = 0x380320, + AuctionFavoriteList = 0x3802ea, + AuctionGetCommodityQuoteResult = 0x3802e2, AuctionHelloResponse = 0x380187, - AuctionListBiddedItemsResult = 0x3802e0, - AuctionListBucketsResult = 0x3802dc, - AuctionListItemsResult = 0x3802dd, - AuctionListOwnedItemsResult = 0x3802df, + AuctionListBiddedItemsResult = 0x3802e1, + AuctionListBucketsResult = 0x3802dd, + AuctionListItemsResult = 0x3802de, + AuctionListOwnedItemsResult = 0x3802e0, AuctionOutbidNotification = 0x38018b, AuctionOwnerBidNotification = 0x38018d, AuctionReplicateResponse = 0x380188, @@ -994,10 +994,10 @@ namespace Framework.Constants AuthFailed = 0x380000, AuthResponse = 0x380001, AvailableHotfixes = 0x3c0001, - BackpackDefaultSizeChanged = 0x380320, + BackpackDefaultSizeChanged = 0x380321, BagCleanupFinished = 0x4f0007, BarberShopResult = 0x380157, - BatchPresenceSubscription = 0x3802c0, + BatchPresenceSubscription = 0x3802c1, BattlefieldList = 0x3e0005, BattlefieldPortDenied = 0x3e000b, BattlefieldStatusActive = 0x3e0001, @@ -1013,29 +1013,29 @@ namespace Framework.Constants BattlegroundPlayerLeft = 0x3e000a, BattlegroundPlayerPositions = 0x3e0006, BattlegroundPoints = 0x3e0028, - BattlenetChallengeAbort = 0x380221, - BattlenetChallengeStart = 0x380220, - BattlenetNotification = 0x380298, - BattlenetResponse = 0x380297, - BattleNetConnectionStatus = 0x380299, - BattlePayAckFailed = 0x38021c, - BattlePayBattlePetDelivered = 0x380211, - BattlePayCollectionItemDelivered = 0x380212, - BattlePayConfirmPurchase = 0x38021b, - BattlePayDeliveryEnded = 0x38020f, - BattlePayDeliveryStarted = 0x38020e, - BattlePayDistributionAssignVasResponse = 0x3802ff, - BattlePayDistributionUnrevoked = 0x38020c, - BattlePayDistributionUpdate = 0x38020d, - BattlePayGetDistributionListResponse = 0x38020b, - BattlePayGetProductListResponse = 0x380209, - BattlePayGetPurchaseListResponse = 0x38020a, - BattlePayMountDelivered = 0x380210, - BattlePayPurchaseUpdate = 0x38021a, - BattlePayStartCheckout = 0x3802b4, - BattlePayStartDistributionAssignToTargetResponse = 0x380218, - BattlePayStartPurchaseResponse = 0x380217, - BattlePayValidatePurchaseResponse = 0x3802a8, + BattlenetChallengeAbort = 0x380222, + BattlenetChallengeStart = 0x380221, + BattlenetNotification = 0x380299, + BattlenetResponse = 0x380298, + BattleNetConnectionStatus = 0x38029a, + BattlePayAckFailed = 0x38021d, + BattlePayBattlePetDelivered = 0x380212, + BattlePayCollectionItemDelivered = 0x380213, + BattlePayConfirmPurchase = 0x38021c, + BattlePayDeliveryEnded = 0x380210, + BattlePayDeliveryStarted = 0x38020f, + BattlePayDistributionAssignVasResponse = 0x380300, + BattlePayDistributionUnrevoked = 0x38020d, + BattlePayDistributionUpdate = 0x38020e, + BattlePayGetDistributionListResponse = 0x38020c, + BattlePayGetProductListResponse = 0x38020a, + BattlePayGetPurchaseListResponse = 0x38020b, + BattlePayMountDelivered = 0x380211, + BattlePayPurchaseUpdate = 0x38021b, + BattlePayStartCheckout = 0x3802b5, + BattlePayStartDistributionAssignToTargetResponse = 0x380219, + BattlePayStartPurchaseResponse = 0x380218, + BattlePayValidatePurchaseResponse = 0x3802a9, BattlePetsHealed = 0x38008b, BattlePetCageDateError = 0x380113, BattlePetDeleted = 0x380088, @@ -1056,8 +1056,8 @@ namespace Framework.Constants BossKill = 0x3e002b, BreakTarget = 0x3e0016, BroadcastAchievement = 0x3d0012, - BroadcastSummonCast = 0x3802c2, - BroadcastSummonResponse = 0x3802c3, + BroadcastSummonCast = 0x3802c3, + BroadcastSummonResponse = 0x3802c4, BuyFailed = 0x380160, BuySucceeded = 0x38015f, CacheInfo = 0x3c000f, @@ -1082,7 +1082,7 @@ namespace Framework.Constants CalendarSendCalendar = 0x380126, CalendarSendEvent = 0x380127, CalendarSendNumPending = 0x380137, - CameraEffect = 0x3801bd, + CameraEffect = 0x3801be, CancelAutoRepeat = 0x380177, CancelCombat = 0x3e0025, CancelOrphanSpellVisual = 0x4e0037, @@ -1092,7 +1092,7 @@ namespace Framework.Constants CancelSpellVisual = 0x4e0035, CancelSpellVisualKit = 0x4e0039, CanDuelResult = 0x3e0021, - CanRedeemTokenForBalanceResponse = 0x3802a7, + CanRedeemTokenForBalanceResponse = 0x3802a8, CapturePointRemoved = 0x3e0008, CastFailed = 0x4e0048, CasRefreshRemoteData = 0x380111, @@ -1105,23 +1105,23 @@ namespace Framework.Constants ChallengeModeStart = 0x38009f, ChallengeModeUpdateDeathCount = 0x3800a0, ChangePlayerDifficultyResult = 0x4b000c, - ChangeRealmTicketResponse = 0x38029a, + ChangeRealmTicketResponse = 0x38029b, ChannelList = 0x3d001b, ChannelNotify = 0x3d0017, ChannelNotifyJoined = 0x3d0019, ChannelNotifyLeft = 0x3d001a, ChannelNotifyNpeJoinedBatch = 0x3d0018, - CharacterCheckUpgradeResult = 0x380254, + CharacterCheckUpgradeResult = 0x380255, CharacterLoginFailed = 0x38019e, - CharacterObjectTestResponse = 0x38021f, - CharacterRenameResult = 0x3801fa, - CharacterUpgradeAborted = 0x380253, - CharacterUpgradeComplete = 0x380252, - CharacterUpgradeManualUnrevokeResult = 0x380255, - CharacterUpgradeStarted = 0x380251, + CharacterObjectTestResponse = 0x380220, + CharacterRenameResult = 0x3801fb, + CharacterUpgradeAborted = 0x380254, + CharacterUpgradeComplete = 0x380253, + CharacterUpgradeManualUnrevokeResult = 0x380256, + CharacterUpgradeStarted = 0x380252, CharCustomizeFailure = 0x38017b, CharCustomizeSuccess = 0x38017c, - CharFactionChangeResult = 0x38023e, + CharFactionChangeResult = 0x38023f, Chat = 0x3d0001, ChatAutoResponded = 0x3d000e, ChatCanLocalWhisperTargetResponse = 0x3d0022, @@ -1140,8 +1140,8 @@ namespace Framework.Constants CheckAbandonNpe = 0x4b0023, CheckCharacterNameAvailabilityResult = 0x38001b, CheckWargameEntry = 0x380027, - ChromieTimeSelectExpansionSuccess = 0x3802ec, - ClaimRafRewardResponse = 0x3802d3, + ChromieTimeSelectExpansionSuccess = 0x3802ed, + ClaimRafRewardResponse = 0x3802d4, ClearAllSpellCharges = 0x4e0016, ClearBossEmotes = 0x380054, ClearCooldown = 0x380154, @@ -1150,65 +1150,65 @@ namespace Framework.Constants ClearSpellCharges = 0x4e0017, ClearTarget = 0x3e0022, ClearTreasurePickerCache = 0x4c0022, - CloseArtifactForge = 0x380236, - ClubFinderErrorMessage = 0x3802cb, - ClubFinderGetClubPostingIdsResponse = 0x3802ce, - ClubFinderLookupClubPostingsList = 0x3802cc, - ClubFinderResponseCharacterApplicationList = 0x3802c9, - ClubFinderResponsePostRecruitmentMessage = 0x3802cd, - ClubFinderUpdateApplications = 0x3802ca, - ClubFinderWhisperApplicantResponse = 0x38030b, + CloseArtifactForge = 0x380237, + ClubFinderErrorMessage = 0x3802cc, + ClubFinderGetClubPostingIdsResponse = 0x3802cf, + ClubFinderLookupClubPostingsList = 0x3802cd, + ClubFinderResponseCharacterApplicationList = 0x3802ca, + ClubFinderResponsePostRecruitmentMessage = 0x3802ce, + ClubFinderUpdateApplications = 0x3802cb, + ClubFinderWhisperApplicantResponse = 0x38030c, CoinRemoved = 0x3800af, CombatEventFailed = 0x3e0019, CommentatorMapInfo = 0x3801a0, CommentatorPlayerInfo = 0x3801a1, CommentatorStateChanged = 0x38019f, - CommerceTokenGetCountResponse = 0x380263, - CommerceTokenGetLogResponse = 0x38026f, - CommerceTokenGetMarketPriceResponse = 0x380265, - CommerceTokenUpdate = 0x380264, + CommerceTokenGetCountResponse = 0x380264, + CommerceTokenGetLogResponse = 0x380270, + CommerceTokenGetMarketPriceResponse = 0x380266, + CommerceTokenUpdate = 0x380265, ComplaintResult = 0x380146, - CompleteShipmentResponse = 0x38022f, - ConfirmPartyInvite = 0x3802a6, + CompleteShipmentResponse = 0x380230, + ConfirmPartyInvite = 0x3802a7, ConnectTo = 0x3f0005, ConsoleWrite = 0x3800cd, - ConsumableTokenBuyAtMarketPriceResponse = 0x38026b, - ConsumableTokenBuyChoiceRequired = 0x38026a, - ConsumableTokenCanVeteranBuyResponse = 0x380269, - ConsumableTokenRedeemConfirmRequired = 0x38026d, - ConsumableTokenRedeemResponse = 0x38026e, - ContactList = 0x38021d, - ContributionLastUpdateResponse = 0x3802ad, + ConsumableTokenBuyAtMarketPriceResponse = 0x38026c, + ConsumableTokenBuyChoiceRequired = 0x38026b, + ConsumableTokenCanVeteranBuyResponse = 0x38026a, + ConsumableTokenRedeemConfirmRequired = 0x38026e, + ConsumableTokenRedeemResponse = 0x38026f, + ContactList = 0x38021e, + ContributionLastUpdateResponse = 0x3802ae, ControlUpdate = 0x3800df, - ConvertItemsToCurrencyValue = 0x3802f5, - CooldownCheat = 0x3801d0, + ConvertItemsToCurrencyValue = 0x3802f6, + CooldownCheat = 0x3801d1, CooldownEvent = 0x380153, CorpseLocation = 0x3800e7, - CorpseReclaimDelay = 0x3801e1, - CorpseTransportQuery = 0x3801ab, + CorpseReclaimDelay = 0x3801e2, + CorpseTransportQuery = 0x3801ac, CovenantCallingsAvailabilityResponse = 0x4c0024, - CovenantPreviewOpenNpc = 0x38028f, - CovenantRenownSendCatchupState = 0x3802f6, - CraftingHouseHelloResponse = 0x38032c, - CraftingOrderCancelResult = 0x380328, - CraftingOrderClaimResult = 0x380324, - CraftingOrderCraftResult = 0x380326, - CraftingOrderCreateResult = 0x380322, - CraftingOrderFulfillResult = 0x380327, - CraftingOrderListOrdersResponse = 0x380323, - CraftingOrderNpcRewardInfo = 0x38032e, - CraftingOrderRejectResult = 0x38032a, - CraftingOrderReleaseResult = 0x380325, - CraftingOrderUpdateState = 0x38032d, - CraftEnchantResult = 0x38032b, + CovenantPreviewOpenNpc = 0x380290, + CovenantRenownSendCatchupState = 0x3802f7, + CraftingHouseHelloResponse = 0x38032d, + CraftingOrderCancelResult = 0x380329, + CraftingOrderClaimResult = 0x380325, + CraftingOrderCraftResult = 0x380327, + CraftingOrderCreateResult = 0x380323, + CraftingOrderFulfillResult = 0x380328, + CraftingOrderListOrdersResponse = 0x380324, + CraftingOrderNpcRewardInfo = 0x38032f, + CraftingOrderRejectResult = 0x38032b, + CraftingOrderReleaseResult = 0x380326, + CraftingOrderUpdateState = 0x38032e, + CraftEnchantResult = 0x38032c, CreateChar = 0x38019a, - CreateShipmentResponse = 0x38022e, - CreatorVisualsOverride = 0x380331, + CreateShipmentResponse = 0x38022f, + CreatorVisualsOverride = 0x380332, CriteriaDeleted = 0x380180, CriteriaUpdate = 0x38017a, CrossedInebriationThreshold = 0x38015b, - CurrencyTransferLog = 0x380343, - CurrencyTransferResult = 0x380342, + CurrencyTransferLog = 0x380344, + CurrencyTransferResult = 0x380343, CustomLoadScreen = 0x380064, DailyQuestsReset = 0x4c0000, DamageCalcLog = 0x4e0054, @@ -1218,8 +1218,8 @@ namespace Framework.Constants DefenseMessage = 0x3d000c, DeleteChar = 0x38019b, DeleteExpiredMissionsResult = 0x420022, - DelvesAccountDataElementChanged = 0x380348, - DestroyArenaUnit = 0x3801d9, + DelvesAccountDataElementChanged = 0x380349, + DestroyArenaUnit = 0x3801da, DestructibleBuildingDamage = 0x380192, DifferentInstanceFromParty = 0x380020, DisenchantCredit = 0x38003f, @@ -1230,7 +1230,7 @@ namespace Framework.Constants DisplayPromotion = 0x3800e4, DisplayQuestPopup = 0x4c001e, DisplayToast = 0x3800bc, - DisplayWorldText = 0x380280, + DisplayWorldText = 0x380281, DisplayWorldTextOnTarget = 0x4e0053, DontAutoPushSpellsToActionBar = 0x380079, DropNewConnection = 0x3f0004, @@ -1241,54 +1241,54 @@ namespace Framework.Constants DuelOutOfBounds = 0x3e001c, DuelRequested = 0x3e001a, DuelWinner = 0x3e0020, - DurabilityDamageDeath = 0x3801dc, - Emote = 0x38025b, + DurabilityDamageDeath = 0x3801dd, + Emote = 0x38025c, EnableBarberShop = 0x380156, - EnchantmentLog = 0x3801ac, - EncounterEnd = 0x380216, - EncounterStart = 0x380215, + EnchantmentLog = 0x3801ad, + EncounterEnd = 0x380217, + EncounterStart = 0x380216, EndLightningStorm = 0x380143, EnterEncryptedMode = 0x3f0001, EnumCharactersResult = 0x380018, - EnumVasPurchaseStatesResponse = 0x380285, + EnumVasPurchaseStatesResponse = 0x380286, EnvironmentalDamageLog = 0x4e000e, EquipmentSetId = 0x38014c, ExpectedSpamRecords = 0x3d0005, - ExplorationExperience = 0x3801f6, + ExplorationExperience = 0x3801f7, ExportAccountProfile = 0x3800ec, - ExternalTransactionIdGenerated = 0x3802f3, - FactionBonusInfo = 0x3801bc, + ExternalTransactionIdGenerated = 0x3802f4, + FactionBonusInfo = 0x3801bd, FailedPlayerCondition = 0x4b0002, - FailedQuestTurnIn = 0x3802a3, + FailedQuestTurnIn = 0x3802a4, FeatureSystemStatus = 0x380058, - FeatureSystemStatus2 = 0x380340, + FeatureSystemStatus2 = 0x380341, FeatureSystemStatusGlueScreen = 0x380059, - FeignDeathResisted = 0x3801db, + FeignDeathResisted = 0x3801dc, FishEscaped = 0x38016a, FishNotHooked = 0x380169, FlightSplineSync = 0x49005b, FlushCombatLogFile = 0x4e0010, ForcedDeathUpdate = 0x38016e, - ForceAnim = 0x3801e8, - ForceAnimations = 0x3801e9, + ForceAnim = 0x3801e9, + ForceAnimations = 0x3801ea, ForceObjectRelink = 0x3800e3, ForceRandomTransmogToast = 0x38004a, ForceSpawnTrackingUpdate = 0x4c0021, - FriendStatus = 0x38021e, - GainMawPower = 0x380274, + FriendStatus = 0x38021f, + GainMawPower = 0x380275, GameObjectActivateAnimKit = 0x38005c, - GameObjectBase = 0x3802ba, - GameObjectCloseInteraction = 0x38030a, + GameObjectBase = 0x3802bb, + GameObjectCloseInteraction = 0x38030b, GameObjectCustomAnim = 0x38005d, GameObjectDespawn = 0x38005e, - GameObjectInteraction = 0x380309, + GameObjectInteraction = 0x38030a, GameObjectPlaySpellVisual = 0x4e003c, GameObjectPlaySpellVisualKit = 0x4e003b, - GameObjectResetState = 0x3801b6, - GameObjectSetStateLocal = 0x380296, + GameObjectResetState = 0x3801b7, + GameObjectSetStateLocal = 0x380297, GameSpeedSet = 0x38011c, - GameTimeSet = 0x3801a5, - GameTimeUpdate = 0x3801a4, + GameTimeSet = 0x3801a6, + GameTimeUpdate = 0x3801a5, GarrisonActivateMissionBonusAbility = 0x420024, GarrisonAddEvent = 0x420048, GarrisonAddFollowerResult = 0x420016, @@ -1360,18 +1360,18 @@ namespace Framework.Constants GarrisonUpgradeResult = 0x42000d, GarrisonUseRecallPortalResult = 0x42001f, GenerateRandomCharacterNameResult = 0x38001c, - GenerateSsoTokenResponse = 0x3802ae, - GetAccountCharacterListResult = 0x3801f8, + GenerateSsoTokenResponse = 0x3802af, + GetAccountCharacterListResult = 0x3801f9, GetGarrisonInfoResult = 0x420000, - GetLandingPageShipmentsResponse = 0x380231, - GetRealmHiddenResult = 0x380337, - GetRemainingGameTimeResponse = 0x38026c, - GetSelectedTrophyIdResponse = 0x380259, - GetShipmentsOfTypeResponse = 0x380230, - GetShipmentInfoResponse = 0x38022c, - GetTrophyListResponse = 0x380258, - GetVasAccountCharacterListResult = 0x380281, - GetVasTransferTargetRealmListResult = 0x380282, + GetLandingPageShipmentsResponse = 0x380232, + GetRealmHiddenResult = 0x380338, + GetRemainingGameTimeResponse = 0x38026d, + GetSelectedTrophyIdResponse = 0x38025a, + GetShipmentsOfTypeResponse = 0x380231, + GetShipmentInfoResponse = 0x38022d, + GetTrophyListResponse = 0x380259, + GetVasAccountCharacterListResult = 0x380282, + GetVasTransferTargetRealmListResult = 0x380283, GmPlayerInfo = 0x4b000d, GmRequestPlayerInfo = 0x4b0003, GmTicketCaseStatus = 0x38013e, @@ -1380,16 +1380,16 @@ namespace Framework.Constants GossipComplete = 0x4c0017, GossipMessage = 0x4c0018, GossipOptionNpcInteraction = 0x4c0028, - GossipPoi = 0x380229, + GossipPoi = 0x38022a, GossipQuestUpdate = 0x4c0019, GossipRefreshOptions = 0x4c0027, GroupActionThrottled = 0x380024, - GroupAutoKick = 0x380226, - GroupDecline = 0x380222, - GroupDestroyed = 0x380225, + GroupAutoKick = 0x380227, + GroupDecline = 0x380223, + GroupDestroyed = 0x380226, GroupNewLeader = 0x3800c5, - GroupRequestDecline = 0x380223, - GroupUninvite = 0x380224, + GroupRequestDecline = 0x380224, + GroupUninvite = 0x380225, GuildAchievementDeleted = 0x44000d, GuildAchievementEarned = 0x44000c, GuildAchievementMembers = 0x44000f, @@ -1447,59 +1447,59 @@ namespace Framework.Constants GuildRewardList = 0x440008, GuildRoster = 0x440003, GuildSendRankChange = 0x440001, - HardcoreDeathAlert = 0x38033f, + HardcoreDeathAlert = 0x380340, HealthUpdate = 0x38016b, HighestThreatUpdate = 0x380173, HotfixConnect = 0x3c0003, HotfixMessage = 0x3c0002, - InitializeFactions = 0x3801bb, + InitializeFactions = 0x3801bc, InitialSetup = 0x380014, - InitWorldStates = 0x3801dd, + InitWorldStates = 0x3801de, InspectResult = 0x3800c9, - InstanceEncounterChangePriority = 0x380244, - InstanceEncounterDisengageUnit = 0x380243, - InstanceEncounterEnd = 0x38024c, - InstanceEncounterEngageUnit = 0x380242, - InstanceEncounterGainCombatResurrectionCharge = 0x38024e, - InstanceEncounterInCombatResurrection = 0x38024d, - InstanceEncounterObjectiveComplete = 0x380247, - InstanceEncounterObjectiveStart = 0x380246, - InstanceEncounterObjectiveUpdate = 0x38024b, - InstanceEncounterPhaseShiftChanged = 0x38024f, - InstanceEncounterStart = 0x380248, - InstanceEncounterTimerStart = 0x380245, - InstanceEncounterUpdateAllowReleaseInProgress = 0x38024a, - InstanceEncounterUpdateSuppressRelease = 0x380249, + InstanceEncounterChangePriority = 0x380245, + InstanceEncounterDisengageUnit = 0x380244, + InstanceEncounterEnd = 0x38024d, + InstanceEncounterEngageUnit = 0x380243, + InstanceEncounterGainCombatResurrectionCharge = 0x38024f, + InstanceEncounterInCombatResurrection = 0x38024e, + InstanceEncounterObjectiveComplete = 0x380248, + InstanceEncounterObjectiveStart = 0x380247, + InstanceEncounterObjectiveUpdate = 0x38024c, + InstanceEncounterPhaseShiftChanged = 0x380250, + InstanceEncounterStart = 0x380249, + InstanceEncounterTimerStart = 0x380246, + InstanceEncounterUpdateAllowReleaseInProgress = 0x38024b, + InstanceEncounterUpdateSuppressRelease = 0x38024a, InstanceGroupSizeChanged = 0x380193, InstanceInfo = 0x3800cc, InstanceReset = 0x380121, InstanceResetFailed = 0x380122, - InstanceSaveCreated = 0x380214, + InstanceSaveCreated = 0x380215, InterruptPowerRegen = 0x4e004a, InvalidatePageText = 0x3c000a, InvalidatePlayer = 0x4b0007, - InvalidPromotionCode = 0x3801ea, + InvalidPromotionCode = 0x3801eb, InventoryChangeFailure = 0x4f0005, - InventoryFixupComplete = 0x3802a5, - InventoryFullOverflow = 0x3802b6, - IslandAzeriteGain = 0x3801f3, - IslandComplete = 0x3801f4, + InventoryFixupComplete = 0x3802a6, + InventoryFullOverflow = 0x3802b7, + IslandAzeriteGain = 0x3801f4, + IslandComplete = 0x3801f5, IsQuestCompleteResponse = 0x4c0004, ItemChanged = 0x380184, - ItemCooldown = 0x38025a, - ItemEnchantTimeUpdate = 0x3801ec, + ItemCooldown = 0x38025b, + ItemEnchantTimeUpdate = 0x3801ed, ItemExpirePurchaseRefund = 0x380034, - ItemInteractionComplete = 0x3802eb, + ItemInteractionComplete = 0x3802ec, ItemPurchaseRefundResult = 0x380032, ItemPushResult = 0x3800bb, - ItemTimeUpdate = 0x3801eb, + ItemTimeUpdate = 0x3801ec, KickReason = 0x380124, - LatencyReportPing = 0x3802fb, + LatencyReportPing = 0x3802fc, LearnedSpells = 0x4e003e, LearnPvpTalentFailed = 0x38006d, LearnTalentFailed = 0x38006c, - LegacyLootRules = 0x3802bb, - LevelLinkingResult = 0x3802d1, + LegacyLootRules = 0x3802bc, + LevelLinkingResult = 0x3802d2, LevelUpInfo = 0x380182, LfgBootPlayer = 0x460019, LfgDisabled = 0x460017, @@ -1529,26 +1529,26 @@ namespace Framework.Constants LfgSlotInvalid = 0x460014, LfgTeleportDenied = 0x460016, LfgUpdateStatus = 0x460008, - LiveRegionAccountRestoreResult = 0x380206, - LiveRegionCharacterCopyResult = 0x380205, - LiveRegionGetAccountCharacterListResult = 0x3801f9, - LiveRegionKeyBindingsCopyResult = 0x380207, + LiveRegionAccountRestoreResult = 0x380207, + LiveRegionCharacterCopyResult = 0x380206, + LiveRegionGetAccountCharacterListResult = 0x3801fa, + LiveRegionKeyBindingsCopyResult = 0x380208, LoadCufProfiles = 0x380055, - LoadEquipmentSet = 0x3801a7, - LobbyMatchmakerLobbyAcquiredServer = 0x38030c, - LobbyMatchmakerPartyInfo = 0x38030d, - LobbyMatchmakerPartyInviteRejected = 0x38030e, - LobbyMatchmakerQueueProposed = 0x380310, - LobbyMatchmakerQueueResult = 0x380311, - LobbyMatchmakerReceiveInvite = 0x38030f, - LoginSetTimeSpeed = 0x3801a6, + LoadEquipmentSet = 0x3801a8, + LobbyMatchmakerLobbyAcquiredServer = 0x38030d, + LobbyMatchmakerPartyInfo = 0x38030e, + LobbyMatchmakerPartyInviteRejected = 0x38030f, + LobbyMatchmakerQueueProposed = 0x380311, + LobbyMatchmakerQueueResult = 0x380312, + LobbyMatchmakerReceiveInvite = 0x380310, + LoginSetTimeSpeed = 0x3801a7, LoginVerifyWorld = 0x38002f, LogoutCancelAck = 0x380120, LogoutComplete = 0x38011f, LogoutResponse = 0x38011e, LogXpGain = 0x38017e, LootAllPassed = 0x3800b9, - LootList = 0x3801d8, + LootList = 0x3801d9, LootMoneyNotify = 0x3800b4, LootRelease = 0x3800b3, LootReleaseAll = 0x3800b2, @@ -1559,21 +1559,21 @@ namespace Framework.Constants LootRollWon = 0x3800ba, LossOfControlAuraUpdate = 0x38010a, MailCommandResult = 0x3800d3, - MailListResult = 0x3801ed, - MailQueryNextTimeResult = 0x3801ee, + MailListResult = 0x3801ee, + MailQueryNextTimeResult = 0x3801ef, MapObjectivesInit = 0x3e002a, MapObjEvents = 0x38005f, MasterLootCandidateList = 0x3800b7, - MeetingStoneFailed = 0x380312, + MeetingStoneFailed = 0x380313, MessageBox = 0x38000a, MinimapPing = 0x380168, MirrorImageComponentedData = 0x4e0004, MirrorImageCreatureData = 0x4e0003, MissileCancel = 0x380060, - ModifyCooldown = 0x3801fb, + ModifyCooldown = 0x3801fc, Motd = 0x3d0003, MountResult = 0x38000f, - MovementEnforcementAlert = 0x3802c1, + MovementEnforcementAlert = 0x3802c2, MoveAddImpulse = 0x490062, MoveApplyInertia = 0x49005e, MoveApplyMovementForce = 0x490045, @@ -1687,52 +1687,52 @@ namespace Framework.Constants MoveUpdateTeleport = 0x49000f, MoveUpdateTurnRate = 0x49000b, MoveUpdateWalkSpeed = 0x490006, - MultiFloorLeaveFloor = 0x380271, - MultiFloorNewFloor = 0x380270, + MultiFloorLeaveFloor = 0x380272, + MultiFloorNewFloor = 0x380271, MythicPlusAllMapStats = 0x3800a3, MythicPlusCurrentAffixes = 0x3800a5, MythicPlusNewWeekRecord = 0x3800aa, MythicPlusSeasonData = 0x3800a4, NeutralPlayerFactionSelectResult = 0x380074, - NewDataBuild = 0x380336, + NewDataBuild = 0x380337, NewTaxiPath = 0x380119, NewWorld = 0x38002b, NotifyDestLocSpellCast = 0x4e0034, NotifyMissileTrajectoryCollision = 0x380145, NotifyMoney = 0x380031, NotifyReceivedMail = 0x3800d4, - NpcInteractionOpenResult = 0x380308, + NpcInteractionOpenResult = 0x380309, OfferPetitionError = 0x380150, OnCancelExpectedRideVehicleAura = 0x38017f, OnMonsterMove = 0x490002, - OpenArtifactForge = 0x380235, + OpenArtifactForge = 0x380236, OpenContainer = 0x4f0006, OpenLfgDungeonFinder = 0x460015, - OpenShipmentNpcResult = 0x38022d, + OpenShipmentNpcResult = 0x38022e, OverrideLight = 0x380155, - PageText = 0x3801b2, - PartyCommandResult = 0x380227, - PartyEligibilityForDelveTiersResponse = 0x38034b, + PageText = 0x3801b3, + PartyCommandResult = 0x380228, + PartyEligibilityForDelveTiersResponse = 0x38034c, PartyInvite = 0x380056, - PartyKillLog = 0x3801f1, - PartyMemberFullState = 0x3801f0, - PartyMemberPartialState = 0x3801ef, - PartyNotifyLfgLeaderChange = 0x3802f1, + PartyKillLog = 0x3801f2, + PartyMemberFullState = 0x3801f1, + PartyMemberPartialState = 0x3801f0, + PartyNotifyLfgLeaderChange = 0x3802f2, PartyUpdate = 0x38008c, PastTimeEvents = 0x38005b, - PauseMirrorTimer = 0x3801a9, + PauseMirrorTimer = 0x3801aa, PendingRaidLock = 0x380191, - PerksProgramActivityComplete = 0x380305, - PerksProgramActivityUpdate = 0x380301, - PerksProgramDisabled = 0x380306, - PerksProgramResult = 0x380302, - PerksProgramVendorUpdate = 0x380300, + PerksProgramActivityComplete = 0x380306, + PerksProgramActivityUpdate = 0x380302, + PerksProgramDisabled = 0x380307, + PerksProgramResult = 0x380303, + PerksProgramVendorUpdate = 0x380301, PetitionAlreadySigned = 0x380037, PetitionRenameGuildResponse = 0x440042, PetitionShowList = 0x380158, PetitionShowSignatures = 0x380159, - PetitionSignResults = 0x3801e3, - PetActionFeedback = 0x3801e0, + PetitionSignResults = 0x3801e4, + PetActionFeedback = 0x3801e1, PetActionSound = 0x38013b, PetBattleChatRestricted = 0x38009a, PetBattleDebugQueueDumpResponse = 0x38010f, @@ -1785,13 +1785,13 @@ namespace Framework.Constants PlayerSkinned = 0x4b000e, PlayerTutorialHighlightSpell = 0x4b0015, PlayerTutorialUnhighlightSpell = 0x4b0014, - PlayMusic = 0x380200, - PlayObjectSound = 0x380202, - PlayOneShotAnimKit = 0x3801c8, + PlayMusic = 0x380201, + PlayObjectSound = 0x380203, + PlayOneShotAnimKit = 0x3801c9, PlayOrphanSpellVisual = 0x4e0038, PlayScene = 0x3800ce, - PlaySound = 0x3801ff, - PlaySpeakerbotSound = 0x380203, + PlaySound = 0x380200, + PlaySpeakerbotSound = 0x380204, PlaySpellVisual = 0x4e0036, PlaySpellVisualKit = 0x4e003a, PlayTimeWarning = 0x380197, @@ -1799,11 +1799,11 @@ namespace Framework.Constants PowerUpdate = 0x38016c, PreloadChildMap = 0x38000d, PreloadWorld = 0x38002c, - PrepopulateNameCache = 0x3802c4, - PreRessurect = 0x3801fe, + PrepopulateNameCache = 0x3802c5, + PreRessurect = 0x3801ff, PrintNotification = 0x380063, - ProcResist = 0x3801f2, - ProfessionGossip = 0x380291, + ProcResist = 0x3801f3, + ProfessionGossip = 0x380292, PushSpellToActionBar = 0x4e0042, PvpCredit = 0x3e0024, PvpMatchComplete = 0x3e002f, @@ -1812,7 +1812,7 @@ namespace Framework.Constants PvpMatchStart = 0x3e002d, PvpMatchStatistics = 0x3e0010, PvpOptionsEnabled = 0x3e0013, - PvpTierRecord = 0x3802fc, + PvpTierRecord = 0x3802fd, QueryBattlePetNameResponse = 0x3c000c, QueryCreatureResponse = 0x3c0006, QueryGameObjectResponse = 0x3c0007, @@ -1847,22 +1847,22 @@ namespace Framework.Constants QuestPoiQueryResponse = 0x4c001d, QuestPoiUpdateResponse = 0x4c001f, QuestPushResult = 0x4c0010, - QuestSessionInfoResponse = 0x3802e7, - QuestSessionReadyCheck = 0x3802d5, - QuestSessionReadyCheckResponse = 0x3802d6, - QuestSessionResult = 0x3802d4, + QuestSessionInfoResponse = 0x3802e8, + QuestSessionReadyCheck = 0x3802d6, + QuestSessionReadyCheckResponse = 0x3802d7, + QuestSessionResult = 0x3802d5, QuestUpdateAddCredit = 0x4c000c, QuestUpdateAddCreditSimple = 0x4c000d, QuestUpdateAddPvpCredit = 0x4c000e, QuestUpdateComplete = 0x4c0009, QuestUpdateFailed = 0x4c000a, QuestUpdateFailedTimer = 0x4c000b, - QueueSummaryUpdate = 0x3802a4, - RafAccountInfo = 0x3802d2, - RafActivityStateChanged = 0x3802e3, - RafDebugFriendMonths = 0x380333, - RaidDifficultySet = 0x38023f, - RaidGroupOnly = 0x380241, + QueueSummaryUpdate = 0x3802a5, + RafAccountInfo = 0x3802d3, + RafActivityStateChanged = 0x3802e4, + RafDebugFriendMonths = 0x380334, + RaidDifficultySet = 0x380240, + RaidGroupOnly = 0x380242, RaidInstanceMessage = 0x3d000a, RaidMarkersChanged = 0x380038, RandomRoll = 0x3800c8, @@ -1870,34 +1870,34 @@ namespace Framework.Constants ReadyCheckCompleted = 0x380090, ReadyCheckResponse = 0x38008f, ReadyCheckStarted = 0x38008e, - ReadItemResultFailed = 0x38023b, - ReadItemResultOk = 0x380232, + ReadItemResultFailed = 0x38023c, + ReadItemResultOk = 0x380233, RealmQueryResponse = 0x3c0005, - ReattachResurrect = 0x3801e2, + ReattachResurrect = 0x3801e3, ReceivePingUnit = 0x380039, ReceivePingWorldPoint = 0x38003a, - RecraftItemResult = 0x380329, + RecraftItemResult = 0x38032a, RecruitAFriendFailure = 0x38015a, RefreshComponent = 0x3800e9, RegionwideCharacterMailData = 0x38001a, RegionwideCharacterRestrictionsData = 0x380019, RemoveItemPassive = 0x380043, RemoveSpellFromActionBar = 0x4e0043, - ReplaceTrophyResponse = 0x380257, + ReplaceTrophyResponse = 0x380258, ReportPvpPlayerAfkResult = 0x4b0009, RequestCemeteryListResponse = 0x380025, RequestPvpRewardsResponse = 0x3e0014, RequestScheduledPvpInfoResponse = 0x3e0015, ResetCompressionContext = 0x3f0007, ResetFailedNotify = 0x380151, - ResetLastLoadedConfigCvars = 0x380330, + ResetLastLoadedConfigCvars = 0x380331, ResetQuestPoi = 0x4c0020, ResetRangedCombatTimer = 0x3e0023, ResetWeeklyCurrency = 0x380009, RespecWipeConfirm = 0x3800ab, RespondInspectAchievements = 0x380006, - ResponsePerkPendingRewards = 0x380303, - ResponsePerkRecentPurchases = 0x380304, + ResponsePerkPendingRewards = 0x380304, + ResponsePerkRecentPurchases = 0x380305, RestartGlobalCooldown = 0x4e0052, RestrictedAccountWarning = 0x380052, ResumeCast = 0x4e002c, @@ -1906,21 +1906,21 @@ namespace Framework.Constants ResumeToken = 0x380041, ResurrectRequest = 0x380012, ResyncRunes = 0x4e0050, - ReturningPlayerPrompt = 0x38023a, - ReturnApplicantList = 0x3802c8, - ReturnRecruitingClubs = 0x3802c7, + ReturningPlayerPrompt = 0x38023b, + ReturnApplicantList = 0x3802c9, + ReturnRecruitingClubs = 0x3802c8, RoleChangedInform = 0x380021, RoleChosen = 0x46001d, RolePollInform = 0x380022, - RuneforgeLegendaryCraftingOpenNpc = 0x380290, + RuneforgeLegendaryCraftingOpenNpc = 0x380291, RuneRegenDebug = 0x38004f, - ScenarioCompleted = 0x38027e, + ScenarioCompleted = 0x38027f, ScenarioPois = 0x3800cb, ScenarioProgressUpdate = 0x3800c4, - ScenarioShowCriteria = 0x380294, + ScenarioShowCriteria = 0x380295, ScenarioState = 0x3800c3, - ScenarioUiUpdate = 0x380293, - ScenarioVacate = 0x38023c, + ScenarioUiUpdate = 0x380294, + ScenarioVacate = 0x38023d, SceneObjectEvent = 0x38007a, SceneObjectPetBattleFinalRound = 0x38007f, SceneObjectPetBattleFinished = 0x380080, @@ -1941,50 +1941,50 @@ namespace Framework.Constants SendUnlearnSpells = 0x4e001c, ServerFirstAchievements = 0x3800e6, ServerTime = 0x38011d, - ServerTimeOffset = 0x3801ad, + ServerTimeOffset = 0x3801ae, SetupCombatLogFileFlush = 0x4e000f, SetupCurrency = 0x380007, - SetAiAnimKit = 0x3801c7, - SetAnimTier = 0x3801cb, + SetAiAnimKit = 0x3801c8, + SetAnimTier = 0x3801cc, SetChrUpgradeTier = 0x380077, SetCurrency = 0x380008, SetDfFastLaunchResult = 0x460012, SetDungeonDifficulty = 0x38013f, SetFactionAtWar = 0x380199, - SetFactionNotVisible = 0x3801c2, - SetFactionStanding = 0x3801c3, - SetFactionVisible = 0x3801c1, + SetFactionNotVisible = 0x3801c3, + SetFactionStanding = 0x3801c4, + SetFactionVisible = 0x3801c2, SetFlatSpellModifier = 0x4e0027, SetItemPurchaseData = 0x380033, - SetLootMethodFailed = 0x380262, + SetLootMethodFailed = 0x380263, SetMaxWeeklyQuantity = 0x380036, - SetMeleeAnimKit = 0x3801ca, - SetMovementAnimKit = 0x3801c9, + SetMeleeAnimKit = 0x3801cb, + SetMovementAnimKit = 0x3801ca, SetPctSpellModifier = 0x4e0028, SetPetSpecialization = 0x3800bd, SetPlayerDeclinedNamesResult = 0x4b000b, SetPlayHoverAnim = 0x380053, - SetProficiency = 0x3801cc, - SetQuestReplayCooldownOverride = 0x3802db, + SetProficiency = 0x3801cd, + SetQuestReplayCooldownOverride = 0x3802dc, SetShipmentReadyResponse = 0x42003a, SetSpellCharges = 0x4e0018, SetTimeZoneInformation = 0x380112, SetVehicleRecId = 0x380190, - ShadowlandsCapacitanceUpdate = 0x380307, + ShadowlandsCapacitanceUpdate = 0x380308, ShipmentFactionUpdateResult = 0x42003b, - ShowDelvesCompanionConfigurationUi = 0x380349, - ShowDelvesDisplayUi = 0x380347, + ShowDelvesCompanionConfigurationUi = 0x38034a, + ShowDelvesDisplayUi = 0x380348, ShowNeutralPlayerFactionSelectUi = 0x380073, ShowQuestCompletionText = 0x4c0015, ShowTaxiNodes = 0x380167, - ShowTradeSkillResponse = 0x380208, - SocialContractRequestResponse = 0x380313, - SocketGemsFailure = 0x3801bf, - SocketGemsSuccess = 0x3801be, + ShowTradeSkillResponse = 0x380209, + SocialContractRequestResponse = 0x380314, + SocketGemsFailure = 0x3801c0, + SocketGemsSuccess = 0x3801bf, SpecialMountAnim = 0x38013a, - SpectateEnd = 0x380335, - SpectatePlayer = 0x380334, - SpecInvoluntarilyChanged = 0x3801b1, + SpectateEnd = 0x380336, + SpectatePlayer = 0x380335, + SpecInvoluntarilyChanged = 0x3801b2, SpellAbsorbLog = 0x4e000c, SpellCategoryCooldown = 0x4e0006, SpellChannelStart = 0x4e0022, @@ -2013,35 +2013,35 @@ namespace Framework.Constants SpellPrepare = 0x4e0029, SpellStart = 0x4e002b, SpellVisualLoadScreen = 0x380065, - SplashScreenShowLatest = 0x3802ed, - StandStateUpdate = 0x3801b5, + SplashScreenShowLatest = 0x3802ee, + StandStateUpdate = 0x3801b6, StarterBuildActivateFailed = 0x38006b, StartElapsedTimer = 0x38009c, StartElapsedTimers = 0x38009e, StartLightningStorm = 0x380142, StartLootRoll = 0x3800b5, - StartMirrorTimer = 0x3801a8, + StartMirrorTimer = 0x3801a9, StartTimer = 0x38003d, StopElapsedTimer = 0x38009d, - StopMirrorTimer = 0x3801aa, - StopSpeakerbotSound = 0x380204, + StopMirrorTimer = 0x3801ab, + StopSpeakerbotSound = 0x380205, StopTimer = 0x38003e, StreamingMovies = 0x38003c, - SuggestInviteInform = 0x380228, + SuggestInviteInform = 0x380229, SummonCancel = 0x38014b, SummonRaidMemberValidateFailed = 0x380023, - SummonRequest = 0x3801b9, + SummonRequest = 0x3801ba, SupercededSpells = 0x4e003d, SuspendComms = 0x3f0002, SuspendToken = 0x380040, - SyncWowEntitlements = 0x3802e5, - TalentsInvoluntarilyReset = 0x3801b0, + SyncWowEntitlements = 0x3802e6, + TalentsInvoluntarilyReset = 0x3801b1, TaxiNodeStatus = 0x380117, TextEmote = 0x380115, ThreatClear = 0x380176, ThreatRemove = 0x380175, ThreatUpdate = 0x380174, - TimerunningSeasonEnded = 0x38034a, + TimerunningSeasonEnded = 0x38034b, TimeAdjustment = 0x490001, TimeSyncRequest = 0x490000, TitleEarned = 0x380171, @@ -2058,50 +2058,51 @@ namespace Framework.Constants TransferAborted = 0x38019c, TransferPending = 0x380066, TreasurePickerResponse = 0x3c0011, - TriggerCinematic = 0x38025c, + TriggerCinematic = 0x38025d, TriggerMovie = 0x380165, - TurnInPetitionResult = 0x3801e5, - TutorialFlags = 0x380250, - UiAction = 0x380201, + TurnInPetitionResult = 0x3801e6, + TutorialFlags = 0x380251, + UiAction = 0x380202, UiMapQuestLinesResponse = 0x4c0023, - UndeleteCharacterResponse = 0x38025d, - UndeleteCooldownStatusResponse = 0x38025e, + UndeleteCharacterResponse = 0x38025e, + UndeleteCooldownStatusResponse = 0x38025f, UnlearnedSpells = 0x4e003f, UnloadChildMap = 0x38000e, - UpdateAadcStatusResponse = 0x3802fd, + UpdateAadcStatusResponse = 0x3802fe, UpdateAccountData = 0x3801a2, + UpdateAccountDataComplete = 0x3801a3, UpdateActionButtons = 0x380078, - UpdateBnetSessionKey = 0x3802b5, + UpdateBnetSessionKey = 0x3802b6, UpdateCapturePoint = 0x3e0007, - UpdateCelestialBody = 0x3802b1, - UpdateCharacterFlags = 0x380256, - UpdateChargeCategoryCooldown = 0x3801fd, - UpdateCooldown = 0x3801fc, + UpdateCelestialBody = 0x3802b2, + UpdateCharacterFlags = 0x380257, + UpdateChargeCategoryCooldown = 0x3801fe, + UpdateCooldown = 0x3801fd, UpdateCraftingNpcRecipes = 0x420038, UpdateDailyMissionCounter = 0x420021, UpdateExpansionLevel = 0x3800de, - UpdateGameTimeState = 0x3802b8, + UpdateGameTimeState = 0x3802b9, UpdateInstanceOwnership = 0x380144, UpdateLastInstance = 0x380123, UpdateObject = 0x480000, UpdatePrimarySpec = 0x380070, UpdateRecentPlayerGuids = 0x38008d, UpdateTalentData = 0x38006f, - UpdateWorldState = 0x3801df, + UpdateWorldState = 0x3801e0, UserlistAdd = 0x3d000f, UserlistRemove = 0x3d0010, UserlistUpdate = 0x3d0011, - UseEquipmentSetResult = 0x3801e6, - VasCheckTransferOkResponse = 0x3802ac, - VasGetQueueMinutesResponse = 0x3802aa, - VasGetServiceStatusResponse = 0x3802a9, - VasPurchaseComplete = 0x380284, - VasPurchaseStateUpdate = 0x380283, + UseEquipmentSetResult = 0x3801e7, + VasCheckTransferOkResponse = 0x3802ad, + VasGetQueueMinutesResponse = 0x3802ab, + VasGetServiceStatusResponse = 0x3802aa, + VasPurchaseComplete = 0x380285, + VasPurchaseStateUpdate = 0x380284, VendorInventory = 0x380051, VignetteUpdate = 0x4b0010, - VoiceChannelInfoResponse = 0x3802b0, - VoiceChannelSttTokenResponse = 0x3802f8, - VoiceLoginResponse = 0x3802af, + VoiceChannelInfoResponse = 0x3802b1, + VoiceChannelSttTokenResponse = 0x3802f9, + VoiceLoginResponse = 0x3802b0, VoidItemSwapResponse = 0x4f0004, VoidStorageContents = 0x4f0001, VoidStorageFailed = 0x4f0000, @@ -2110,31 +2111,31 @@ namespace Framework.Constants WaitQueueFinish = 0x380003, WaitQueueUpdate = 0x380002, Warden3Data = 0x38000b, - Warden3Disabled = 0x3802b3, - Warden3Enabled = 0x3802b2, - WarfrontComplete = 0x3801f5, + Warden3Disabled = 0x3802b4, + Warden3Enabled = 0x3802b3, + WarfrontComplete = 0x3801f6, WargameRequestOpponentResponse = 0x3e0012, WargameRequestSuccessfullySentToOpponent = 0x3e0011, Weather = 0x380141, - WeeklyRewardsProgressResult = 0x3802f0, - WeeklyRewardsResult = 0x3802ee, - WeeklyRewardClaimResult = 0x3802ef, + WeeklyRewardsProgressResult = 0x3802f1, + WeeklyRewardsResult = 0x3802ef, + WeeklyRewardClaimResult = 0x3802f0, Who = 0x3d0002, WhoIs = 0x380140, - WillBeKickedForAddedSubscriptionTime = 0x3802b7, + WillBeKickedForAddedSubscriptionTime = 0x3802b8, WorldQuestUpdateResponse = 0x4b0017, WorldServerInfo = 0x380045, - WowEntitlementNotification = 0x3802e6, - WowLabsAreaInfo = 0x380318, - WowLabsNotifyPlayersMatchEnd = 0x380314, - WowLabsNotifyPlayersMatchStateChanged = 0x380315, - WowLabsPartyError = 0x380321, - WowLabsSetAreaIdResult = 0x380316, - WowLabsSetPredictionCircle = 0x38031a, - WowLabsSetSelectedAreaId = 0x380317, - XpAwardedFromCurrency = 0x38032f, + WowEntitlementNotification = 0x3802e7, + WowLabsAreaInfo = 0x380319, + WowLabsNotifyPlayersMatchEnd = 0x380315, + WowLabsNotifyPlayersMatchStateChanged = 0x380316, + WowLabsPartyError = 0x380322, + WowLabsSetAreaIdResult = 0x380317, + WowLabsSetPredictionCircle = 0x38031b, + WowLabsSetSelectedAreaId = 0x380318, + XpAwardedFromCurrency = 0x380330, XpGainAborted = 0x380062, - XpGainEnabled = 0x380240, + XpGainEnabled = 0x380241, ZoneUnderAttack = 0x3d000b, // Opcodes That Are Not Generated Automatically diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index ef4137193..016337893 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -811,6 +811,7 @@ namespace Framework.Constants Inventory = 0x02, Bank = 0x04, ReagentBank = 0x08, + AccountBank = 0x10, // NYI Default = Equipment | Inventory, Everywhere = Equipment | Inventory | Bank | ReagentBank diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index 645ea9449..031fa44ff 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -2295,817 +2295,828 @@ namespace Framework.Constants OutOfFury = 369, OutOfPain = 370, OutOfPowerDisplay = 371, - LootGone = 372, - MountForceddismount = 373, - AutofollowTooFar = 374, - UnitNotFound = 375, - InvalidFollowTarget = 376, - InvalidFollowPvpCombat = 377, - InvalidFollowTargetPvpCombat = 378, - InvalidInspectTarget = 379, - GuildemblemSuccess = 380, - GuildemblemInvalidTabardColors = 381, - GuildemblemNoguild = 382, - GuildemblemNotguildmaster = 383, - GuildemblemNotenoughmoney = 384, - GuildemblemInvalidvendor = 385, - EmblemerrorNotabardgeoset = 386, - SpellOutOfRange = 387, - CommandNeedsTarget = 388, - NoammoS = 389, - Toobusytofollow = 390, - DuelRequested = 391, - DuelCancelled = 392, - Deathbindalreadybound = 393, - DeathbindSuccessS = 394, - Noemotewhilerunning = 395, - ZoneExplored = 396, - ZoneExploredXp = 397, - InvalidItemTarget = 398, - InvalidQuestTarget = 399, - IgnoringYouS = 400, - FishNotHooked = 401, - FishEscaped = 402, - SpellFailedNotunsheathed = 403, - PetitionOfferedS = 404, - PetitionSigned = 405, - PetitionSignedS = 406, - PetitionDeclinedS = 407, - PetitionAlreadySigned = 408, - PetitionRestrictedAccountTrial = 409, - PetitionAlreadySignedOther = 410, - PetitionInGuild = 411, - PetitionCreator = 412, - PetitionNotEnoughSignatures = 413, - PetitionNotSameServer = 414, - PetitionFull = 415, - PetitionAlreadySignedByS = 416, - GuildNameInvalid = 417, - SpellUnlearnedS = 418, - PetSpellRooted = 419, - PetSpellAffectingCombat = 420, - PetSpellOutOfRange = 421, - PetSpellNotBehind = 422, - PetSpellTargetsDead = 423, - PetSpellDead = 424, - PetSpellNopath = 425, - ItemCantBeDestroyed = 426, - TicketAlreadyExists = 427, - TicketCreateError = 428, - TicketUpdateError = 429, - TicketDbError = 430, - TicketNoText = 431, - TicketTextTooLong = 432, - ObjectIsBusy = 433, - ExhaustionWellrested = 434, - ExhaustionRested = 435, - ExhaustionNormal = 436, - ExhaustionTired = 437, - ExhaustionExhausted = 438, - NoItemsWhileShapeshifted = 439, - CantInteractShapeshifted = 440, - RealmNotFound = 441, - MailQuestItem = 442, - MailBoundItem = 443, - MailConjuredItem = 444, - MailBag = 445, - MailToSelf = 446, - MailTargetNotFound = 447, - MailDatabaseError = 448, - MailDeleteItemError = 449, - MailWrappedCod = 450, - MailCantSendRealm = 451, - MailTempReturnOutage = 452, - MailRecepientCantReceiveMail = 453, - MailSent = 454, - MailTargetIsTrial = 455, - NotHappyEnough = 456, - UseCantImmune = 457, - CantBeDisenchanted = 458, - CantUseDisarmed = 459, - AuctionDatabaseError = 460, - AuctionHigherBid = 461, - AuctionAlreadyBid = 462, - AuctionOutbidS = 463, - AuctionWonS = 464, - AuctionRemovedS = 465, - AuctionBidPlaced = 466, - LogoutFailed = 467, - QuestPushSuccessS = 468, - QuestPushInvalidS = 469, - QuestPushInvalidToRecipientS = 470, - QuestPushAcceptedS = 471, - QuestPushDeclinedS = 472, - QuestPushBusyS = 473, - QuestPushDeadS = 474, - QuestPushDeadToRecipientS = 475, - QuestPushLogFullS = 476, - QuestPushLogFullToRecipientS = 477, - QuestPushOnquestS = 478, - QuestPushOnquestToRecipientS = 479, - QuestPushAlreadyDoneS = 480, - QuestPushAlreadyDoneToRecipientS = 481, - QuestPushNotDailyS = 482, - QuestPushTimerExpiredS = 483, - QuestPushNotInPartyS = 484, - QuestPushDifferentServerDailyS = 485, - QuestPushDifferentServerDailyToRecipientS = 486, - QuestPushNotAllowedS = 487, - QuestPushPrerequisiteS = 488, - QuestPushPrerequisiteToRecipientS = 489, - QuestPushLowLevelS = 490, - QuestPushLowLevelToRecipientS = 491, - QuestPushHighLevelS = 492, - QuestPushHighLevelToRecipientS = 493, - QuestPushClassS = 494, - QuestPushClassToRecipientS = 495, - QuestPushRaceS = 496, - QuestPushRaceToRecipientS = 497, - QuestPushLowFactionS = 498, - QuestPushLowFactionToRecipientS = 499, - QuestPushHighFactionS = 500, - QuestPushHighFactionToRecipientS = 501, - QuestPushExpansionS = 502, - QuestPushExpansionToRecipientS = 503, - QuestPushNotGarrisonOwnerS = 504, - QuestPushNotGarrisonOwnerToRecipientS = 505, - QuestPushWrongCovenantS = 506, - QuestPushWrongCovenantToRecipientS = 507, - QuestPushNewPlayerExperienceS = 508, - QuestPushNewPlayerExperienceToRecipientS = 509, - QuestPushWrongFactionS = 510, - QuestPushWrongFactionToRecipientS = 511, - QuestPushCrossFactionRestrictedS = 512, - RaidGroupLowlevel = 513, - RaidGroupOnly = 514, - RaidGroupFull = 515, - RaidGroupRequirementsUnmatch = 516, - CorpseIsNotInInstance = 517, - PvpKillHonorable = 518, - PvpKillDishonorable = 519, - SpellFailedAlreadyAtFullHealth = 520, - SpellFailedAlreadyAtFullMana = 521, - SpellFailedAlreadyAtFullPowerS = 522, - AutolootMoneyS = 523, - GenericStunned = 524, - GenericThrottle = 525, - ClubFinderSearchingTooFast = 526, - TargetStunned = 527, - MustRepairDurability = 528, - RaidYouJoined = 529, - RaidYouLeft = 530, - InstanceGroupJoinedWithParty = 531, - InstanceGroupJoinedWithRaid = 532, - RaidMemberAddedS = 533, - RaidMemberRemovedS = 534, - InstanceGroupAddedS = 535, - InstanceGroupRemovedS = 536, - ClickOnItemToFeed = 537, - TooManyChatChannels = 538, - LootRollPending = 539, - LootPlayerNotFound = 540, - NotInRaid = 541, - LoggingOut = 542, - TargetLoggingOut = 543, - NotWhileMounted = 544, - NotWhileShapeshifted = 545, - NotInCombat = 546, - NotWhileDisarmed = 547, - PetBroken = 548, - TalentWipeError = 549, - SpecWipeError = 550, - GlyphWipeError = 551, - PetSpecWipeError = 552, - FeignDeathResisted = 553, - MeetingStoneInQueueS = 554, - MeetingStoneLeftQueueS = 555, - MeetingStoneOtherMemberLeft = 556, - MeetingStonePartyKickedFromQueue = 557, - MeetingStoneMemberStillInQueue = 558, - MeetingStoneSuccess = 559, - MeetingStoneInProgress = 560, - MeetingStoneMemberAddedS = 561, - MeetingStoneGroupFull = 562, - MeetingStoneNotLeader = 563, - MeetingStoneInvalidLevel = 564, - MeetingStoneTargetNotInParty = 565, - MeetingStoneTargetInvalidLevel = 566, - MeetingStoneMustBeLeader = 567, - MeetingStoneNoRaidGroup = 568, - MeetingStoneNeedParty = 569, - MeetingStoneNotFound = 570, - MeetingStoneTargetInVehicle = 571, - GuildemblemSame = 572, - EquipTradeItem = 573, - PvpToggleOn = 574, - PvpToggleOff = 575, - GroupJoinBattlegroundDeserters = 576, - GroupJoinBattlegroundDead = 577, - GroupJoinBattlegroundS = 578, - GroupJoinBattlegroundFail = 579, - GroupJoinBattlegroundTooMany = 580, - SoloJoinBattlegroundS = 581, - JoinSingleScenarioS = 582, - BattlegroundTooManyQueues = 583, - BattlegroundCannotQueueForRated = 584, - BattledgroundQueuedForRated = 585, - BattlegroundTeamLeftQueue = 586, - BattlegroundNotInBattleground = 587, - AlreadyInArenaTeamS = 588, - InvalidPromotionCode = 589, - BgPlayerJoinedSs = 590, - BgPlayerLeftS = 591, - RestrictedAccount = 592, - RestrictedAccountTrial = 593, - NotEnoughPurchasedGameTime = 594, - PlayTimeExceeded = 595, - ApproachingPartialPlayTime = 596, - ApproachingPartialPlayTime2 = 597, - ApproachingNoPlayTime = 598, - ApproachingNoPlayTime2 = 599, - UnhealthyTime = 600, - ChatRestrictedTrial = 601, - ChatThrottled = 602, - MailReachedCap = 603, - InvalidRaidTarget = 604, - RaidLeaderReadyCheckStartS = 605, - ReadyCheckInProgress = 606, - ReadyCheckThrottled = 607, - DungeonDifficultyFailed = 608, - DungeonDifficultyChangedS = 609, - TradeWrongRealm = 610, - TradeNotOnTaplist = 611, - ChatPlayerAmbiguousS = 612, - LootCantLootThatNow = 613, - LootMasterInvFull = 614, - LootMasterUniqueItem = 615, - LootMasterOther = 616, - FilteringYouS = 617, - UsePreventedByMechanicS = 618, - ItemUniqueEquippable = 619, - LfgLeaderIsLfmS = 620, - LfgPending = 621, - CantSpeakLangage = 622, - VendorMissingTurnins = 623, - BattlegroundNotInTeam = 624, - NotInBattleground = 625, - NotEnoughHonorPoints = 626, - NotEnoughArenaPoints = 627, - SocketingRequiresMetaGem = 628, - SocketingMetaGemOnlyInMetaslot = 629, - SocketingRequiresHydraulicGem = 630, - SocketingHydraulicGemOnlyInHydraulicslot = 631, - SocketingRequiresCogwheelGem = 632, - SocketingCogwheelGemOnlyInCogwheelslot = 633, - SocketingItemTooLowLevel = 634, - ItemMaxCountSocketed = 635, - SystemDisabled = 636, - QuestFailedTooManyDailyQuestsI = 637, - ItemMaxCountEquippedSocketed = 638, - ItemUniqueEquippableSocketed = 639, - UserSquelched = 640, - AccountSilenced = 641, - PartyMemberSilenced = 642, - PartyMemberSilencedLfgDelist = 643, - TooMuchGold = 644, - NotBarberSitting = 645, - QuestFailedCais = 646, - InviteRestrictedTrial = 647, - VoiceIgnoreFull = 648, - VoiceIgnoreSelf = 649, - VoiceIgnoreNotFound = 650, - VoiceIgnoreAlreadyS = 651, - VoiceIgnoreAddedS = 652, - VoiceIgnoreRemovedS = 653, - VoiceIgnoreAmbiguous = 654, - VoiceIgnoreDeleted = 655, - UnknownMacroOptionS = 656, - NotDuringArenaMatch = 657, - NotInRatedBattleground = 658, - PlayerSilenced = 659, - PlayerUnsilenced = 660, - ComsatDisconnect = 661, - ComsatReconnectAttempt = 662, - ComsatConnectFail = 663, - MailInvalidAttachmentSlot = 664, - MailTooManyAttachments = 665, - MailInvalidAttachment = 666, - MailAttachmentExpired = 667, - VoiceChatParentalDisableMic = 668, - ProfaneChatName = 669, - PlayerSilencedEcho = 670, - PlayerUnsilencedEcho = 671, - LootCantLootThat = 672, - ArenaExpiredCais = 673, - GroupActionThrottled = 674, - AlreadyPickpocketed = 675, - NameInvalid = 676, - NameNoName = 677, - NameTooShort = 678, - NameTooLong = 679, - NameMixedLanguages = 680, - NameProfane = 681, - NameReserved = 682, - NameThreeConsecutive = 683, - NameInvalidSpace = 684, - NameConsecutiveSpaces = 685, - NameRussianConsecutiveSilentCharacters = 686, - NameRussianSilentCharacterAtBeginningOrEnd = 687, - NameDeclensionDoesntMatchBaseName = 688, - RecruitAFriendNotLinked = 689, - RecruitAFriendNotNow = 690, - RecruitAFriendSummonLevelMax = 691, - RecruitAFriendSummonCooldown = 692, - RecruitAFriendSummonOffline = 693, - RecruitAFriendInsufExpanLvl = 694, - RecruitAFriendMapIncomingTransferNotAllowed = 695, - NotSameAccount = 696, - BadOnUseEnchant = 697, - TradeSelf = 698, - TooManySockets = 699, - ItemMaxLimitCategoryCountExceededIs = 700, - TradeTargetMaxLimitCategoryCountExceededIs = 701, - ItemMaxLimitCategorySocketedExceededIs = 702, - ItemMaxLimitCategoryEquippedExceededIs = 703, - ShapeshiftFormCannotEquip = 704, - ItemInventoryFullSatchel = 705, - ScalingStatItemLevelExceeded = 706, - ScalingStatItemLevelTooLow = 707, - PurchaseLevelTooLow = 708, - GroupSwapFailed = 709, - InviteInCombat = 710, - InvalidGlyphSlot = 711, - GenericNoValidTargets = 712, - CalendarEventAlertS = 713, - PetLearnSpellS = 714, - PetLearnAbilityS = 715, - PetSpellUnlearnedS = 716, - InviteUnknownRealm = 717, - InviteNoPartyServer = 718, - InvitePartyBusy = 719, - InvitePartyBusyPendingRequest = 720, - InvitePartyBusyPendingSuggest = 721, - PartyTargetAmbiguous = 722, - PartyLfgInviteRaidLocked = 723, - PartyLfgBootLimit = 724, - PartyLfgBootCooldownS = 725, - PartyLfgBootNotEligibleS = 726, - PartyLfgBootInpatientTimerS = 727, - PartyLfgBootInProgress = 728, - PartyLfgBootTooFewPlayers = 729, - PartyLfgBootVoteSucceeded = 730, - PartyLfgBootVoteFailed = 731, - PartyLfgBootDisallowedByMap = 732, - PartyLfgBootDungeonComplete = 733, - PartyLfgBootLootRolls = 734, - PartyLfgBootVoteRegistered = 735, - PartyPrivateGroupOnly = 736, - PartyLfgTeleportInCombat = 737, - PartyTimeRunningSeasonIdMustMatch = 738, - RaidDisallowedByLevel = 739, - RaidDisallowedByCrossRealm = 740, - PartyRoleNotAvailable = 741, - JoinLfgObjectFailed = 742, - LfgRemovedLevelup = 743, - LfgRemovedXpToggle = 744, - LfgRemovedFactionChange = 745, - BattlegroundInfoThrottled = 746, - BattlegroundAlreadyIn = 747, - ArenaTeamChangeFailedQueued = 748, - ArenaTeamPermissions = 749, - NotWhileFalling = 750, - NotWhileMoving = 751, - NotWhileFatigued = 752, - MaxSockets = 753, - MultiCastActionTotemS = 754, - BattlegroundJoinLevelup = 755, - RemoveFromPvpQueueXpGain = 756, - BattlegroundJoinXpGain = 757, - BattlegroundJoinMercenary = 758, - BattlegroundJoinTooManyHealers = 759, - BattlegroundJoinRatedTooManyHealers = 760, - BattlegroundJoinTooManyTanks = 761, - BattlegroundJoinTooManyDamage = 762, - RaidDifficultyFailed = 763, - RaidDifficultyChangedS = 764, - LegacyRaidDifficultyChangedS = 765, - RaidLockoutChangedS = 766, - RaidConvertedToParty = 767, - PartyConvertedToRaid = 768, - PlayerDifficultyChangedS = 769, - GmresponseDbError = 770, - BattlegroundJoinRangeIndex = 771, - ArenaJoinRangeIndex = 772, - RemoveFromPvpQueueFactionChange = 773, - BattlegroundJoinFailed = 774, - BattlegroundJoinNoValidSpecForRole = 775, - BattlegroundJoinRespec = 776, - BattlegroundInvitationDeclined = 777, - BattlegroundInvitationDeclinedBy = 778, - BattlegroundJoinTimedOut = 779, - BattlegroundDupeQueue = 780, - BattlegroundJoinMustCompleteQuest = 781, - InBattlegroundRespec = 782, - MailLimitedDurationItem = 783, - YellRestrictedTrial = 784, - ChatRaidRestrictedTrial = 785, - LfgRoleCheckFailed = 786, - LfgRoleCheckFailedTimeout = 787, - LfgRoleCheckFailedNotViable = 788, - LfgReadyCheckFailed = 789, - LfgReadyCheckFailedTimeout = 790, - LfgGroupFull = 791, - LfgNoLfgObject = 792, - LfgNoSlotsPlayer = 793, - LfgNoSlotsParty = 794, - LfgNoSpec = 795, - LfgMismatchedSlots = 796, - LfgMismatchedSlotsLocalXrealm = 797, - LfgPartyPlayersFromDifferentRealms = 798, - LfgMembersNotPresent = 799, - LfgGetInfoTimeout = 800, - LfgInvalidSlot = 801, - LfgDeserterPlayer = 802, - LfgDeserterParty = 803, - LfgDead = 804, - LfgRandomCooldownPlayer = 805, - LfgRandomCooldownParty = 806, - LfgTooManyMembers = 807, - LfgTooFewMembers = 808, - LfgProposalFailed = 809, - LfgProposalDeclinedSelf = 810, - LfgProposalDeclinedParty = 811, - LfgNoSlotsSelected = 812, - LfgNoRolesSelected = 813, - LfgRoleCheckInitiated = 814, - LfgReadyCheckInitiated = 815, - LfgPlayerDeclinedRoleCheck = 816, - LfgPlayerDeclinedReadyCheck = 817, - LfgLorewalking = 818, - LfgJoinedQueue = 819, - LfgJoinedFlexQueue = 820, - LfgJoinedRfQueue = 821, - LfgJoinedScenarioQueue = 822, - LfgJoinedWorldPvpQueue = 823, - LfgJoinedBattlefieldQueue = 824, - LfgJoinedList = 825, - QueuedPlunderstorm = 826, - LfgLeftQueue = 827, - LfgLeftList = 828, - LfgRoleCheckAborted = 829, - LfgReadyCheckAborted = 830, - LfgCantUseBattleground = 831, - LfgCantUseDungeons = 832, - LfgReasonTooManyLfg = 833, - LfgFarmLimit = 834, - LfgNoCrossFactionParties = 835, - InvalidTeleportLocation = 836, - TooFarToInteract = 837, - BattlegroundPlayersFromDifferentRealms = 838, - DifficultyChangeCooldownS = 839, - DifficultyChangeCombatCooldownS = 840, - DifficultyChangeWorldstate = 841, - DifficultyChangeEncounter = 842, - DifficultyChangeCombat = 843, - DifficultyChangePlayerBusy = 844, - DifficultyChangePlayerOnVehicle = 845, - DifficultyChangeAlreadyStarted = 846, - DifficultyChangeOtherHeroicS = 847, - DifficultyChangeHeroicInstanceAlreadyRunning = 848, - ArenaTeamPartySize = 849, - SoloShuffleWargameGroupSize = 850, - SoloShuffleWargameGroupComp = 851, - SoloRbgWargameGroupSize = 852, - SoloRbgWargameGroupComp = 853, - SoloMinItemLevel = 854, - PvpPlayerAbandoned = 855, - BattlegroundJoinGroupQueueWithoutHealer = 856, - QuestForceRemovedS = 857, - AttackNoActions = 858, - InRandomBg = 859, - InNonRandomBg = 860, - BnFriendSelf = 861, - BnFriendAlready = 862, - BnFriendBlocked = 863, - BnFriendListFull = 864, - BnFriendRequestSent = 865, - BnBroadcastThrottle = 866, - BgDeveloperOnly = 867, - CurrencySpellSlotMismatch = 868, - CurrencyNotTradable = 869, - RequiresExpansionS = 870, - QuestFailedSpell = 871, - TalentFailedUnspentTalentPoints = 872, - TalentFailedNotEnoughTalentsInPrimaryTree = 873, - TalentFailedNoPrimaryTreeSelected = 874, - TalentFailedCantRemoveTalent = 875, - TalentFailedUnknown = 876, - TalentFailedInCombat = 877, - TalentFailedInPvpMatch = 878, - TalentFailedInMythicPlus = 879, - WargameRequestFailure = 880, - RankRequiresAuthenticator = 881, - GuildBankVoucherFailed = 882, - WargameRequestSent = 883, - RequiresAchievementI = 884, - RefundResultExceedMaxCurrency = 885, - CantBuyQuantity = 886, - ItemIsBattlePayLocked = 887, - PartyAlreadyInBattlegroundQueue = 888, - PartyConfirmingBattlegroundQueue = 889, - BattlefieldTeamPartySize = 890, - InsuffTrackedCurrencyIs = 891, - NotOnTournamentRealm = 892, - GuildTrialAccountTrial = 893, - GuildTrialAccountVeteran = 894, - GuildUndeletableDueToLevel = 895, - CantDoThatInAGroup = 896, - GuildLeaderReplaced = 897, - TransmogrifyCantEquip = 898, - TransmogrifyInvalidItemType = 899, - TransmogrifyNotSoulbound = 900, - TransmogrifyInvalidSource = 901, - TransmogrifyInvalidDestination = 902, - TransmogrifyMismatch = 903, - TransmogrifyLegendary = 904, - TransmogrifySameItem = 905, - TransmogrifySameAppearance = 906, - TransmogrifyNotEquipped = 907, - VoidDepositFull = 908, - VoidWithdrawFull = 909, - VoidStorageWrapped = 910, - VoidStorageStackable = 911, - VoidStorageUnbound = 912, - VoidStorageRepair = 913, - VoidStorageCharges = 914, - VoidStorageQuest = 915, - VoidStorageConjured = 916, - VoidStorageMail = 917, - VoidStorageBag = 918, - VoidTransferStorageFull = 919, - VoidTransferInvFull = 920, - VoidTransferInternalError = 921, - VoidTransferItemInvalid = 922, - DifficultyDisabledInLfg = 923, - VoidStorageUnique = 924, - VoidStorageLoot = 925, - VoidStorageHoliday = 926, - VoidStorageDuration = 927, - VoidStorageLoadFailed = 928, - VoidStorageInvalidItem = 929, - VoidStorageAccountItem = 930, - ParentalControlsChatMuted = 931, - SorStartExperienceIncomplete = 932, - SorInvalidEmail = 933, - SorInvalidComment = 934, - ChallengeModeResetCooldownS = 935, - ChallengeModeResetKeystone = 936, - PetJournalAlreadyInLoadout = 937, - ReportSubmittedSuccessfully = 938, - ReportSubmissionFailed = 939, - SuggestionSubmittedSuccessfully = 940, - BugSubmittedSuccessfully = 941, - ChallengeModeEnabled = 942, - ChallengeModeDisabled = 943, - PetbattleCreateFailed = 944, - PetbattleNotHere = 945, - PetbattleNotHereOnTransport = 946, - PetbattleNotHereUnevenGround = 947, - PetbattleNotHereObstructed = 948, - PetbattleNotWhileInCombat = 949, - PetbattleNotWhileDead = 950, - PetbattleNotWhileFlying = 951, - PetbattleTargetInvalid = 952, - PetbattleTargetOutOfRange = 953, - PetbattleTargetNotCapturable = 954, - PetbattleNotATrainer = 955, - PetbattleDeclined = 956, - PetbattleInBattle = 957, - PetbattleInvalidLoadout = 958, - PetbattleAllPetsDead = 959, - PetbattleNoPetsInSlots = 960, - PetbattleNoAccountLock = 961, - PetbattleWildPetTapped = 962, - PetbattleRestrictedAccount = 963, - PetbattleOpponentNotAvailable = 964, - PetbattleNotWhileInMatchedBattle = 965, - CantHaveMorePetsOfThatType = 966, - CantHaveMorePets = 967, - PvpMapNotFound = 968, - PvpMapNotSet = 969, - PetbattleQueueQueued = 970, - PetbattleQueueAlreadyQueued = 971, - PetbattleQueueJoinFailed = 972, - PetbattleQueueJournalLock = 973, - PetbattleQueueRemoved = 974, - PetbattleQueueProposalDeclined = 975, - PetbattleQueueProposalTimeout = 976, - PetbattleQueueOpponentDeclined = 977, - PetbattleQueueRequeuedInternal = 978, - PetbattleQueueRequeuedRemoved = 979, - PetbattleQueueSlotLocked = 980, - PetbattleQueueSlotEmpty = 981, - PetbattleQueueSlotNoTracker = 982, - PetbattleQueueSlotNoSpecies = 983, - PetbattleQueueSlotCantBattle = 984, - PetbattleQueueSlotRevoked = 985, - PetbattleQueueSlotDead = 986, - PetbattleQueueSlotNoPet = 987, - PetbattleQueueNotWhileNeutral = 988, - PetbattleGameTimeLimitWarning = 989, - PetbattleGameRoundsLimitWarning = 990, - HasRestriction = 991, - ItemUpgradeItemTooLowLevel = 992, - ItemUpgradeNoPath = 993, - ItemUpgradeNoMoreUpgrades = 994, - BonusRollEmpty = 995, - ChallengeModeFull = 996, - ChallengeModeInProgress = 997, - ChallengeModeIncorrectKeystone = 998, - BattletagFriendNotFound = 999, - BattletagFriendNotValid = 1000, - BattletagFriendNotAllowed = 1001, - BattletagFriendThrottled = 1002, - BattletagFriendSuccess = 1003, - PetTooHighLevelToUncage = 1004, - PetbattleInternal = 1005, - CantCagePetYet = 1006, - NoLootInChallengeMode = 1007, - QuestPetBattleVictoriesPvpIi = 1008, - RoleCheckAlreadyInProgress = 1009, - RecruitAFriendAccountLimit = 1010, - RecruitAFriendFailed = 1011, - SetLootPersonal = 1012, - SetLootMethodFailedCombat = 1013, - ReagentBankFull = 1014, - ReagentBankLocked = 1015, - GarrisonBuildingExists = 1016, - GarrisonInvalidPlot = 1017, - GarrisonInvalidBuildingid = 1018, - GarrisonInvalidPlotBuilding = 1019, - GarrisonRequiresBlueprint = 1020, - GarrisonNotEnoughCurrency = 1021, - GarrisonNotEnoughGold = 1022, - GarrisonCompleteMissionWrongFollowerType = 1023, - AlreadyUsingLfgList = 1024, - RestrictedAccountLfgListTrial = 1025, - ToyUseLimitReached = 1026, - ToyAlreadyKnown = 1027, - TransmogSetAlreadyKnown = 1028, - NotEnoughCurrency = 1029, - SpecIsDisabled = 1030, - FeatureRestrictedTrial = 1031, - CantBeObliterated = 1032, - CantBeScrapped = 1033, - CantBeRecrafted = 1034, - ArtifactRelicDoesNotMatchArtifact = 1035, - MustEquipArtifact = 1036, - CantDoThatRightNow = 1037, - AffectingCombat = 1038, - EquipmentManagerCombatSwapS = 1039, - EquipmentManagerBagsFull = 1040, - EquipmentManagerMissingItemS = 1041, - MovieRecordingWarningPerf = 1042, - MovieRecordingWarningDiskFull = 1043, - MovieRecordingWarningNoMovie = 1044, - MovieRecordingWarningRequirements = 1045, - MovieRecordingWarningCompressing = 1046, - NoChallengeModeReward = 1047, - ClaimedChallengeModeReward = 1048, - ChallengeModePeriodResetSs = 1049, - CantDoThatChallengeModeActive = 1050, - TalentFailedRestArea = 1051, - CannotAbandonLastPet = 1052, - TestCvarSetSss = 1053, - QuestTurnInFailReason = 1054, - ClaimedChallengeModeRewardOld = 1055, - TalentGrantedByAura = 1056, - ChallengeModeAlreadyComplete = 1057, - GlyphTargetNotAvailable = 1058, - PvpWarmodeToggleOn = 1059, - PvpWarmodeToggleOff = 1060, - SpellFailedLevelRequirement = 1061, - SpellFailedCantFlyHere = 1062, - BattlegroundJoinRequiresLevel = 1063, - BattlegroundJoinDisqualified = 1064, - BattlegroundJoinDisqualifiedNoName = 1065, - VoiceChatGenericUnableToConnect = 1066, - VoiceChatServiceLost = 1067, - VoiceChatChannelNameTooShort = 1068, - VoiceChatChannelNameTooLong = 1069, - VoiceChatChannelAlreadyExists = 1070, - VoiceChatTargetNotFound = 1071, - VoiceChatTooManyRequests = 1072, - VoiceChatPlayerSilenced = 1073, - VoiceChatParentalDisableAll = 1074, - VoiceChatDisabled = 1075, - NoPvpReward = 1076, - ClaimedPvpReward = 1077, - AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1078, - AzeriteEssenceSelectionFailedCantRemoveEssence = 1079, - AzeriteEssenceSelectionFailedConditionFailed = 1080, - AzeriteEssenceSelectionFailedRestArea = 1081, - AzeriteEssenceSelectionFailedSlotLocked = 1082, - AzeriteEssenceSelectionFailedNotAtForge = 1083, - AzeriteEssenceSelectionFailedHeartLevelTooLow = 1084, - AzeriteEssenceSelectionFailedNotEquipped = 1085, - SocketingRequiresPunchcardredGem = 1086, - SocketingPunchcardredGemOnlyInPunchcardredslot = 1087, - SocketingRequiresPunchcardyellowGem = 1088, - SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1089, - SocketingRequiresPunchcardblueGem = 1090, - SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1091, - SocketingRequiresDominationShard = 1092, - SocketingDominationShardOnlyInDominationslot = 1093, - SocketingRequiresCypherGem = 1094, - SocketingCypherGemOnlyInCypherslot = 1095, - SocketingRequiresTinkerGem = 1096, - SocketingTinkerGemOnlyInTinkerslot = 1097, - SocketingRequiresPrimordialGem = 1098, - SocketingPrimordialGemOnlyInPrimordialslot = 1099, - SocketingRequiresFragranceGem = 1100, - SocketingFragranceGemOnlyInFragranceslot = 1101, - SocketingRequiresSingingThunderGem = 1102, - SocketingSingingthunderGemOnlyInSingingthunderslot = 1103, - SocketingRequiresSingingSeaGem = 1104, - SocketingSingingseaGemOnlyInSingingseaslot = 1105, - SocketingRequiresSingingWindGem = 1106, - SocketingSingingwindGemOnlyInSingingwindslot = 1107, - LevelLinkingResultLinked = 1108, - LevelLinkingResultUnlinked = 1109, - ClubFinderErrorPostClub = 1110, - ClubFinderErrorApplyClub = 1111, - ClubFinderErrorRespondApplicant = 1112, - ClubFinderErrorCancelApplication = 1113, - ClubFinderErrorTypeAcceptApplication = 1114, - ClubFinderErrorTypeNoInvitePermissions = 1115, - ClubFinderErrorTypeNoPostingPermissions = 1116, - ClubFinderErrorTypeApplicantList = 1117, - ClubFinderErrorTypeApplicantListNoPerm = 1118, - ClubFinderErrorTypeFinderNotAvailable = 1119, - ClubFinderErrorTypeGetPostingIds = 1120, - ClubFinderErrorTypeJoinApplication = 1121, - ClubFinderErrorTypeRealmNotEligible = 1122, - ClubFinderErrorTypeFlaggedRename = 1123, - ClubFinderErrorTypeFlaggedDescriptionChange = 1124, - ItemInteractionNotEnoughGold = 1125, - ItemInteractionNotEnoughCurrency = 1126, - ItemInteractionNoConversionOutput = 1127, - PlayerChoiceErrorPendingChoice = 1128, - SoulbindInvalidConduit = 1129, - SoulbindInvalidConduitItem = 1130, - SoulbindInvalidTalent = 1131, - SoulbindDuplicateConduit = 1132, - ActivateSoulbindS = 1133, - ActivateSoulbindFailedRestArea = 1134, - CantUseProfanity = 1135, - NotInPetBattle = 1136, - NotInNpe = 1137, - NoSpec = 1138, - NoDominationshardOverwrite = 1139, - UseWeeklyRewardsDisabled = 1140, - CrossFactionGroupJoined = 1141, - CantTargetUnfriendlyInOverworld = 1142, - EquipablespellsSlotsFull = 1143, - ItemModAppearanceGroupAlreadyKnown = 1144, - CantBulkSellItemWithRefund = 1145, - NoSoulboundItemInAccountBank = 1146, - NoRefundableItemInAccountBank = 1147, - CantDeleteInAccountBank = 1148, - NoImmediateContainerInAccountBank = 1149, - NoOpenImmediateContainerInAccountBank = 1150, - CantTradeAccountItem = 1151, - NoAccountInventoryLock = 1152, - BankNotAccessible = 1153, - TooManyAccountBankTabs = 1154, - AccountBankTabNotUnlocked = 1155, - AccountMoneyLocked = 1156, - BankTabInvalidName = 1157, - BankTabInvalidText = 1158, - WowLabsPartyErrorTypePartyIsFull = 1159, - WowLabsPartyErrorTypeMaxInviteSent = 1160, - WowLabsPartyErrorTypePlayerAlreadyInvited = 1161, - WowLabsPartyErrorTypePartyInviteInvalid = 1162, - WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1163, - WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1164, - WowLabsSetWowLabsAreaIdFailed = 1165, - PlunderstormCannotQueue = 1166, - TargetIsSelfFoundCannotTrade = 1167, - PlayerIsSelfFoundCannotTrade = 1168, - MailRecepientIsSelfFoundCannotReceiveMail = 1169, - PlayerIsSelfFoundCannotSendMail = 1170, - PlayerIsSelfFoundCannotUseAuctionHouse = 1171, - MailTargetCannotReceiveMail = 1172, - RemixInvalidTransferRequest = 1173, - CurrencyTransferInvalidCharacter = 1174, - CurrencyTransferInvalidCurrency = 1175, - CurrencyTransferInsufficientCurrency = 1176, - CurrencyTransferMaxQuantity = 1177, - CurrencyTransferNoValidSource = 1178, - CurrencyTransferCharacterLoggedIn = 1179, - CurrencyTransferServerError = 1180, - CurrencyTransferUnmetRequirements = 1181, - CurrencyTransferTransactionInProgress = 1182, + OutOfRuneBlood = 372, + OutOfRuneFrost = 373, + OutOfRuneUnholy = 374, + OutOfAlternateQuest = 375, + OutOfAlternateEncounter = 376, + OutOfAlternateMount = 377, + OutOfBalance = 378, + OutOfHappiness = 379, + OutOfShadowOrbs = 380, + OutOfRuneChromatic = 381, + LootGone = 382, + MountForceddismount = 383, + AutofollowTooFar = 384, + UnitNotFound = 385, + InvalidFollowTarget = 386, + InvalidFollowPvpCombat = 387, + InvalidFollowTargetPvpCombat = 388, + InvalidInspectTarget = 389, + GuildemblemSuccess = 390, + GuildemblemInvalidTabardColors = 391, + GuildemblemNoguild = 392, + GuildemblemNotguildmaster = 393, + GuildemblemNotenoughmoney = 394, + GuildemblemInvalidvendor = 395, + EmblemerrorNotabardgeoset = 396, + SpellOutOfRange = 397, + CommandNeedsTarget = 398, + NoammoS = 399, + Toobusytofollow = 400, + DuelRequested = 401, + DuelCancelled = 402, + Deathbindalreadybound = 403, + DeathbindSuccessS = 404, + Noemotewhilerunning = 405, + ZoneExplored = 406, + ZoneExploredXp = 407, + InvalidItemTarget = 408, + InvalidQuestTarget = 409, + IgnoringYouS = 410, + FishNotHooked = 411, + FishEscaped = 412, + SpellFailedNotunsheathed = 413, + PetitionOfferedS = 414, + PetitionSigned = 415, + PetitionSignedS = 416, + PetitionDeclinedS = 417, + PetitionAlreadySigned = 418, + PetitionRestrictedAccountTrial = 419, + PetitionAlreadySignedOther = 420, + PetitionInGuild = 421, + PetitionCreator = 422, + PetitionNotEnoughSignatures = 423, + PetitionNotSameServer = 424, + PetitionFull = 425, + PetitionAlreadySignedByS = 426, + GuildNameInvalid = 427, + SpellUnlearnedS = 428, + PetSpellRooted = 429, + PetSpellAffectingCombat = 430, + PetSpellOutOfRange = 431, + PetSpellNotBehind = 432, + PetSpellTargetsDead = 433, + PetSpellDead = 434, + PetSpellNopath = 435, + ItemCantBeDestroyed = 436, + TicketAlreadyExists = 437, + TicketCreateError = 438, + TicketUpdateError = 439, + TicketDbError = 440, + TicketNoText = 441, + TicketTextTooLong = 442, + ObjectIsBusy = 443, + ExhaustionWellrested = 444, + ExhaustionRested = 445, + ExhaustionNormal = 446, + ExhaustionTired = 447, + ExhaustionExhausted = 448, + NoItemsWhileShapeshifted = 449, + CantInteractShapeshifted = 450, + RealmNotFound = 451, + MailQuestItem = 452, + MailBoundItem = 453, + MailConjuredItem = 454, + MailBag = 455, + MailToSelf = 456, + MailTargetNotFound = 457, + MailDatabaseError = 458, + MailDeleteItemError = 459, + MailWrappedCod = 460, + MailCantSendRealm = 461, + MailTempReturnOutage = 462, + MailRecepientCantReceiveMail = 463, + MailSent = 464, + MailTargetIsTrial = 465, + NotHappyEnough = 466, + UseCantImmune = 467, + CantBeDisenchanted = 468, + CantUseDisarmed = 469, + AuctionDatabaseError = 470, + AuctionHigherBid = 471, + AuctionAlreadyBid = 472, + AuctionOutbidS = 473, + AuctionWonS = 474, + AuctionRemovedS = 475, + AuctionBidPlaced = 476, + LogoutFailed = 477, + QuestPushSuccessS = 478, + QuestPushInvalidS = 479, + QuestPushInvalidToRecipientS = 480, + QuestPushAcceptedS = 481, + QuestPushDeclinedS = 482, + QuestPushBusyS = 483, + QuestPushDeadS = 484, + QuestPushDeadToRecipientS = 485, + QuestPushLogFullS = 486, + QuestPushLogFullToRecipientS = 487, + QuestPushOnquestS = 488, + QuestPushOnquestToRecipientS = 489, + QuestPushAlreadyDoneS = 490, + QuestPushAlreadyDoneToRecipientS = 491, + QuestPushNotDailyS = 492, + QuestPushTimerExpiredS = 493, + QuestPushNotInPartyS = 494, + QuestPushDifferentServerDailyS = 495, + QuestPushDifferentServerDailyToRecipientS = 496, + QuestPushNotAllowedS = 497, + QuestPushPrerequisiteS = 498, + QuestPushPrerequisiteToRecipientS = 499, + QuestPushLowLevelS = 500, + QuestPushLowLevelToRecipientS = 501, + QuestPushHighLevelS = 502, + QuestPushHighLevelToRecipientS = 503, + QuestPushClassS = 504, + QuestPushClassToRecipientS = 505, + QuestPushRaceS = 506, + QuestPushRaceToRecipientS = 507, + QuestPushLowFactionS = 508, + QuestPushLowFactionToRecipientS = 509, + QuestPushHighFactionS = 510, + QuestPushHighFactionToRecipientS = 511, + QuestPushExpansionS = 512, + QuestPushExpansionToRecipientS = 513, + QuestPushNotGarrisonOwnerS = 514, + QuestPushNotGarrisonOwnerToRecipientS = 515, + QuestPushWrongCovenantS = 516, + QuestPushWrongCovenantToRecipientS = 517, + QuestPushNewPlayerExperienceS = 518, + QuestPushNewPlayerExperienceToRecipientS = 519, + QuestPushWrongFactionS = 520, + QuestPushWrongFactionToRecipientS = 521, + QuestPushCrossFactionRestrictedS = 522, + RaidGroupLowlevel = 523, + RaidGroupOnly = 524, + RaidGroupFull = 525, + RaidGroupRequirementsUnmatch = 526, + CorpseIsNotInInstance = 527, + PvpKillHonorable = 528, + PvpKillDishonorable = 529, + SpellFailedAlreadyAtFullHealth = 530, + SpellFailedAlreadyAtFullMana = 531, + SpellFailedAlreadyAtFullPowerS = 532, + AutolootMoneyS = 533, + GenericStunned = 534, + GenericThrottle = 535, + ClubFinderSearchingTooFast = 536, + TargetStunned = 537, + MustRepairDurability = 538, + RaidYouJoined = 539, + RaidYouLeft = 540, + InstanceGroupJoinedWithParty = 541, + InstanceGroupJoinedWithRaid = 542, + RaidMemberAddedS = 543, + RaidMemberRemovedS = 544, + InstanceGroupAddedS = 545, + InstanceGroupRemovedS = 546, + ClickOnItemToFeed = 547, + TooManyChatChannels = 548, + LootRollPending = 549, + LootPlayerNotFound = 550, + NotInRaid = 551, + LoggingOut = 552, + TargetLoggingOut = 553, + NotWhileMounted = 554, + NotWhileShapeshifted = 555, + NotInCombat = 556, + NotWhileDisarmed = 557, + PetBroken = 558, + TalentWipeError = 559, + SpecWipeError = 560, + GlyphWipeError = 561, + PetSpecWipeError = 562, + FeignDeathResisted = 563, + MeetingStoneInQueueS = 564, + MeetingStoneLeftQueueS = 565, + MeetingStoneOtherMemberLeft = 566, + MeetingStonePartyKickedFromQueue = 567, + MeetingStoneMemberStillInQueue = 568, + MeetingStoneSuccess = 569, + MeetingStoneInProgress = 570, + MeetingStoneMemberAddedS = 571, + MeetingStoneGroupFull = 572, + MeetingStoneNotLeader = 573, + MeetingStoneInvalidLevel = 574, + MeetingStoneTargetNotInParty = 575, + MeetingStoneTargetInvalidLevel = 576, + MeetingStoneMustBeLeader = 577, + MeetingStoneNoRaidGroup = 578, + MeetingStoneNeedParty = 579, + MeetingStoneNotFound = 580, + MeetingStoneTargetInVehicle = 581, + GuildemblemSame = 582, + EquipTradeItem = 583, + PvpToggleOn = 584, + PvpToggleOff = 585, + GroupJoinBattlegroundDeserters = 586, + GroupJoinBattlegroundDead = 587, + GroupJoinBattlegroundS = 588, + GroupJoinBattlegroundFail = 589, + GroupJoinBattlegroundTooMany = 590, + SoloJoinBattlegroundS = 591, + JoinSingleScenarioS = 592, + BattlegroundTooManyQueues = 593, + BattlegroundCannotQueueForRated = 594, + BattledgroundQueuedForRated = 595, + BattlegroundTeamLeftQueue = 596, + BattlegroundNotInBattleground = 597, + AlreadyInArenaTeamS = 598, + InvalidPromotionCode = 599, + BgPlayerJoinedSs = 600, + BgPlayerLeftS = 601, + RestrictedAccount = 602, + RestrictedAccountTrial = 603, + NotEnoughPurchasedGameTime = 604, + PlayTimeExceeded = 605, + ApproachingPartialPlayTime = 606, + ApproachingPartialPlayTime2 = 607, + ApproachingNoPlayTime = 608, + ApproachingNoPlayTime2 = 609, + UnhealthyTime = 610, + ChatRestrictedTrial = 611, + ChatThrottled = 612, + MailReachedCap = 613, + InvalidRaidTarget = 614, + RaidLeaderReadyCheckStartS = 615, + ReadyCheckInProgress = 616, + ReadyCheckThrottled = 617, + DungeonDifficultyFailed = 618, + DungeonDifficultyChangedS = 619, + TradeWrongRealm = 620, + TradeNotOnTaplist = 621, + ChatPlayerAmbiguousS = 622, + LootCantLootThatNow = 623, + LootMasterInvFull = 624, + LootMasterUniqueItem = 625, + LootMasterOther = 626, + FilteringYouS = 627, + UsePreventedByMechanicS = 628, + ItemUniqueEquippable = 629, + LfgLeaderIsLfmS = 630, + LfgPending = 631, + CantSpeakLangage = 632, + VendorMissingTurnins = 633, + BattlegroundNotInTeam = 634, + NotInBattleground = 635, + NotEnoughHonorPoints = 636, + NotEnoughArenaPoints = 637, + SocketingRequiresMetaGem = 638, + SocketingMetaGemOnlyInMetaslot = 639, + SocketingRequiresHydraulicGem = 640, + SocketingHydraulicGemOnlyInHydraulicslot = 641, + SocketingRequiresCogwheelGem = 642, + SocketingCogwheelGemOnlyInCogwheelslot = 643, + SocketingItemTooLowLevel = 644, + ItemMaxCountSocketed = 645, + SystemDisabled = 646, + QuestFailedTooManyDailyQuestsI = 647, + ItemMaxCountEquippedSocketed = 648, + ItemUniqueEquippableSocketed = 649, + UserSquelched = 650, + AccountSilenced = 651, + PartyMemberSilenced = 652, + PartyMemberSilencedLfgDelist = 653, + TooMuchGold = 654, + NotBarberSitting = 655, + QuestFailedCais = 656, + InviteRestrictedTrial = 657, + VoiceIgnoreFull = 658, + VoiceIgnoreSelf = 659, + VoiceIgnoreNotFound = 660, + VoiceIgnoreAlreadyS = 661, + VoiceIgnoreAddedS = 662, + VoiceIgnoreRemovedS = 663, + VoiceIgnoreAmbiguous = 664, + VoiceIgnoreDeleted = 665, + UnknownMacroOptionS = 666, + NotDuringArenaMatch = 667, + NotInRatedBattleground = 668, + PlayerSilenced = 669, + PlayerUnsilenced = 670, + ComsatDisconnect = 671, + ComsatReconnectAttempt = 672, + ComsatConnectFail = 673, + MailInvalidAttachmentSlot = 674, + MailTooManyAttachments = 675, + MailInvalidAttachment = 676, + MailAttachmentExpired = 677, + VoiceChatParentalDisableMic = 678, + ProfaneChatName = 679, + PlayerSilencedEcho = 680, + PlayerUnsilencedEcho = 681, + LootCantLootThat = 682, + ArenaExpiredCais = 683, + GroupActionThrottled = 684, + AlreadyPickpocketed = 685, + NameInvalid = 686, + NameNoName = 687, + NameTooShort = 688, + NameTooLong = 689, + NameMixedLanguages = 690, + NameProfane = 691, + NameReserved = 692, + NameThreeConsecutive = 693, + NameInvalidSpace = 694, + NameConsecutiveSpaces = 695, + NameRussianConsecutiveSilentCharacters = 696, + NameRussianSilentCharacterAtBeginningOrEnd = 697, + NameDeclensionDoesntMatchBaseName = 698, + RecruitAFriendNotLinked = 699, + RecruitAFriendNotNow = 700, + RecruitAFriendSummonLevelMax = 701, + RecruitAFriendSummonCooldown = 702, + RecruitAFriendSummonOffline = 703, + RecruitAFriendInsufExpanLvl = 704, + RecruitAFriendMapIncomingTransferNotAllowed = 705, + NotSameAccount = 706, + BadOnUseEnchant = 707, + TradeSelf = 708, + TooManySockets = 709, + ItemMaxLimitCategoryCountExceededIs = 710, + TradeTargetMaxLimitCategoryCountExceededIs = 711, + ItemMaxLimitCategorySocketedExceededIs = 712, + ItemMaxLimitCategoryEquippedExceededIs = 713, + ShapeshiftFormCannotEquip = 714, + ItemInventoryFullSatchel = 715, + ScalingStatItemLevelExceeded = 716, + ScalingStatItemLevelTooLow = 717, + PurchaseLevelTooLow = 718, + GroupSwapFailed = 719, + InviteInCombat = 720, + InvalidGlyphSlot = 721, + GenericNoValidTargets = 722, + CalendarEventAlertS = 723, + PetLearnSpellS = 724, + PetLearnAbilityS = 725, + PetSpellUnlearnedS = 726, + InviteUnknownRealm = 727, + InviteNoPartyServer = 728, + InvitePartyBusy = 729, + InvitePartyBusyPendingRequest = 730, + InvitePartyBusyPendingSuggest = 731, + PartyTargetAmbiguous = 732, + PartyLfgInviteRaidLocked = 733, + PartyLfgBootLimit = 734, + PartyLfgBootCooldownS = 735, + PartyLfgBootNotEligibleS = 736, + PartyLfgBootInpatientTimerS = 737, + PartyLfgBootInProgress = 738, + PartyLfgBootTooFewPlayers = 739, + PartyLfgBootVoteSucceeded = 740, + PartyLfgBootVoteFailed = 741, + PartyLfgBootDisallowedByMap = 742, + PartyLfgBootDungeonComplete = 743, + PartyLfgBootLootRolls = 744, + PartyLfgBootVoteRegistered = 745, + PartyPrivateGroupOnly = 746, + PartyLfgTeleportInCombat = 747, + PartyTimeRunningSeasonIdMustMatch = 748, + RaidDisallowedByLevel = 749, + RaidDisallowedByCrossRealm = 750, + PartyRoleNotAvailable = 751, + JoinLfgObjectFailed = 752, + LfgRemovedLevelup = 753, + LfgRemovedXpToggle = 754, + LfgRemovedFactionChange = 755, + BattlegroundInfoThrottled = 756, + BattlegroundAlreadyIn = 757, + ArenaTeamChangeFailedQueued = 758, + ArenaTeamPermissions = 759, + NotWhileFalling = 760, + NotWhileMoving = 761, + NotWhileFatigued = 762, + MaxSockets = 763, + MultiCastActionTotemS = 764, + BattlegroundJoinLevelup = 765, + RemoveFromPvpQueueXpGain = 766, + BattlegroundJoinXpGain = 767, + BattlegroundJoinMercenary = 768, + BattlegroundJoinTooManyHealers = 769, + BattlegroundJoinRatedTooManyHealers = 770, + BattlegroundJoinTooManyTanks = 771, + BattlegroundJoinTooManyDamage = 772, + RaidDifficultyFailed = 773, + RaidDifficultyChangedS = 774, + LegacyRaidDifficultyChangedS = 775, + RaidLockoutChangedS = 776, + RaidConvertedToParty = 777, + PartyConvertedToRaid = 778, + PlayerDifficultyChangedS = 779, + GmresponseDbError = 780, + BattlegroundJoinRangeIndex = 781, + ArenaJoinRangeIndex = 782, + RemoveFromPvpQueueFactionChange = 783, + BattlegroundJoinFailed = 784, + BattlegroundJoinNoValidSpecForRole = 785, + BattlegroundJoinRespec = 786, + BattlegroundInvitationDeclined = 787, + BattlegroundInvitationDeclinedBy = 788, + BattlegroundJoinTimedOut = 789, + BattlegroundDupeQueue = 790, + BattlegroundJoinMustCompleteQuest = 791, + InBattlegroundRespec = 792, + MailLimitedDurationItem = 793, + YellRestrictedTrial = 794, + ChatRaidRestrictedTrial = 795, + LfgRoleCheckFailed = 796, + LfgRoleCheckFailedTimeout = 797, + LfgRoleCheckFailedNotViable = 798, + LfgReadyCheckFailed = 799, + LfgReadyCheckFailedTimeout = 800, + LfgGroupFull = 801, + LfgNoLfgObject = 802, + LfgNoSlotsPlayer = 803, + LfgNoSlotsParty = 804, + LfgNoSpec = 805, + LfgMismatchedSlots = 806, + LfgMismatchedSlotsLocalXrealm = 807, + LfgPartyPlayersFromDifferentRealms = 808, + LfgMembersNotPresent = 809, + LfgGetInfoTimeout = 810, + LfgInvalidSlot = 811, + LfgDeserterPlayer = 812, + LfgDeserterParty = 813, + LfgDead = 814, + LfgRandomCooldownPlayer = 815, + LfgRandomCooldownParty = 816, + LfgTooManyMembers = 817, + LfgTooFewMembers = 818, + LfgProposalFailed = 819, + LfgProposalDeclinedSelf = 820, + LfgProposalDeclinedParty = 821, + LfgNoSlotsSelected = 822, + LfgNoRolesSelected = 823, + LfgRoleCheckInitiated = 824, + LfgReadyCheckInitiated = 825, + LfgPlayerDeclinedRoleCheck = 826, + LfgPlayerDeclinedReadyCheck = 827, + LfgLorewalking = 828, + LfgJoinedQueue = 829, + LfgJoinedFlexQueue = 830, + LfgJoinedRfQueue = 831, + LfgJoinedScenarioQueue = 832, + LfgJoinedWorldPvpQueue = 833, + LfgJoinedBattlefieldQueue = 834, + LfgJoinedList = 835, + QueuedPlunderstorm = 836, + LfgLeftQueue = 837, + LfgLeftList = 838, + LfgRoleCheckAborted = 839, + LfgReadyCheckAborted = 840, + LfgCantUseBattleground = 841, + LfgCantUseDungeons = 842, + LfgReasonTooManyLfg = 843, + LfgFarmLimit = 844, + LfgNoCrossFactionParties = 845, + InvalidTeleportLocation = 846, + TooFarToInteract = 847, + BattlegroundPlayersFromDifferentRealms = 848, + DifficultyChangeCooldownS = 849, + DifficultyChangeCombatCooldownS = 850, + DifficultyChangeWorldstate = 851, + DifficultyChangeEncounter = 852, + DifficultyChangeCombat = 853, + DifficultyChangePlayerBusy = 854, + DifficultyChangePlayerOnVehicle = 855, + DifficultyChangeAlreadyStarted = 856, + DifficultyChangeOtherHeroicS = 857, + DifficultyChangeHeroicInstanceAlreadyRunning = 858, + ArenaTeamPartySize = 859, + SoloShuffleWargameGroupSize = 860, + SoloShuffleWargameGroupComp = 861, + SoloRbgWargameGroupSize = 862, + SoloRbgWargameGroupComp = 863, + SoloMinItemLevel = 864, + PvpPlayerAbandoned = 865, + BattlegroundJoinGroupQueueWithoutHealer = 866, + QuestForceRemovedS = 867, + AttackNoActions = 868, + InRandomBg = 869, + InNonRandomBg = 870, + BnFriendSelf = 871, + BnFriendAlready = 872, + BnFriendBlocked = 873, + BnFriendListFull = 874, + BnFriendRequestSent = 875, + BnBroadcastThrottle = 876, + BgDeveloperOnly = 877, + CurrencySpellSlotMismatch = 878, + CurrencyNotTradable = 879, + RequiresExpansionS = 880, + QuestFailedSpell = 881, + TalentFailedUnspentTalentPoints = 882, + TalentFailedNotEnoughTalentsInPrimaryTree = 883, + TalentFailedNoPrimaryTreeSelected = 884, + TalentFailedCantRemoveTalent = 885, + TalentFailedUnknown = 886, + TalentFailedInCombat = 887, + TalentFailedInPvpMatch = 888, + TalentFailedInMythicPlus = 889, + WargameRequestFailure = 890, + RankRequiresAuthenticator = 891, + GuildBankVoucherFailed = 892, + WargameRequestSent = 893, + RequiresAchievementI = 894, + RefundResultExceedMaxCurrency = 895, + CantBuyQuantity = 896, + ItemIsBattlePayLocked = 897, + PartyAlreadyInBattlegroundQueue = 898, + PartyConfirmingBattlegroundQueue = 899, + BattlefieldTeamPartySize = 900, + InsuffTrackedCurrencyIs = 901, + NotOnTournamentRealm = 902, + GuildTrialAccountTrial = 903, + GuildTrialAccountVeteran = 904, + GuildUndeletableDueToLevel = 905, + CantDoThatInAGroup = 906, + GuildLeaderReplaced = 907, + TransmogrifyCantEquip = 908, + TransmogrifyInvalidItemType = 909, + TransmogrifyNotSoulbound = 910, + TransmogrifyInvalidSource = 911, + TransmogrifyInvalidDestination = 912, + TransmogrifyMismatch = 913, + TransmogrifyLegendary = 914, + TransmogrifySameItem = 915, + TransmogrifySameAppearance = 916, + TransmogrifyNotEquipped = 917, + VoidDepositFull = 918, + VoidWithdrawFull = 919, + VoidStorageWrapped = 920, + VoidStorageStackable = 921, + VoidStorageUnbound = 922, + VoidStorageRepair = 923, + VoidStorageCharges = 924, + VoidStorageQuest = 925, + VoidStorageConjured = 926, + VoidStorageMail = 927, + VoidStorageBag = 928, + VoidTransferStorageFull = 929, + VoidTransferInvFull = 930, + VoidTransferInternalError = 931, + VoidTransferItemInvalid = 932, + DifficultyDisabledInLfg = 933, + VoidStorageUnique = 934, + VoidStorageLoot = 935, + VoidStorageHoliday = 936, + VoidStorageDuration = 937, + VoidStorageLoadFailed = 938, + VoidStorageInvalidItem = 939, + VoidStorageAccountItem = 940, + ParentalControlsChatMuted = 941, + SorStartExperienceIncomplete = 942, + SorInvalidEmail = 943, + SorInvalidComment = 944, + ChallengeModeResetCooldownS = 945, + ChallengeModeResetKeystone = 946, + PetJournalAlreadyInLoadout = 947, + ReportSubmittedSuccessfully = 948, + ReportSubmissionFailed = 949, + SuggestionSubmittedSuccessfully = 950, + BugSubmittedSuccessfully = 951, + ChallengeModeEnabled = 952, + ChallengeModeDisabled = 953, + PetbattleCreateFailed = 954, + PetbattleNotHere = 955, + PetbattleNotHereOnTransport = 956, + PetbattleNotHereUnevenGround = 957, + PetbattleNotHereObstructed = 958, + PetbattleNotWhileInCombat = 959, + PetbattleNotWhileDead = 960, + PetbattleNotWhileFlying = 961, + PetbattleTargetInvalid = 962, + PetbattleTargetOutOfRange = 963, + PetbattleTargetNotCapturable = 964, + PetbattleNotATrainer = 965, + PetbattleDeclined = 966, + PetbattleInBattle = 967, + PetbattleInvalidLoadout = 968, + PetbattleAllPetsDead = 969, + PetbattleNoPetsInSlots = 970, + PetbattleNoAccountLock = 971, + PetbattleWildPetTapped = 972, + PetbattleRestrictedAccount = 973, + PetbattleOpponentNotAvailable = 974, + PetbattleNotWhileInMatchedBattle = 975, + CantHaveMorePetsOfThatType = 976, + CantHaveMorePets = 977, + PvpMapNotFound = 978, + PvpMapNotSet = 979, + PetbattleQueueQueued = 980, + PetbattleQueueAlreadyQueued = 981, + PetbattleQueueJoinFailed = 982, + PetbattleQueueJournalLock = 983, + PetbattleQueueRemoved = 984, + PetbattleQueueProposalDeclined = 985, + PetbattleQueueProposalTimeout = 986, + PetbattleQueueOpponentDeclined = 987, + PetbattleQueueRequeuedInternal = 988, + PetbattleQueueRequeuedRemoved = 989, + PetbattleQueueSlotLocked = 990, + PetbattleQueueSlotEmpty = 991, + PetbattleQueueSlotNoTracker = 992, + PetbattleQueueSlotNoSpecies = 993, + PetbattleQueueSlotCantBattle = 994, + PetbattleQueueSlotRevoked = 995, + PetbattleQueueSlotDead = 996, + PetbattleQueueSlotNoPet = 997, + PetbattleQueueNotWhileNeutral = 998, + PetbattleGameTimeLimitWarning = 999, + PetbattleGameRoundsLimitWarning = 1000, + HasRestriction = 1001, + ItemUpgradeItemTooLowLevel = 1002, + ItemUpgradeNoPath = 1003, + ItemUpgradeNoMoreUpgrades = 1004, + BonusRollEmpty = 1005, + ChallengeModeFull = 1006, + ChallengeModeInProgress = 1007, + ChallengeModeIncorrectKeystone = 1008, + BattletagFriendNotFound = 1009, + BattletagFriendNotValid = 1010, + BattletagFriendNotAllowed = 1011, + BattletagFriendThrottled = 1012, + BattletagFriendSuccess = 1013, + PetTooHighLevelToUncage = 1014, + PetbattleInternal = 1015, + CantCagePetYet = 1016, + NoLootInChallengeMode = 1017, + QuestPetBattleVictoriesPvpIi = 1018, + RoleCheckAlreadyInProgress = 1019, + RecruitAFriendAccountLimit = 1020, + RecruitAFriendFailed = 1021, + SetLootPersonal = 1022, + SetLootMethodFailedCombat = 1023, + ReagentBankFull = 1024, + ReagentBankLocked = 1025, + GarrisonBuildingExists = 1026, + GarrisonInvalidPlot = 1027, + GarrisonInvalidBuildingid = 1028, + GarrisonInvalidPlotBuilding = 1029, + GarrisonRequiresBlueprint = 1030, + GarrisonNotEnoughCurrency = 1031, + GarrisonNotEnoughGold = 1032, + GarrisonCompleteMissionWrongFollowerType = 1033, + AlreadyUsingLfgList = 1034, + RestrictedAccountLfgListTrial = 1035, + ToyUseLimitReached = 1036, + ToyAlreadyKnown = 1037, + TransmogSetAlreadyKnown = 1038, + NotEnoughCurrency = 1039, + SpecIsDisabled = 1040, + FeatureRestrictedTrial = 1041, + CantBeObliterated = 1042, + CantBeScrapped = 1043, + CantBeRecrafted = 1044, + ArtifactRelicDoesNotMatchArtifact = 1045, + MustEquipArtifact = 1046, + CantDoThatRightNow = 1047, + AffectingCombat = 1048, + EquipmentManagerCombatSwapS = 1049, + EquipmentManagerBagsFull = 1050, + EquipmentManagerMissingItemS = 1051, + MovieRecordingWarningPerf = 1052, + MovieRecordingWarningDiskFull = 1053, + MovieRecordingWarningNoMovie = 1054, + MovieRecordingWarningRequirements = 1055, + MovieRecordingWarningCompressing = 1056, + NoChallengeModeReward = 1057, + ClaimedChallengeModeReward = 1058, + ChallengeModePeriodResetSs = 1059, + CantDoThatChallengeModeActive = 1060, + TalentFailedRestArea = 1061, + CannotAbandonLastPet = 1062, + TestCvarSetSss = 1063, + QuestTurnInFailReason = 1064, + ClaimedChallengeModeRewardOld = 1065, + TalentGrantedByAura = 1066, + ChallengeModeAlreadyComplete = 1067, + GlyphTargetNotAvailable = 1068, + PvpWarmodeToggleOn = 1069, + PvpWarmodeToggleOff = 1070, + SpellFailedLevelRequirement = 1071, + SpellFailedCantFlyHere = 1072, + BattlegroundJoinRequiresLevel = 1073, + BattlegroundJoinDisqualified = 1074, + BattlegroundJoinDisqualifiedNoName = 1075, + VoiceChatGenericUnableToConnect = 1076, + VoiceChatServiceLost = 1077, + VoiceChatChannelNameTooShort = 1078, + VoiceChatChannelNameTooLong = 1079, + VoiceChatChannelAlreadyExists = 1080, + VoiceChatTargetNotFound = 1081, + VoiceChatTooManyRequests = 1082, + VoiceChatPlayerSilenced = 1083, + VoiceChatParentalDisableAll = 1084, + VoiceChatDisabled = 1085, + NoPvpReward = 1086, + ClaimedPvpReward = 1087, + AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1088, + AzeriteEssenceSelectionFailedCantRemoveEssence = 1089, + AzeriteEssenceSelectionFailedConditionFailed = 1090, + AzeriteEssenceSelectionFailedRestArea = 1091, + AzeriteEssenceSelectionFailedSlotLocked = 1092, + AzeriteEssenceSelectionFailedNotAtForge = 1093, + AzeriteEssenceSelectionFailedHeartLevelTooLow = 1094, + AzeriteEssenceSelectionFailedNotEquipped = 1095, + SocketingRequiresPunchcardredGem = 1096, + SocketingPunchcardredGemOnlyInPunchcardredslot = 1097, + SocketingRequiresPunchcardyellowGem = 1098, + SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1099, + SocketingRequiresPunchcardblueGem = 1100, + SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1101, + SocketingRequiresDominationShard = 1102, + SocketingDominationShardOnlyInDominationslot = 1103, + SocketingRequiresCypherGem = 1104, + SocketingCypherGemOnlyInCypherslot = 1105, + SocketingRequiresTinkerGem = 1106, + SocketingTinkerGemOnlyInTinkerslot = 1107, + SocketingRequiresPrimordialGem = 1108, + SocketingPrimordialGemOnlyInPrimordialslot = 1109, + SocketingRequiresFragranceGem = 1110, + SocketingFragranceGemOnlyInFragranceslot = 1111, + SocketingRequiresSingingThunderGem = 1112, + SocketingSingingthunderGemOnlyInSingingthunderslot = 1113, + SocketingRequiresSingingSeaGem = 1114, + SocketingSingingseaGemOnlyInSingingseaslot = 1115, + SocketingRequiresSingingWindGem = 1116, + SocketingSingingwindGemOnlyInSingingwindslot = 1117, + LevelLinkingResultLinked = 1118, + LevelLinkingResultUnlinked = 1119, + ClubFinderErrorPostClub = 1120, + ClubFinderErrorApplyClub = 1121, + ClubFinderErrorRespondApplicant = 1122, + ClubFinderErrorCancelApplication = 1123, + ClubFinderErrorTypeAcceptApplication = 1124, + ClubFinderErrorTypeNoInvitePermissions = 1125, + ClubFinderErrorTypeNoPostingPermissions = 1126, + ClubFinderErrorTypeApplicantList = 1127, + ClubFinderErrorTypeApplicantListNoPerm = 1128, + ClubFinderErrorTypeFinderNotAvailable = 1129, + ClubFinderErrorTypeGetPostingIds = 1130, + ClubFinderErrorTypeJoinApplication = 1131, + ClubFinderErrorTypeRealmNotEligible = 1132, + ClubFinderErrorTypeFlaggedRename = 1133, + ClubFinderErrorTypeFlaggedDescriptionChange = 1134, + ItemInteractionNotEnoughGold = 1135, + ItemInteractionNotEnoughCurrency = 1136, + ItemInteractionNoConversionOutput = 1137, + PlayerChoiceErrorPendingChoice = 1138, + SoulbindInvalidConduit = 1139, + SoulbindInvalidConduitItem = 1140, + SoulbindInvalidTalent = 1141, + SoulbindDuplicateConduit = 1142, + ActivateSoulbindS = 1143, + ActivateSoulbindFailedRestArea = 1144, + CantUseProfanity = 1145, + NotInPetBattle = 1146, + NotInNpe = 1147, + NoSpec = 1148, + NoDominationshardOverwrite = 1149, + UseWeeklyRewardsDisabled = 1150, + CrossFactionGroupJoined = 1151, + CantTargetUnfriendlyInOverworld = 1152, + EquipablespellsSlotsFull = 1153, + ItemModAppearanceGroupAlreadyKnown = 1154, + CantBulkSellItemWithRefund = 1155, + NoSoulboundItemInAccountBank = 1156, + NoRefundableItemInAccountBank = 1157, + CantDeleteInAccountBank = 1158, + NoImmediateContainerInAccountBank = 1159, + NoOpenImmediateContainerInAccountBank = 1160, + CantTradeAccountItem = 1161, + NoAccountInventoryLock = 1162, + BankNotAccessible = 1163, + TooManyAccountBankTabs = 1164, + AccountBankTabNotUnlocked = 1165, + AccountMoneyLocked = 1166, + BankTabInvalidName = 1167, + BankTabInvalidText = 1168, + WowLabsPartyErrorTypePartyIsFull = 1169, + WowLabsPartyErrorTypeMaxInviteSent = 1170, + WowLabsPartyErrorTypePlayerAlreadyInvited = 1171, + WowLabsPartyErrorTypePartyInviteInvalid = 1172, + WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1173, + WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1174, + WowLabsSetWowLabsAreaIdFailed = 1175, + PlunderstormCannotQueue = 1176, + TargetIsSelfFoundCannotTrade = 1177, + PlayerIsSelfFoundCannotTrade = 1178, + MailRecepientIsSelfFoundCannotReceiveMail = 1179, + PlayerIsSelfFoundCannotSendMail = 1180, + PlayerIsSelfFoundCannotUseAuctionHouse = 1181, + MailTargetCannotReceiveMail = 1182, + RemixInvalidTransferRequest = 1183, + CurrencyTransferInvalidCharacter = 1184, + CurrencyTransferInvalidCurrency = 1185, + CurrencyTransferInsufficientCurrency = 1186, + CurrencyTransferMaxQuantity = 1187, + CurrencyTransferNoValidSource = 1188, + CurrencyTransferCharacterLoggedIn = 1189, + CurrencyTransferServerError = 1190, + CurrencyTransferUnmetRequirements = 1191, + CurrencyTransferTransactionInProgress = 1192, + CurrencyTransferDisabled = 1193, } public enum SceneFlags diff --git a/Source/Framework/Database/Databases/HotfixDatabase.cs b/Source/Framework/Database/Databases/HotfixDatabase.cs index da462100f..c6d0d1793 100644 --- a/Source/Framework/Database/Databases/HotfixDatabase.cs +++ b/Source/Framework/Database/Databases/HotfixDatabase.cs @@ -195,7 +195,7 @@ namespace Framework.Database " WHERE (`VerifiedBuild` > 0) = ?"); // BattlemasterList.db2 - PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, InstanceType, MinLevel, MaxLevel, " + + PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST, "SELECT ID, Name, GameType, ShortDescription, LongDescription, PvpType, MinLevel, MaxLevel, " + "RatedPlayers, MinPlayers, MaxPlayers, GroupsAllowed, MaxGroupSize, HolidayWorldState, Flags, IconFileDataID, RequiredPlayerConditionID" + " FROM battlemaster_list WHERE (`VerifiedBuild` > 0) = ?"); PrepareStatement(HotfixStatements.SEL_BATTLEMASTER_LIST_LOCALE, "SELECT ID, Name_lang, GameType_lang, ShortDescription_lang, LongDescription_lang" + @@ -357,9 +357,9 @@ namespace Framework.Database " FROM conditional_content_tuning WHERE (`VerifiedBuild` > 0) = ?"); // ContentTuning.db2 - PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, MinLevel, MaxLevel, " + - "MinLevelType, MaxLevelType, TargetLevelDelta, TargetLevelMaxDelta, TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier" + - " FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?"); + PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING, "SELECT ID, Flags, ExpansionID, HealthItemLevelCurveID, DamageItemLevelCurveID, " + + "HealthPrimaryStatCurveID, DamagePrimaryStatCurveID, MinLevel, MaxLevel, MinLevelType, MaxLevelType, TargetLevelDelta, TargetLevelMaxDelta, " + + "TargetLevelMin, TargetLevelMax, MinItemLevel, QuestXpMultiplier FROM content_tuning WHERE (`VerifiedBuild` > 0) = ?"); // ContentTuningXExpected.db2 PrepareStatement(HotfixStatements.SEL_CONTENT_TUNING_X_EXPECTED, "SELECT ID, ExpectedStatModID, MinMythicPlusSeasonID, MaxMythicPlusSeasonID, " + diff --git a/Source/Game/BattleGrounds/BattleGroundManager.cs b/Source/Game/BattleGrounds/BattleGroundManager.cs index 4ca306242..9501fbf74 100644 --- a/Source/Game/BattleGrounds/BattleGroundManager.cs +++ b/Source/Game/BattleGrounds/BattleGroundManager.cs @@ -461,13 +461,13 @@ namespace Game.BattleGrounds switch ((BattlegroundQueueIdType)bgQueueTypeId.BgType) { case BattlegroundQueueIdType.Battleground: - if (battlemasterList.InstanceType != (int)MapTypes.Battleground) + if (battlemasterList.GetPvpType() != BattlemasterType.Battleground) return false; if (bgQueueTypeId.TeamSize != 0) return false; break; case BattlegroundQueueIdType.Arena: - if (battlemasterList.InstanceType != (int)MapTypes.Arena) + if (battlemasterList.GetPvpType() != BattlemasterType.Arena) return false; if (!bgQueueTypeId.Rated) return false; @@ -479,7 +479,7 @@ namespace Game.BattleGrounds return false; break; case BattlegroundQueueIdType.ArenaSkirmish: - if (battlemasterList.InstanceType != (int)MapTypes.Arena) + if (battlemasterList.GetPvpType() != BattlemasterType.Arena) return false; if (!bgQueueTypeId.Rated) return false; @@ -785,7 +785,7 @@ namespace Game.BattleGrounds public BattlemasterListRecord BattlemasterEntry; public List MapIDs = new(); - public bool IsArena() { return BattlemasterEntry.InstanceType == (uint)MapTypes.Arena; } + public bool IsArena() { return BattlemasterEntry.GetPvpType() == BattlemasterType.Arena; } public ushort GetMinPlayersPerTeam() { diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index 3554b198f..4a639498c 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -2145,7 +2145,29 @@ namespace Game for (var i = 0; i < condition.ItemID.Length; ++i) { if (condition.ItemID[i] != 0) - results[i] = player.GetItemCount(condition.ItemID[i], condition.ItemFlags != 0) >= condition.ItemCount[i]; + { + ItemSearchLocation where = ItemSearchLocation.Equipment; + if ((condition.ItemFlags & 1) != 0) // include banks + where |= ItemSearchLocation.Bank | ItemSearchLocation.ReagentBank | ItemSearchLocation.AccountBank; + if ((condition.ItemFlags & 2) == 0) // ignore inventory + where |= ItemSearchLocation.Inventory; + + uint foundCount = 0; + results[i] = !player.ForEachItem(where, item => + { + if (item.GetEntry() == condition.ItemID[i]) + { + foundCount += item.GetCount(); + if (foundCount >= condition.ItemCount[i]) + return false; + } + + return true; + }); + + if (!results[i] && condition.ItemCount[i] == 1 && Global.DB2Mgr.IsToyItem(condition.ItemID[i])) + results[i] = player.GetSession().GetCollectionMgr().HasToy(condition.ItemID[i]); + } } if (!PlayerConditionLogic(condition.ItemLogic, results)) diff --git a/Source/Game/DataStorage/DB2Manager.cs b/Source/Game/DataStorage/DB2Manager.cs index 666c30c72..a15adfe63 100644 --- a/Source/Game/DataStorage/DB2Manager.cs +++ b/Source/Game/DataStorage/DB2Manager.cs @@ -1944,7 +1944,7 @@ namespace Game.DataStorage if (v2 == null) return 0; - return v2.UniqueBitFlag; + return (uint)v2.UniqueBitFlag; } public List GetPhasesForGroup(uint group) diff --git a/Source/Game/DataStorage/Structs/B_Records.cs b/Source/Game/DataStorage/Structs/B_Records.cs index e3572ae65..283b3704a 100644 --- a/Source/Game/DataStorage/Structs/B_Records.cs +++ b/Source/Game/DataStorage/Structs/B_Records.cs @@ -80,7 +80,7 @@ namespace Game.DataStorage public string GameType; public string ShortDescription; public string LongDescription; - public sbyte InstanceType; + public int PvpType; public byte MinLevel; public byte MaxLevel; public sbyte RatedPlayers; @@ -93,6 +93,7 @@ namespace Game.DataStorage public int IconFileDataID; public int RequiredPlayerConditionID; + public BattlemasterType GetPvpType() { return (BattlemasterType)PvpType; } public bool HasFlag(BattlemasterListFlags battlemasterListFlags) { return (Flags & (int)battlemasterListFlags) != 0; } } diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index cf0058d71..785d88929 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -387,6 +387,8 @@ namespace Game.DataStorage public int ExpansionID; public int HealthItemLevelCurveID; public int DamageItemLevelCurveID; + public int HealthPrimaryStatCurveID; + public int DamagePrimaryStatCurveID; public int MinLevel; public int MaxLevel; public int MinLevelType; diff --git a/Source/Game/DataStorage/Structs/P_Records.cs b/Source/Game/DataStorage/Structs/P_Records.cs index 13a39b7f2..e4525a398 100644 --- a/Source/Game/DataStorage/Structs/P_Records.cs +++ b/Source/Game/DataStorage/Structs/P_Records.cs @@ -80,7 +80,7 @@ namespace Game.DataStorage public uint CurrentCompletedQuestLogic; public uint SpellLogic; public uint ItemLogic; - public byte ItemFlags; + public int ItemFlags; public uint AuraSpellLogic; public ushort WorldStateExpressionID; public int WeatherID; diff --git a/Source/Game/DataStorage/Structs/Q_Records.cs b/Source/Game/DataStorage/Structs/Q_Records.cs index dac3ee6e0..2911260c7 100644 --- a/Source/Game/DataStorage/Structs/Q_Records.cs +++ b/Source/Game/DataStorage/Structs/Q_Records.cs @@ -56,7 +56,7 @@ namespace Game.DataStorage public sealed class QuestV2Record { public uint Id; - public ushort UniqueBitFlag; + public int UniqueBitFlag; public int UiQuestDetailsTheme; } diff --git a/Source/Game/DataStorage/Structs/T_Records.cs b/Source/Game/DataStorage/Structs/T_Records.cs index 77bac18af..ec4e4691c 100644 --- a/Source/Game/DataStorage/Structs/T_Records.cs +++ b/Source/Game/DataStorage/Structs/T_Records.cs @@ -18,7 +18,7 @@ namespace Game.DataStorage public uint Id; public string Description; public byte TierID; - public byte Flags; + public int Flags; public byte ColumnIndex; public ushort TabID; public sbyte ClassID; diff --git a/Source/Game/DataStorage/Structs/W_Records.cs b/Source/Game/DataStorage/Structs/W_Records.cs index 4129bcce9..8a642b6b2 100644 --- a/Source/Game/DataStorage/Structs/W_Records.cs +++ b/Source/Game/DataStorage/Structs/W_Records.cs @@ -43,7 +43,7 @@ namespace Game.DataStorage public ushort IntroSound; public ushort UwIntroSound; public ushort AreaTableID; - public byte Flags; + public int Flags; } public sealed class WorldEffectRecord diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index 01c1db33d..5f1b6655e 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -5637,7 +5637,7 @@ namespace Game.Entities { public static int QuestCompletedBitsPerBlock; - static int changeMaskLength = 516; + static int changeMaskLength = 517; public UpdateField BackpackAutoSortDisabled = new(0, 1); public UpdateField BackpackSellJunkDisabled = new(0, 2); @@ -5645,154 +5645,155 @@ namespace Game.Entities public UpdateField SortBagsRightToLeft = new(0, 4); public UpdateField InsertItemsLeftToRight = new(0, 5); public UpdateField HasPerksProgramPendingReward = new(0, 6); - public UpdateFieldArray> ResearchSites = new(1, 41, 42); - public UpdateFieldArray> ResearchSiteProgress = new(1, 43, 44); - public UpdateFieldArray> Research = new(1, 45, 46); + public UpdateFieldArray> ResearchSites = new(1, 42, 43); + public UpdateFieldArray> ResearchSiteProgress = new(1, 44, 45); + public UpdateFieldArray> Research = new(1, 46, 47); public DynamicUpdateField KnownTitles = new(0, 7); public DynamicUpdateField CharacterDataElements = new(0, 8); public DynamicUpdateField AccountDataElements = new(0, 9); public DynamicUpdateField DailyQuestsCompleted = new(0, 11); - public DynamicUpdateField AvailableQuestLineXQuestIDs = new(0, 12); - public DynamicUpdateField Heirlooms = new(0, 13); - public DynamicUpdateField HeirloomFlags = new(0, 14); - public DynamicUpdateField Toys = new(0, 15); - public DynamicUpdateField ToyFlags = new(0, 16); - public DynamicUpdateField Transmog = new(0, 17); - public DynamicUpdateField ConditionalTransmog = new(0, 18); - public DynamicUpdateField SelfResSpells = new(0, 19); - public DynamicUpdateField RuneforgePowers = new(0, 20); - public DynamicUpdateField TransmogIllusions = new(0, 21); - public DynamicUpdateField WarbandScenes = new(0, 22); - public DynamicUpdateField SpellPctModByLabel = new(0, 24); - public DynamicUpdateField SpellFlatModByLabel = new(0, 25); - public DynamicUpdateField MawPowers = new(0, 26); - public DynamicUpdateField MultiFloorExploration = new(0, 27); - public DynamicUpdateField RecipeProgression = new(0, 28); - public DynamicUpdateField ReplayedQuests = new(0, 29); - public DynamicUpdateField TaskQuests = new(0, 30); - public DynamicUpdateField DisabledSpells = new(0, 31); - public DynamicUpdateField PersonalCraftingOrderCounts = new(32, 35); - public DynamicUpdateField NpcCraftingOrders = new(32, 36); - public DynamicUpdateField CategoryCooldownMods = new(32, 37); - public DynamicUpdateField WeeklySpellUses = new(32, 38); - public DynamicUpdateField TrackedCollectableSources = new(32, 39); + public DynamicUpdateField Field_1328 = new(0, 12); + public DynamicUpdateField AvailableQuestLineXQuestIDs = new(0, 13); + public DynamicUpdateField Heirlooms = new(0, 14); + public DynamicUpdateField HeirloomFlags = new(0, 15); + public DynamicUpdateField Toys = new(0, 16); + public DynamicUpdateField ToyFlags = new(0, 17); + public DynamicUpdateField Transmog = new(0, 18); + public DynamicUpdateField ConditionalTransmog = new(0, 19); + public DynamicUpdateField SelfResSpells = new(0, 20); + public DynamicUpdateField RuneforgePowers = new(0, 21); + public DynamicUpdateField TransmogIllusions = new(0, 22); + public DynamicUpdateField WarbandScenes = new(0, 23); + public DynamicUpdateField SpellPctModByLabel = new(0, 25); + public DynamicUpdateField SpellFlatModByLabel = new(0, 26); + public DynamicUpdateField MawPowers = new(0, 27); + public DynamicUpdateField MultiFloorExploration = new(0, 28); + public DynamicUpdateField RecipeProgression = new(0, 29); + public DynamicUpdateField ReplayedQuests = new(0, 30); + public DynamicUpdateField TaskQuests = new(0, 31); + public DynamicUpdateField DisabledSpells = new(32, 33); + public DynamicUpdateField PersonalCraftingOrderCounts = new(32, 36); + public DynamicUpdateField NpcCraftingOrders = new(32, 37); + public DynamicUpdateField CategoryCooldownMods = new(32, 38); + public DynamicUpdateField WeeklySpellUses = new(32, 39); + public DynamicUpdateField TrackedCollectableSources = new(32, 40); public DynamicUpdateField PvpInfo = new(0, 10); - public DynamicUpdateField CharacterRestrictions = new(0, 23); - public DynamicUpdateField TraitConfigs = new(32, 33); - public DynamicUpdateField CraftingOrders = new(32, 34); - public DynamicUpdateField AccountBankTabSettings = new(32, 40); - public UpdateField FarsightObject = new(32, 47); - public UpdateField SummonedBattlePetGUID = new(32, 48); - public UpdateField Coinage = new(32, 49); - public UpdateField AccountBankCoinage = new(32, 50); - public UpdateField XP = new(32, 51); - public UpdateField NextLevelXP = new(32, 52); - public UpdateField TrialXP = new(32, 53); - public UpdateField Skill = new(32, 54); - public UpdateField CharacterPoints = new(32, 55); - public UpdateField MaxTalentTiers = new(32, 56); - public UpdateField TrackCreatureMask = new(32, 57); - public UpdateField MainhandExpertise = new(32, 58); - public UpdateField OffhandExpertise = new(32, 59); - public UpdateField RangedExpertise = new(32, 60); - public UpdateField CombatRatingExpertise = new(32, 61); - public UpdateField BlockPercentage = new(32, 62); - public UpdateField DodgePercentage = new(32, 63); - public UpdateField DodgePercentageFromAttribute = new(32, 64); - public UpdateField ParryPercentage = new(32, 65); - public UpdateField ParryPercentageFromAttribute = new(32, 66); - public UpdateField CritPercentage = new(32, 67); - public UpdateField RangedCritPercentage = new(32, 68); - public UpdateField OffhandCritPercentage = new(32, 69); - public UpdateField SpellCritPercentage = new(70, 71); - public UpdateField ShieldBlock = new(70, 72); - public UpdateField ShieldBlockCritPercentage = new(70, 73); - public UpdateField Mastery = new(70, 74); - public UpdateField Speed = new(70, 75); - public UpdateField Avoidance = new(70, 76); - public UpdateField Sturdiness = new(70, 77); - public UpdateField Versatility = new(70, 78); - public UpdateField VersatilityBonus = new(70, 79); - public UpdateField PvpPowerDamage = new(70, 80); - public UpdateField PvpPowerHealing = new(70, 81); - public UpdateField BitVectors = new(70, 82); - public UpdateField ModHealingDonePos = new(70, 83); - public UpdateField ModHealingPercent = new(70, 84); - public UpdateField ModPeriodicHealingDonePercent = new(70, 85); - public UpdateField ModSpellPowerPercent = new(70, 86); - public UpdateField ModResiliencePercent = new(70, 87); - public UpdateField OverrideSpellPowerByAPPercent = new(70, 88); - public UpdateField OverrideAPBySpellPowerPercent = new(70, 89); - public UpdateField ModTargetResistance = new(70, 90); - public UpdateField ModTargetPhysicalResistance = new(70, 91); - public UpdateField LocalFlags = new(70, 92); - public UpdateField GrantableLevels = new(70, 93); - public UpdateField MultiActionBars = new(70, 94); - public UpdateField LifetimeMaxRank = new(70, 95); - public UpdateField NumRespecs = new(70, 96); - public UpdateField PvpMedals = new(70, 97); - public UpdateField TodayHonorableKills = new(70, 98); - public UpdateField YesterdayHonorableKills = new(70, 99); - public UpdateField LifetimeHonorableKills = new(70, 100); - public UpdateField WatchedFactionIndex = new(70, 101); - public UpdateField MaxLevel = new(102, 103); - public UpdateField ScalingPlayerLevelDelta = new(102, 104); - public UpdateField MaxCreatureScalingLevel = new(102, 105); - public UpdateField PetSpellPower = new(102, 106); - public UpdateField UiHitModifier = new(102, 107); - public UpdateField UiSpellHitModifier = new(102, 108); - public UpdateField HomeRealmTimeOffset = new(102, 109); - public UpdateField ModPetHaste = new(102, 110); - public UpdateField JailersTowerLevelMax = new(102, 111); - public UpdateField JailersTowerLevel = new(102, 112); - public UpdateField LocalRegenFlags = new(102, 113); - public UpdateField AuraVision = new(102, 114); - public UpdateField NumBackpackSlots = new(102, 115); - public UpdateField OverrideSpellsID = new(102, 116); - public UpdateField LootSpecID = new(102, 117); - public UpdateField OverrideZonePVPType = new(102, 118); - public UpdateField Honor = new(102, 119); - public UpdateField HonorNextLevel = new(102, 120); - public UpdateField PerksProgramCurrency = new(102, 121); - public UpdateField NumBankSlots = new(102, 122); - public UpdateField NumAccountBankTabs = new(102, 123); - public UpdateField ResearchHistory = new(102, 124); - public UpdateField FrozenPerksVendorItem = new(102, 125); - public UpdateField Field_1410 = new(102, 127); - public OptionalUpdateField QuestSession = new(102, 126); - public UpdateField UiChromieTimeExpansionID = new(102, 128); - public UpdateField TimerunningSeasonID = new(102, 129); - public UpdateField TransportServerTime = new(102, 130); - public UpdateField WeeklyRewardsPeriodSinceOrigin = new(102, 131); // week count since Cfg_RegionsEntry::ChallengeOrigin - public UpdateField DEBUGSoulbindConduitRank = new(102, 132); - public UpdateField DungeonScore = new(102, 133); - public UpdateField ActiveCombatTraitConfigID = new(134, 135); - public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(134, 136); - public UpdateField ItemUpgradeHighFingerItemID = new(134, 137); - public UpdateField ItemUpgradeHighFingerWatermark = new(134, 138); - public UpdateField ItemUpgradeHighTrinketItemID = new(134, 139); - public UpdateField ItemUpgradeHighTrinketWatermark = new(134, 140); - public UpdateField LootHistoryInstanceID = new(134, 141); - public OptionalUpdateField PetStable = new(134, 142); - public UpdateField RequiredMountCapabilityFlags = new(134, 143); - public OptionalUpdateField WalkInData = new(134, 144); - public OptionalUpdateField DelveData = new(134, 145); - public UpdateFieldArray InvSlots = new(232, 146, 147); - public UpdateFieldArray RestInfo = new(2, 379, 380); - public UpdateFieldArray ModDamageDonePos = new(7, 382, 383); - public UpdateFieldArray ModDamageDoneNeg = new(7, 382, 390); - public UpdateFieldArray ModDamageDonePercent = new(7, 382, 397); - public UpdateFieldArray ModHealingDonePercent = new(7, 382, 404); - public UpdateFieldArray WeaponDmgMultipliers = new(3, 411, 412); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 411, 415); - public UpdateFieldArray BuybackPrice = new(12, 418, 419); - public UpdateFieldArray BuybackTimestamp = new(12, 418, 431); - public UpdateFieldArray CombatRatings = new(32, 443, 444); - public UpdateFieldArray NoReagentCostMask = new(4, 476, 477); - public UpdateFieldArray ProfessionSkillLine = new(2, 481, 482); - public UpdateFieldArray BagSlotFlags = new(5, 484, 485); - public UpdateFieldArray BankBagSlotFlags = new(7, 490, 491); - public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 498, 499); + public DynamicUpdateField CharacterRestrictions = new(0, 24); + public DynamicUpdateField TraitConfigs = new(32, 34); + public DynamicUpdateField CraftingOrders = new(32, 35); + public DynamicUpdateField AccountBankTabSettings = new(32, 41); + public UpdateField FarsightObject = new(32, 48); + public UpdateField SummonedBattlePetGUID = new(32, 49); + public UpdateField Coinage = new(32, 50); + public UpdateField AccountBankCoinage = new(32, 51); + public UpdateField XP = new(32, 52); + public UpdateField NextLevelXP = new(32, 53); + public UpdateField TrialXP = new(32, 54); + public UpdateField Skill = new(32, 55); + public UpdateField CharacterPoints = new(32, 56); + public UpdateField MaxTalentTiers = new(32, 57); + public UpdateField TrackCreatureMask = new(32, 58); + public UpdateField MainhandExpertise = new(32, 59); + public UpdateField OffhandExpertise = new(32, 60); + public UpdateField RangedExpertise = new(32, 61); + public UpdateField CombatRatingExpertise = new(32, 62); + public UpdateField BlockPercentage = new(32, 63); + public UpdateField DodgePercentage = new(32, 64); + public UpdateField DodgePercentageFromAttribute = new(32, 65); + public UpdateField ParryPercentage = new(32, 66); + public UpdateField ParryPercentageFromAttribute = new(32, 67); + public UpdateField CritPercentage = new(32, 68); + public UpdateField RangedCritPercentage = new(32, 69); + public UpdateField OffhandCritPercentage = new(70, 71); + public UpdateField SpellCritPercentage = new(70, 72); + public UpdateField ShieldBlock = new(70, 73); + public UpdateField ShieldBlockCritPercentage = new(70, 74); + public UpdateField Mastery = new(70, 75); + public UpdateField Speed = new(70, 76); + public UpdateField Avoidance = new(70, 77); + public UpdateField Sturdiness = new(70, 78); + public UpdateField Versatility = new(70, 79); + public UpdateField VersatilityBonus = new(70, 80); + public UpdateField PvpPowerDamage = new(70, 81); + public UpdateField PvpPowerHealing = new(70, 82); + public UpdateField BitVectors = new(70, 83); + public UpdateField ModHealingDonePos = new(70, 84); + public UpdateField ModHealingPercent = new(70, 85); + public UpdateField ModPeriodicHealingDonePercent = new(70, 86); + public UpdateField ModSpellPowerPercent = new(70, 87); + public UpdateField ModResiliencePercent = new(70, 88); + public UpdateField OverrideSpellPowerByAPPercent = new(70, 89); + public UpdateField OverrideAPBySpellPowerPercent = new(70, 90); + public UpdateField ModTargetResistance = new(70, 91); + public UpdateField ModTargetPhysicalResistance = new(70, 92); + public UpdateField LocalFlags = new(70, 93); + public UpdateField GrantableLevels = new(70, 94); + public UpdateField MultiActionBars = new(70, 95); + public UpdateField LifetimeMaxRank = new(70, 96); + public UpdateField NumRespecs = new(70, 97); + public UpdateField PvpMedals = new(70, 98); + public UpdateField TodayHonorableKills = new(70, 99); + public UpdateField YesterdayHonorableKills = new(70, 100); + public UpdateField LifetimeHonorableKills = new(70, 101); + public UpdateField WatchedFactionIndex = new(102, 103); + public UpdateField MaxLevel = new(102, 104); + public UpdateField ScalingPlayerLevelDelta = new(102, 105); + public UpdateField MaxCreatureScalingLevel = new(102, 106); + public UpdateField PetSpellPower = new(102, 107); + public UpdateField UiHitModifier = new(102, 108); + public UpdateField UiSpellHitModifier = new(102, 109); + public UpdateField HomeRealmTimeOffset = new(102, 110); + public UpdateField ModPetHaste = new(102, 111); + public UpdateField JailersTowerLevelMax = new(102, 112); + public UpdateField JailersTowerLevel = new(102, 113); + public UpdateField LocalRegenFlags = new(102, 114); + public UpdateField AuraVision = new(102, 115); + public UpdateField NumBackpackSlots = new(102, 116); + public UpdateField OverrideSpellsID = new(102, 117); + public UpdateField LootSpecID = new(102, 118); + public UpdateField OverrideZonePVPType = new(102, 119); + public UpdateField Honor = new(102, 120); + public UpdateField HonorNextLevel = new(102, 121); + public UpdateField PerksProgramCurrency = new(102, 122); + public UpdateField NumBankSlots = new(102, 123); + public UpdateField NumAccountBankTabs = new(102, 124); + public UpdateField ResearchHistory = new(102, 125); + public UpdateField FrozenPerksVendorItem = new(102, 126); + public UpdateField Field_1410 = new(102, 128); + public OptionalUpdateField QuestSession = new(102, 127); + public UpdateField UiChromieTimeExpansionID = new(102, 129); + public UpdateField TimerunningSeasonID = new(102, 130); + public UpdateField TransportServerTime = new(102, 131); + public UpdateField WeeklyRewardsPeriodSinceOrigin = new(102, 132); // week count since Cfg_RegionsEntry::ChallengeOrigin + public UpdateField DEBUGSoulbindConduitRank = new(102, 133); + public UpdateField DungeonScore = new(134, 135); + public UpdateField ActiveCombatTraitConfigID = new(134, 136); + public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(134, 137); + public UpdateField ItemUpgradeHighFingerItemID = new(134, 138); + public UpdateField ItemUpgradeHighFingerWatermark = new(134, 139); + public UpdateField ItemUpgradeHighTrinketItemID = new(134, 140); + public UpdateField ItemUpgradeHighTrinketWatermark = new(134, 141); + public UpdateField LootHistoryInstanceID = new(134, 142); + public OptionalUpdateField PetStable = new(134, 143); + public UpdateField RequiredMountCapabilityFlags = new(134, 144); + public OptionalUpdateField WalkInData = new(134, 145); + public OptionalUpdateField DelveData = new(134, 146); + public UpdateFieldArray InvSlots = new(232, 147, 148); + public UpdateFieldArray RestInfo = new(2, 380, 381); + public UpdateFieldArray ModDamageDonePos = new(7, 383, 384); + public UpdateFieldArray ModDamageDoneNeg = new(7, 383, 391); + public UpdateFieldArray ModDamageDonePercent = new(7, 383, 398); + public UpdateFieldArray ModHealingDonePercent = new(7, 383, 405); + public UpdateFieldArray WeaponDmgMultipliers = new(3, 412, 413); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 412, 416); + public UpdateFieldArray BuybackPrice = new(12, 419, 420); + public UpdateFieldArray BuybackTimestamp = new(12, 419, 432); + public UpdateFieldArray CombatRatings = new(32, 444, 445); + public UpdateFieldArray NoReagentCostMask = new(4, 477, 478); + public UpdateFieldArray ProfessionSkillLine = new(2, 482, 483); + public UpdateFieldArray BagSlotFlags = new(5, 485, 486); + public UpdateFieldArray BankBagSlotFlags = new(7, 491, 492); + public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 499, 500); public ActivePlayerData() : base((int)EntityFragment.CGObject, TypeId.ActivePlayer, changeMaskLength) { @@ -5944,6 +5945,7 @@ namespace Game.Entities } } data.WriteInt32(DailyQuestsCompleted.Size()); + data.WriteInt32(Field_1328.Size()); data.WriteInt32(AvailableQuestLineXQuestIDs.Size()); data.WriteInt32(Heirlooms.Size()); data.WriteInt32(HeirloomFlags.Size()); @@ -6004,6 +6006,10 @@ namespace Game.Entities { data.WriteUInt32(DailyQuestsCompleted[i]); } + for (int i = 0; i < Field_1328.Size(); ++i) + { + data.WriteInt32(Field_1328[i]); + } for (int i = 0; i < AvailableQuestLineXQuestIDs.Size(); ++i) { data.WriteInt32(AvailableQuestLineXQuestIDs[i]); @@ -6223,11 +6229,11 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(PvpInfo.Size(), data); } } - if (changesMask[41]) + if (changesMask[42]) { for (int i = 0; i < 1; ++i) { - if (changesMask[42]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -6236,11 +6242,11 @@ namespace Game.Entities } } } - if (changesMask[43]) + if (changesMask[44]) { for (int i = 0; i < 1; ++i) { - if (changesMask[44]) + if (changesMask[45]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -6249,11 +6255,11 @@ namespace Game.Entities } } } - if (changesMask[45]) + if (changesMask[46]) { for (int i = 0; i < 1; ++i) { - if (changesMask[46]) + if (changesMask[47]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -6262,11 +6268,11 @@ namespace Game.Entities } } } - if (changesMask[41]) + if (changesMask[42]) { for (int i = 0; i < 1; ++i) { - if (changesMask[42]) + if (changesMask[43]) { for (int j = 0; j < ResearchSites[i].Size(); ++j) { @@ -6278,11 +6284,11 @@ namespace Game.Entities } } } - if (changesMask[43]) + if (changesMask[44]) { for (int i = 0; i < 1; ++i) { - if (changesMask[44]) + if (changesMask[45]) { for (int j = 0; j < ResearchSiteProgress[i].Size(); ++j) { @@ -6294,11 +6300,11 @@ namespace Game.Entities } } } - if (changesMask[45]) + if (changesMask[46]) { for (int i = 0; i < 1; ++i) { - if (changesMask[46]) + if (changesMask[47]) { for (int j = 0; j < Research[i].Size(); ++j) { @@ -6321,191 +6327,198 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.Size(), data); } if (changesMask[12]) + { + if (!ignoreNestedChangesMask) + Field_1328.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Field_1328.Size(), data); + } + if (changesMask[13]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.Size(), data); } - if (changesMask[13]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.Size(), data); } - if (changesMask[14]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.Size(), data); } - if (changesMask[15]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.Size(), data); } - if (changesMask[16]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.Size(), data); } - if (changesMask[17]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.Size(), data); } - if (changesMask[18]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.Size(), data); } - if (changesMask[19]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.Size(), data); } - if (changesMask[20]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.Size(), data); } - if (changesMask[21]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.Size(), data); } - if (changesMask[22]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) WarbandScenes.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WarbandScenes.Size(), data); } - if (changesMask[23]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.Size(), data); } - if (changesMask[24]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.Size(), data); } - if (changesMask[25]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.Size(), data); } - if (changesMask[26]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.Size(), data); } - if (changesMask[27]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.Size(), data); } - if (changesMask[28]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.Size(), data); } - if (changesMask[29]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.Size(), data); } - if (changesMask[30]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.Size(), data); } - if (changesMask[31]) - { - if (!ignoreNestedChangesMask) - DisabledSpells.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(DisabledSpells.Size(), data); - } } if (changesMask[32]) { if (changesMask[33]) + { + if (!ignoreNestedChangesMask) + DisabledSpells.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(DisabledSpells.Size(), data); + } + if (changesMask[34]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.Size(), data); } - if (changesMask[34]) + if (changesMask[35]) { if (!ignoreNestedChangesMask) CraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CraftingOrders.Size(), data); } - if (changesMask[35]) + if (changesMask[36]) { if (!ignoreNestedChangesMask) PersonalCraftingOrderCounts.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.Size(), data); } - if (changesMask[36]) + if (changesMask[37]) { if (!ignoreNestedChangesMask) NpcCraftingOrders.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.Size(), data); } - if (changesMask[37]) + if (changesMask[38]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.Size(), data); } - if (changesMask[38]) + if (changesMask[39]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.Size(), data); } - if (changesMask[39]) + if (changesMask[40]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -6557,6 +6570,16 @@ namespace Game.Entities } } if (changesMask[12]) + { + for (int i = 0; i < Field_1328.Size(); ++i) + { + if (Field_1328.HasChanged(i) || ignoreNestedChangesMask) + { + data.WriteInt32(Field_1328[i]); + } + } + } + if (changesMask[13]) { for (int i = 0; i < AvailableQuestLineXQuestIDs.Size(); ++i) { @@ -6566,7 +6589,7 @@ namespace Game.Entities } } } - if (changesMask[13]) + if (changesMask[14]) { for (int i = 0; i < Heirlooms.Size(); ++i) { @@ -6576,7 +6599,7 @@ namespace Game.Entities } } } - if (changesMask[14]) + if (changesMask[15]) { for (int i = 0; i < HeirloomFlags.Size(); ++i) { @@ -6586,7 +6609,7 @@ namespace Game.Entities } } } - if (changesMask[15]) + if (changesMask[16]) { for (int i = 0; i < Toys.Size(); ++i) { @@ -6596,7 +6619,7 @@ namespace Game.Entities } } } - if (changesMask[16]) + if (changesMask[17]) { for (int i = 0; i < ToyFlags.Size(); ++i) { @@ -6606,7 +6629,7 @@ namespace Game.Entities } } } - if (changesMask[17]) + if (changesMask[18]) { for (int i = 0; i < Transmog.Size(); ++i) { @@ -6616,7 +6639,7 @@ namespace Game.Entities } } } - if (changesMask[18]) + if (changesMask[19]) { for (int i = 0; i < ConditionalTransmog.Size(); ++i) { @@ -6626,7 +6649,7 @@ namespace Game.Entities } } } - if (changesMask[19]) + if (changesMask[20]) { for (int i = 0; i < SelfResSpells.Size(); ++i) { @@ -6636,7 +6659,7 @@ namespace Game.Entities } } } - if (changesMask[20]) + if (changesMask[21]) { for (int i = 0; i < RuneforgePowers.Size(); ++i) { @@ -6646,7 +6669,7 @@ namespace Game.Entities } } } - if (changesMask[21]) + if (changesMask[22]) { for (int i = 0; i < TransmogIllusions.Size(); ++i) { @@ -6656,7 +6679,7 @@ namespace Game.Entities } } } - if (changesMask[22]) + if (changesMask[23]) { for (int i = 0; i < WarbandScenes.Size(); ++i) { @@ -6666,7 +6689,7 @@ namespace Game.Entities } } } - if (changesMask[24]) + if (changesMask[25]) { for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { @@ -6676,7 +6699,7 @@ namespace Game.Entities } } } - if (changesMask[25]) + if (changesMask[26]) { for (int i = 0; i < SpellFlatModByLabel.Size(); ++i) { @@ -6686,7 +6709,7 @@ namespace Game.Entities } } } - if (changesMask[26]) + if (changesMask[27]) { for (int i = 0; i < MawPowers.Size(); ++i) { @@ -6696,7 +6719,7 @@ namespace Game.Entities } } } - if (changesMask[27]) + if (changesMask[28]) { for (int i = 0; i < MultiFloorExploration.Size(); ++i) { @@ -6706,7 +6729,7 @@ namespace Game.Entities } } } - if (changesMask[28]) + if (changesMask[29]) { for (int i = 0; i < RecipeProgression.Size(); ++i) { @@ -6716,7 +6739,7 @@ namespace Game.Entities } } } - if (changesMask[29]) + if (changesMask[30]) { for (int i = 0; i < ReplayedQuests.Size(); ++i) { @@ -6726,7 +6749,7 @@ namespace Game.Entities } } } - if (changesMask[30]) + if (changesMask[31]) { for (int i = 0; i < TaskQuests.Size(); ++i) { @@ -6736,7 +6759,10 @@ namespace Game.Entities } } } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (int i = 0; i < DisabledSpells.Size(); ++i) { @@ -6746,10 +6772,7 @@ namespace Game.Entities } } } - } - if (changesMask[32]) - { - if (changesMask[35]) + if (changesMask[36]) { for (int i = 0; i < PersonalCraftingOrderCounts.Size(); ++i) { @@ -6759,7 +6782,7 @@ namespace Game.Entities } } } - if (changesMask[36]) + if (changesMask[37]) { for (int i = 0; i < NpcCraftingOrders.Size(); ++i) { @@ -6769,7 +6792,7 @@ namespace Game.Entities } } } - if (changesMask[37]) + if (changesMask[38]) { for (int i = 0; i < CategoryCooldownMods.Size(); ++i) { @@ -6779,7 +6802,7 @@ namespace Game.Entities } } } - if (changesMask[38]) + if (changesMask[39]) { for (int i = 0; i < WeeklySpellUses.Size(); ++i) { @@ -6789,7 +6812,7 @@ namespace Game.Entities } } } - if (changesMask[39]) + if (changesMask[40]) { for (int i = 0; i < TrackedCollectableSources.Size(); ++i) { @@ -6799,7 +6822,7 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) AccountBankTabSettings.WriteUpdateMask(data, 3); @@ -6819,7 +6842,7 @@ namespace Game.Entities } } } - if (changesMask[23]) + if (changesMask[24]) { for (int i = 0; i < CharacterRestrictions.Size(); ++i) { @@ -6832,7 +6855,7 @@ namespace Game.Entities } if (changesMask[32]) { - if (changesMask[33]) + if (changesMask[34]) { for (int i = 0; i < TraitConfigs.Size(); ++i) { @@ -6842,7 +6865,7 @@ namespace Game.Entities } } } - if (changesMask[34]) + if (changesMask[35]) { for (int i = 0; i < CraftingOrders.Size(); ++i) { @@ -6852,7 +6875,7 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[41]) { for (int i = 0; i < AccountBankTabSettings.Size(); ++i) { @@ -6862,364 +6885,364 @@ namespace Game.Entities } } } - if (changesMask[47]) + if (changesMask[48]) { data.WritePackedGuid(FarsightObject); } - if (changesMask[48]) + if (changesMask[49]) { data.WritePackedGuid(SummonedBattlePetGUID); } - if (changesMask[49]) + if (changesMask[50]) { data.WriteUInt64(Coinage); } - if (changesMask[50]) + if (changesMask[51]) { data.WriteUInt64(AccountBankCoinage); } - if (changesMask[51]) + if (changesMask[52]) { data.WriteUInt32(XP); } - if (changesMask[52]) + if (changesMask[53]) { data.WriteUInt32(NextLevelXP); } - if (changesMask[53]) + if (changesMask[54]) { data.WriteInt32(TrialXP); } - if (changesMask[54]) + if (changesMask[55]) { Skill.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[55]) + if (changesMask[56]) { data.WriteUInt32(CharacterPoints); } - if (changesMask[56]) + if (changesMask[57]) { data.WriteUInt32(MaxTalentTiers); } - if (changesMask[57]) + if (changesMask[58]) { data.WriteUInt32(TrackCreatureMask); } - if (changesMask[58]) + if (changesMask[59]) { data.WriteFloat(MainhandExpertise); } - if (changesMask[59]) + if (changesMask[60]) { data.WriteFloat(OffhandExpertise); } - if (changesMask[60]) + if (changesMask[61]) { data.WriteFloat(RangedExpertise); } - if (changesMask[61]) + if (changesMask[62]) { data.WriteFloat(CombatRatingExpertise); } - if (changesMask[62]) + if (changesMask[63]) { data.WriteFloat(BlockPercentage); } - if (changesMask[63]) + if (changesMask[64]) { data.WriteFloat(DodgePercentage); } - if (changesMask[64]) + if (changesMask[65]) { data.WriteFloat(DodgePercentageFromAttribute); } - if (changesMask[65]) + if (changesMask[66]) { data.WriteFloat(ParryPercentage); } - if (changesMask[66]) + if (changesMask[67]) { data.WriteFloat(ParryPercentageFromAttribute); } - if (changesMask[67]) + if (changesMask[68]) { data.WriteFloat(CritPercentage); } - if (changesMask[68]) - { - data.WriteFloat(RangedCritPercentage); - } if (changesMask[69]) { - data.WriteFloat(OffhandCritPercentage); + data.WriteFloat(RangedCritPercentage); } } if (changesMask[70]) { if (changesMask[71]) { - data.WriteFloat(SpellCritPercentage); + data.WriteFloat(OffhandCritPercentage); } if (changesMask[72]) { - data.WriteUInt32(ShieldBlock); + data.WriteFloat(SpellCritPercentage); } if (changesMask[73]) { - data.WriteFloat(ShieldBlockCritPercentage); + data.WriteUInt32(ShieldBlock); } if (changesMask[74]) { - data.WriteFloat(Mastery); + data.WriteFloat(ShieldBlockCritPercentage); } if (changesMask[75]) { - data.WriteFloat(Speed); + data.WriteFloat(Mastery); } if (changesMask[76]) { - data.WriteFloat(Avoidance); + data.WriteFloat(Speed); } if (changesMask[77]) { - data.WriteFloat(Sturdiness); + data.WriteFloat(Avoidance); } if (changesMask[78]) { - data.WriteInt32(Versatility); + data.WriteFloat(Sturdiness); } if (changesMask[79]) { - data.WriteFloat(VersatilityBonus); + data.WriteInt32(Versatility); } if (changesMask[80]) { - data.WriteFloat(PvpPowerDamage); + data.WriteFloat(VersatilityBonus); } if (changesMask[81]) { - data.WriteFloat(PvpPowerHealing); + data.WriteFloat(PvpPowerDamage); } if (changesMask[82]) { - BitVectors.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteFloat(PvpPowerHealing); } if (changesMask[83]) { - data.WriteInt32(ModHealingDonePos); + BitVectors.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[84]) { - data.WriteFloat(ModHealingPercent); + data.WriteInt32(ModHealingDonePos); } if (changesMask[85]) { - data.WriteFloat(ModPeriodicHealingDonePercent); + data.WriteFloat(ModHealingPercent); } if (changesMask[86]) { - data.WriteFloat(ModSpellPowerPercent); + data.WriteFloat(ModPeriodicHealingDonePercent); } if (changesMask[87]) { - data.WriteFloat(ModResiliencePercent); + data.WriteFloat(ModSpellPowerPercent); } if (changesMask[88]) { - data.WriteFloat(OverrideSpellPowerByAPPercent); + data.WriteFloat(ModResiliencePercent); } if (changesMask[89]) { - data.WriteFloat(OverrideAPBySpellPowerPercent); + data.WriteFloat(OverrideSpellPowerByAPPercent); } if (changesMask[90]) { - data.WriteInt32(ModTargetResistance); + data.WriteFloat(OverrideAPBySpellPowerPercent); } if (changesMask[91]) { - data.WriteInt32(ModTargetPhysicalResistance); + data.WriteInt32(ModTargetResistance); } if (changesMask[92]) { - data.WriteUInt32(LocalFlags); + data.WriteInt32(ModTargetPhysicalResistance); } if (changesMask[93]) { - data.WriteUInt8(GrantableLevels); + data.WriteUInt32(LocalFlags); } if (changesMask[94]) { - data.WriteUInt8(MultiActionBars); + data.WriteUInt8(GrantableLevels); } if (changesMask[95]) { - data.WriteUInt8(LifetimeMaxRank); + data.WriteUInt8(MultiActionBars); } if (changesMask[96]) { - data.WriteUInt8(NumRespecs); + data.WriteUInt8(LifetimeMaxRank); } if (changesMask[97]) { - data.WriteUInt32(PvpMedals); + data.WriteUInt8(NumRespecs); } if (changesMask[98]) { - data.WriteUInt16(TodayHonorableKills); + data.WriteUInt32(PvpMedals); } if (changesMask[99]) { - data.WriteUInt16(YesterdayHonorableKills); + data.WriteUInt16(TodayHonorableKills); } if (changesMask[100]) { - data.WriteUInt32(LifetimeHonorableKills); + data.WriteUInt16(YesterdayHonorableKills); } if (changesMask[101]) { - data.WriteUInt32(WatchedFactionIndex); + data.WriteUInt32(LifetimeHonorableKills); } } if (changesMask[102]) { if (changesMask[103]) { - data.WriteUInt32(MaxLevel); + data.WriteUInt32(WatchedFactionIndex); } if (changesMask[104]) { - data.WriteInt32(ScalingPlayerLevelDelta); + data.WriteUInt32(MaxLevel); } if (changesMask[105]) { - data.WriteInt32(MaxCreatureScalingLevel); + data.WriteInt32(ScalingPlayerLevelDelta); } if (changesMask[106]) { - data.WriteUInt32(PetSpellPower); + data.WriteInt32(MaxCreatureScalingLevel); } if (changesMask[107]) { - data.WriteFloat(UiHitModifier); + data.WriteUInt32(PetSpellPower); } if (changesMask[108]) { - data.WriteFloat(UiSpellHitModifier); + data.WriteFloat(UiHitModifier); } if (changesMask[109]) { - data.WriteInt32(HomeRealmTimeOffset); + data.WriteFloat(UiSpellHitModifier); } if (changesMask[110]) { - data.WriteFloat(ModPetHaste); + data.WriteInt32(HomeRealmTimeOffset); } if (changesMask[111]) { - data.WriteInt8(JailersTowerLevelMax); + data.WriteFloat(ModPetHaste); } if (changesMask[112]) { - data.WriteInt8(JailersTowerLevel); + data.WriteInt8(JailersTowerLevelMax); } if (changesMask[113]) { - data.WriteUInt8(LocalRegenFlags); + data.WriteInt8(JailersTowerLevel); } if (changesMask[114]) { - data.WriteUInt8(AuraVision); + data.WriteUInt8(LocalRegenFlags); } if (changesMask[115]) { - data.WriteUInt8(NumBackpackSlots); + data.WriteUInt8(AuraVision); } if (changesMask[116]) { - data.WriteUInt32(OverrideSpellsID); + data.WriteUInt8(NumBackpackSlots); } if (changesMask[117]) { - data.WriteUInt16(LootSpecID); + data.WriteUInt32(OverrideSpellsID); } if (changesMask[118]) { - data.WriteUInt32(OverrideZonePVPType); + data.WriteUInt16(LootSpecID); } if (changesMask[119]) { - data.WriteUInt32(Honor); + data.WriteUInt32(OverrideZonePVPType); } if (changesMask[120]) { - data.WriteUInt32(HonorNextLevel); + data.WriteUInt32(Honor); } if (changesMask[121]) { - data.WriteInt32(PerksProgramCurrency); + data.WriteUInt32(HonorNextLevel); } if (changesMask[122]) { - data.WriteUInt8(NumBankSlots); + data.WriteInt32(PerksProgramCurrency); } if (changesMask[123]) { - data.WriteUInt8(NumAccountBankTabs); + data.WriteUInt8(NumBankSlots); } - if (changesMask[128]) + if (changesMask[124]) { - data.WriteInt32(UiChromieTimeExpansionID); + data.WriteUInt8(NumAccountBankTabs); } if (changesMask[129]) { - data.WriteInt32(TimerunningSeasonID); + data.WriteInt32(UiChromieTimeExpansionID); } if (changesMask[130]) { - data.WriteInt32(TransportServerTime); + data.WriteInt32(TimerunningSeasonID); } if (changesMask[131]) { - data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); + data.WriteInt32(TransportServerTime); } if (changesMask[132]) + { + data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); + } + if (changesMask[133]) { data.WriteInt16(DEBUGSoulbindConduitRank); } } if (changesMask[134]) { - if (changesMask[135]) + if (changesMask[136]) { data.WriteUInt32(ActiveCombatTraitConfigID); } - if (changesMask[136]) + if (changesMask[137]) { data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[137]) + if (changesMask[138]) { data.WriteInt32(ItemUpgradeHighFingerItemID); } - if (changesMask[138]) + if (changesMask[139]) { data.WriteFloat(ItemUpgradeHighFingerWatermark); } - if (changesMask[139]) + if (changesMask[140]) { data.WriteInt32(ItemUpgradeHighTrinketItemID); } - if (changesMask[140]) + if (changesMask[141]) { data.WriteFloat(ItemUpgradeHighTrinketWatermark); } - if (changesMask[141]) + if (changesMask[142]) { data.WriteUInt64(LootHistoryInstanceID); } - if (changesMask[143]) + if (changesMask[144]) { data.WriteUInt8(RequiredMountCapabilityFlags); } @@ -7237,47 +7260,47 @@ namespace Game.Entities data.FlushBits(); if (changesMask[102]) { - if (changesMask[124]) + if (changesMask[125]) { ResearchHistory.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[126]) + if (changesMask[127]) { if (QuestSession.HasValue()) { QuestSession.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[125]) + if (changesMask[126]) { FrozenPerksVendorItem.GetValue().Write(data); } - if (changesMask[127]) + if (changesMask[128]) { Field_1410.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[133]) - { - DungeonScore.GetValue().Write(data); - } } if (changesMask[134]) { - if (changesMask[142]) + if (changesMask[135]) + { + DungeonScore.GetValue().Write(data); + } + if (changesMask[143]) { if (PetStable.HasValue()) { PetStable.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[144]) + if (changesMask[145]) { if (WalkInData.HasValue()) { WalkInData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[145]) + if (changesMask[146]) { if (DelveData.HasValue()) { @@ -7285,131 +7308,131 @@ namespace Game.Entities } } } - if (changesMask[146]) + if (changesMask[147]) { for (int i = 0; i < 232; ++i) { - if (changesMask[147 + i]) + if (changesMask[148 + i]) { data.WritePackedGuid(InvSlots[i]); } } } - if (changesMask[379]) + if (changesMask[380]) { for (int i = 0; i < 2; ++i) { - if (changesMask[380 + i]) + if (changesMask[381 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[382]) + if (changesMask[383]) { for (int i = 0; i < 7; ++i) { - if (changesMask[383 + i]) + if (changesMask[384 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (changesMask[390 + i]) + if (changesMask[391 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (changesMask[397 + i]) + if (changesMask[398 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } - if (changesMask[404 + i]) + if (changesMask[405 + i]) { data.WriteFloat(ModHealingDonePercent[i]); } } } - if (changesMask[411]) + if (changesMask[412]) { for (int i = 0; i < 3; ++i) { - if (changesMask[412 + i]) + if (changesMask[413 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (changesMask[415 + i]) + if (changesMask[416 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[418]) + if (changesMask[419]) { for (int i = 0; i < 12; ++i) { - if (changesMask[419 + i]) + if (changesMask[420 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (changesMask[431 + i]) + if (changesMask[432 + i]) { data.WriteInt64(BuybackTimestamp[i]); } } } - if (changesMask[443]) + if (changesMask[444]) { for (int i = 0; i < 32; ++i) { - if (changesMask[444 + i]) + if (changesMask[445 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (changesMask[476]) + if (changesMask[477]) { for (int i = 0; i < 4; ++i) { - if (changesMask[477 + i]) + if (changesMask[478 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (changesMask[481]) + if (changesMask[482]) { for (int i = 0; i < 2; ++i) { - if (changesMask[482 + i]) + if (changesMask[483 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (changesMask[484]) + if (changesMask[485]) { for (int i = 0; i < 5; ++i) { - if (changesMask[485 + i]) + if (changesMask[486 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (changesMask[490]) + if (changesMask[491]) { for (int i = 0; i < 7; ++i) { - if (changesMask[491 + i]) + if (changesMask[492 + i]) { data.WriteUInt32(BankBagSlotFlags[i]); } } } - if (changesMask[498]) + if (changesMask[499]) { for (int i = 0; i < 17; ++i) { - if (changesMask[499 + i]) + if (changesMask[500 + i]) { data.WriteFloat(ItemUpgradeHighWatermark[i]); } diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 7ed43b9d3..77f3cd7d3 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -393,10 +393,11 @@ namespace Game.Entities if (HasDriveStatus) { - data.WriteBit(unit.m_movementInfo.driveStatus.Value.accelerating); - data.WriteBit(unit.m_movementInfo.driveStatus.Value.drifting); data.WriteFloat(unit.m_movementInfo.driveStatus.Value.speed); data.WriteFloat(unit.m_movementInfo.driveStatus.Value.movementAngle); + data.WriteBit(unit.m_movementInfo.driveStatus.Value.accelerating); + data.WriteBit(unit.m_movementInfo.driveStatus.Value.drifting); + data.FlushBits(); } data.WriteFloat(unit.GetSpeed(UnitMoveType.Walk)); diff --git a/Source/Game/Entities/Player/Player.Map.cs b/Source/Game/Entities/Player/Player.Map.cs index 4aa50b639..6adc37ca0 100644 --- a/Source/Game/Entities/Player/Player.Map.cs +++ b/Source/Game/Entities/Player/Player.Map.cs @@ -546,7 +546,7 @@ namespace Game.Entities { RaidDifficultySet raidDifficultySet = new(); raidDifficultySet.DifficultyID = forcedDifficulty == -1 ? (int)(legacy ? GetLegacyRaidDifficultyID() : GetRaidDifficultyID()) : forcedDifficulty; - raidDifficultySet.Legacy = legacy; + raidDifficultySet.Legacy = legacy ? 1 : 0; SendPacket(raidDifficultySet); } diff --git a/Source/Game/Handlers/MiscHandler.cs b/Source/Game/Handlers/MiscHandler.cs index d4b6681fb..1e77c8fb2 100644 --- a/Source/Game/Handlers/MiscHandler.cs +++ b/Source/Game/Handlers/MiscHandler.cs @@ -48,9 +48,17 @@ namespace Game if (packet.DataType >= AccountDataTypes.Max) return; + UpdateAccountDataComplete updateAccountDataComplete = new(); + if (packet.Size == 0) { SetAccountData(packet.DataType, 0, ""); + + updateAccountDataComplete.Player = packet.PlayerGuid; + updateAccountDataComplete.DataType = (int)packet.DataType; + updateAccountDataComplete.Result = 0; + SendPacket(updateAccountDataComplete); + return; } @@ -62,6 +70,11 @@ namespace Game byte[] data = ZLib.Decompress(packet.CompressedData.GetData(), packet.Size); SetAccountData(packet.DataType, packet.Time, Encoding.Default.GetString(data)); + + updateAccountDataComplete.Player = packet.PlayerGuid; + updateAccountDataComplete.DataType = (int)packet.DataType; + updateAccountDataComplete.Result = 0; + SendPacket(updateAccountDataComplete); } [WorldPacketHandler(ClientOpcodes.SetSelection)] diff --git a/Source/Game/Movement/MoveSpline.cs b/Source/Game/Movement/MoveSpline.cs index fc0321e77..eb62ea0a6 100644 --- a/Source/Game/Movement/MoveSpline.cs +++ b/Source/Game/Movement/MoveSpline.cs @@ -3,6 +3,7 @@ using Framework.Constants; using Framework.Dynamic; +using Game.Entities; using System; using System.Collections.Generic; using System.Numerics; @@ -37,6 +38,7 @@ namespace Game.Movement vertical_acceleration = 0.0f; effect_start_time = 0; spell_effect_extra = args.spellEffectExtra; + turn = args.turnData; anim_tier = args.animTier; splineIsFacingOnly = args.path.Count == 2 && args.facing.type != MonsterMoveType.Normal && ((args.path[1] - args.path[0]).Length() < 0.1f); @@ -108,6 +110,13 @@ namespace Game.Movement Log.outError(LogFilter.Unit, "MoveSpline.init_spline: zero length spline, wrong input data?"); spline.Set_length(spline.Last(), spline.IsCyclic() ? 1000 : 1); } + + if (turn != null) + { + float totalTurnTime = (float)(turn.TotalTurnRads / turn.RadsPerSec * (float)Time.InMilliseconds); + spline.Set_length(spline.Last(), MathF.Max(spline.Length(), totalTurnTime)); + } + point_Idx = spline.First(); } @@ -127,18 +136,20 @@ namespace Game.Movement public int CurrentSplineIdx() { return point_Idx; } public uint GetId() { return m_Id; } public bool Finalized() { return splineflags.HasFlag(MoveSplineFlagEnum.Done); } + void _Finalize() { splineflags.SetUnsetFlag(MoveSplineFlagEnum.Done); point_Idx = spline.Last() - 1; time_passed = Duration(); } + public Vector4 ComputePosition(int time_point, int point_index) { float u = 1.0f; - int seg_time = spline.Length(point_index, point_index + 1); + float seg_time = (float)spline.Length(point_index, point_index + 1); if (seg_time > 0) - u = (time_point - spline.Length(point_index)) / (float)seg_time; + u = MathF.Min((time_point - spline.Length(point_index)) / (float)seg_time, 1.0f); Vector3 c; float orientation = initialOrientation; @@ -157,6 +168,10 @@ namespace Game.Movement orientation = MathF.Atan2(facing.f.Y - c.Y, facing.f.X - c.X); //nothing to do for MoveSplineFlag.Final_Target flag } + else if (splineflags.HasFlag(MoveSplineFlagEnum.Turning)) + { + orientation = Position.NormalizeOrientation(turn.StartFacing + (float)time_point / (float)Time.InMilliseconds * turn.RadsPerSec); + } else { if (!splineflags.HasFlag(MoveSplineFlagEnum.OrientationFixed | MoveSplineFlagEnum.Falling | MoveSplineFlagEnum.JumpOrientationFixed)) @@ -340,6 +355,7 @@ namespace Game.Movement int SegmentTimeElapsed() { return NextTimestamp() - time_passed; } public bool IsCyclic() { return splineflags.HasFlag(MoveSplineFlagEnum.Cyclic); } public bool IsFalling() { return splineflags.HasFlag(MoveSplineFlagEnum.Falling); } + public bool IsTurning() { return splineflags.HasFlag(MoveSplineFlagEnum.Turning); } public bool Initialized() { return !spline.Empty(); } public Vector3 FinalDestination() { return Initialized() ? spline.GetPoint(spline.Last()) : Vector3.Zero; } public Vector3 CurrentDestination() { return Initialized() ? spline.GetPoint(point_Idx + 1) : Vector3.Zero; } @@ -362,6 +378,7 @@ namespace Game.Movement public int point_Idx_offset; public float velocity; public SpellEffectExtraData spell_effect_extra; + public TurnData turn; public AnimTierTransition anim_tier; #endregion diff --git a/Source/Game/Movement/MoveSplineInit.cs b/Source/Game/Movement/MoveSplineInit.cs index 872a064f5..89972b3a0 100644 --- a/Source/Game/Movement/MoveSplineInit.cs +++ b/Source/Game/Movement/MoveSplineInit.cs @@ -176,6 +176,9 @@ namespace Game.Movement loc.W = unit.GetOrientation(); } + if (move_spline.IsTurning()) + SetFacing(loc.W); + args.flags.Flags = MoveSplineFlagEnum.Done; unit.m_movementInfo.RemoveMovementFlag(MovementFlag.Forward); move_spline.onTransport = transport; @@ -186,6 +189,9 @@ namespace Game.Movement packet.Pos = new Vector3(loc.X, loc.Y, loc.Z); packet.SplineData.StopSplineStyle = 2; packet.SplineData.Id = move_spline.GetId(); + packet.SplineData.StopUseFaceDirection = args.facing.type == MonsterMoveType.FacingAngle; + packet.SplineData.Move.Face = args.facing.type; + packet.SplineData.Move.FaceDirection = args.facing.angle; if (transport) { @@ -324,6 +330,17 @@ namespace Game.Movement args.spellEffectExtra = spellEffectExtraData; } + public void SetTurning(float startFacing, float totalTurnRads, float radsPerSec) + { + args.flags.SetUnsetFlag(MoveSplineFlagEnum.Turning, true); + + TurnData turn = new(); + turn.StartFacing = startFacing; + turn.TotalTurnRads = totalTurnRads; + turn.RadsPerSec = radsPerSec; + args.turnData = turn; + } + public List Path() { return args.path; } public MoveSplineInitArgs args = new(); diff --git a/Source/Game/Movement/MoveSplineInitArgs.cs b/Source/Game/Movement/MoveSplineInitArgs.cs index 7d7c9c19d..075fc1310 100644 --- a/Source/Game/Movement/MoveSplineInitArgs.cs +++ b/Source/Game/Movement/MoveSplineInitArgs.cs @@ -37,6 +37,7 @@ namespace Game.Movement public uint splineId; public float initialOrientation; public SpellEffectExtraData spellEffectExtra; + public TurnData turnData; public AnimTierTransition animTier; public bool walk; public bool HasVelocity; @@ -116,6 +117,14 @@ namespace Game.Movement public uint ParabolicCurveId; } + public class TurnData + { + public float StartFacing; + public float TotalTurnRads; + public float RadsPerSec; + } + + public class AnimTierTransition { public uint TierTransitionId; diff --git a/Source/Game/Networking/Packets/AuthenticationPackets.cs b/Source/Game/Networking/Packets/AuthenticationPackets.cs index a8487fe12..3393a90f5 100644 --- a/Source/Game/Networking/Packets/AuthenticationPackets.cs +++ b/Source/Game/Networking/Packets/AuthenticationPackets.cs @@ -370,8 +370,8 @@ namespace Game.Networking.Packets class EnterEncryptedMode : ServerPacket { - byte[] EncryptionKey; int RegionGroup; + byte[] EncryptionKey; bool Enabled; static byte[] expandedPrivateKey; @@ -404,8 +404,8 @@ namespace Game.Networking.Packets toSign.Process(BitConverter.GetBytes(Enabled), 1); toSign.Finish(EnableEncryptionSeed, 16); - _worldPacket.WriteBytes(Ed25519.Sign(toSign.Digest, expandedPrivateKey, 0, EnableEncryptionContext)); _worldPacket.WriteInt32(RegionGroup); + _worldPacket.WriteBytes(Ed25519.Sign(toSign.Digest, expandedPrivateKey, 0, EnableEncryptionContext)); _worldPacket.WriteBit(Enabled); _worldPacket.FlushBits(); } diff --git a/Source/Game/Networking/Packets/CharacterPackets.cs b/Source/Game/Networking/Packets/CharacterPackets.cs index a819e1b8c..7fcaa3d04 100644 --- a/Source/Game/Networking/Packets/CharacterPackets.cs +++ b/Source/Game/Networking/Packets/CharacterPackets.cs @@ -786,18 +786,19 @@ namespace Game.Networking.Packets public class UndeleteCooldownStatusResponse : ServerPacket { + public uint MaxCooldown; // Max. cooldown until next free character restoration. Displayed in undelete confirm message. (in sec) + public uint CurrentCooldown; // Current cooldown until next free character restoration. (in sec) + public bool OnCooldown; + public UndeleteCooldownStatusResponse() : base(ServerOpcodes.UndeleteCooldownStatusResponse) { } public override void Write() { - _worldPacket.WriteBit(OnCooldown); _worldPacket.WriteUInt32(MaxCooldown); _worldPacket.WriteUInt32(CurrentCooldown); + _worldPacket.WriteBit(OnCooldown); + _worldPacket.FlushBits(); } - - public bool OnCooldown; // - public uint MaxCooldown; // Max. cooldown until next free character restoration. Displayed in undelete confirm message. (in sec) - public uint CurrentCooldown; // Current cooldown until next free character restoration. (in sec) } public class PlayerLogin : ClientPacket diff --git a/Source/Game/Networking/Packets/ClientConfigPackets.cs b/Source/Game/Networking/Packets/ClientConfigPackets.cs index 4faf74f67..d8a39779b 100644 --- a/Source/Game/Networking/Packets/ClientConfigPackets.cs +++ b/Source/Game/Networking/Packets/ClientConfigPackets.cs @@ -103,6 +103,22 @@ namespace Game.Networking.Packets public ByteBuffer CompressedData; } + class UpdateAccountDataComplete : ServerPacket + { + public ObjectGuid Player; + public int DataType; // @see enum AccountDataType + public int Result; + + public UpdateAccountDataComplete() : base(ServerOpcodes.UpdateAccountDataComplete, ConnectionType.Realm) { } + + public override void Write() + { + _worldPacket.WritePackedGuid(Player); + _worldPacket.WriteInt32(DataType); + _worldPacket.WriteInt32(Result); + } + } + class SetAdvancedCombatLogging : ClientPacket { public SetAdvancedCombatLogging(WorldPacket packet) : base(packet) { } diff --git a/Source/Game/Networking/Packets/GarrisonPackets.cs b/Source/Game/Networking/Packets/GarrisonPackets.cs index b628606a0..7344e069e 100644 --- a/Source/Game/Networking/Packets/GarrisonPackets.cs +++ b/Source/Game/Networking/Packets/GarrisonPackets.cs @@ -320,23 +320,23 @@ namespace Game.Networking.Packets public class GarrisonBuildingInfo { + public long TimeBuilt; + public uint GarrPlotInstanceID; + public uint GarrBuildingID; + public uint CurrentGarSpecID; + public long TimeSpecCooldown = 2288912640; // 06/07/1906 18:35:44 - another in the series of magic blizz dates + public bool Active; + public void Write(WorldPacket data) { + data.WriteInt64(TimeBuilt); data.WriteUInt32(GarrPlotInstanceID); data.WriteUInt32(GarrBuildingID); - data.WriteInt64(TimeBuilt); data.WriteUInt32(CurrentGarSpecID); data.WriteInt64(TimeSpecCooldown); data.WriteBit(Active); data.FlushBits(); } - - public uint GarrPlotInstanceID; - public uint GarrBuildingID; - public long TimeBuilt; - public uint CurrentGarSpecID; - public long TimeSpecCooldown = 2288912640; // 06/07/1906 18:35:44 - another in the series of magic blizz dates - public bool Active; } public class GarrisonFollower diff --git a/Source/Game/Networking/Packets/GuildPackets.cs b/Source/Game/Networking/Packets/GuildPackets.cs index 96e8006de..69e8fa721 100644 --- a/Source/Game/Networking/Packets/GuildPackets.cs +++ b/Source/Game/Networking/Packets/GuildPackets.cs @@ -843,12 +843,11 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteBit(InGuildParty); - _worldPacket.FlushBits(); - _worldPacket.WriteInt32(NumMembers); _worldPacket.WriteInt32(NumRequired); _worldPacket.WriteFloat(GuildXPEarnedMult); + _worldPacket.WriteBit(InGuildParty); + _worldPacket.FlushBits(); } public float GuildXPEarnedMult = 0.0f; diff --git a/Source/Game/Networking/Packets/InstancePackets.cs b/Source/Game/Networking/Packets/InstancePackets.cs index 7fc2a6624..3ca274fb3 100644 --- a/Source/Game/Networking/Packets/InstancePackets.cs +++ b/Source/Game/Networking/Packets/InstancePackets.cs @@ -306,19 +306,6 @@ namespace Game.Networking.Packets //Structs public struct InstanceLockPkt { - public void Write(WorldPacket data) - { - data.WriteUInt32(MapID); - data.WriteUInt32(DifficultyID); - data.WriteUInt64(InstanceID); - data.WriteInt32(TimeRemaining); - data.WriteUInt32(CompletedMask); - - data.WriteBit(Locked); - data.WriteBit(Extended); - data.FlushBits(); - } - public ulong InstanceID; public uint MapID; public uint DifficultyID; @@ -327,5 +314,18 @@ namespace Game.Networking.Packets public bool Locked; public bool Extended; + + public void Write(WorldPacket data) + { + data.WriteUInt64(InstanceID); + data.WriteUInt32(MapID); + data.WriteUInt32(DifficultyID); + data.WriteInt32(TimeRemaining); + data.WriteUInt32(CompletedMask); + + data.WriteBit(Locked); + data.WriteBit(Extended); + data.FlushBits(); + } } } diff --git a/Source/Game/Networking/Packets/MiscPackets.cs b/Source/Game/Networking/Packets/MiscPackets.cs index cbb2a94b2..8956cab4a 100644 --- a/Source/Game/Networking/Packets/MiscPackets.cs +++ b/Source/Game/Networking/Packets/MiscPackets.cs @@ -414,16 +414,16 @@ namespace Game.Networking.Packets public class SetRaidDifficulty : ClientPacket { + public int DifficultyID; + public int Legacy; + public SetRaidDifficulty(WorldPacket packet) : base(packet) { } public override void Read() { + Legacy = _worldPacket.ReadInt32(); DifficultyID = _worldPacket.ReadInt32(); - Legacy = _worldPacket.ReadUInt8(); } - - public int DifficultyID; - public byte Legacy; } public class DungeonDifficultySet : ServerPacket @@ -440,16 +440,16 @@ namespace Game.Networking.Packets public class RaidDifficultySet : ServerPacket { + public int DifficultyID; + public int Legacy; + public RaidDifficultySet() : base(ServerOpcodes.RaidDifficultySet) { } public override void Write() { + _worldPacket.WriteInt32(Legacy); _worldPacket.WriteInt32(DifficultyID); - _worldPacket.WriteUInt8((byte)(Legacy ? 1 : 0)); } - - public int DifficultyID; - public bool Legacy; } public class CorpseReclaimDelay : ServerPacket diff --git a/Source/Game/Networking/Packets/MovementPackets.cs b/Source/Game/Networking/Packets/MovementPackets.cs index a708be721..7d9fef056 100644 --- a/Source/Game/Networking/Packets/MovementPackets.cs +++ b/Source/Game/Networking/Packets/MovementPackets.cs @@ -140,10 +140,10 @@ namespace Game.Networking.Packets data.ResetBitPos(); MovementInfo.Drive driveStatus = new(); - driveStatus.accelerating = data.HasBit(); - driveStatus.drifting = data.HasBit(); driveStatus.speed = data.ReadFloat(); driveStatus.movementAngle = data.ReadFloat(); + driveStatus.accelerating = data.HasBit(); + driveStatus.drifting = data.HasBit(); movementInfo.driveStatus = driveStatus; } @@ -232,10 +232,11 @@ namespace Game.Networking.Packets if (hasDriveStatus) { - data.WriteBit(movementInfo.driveStatus.Value.accelerating); - data.WriteBit(movementInfo.driveStatus.Value.drifting); data.WriteFloat(movementInfo.driveStatus.Value.speed); data.WriteFloat(movementInfo.driveStatus.Value.movementAngle); + data.WriteBit(movementInfo.driveStatus.Value.accelerating); + data.WriteBit(movementInfo.driveStatus.Value.drifting); + data.FlushBits(); } } @@ -270,6 +271,7 @@ namespace Game.Networking.Packets data.WriteBit(false); // HasSplineFilter data.WriteBit(moveSpline.spell_effect_extra != null); // HasSpellEffectExtraData bool hasJumpExtraData = data.WriteBit(moveSpline.splineflags.HasFlag(MoveSplineFlagEnum.Parabolic) && (moveSpline.spell_effect_extra == null || moveSpline.effect_start_time != 0)); + data.WriteBit(moveSpline.turn != null); // HasTurnData data.WriteBit(moveSpline.anim_tier != null); // HasAnimTierTransition data.WriteBit(false); // HasUnknown901 data.FlushBits(); @@ -321,6 +323,13 @@ namespace Game.Networking.Packets data.WriteUInt32(0); // Duration (override) } + if (moveSpline.turn != null) + { + data.WriteFloat(moveSpline.turn.StartFacing); + data.WriteFloat(moveSpline.turn.TotalTurnRads); + data.WriteFloat(moveSpline.turn.RadsPerSec); + } + if (moveSpline.anim_tier != null) { data.WriteUInt32(moveSpline.anim_tier.TierTransitionId); @@ -447,6 +456,15 @@ namespace Game.Networking.Packets movementSpline.JumpExtraData = jumpExtraData; } + if (moveSpline.turn != null) + { + MonsterSplineTurnData turn = new(); + turn.StartFacing = moveSpline.turn.StartFacing; + turn.TotalTurnRads = moveSpline.turn.TotalTurnRads; + turn.RadsPerSec = moveSpline.turn.RadsPerSec; + movementSpline.TurnData = turn; + } + if (splineFlags.HasFlag(MoveSplineFlagEnum.FadeObject)) movementSpline.FadeObjectTime = (uint)moveSpline.effect_start_time; @@ -1431,6 +1449,20 @@ namespace Game.Networking.Packets } } + public class MonsterSplineTurnData + { + public float StartFacing; + public float TotalTurnRads; + public float RadsPerSec; + + public void Write(WorldPacket data) + { + data.WriteFloat(StartFacing); + data.WriteFloat(TotalTurnRads); + data.WriteFloat(RadsPerSec); + } + } + public struct MonsterSplineAnimTierTransition { public int TierTransitionID; @@ -1502,6 +1534,7 @@ namespace Game.Networking.Packets data.WriteBit(SplineFilter != null); data.WriteBit(SpellEffectExtraData.HasValue); data.WriteBit(JumpExtraData.HasValue); + data.WriteBit(TurnData != null); data.WriteBit(AnimTierTransition.HasValue); data.WriteBit(Unknown901 != null); data.FlushBits(); @@ -1535,6 +1568,9 @@ namespace Game.Networking.Packets if (JumpExtraData.HasValue) JumpExtraData.Value.Write(data); + if (TurnData != null) + TurnData.Write(data); + if (AnimTierTransition.HasValue) AnimTierTransition.Value.Write(data); @@ -1557,6 +1593,7 @@ namespace Game.Networking.Packets public MonsterSplineFilter SplineFilter; public MonsterSplineSpellEffectExtraData? SpellEffectExtraData; public MonsterSplineJumpExtraData? JumpExtraData; + public MonsterSplineTurnData TurnData; public MonsterSplineAnimTierTransition? AnimTierTransition; public MonsterSplineUnknown901 Unknown901; public float FaceDirection; @@ -1575,6 +1612,7 @@ namespace Game.Networking.Packets { data.WriteUInt32(Id); data.WriteBit(CrzTeleport); + data.WriteBit(StopUseFaceDirection); data.WriteBits(StopSplineStyle, 3); Move.Write(data); @@ -1582,6 +1620,7 @@ namespace Game.Networking.Packets public uint Id; public bool CrzTeleport; + public bool StopUseFaceDirection; public byte StopSplineStyle; // Determines how far from spline destination the mover is allowed to stop in place 0, 0, 3.0, 2.76, numeric_limits::max, 1.1, float(INT_MAX); default before this field existed was distance 3.0 (index 2) public MovementSpline Move; } diff --git a/Source/Game/Networking/Packets/PartyPackets.cs b/Source/Game/Networking/Packets/PartyPackets.cs index 26270a381..ab6e7c353 100644 --- a/Source/Game/Networking/Packets/PartyPackets.cs +++ b/Source/Game/Networking/Packets/PartyPackets.cs @@ -609,22 +609,22 @@ namespace Game.Networking.Packets class SetPartyAssignment : ClientPacket { + public int Assignment; + public byte? PartyIndex; + public ObjectGuid Target; + public bool Set; + public SetPartyAssignment(WorldPacket packet) : base(packet) { } public override void Read() { bool hasPartyIndex = _worldPacket.HasBit(); Set = _worldPacket.HasBit(); - Assignment = _worldPacket.ReadUInt8(); + Assignment = _worldPacket.ReadInt32(); Target = _worldPacket.ReadPackedGuid(); if (hasPartyIndex) PartyIndex = _worldPacket.ReadUInt8(); } - - public byte Assignment; - public byte? PartyIndex; - public ObjectGuid Target; - public bool Set; } class DoReadyCheck : ClientPacket @@ -1290,8 +1290,8 @@ namespace Game.Networking.Packets { public void Write(WorldPacket data) { - data.WriteUInt8(MyFlags); data.WriteUInt32(Slot); + data.WriteUInt8(MyFlags); data.WriteUInt32(MyRandomSlot); data.WriteUInt8(MyPartialClear); data.WriteFloat(MyGearDiff); @@ -1303,15 +1303,15 @@ namespace Game.Networking.Packets data.FlushBits(); } - public byte MyFlags; public uint Slot; - public byte BootCount; + public byte MyFlags; public uint MyRandomSlot; - public bool Aborted; public byte MyPartialClear; public float MyGearDiff; public byte MyStrangerCount; public byte MyKickVoteCount; + public byte BootCount; + public bool Aborted; public bool MyFirstReward; } diff --git a/Source/Game/Networking/Packets/SpellPackets.cs b/Source/Game/Networking/Packets/SpellPackets.cs index b50566268..4a63ad901 100644 --- a/Source/Game/Networking/Packets/SpellPackets.cs +++ b/Source/Game/Networking/Packets/SpellPackets.cs @@ -1464,7 +1464,8 @@ namespace Game.Networking.Packets var contentTuning = CliDB.ContentTuningStorage.LookupByKey(creatureDifficulty.ContentTuningID); if (contentTuning != null) { - ScalingHealthItemLevelCurveID = (uint)contentTuning.HealthItemLevelCurveID; + ScalingHealthItemLevelCurveID = contentTuning.HealthItemLevelCurveID; + ScalingHealthPrimaryStatCurveID = contentTuning.HealthPrimaryStatCurveID; TargetContentTuningID = contentTuning.Id; } TargetLevel = (byte)target.GetLevel(); @@ -1484,7 +1485,8 @@ namespace Game.Networking.Packets var contentTuning = CliDB.ContentTuningStorage.LookupByKey(creatureDifficulty.ContentTuningID); if (contentTuning != null) { - ScalingHealthItemLevelCurveID = (uint)contentTuning.HealthItemLevelCurveID; + ScalingHealthItemLevelCurveID = contentTuning.HealthItemLevelCurveID; + ScalingHealthPrimaryStatCurveID = contentTuning.HealthPrimaryStatCurveID; TargetContentTuningID = contentTuning.Id; } TargetLevel = (byte)target.GetLevel(); @@ -1549,14 +1551,17 @@ namespace Game.Networking.Packets data.WriteFloat(PlayerItemLevel); data.WriteFloat(TargetItemLevel); data.WriteInt16(PlayerLevelDelta); - data.WriteUInt32(ScalingHealthItemLevelCurveID); + data.WriteInt32(ScalingHealthItemLevelCurveID); + data.WriteInt32(Unused1117); + data.WriteInt32(ScalingHealthPrimaryStatCurveID); data.WriteUInt8(TargetLevel); data.WriteUInt8(Expansion); data.WriteInt8(TargetScalingLevelDelta); data.WriteUInt32((uint)Flags); data.WriteUInt32(PlayerContentTuningID); data.WriteUInt32(TargetContentTuningID); - data.WriteInt32(Unused927); + data.WriteInt32(TargetHealingContentTuningID); + data.WriteFloat(PlayerPrimaryStatToExpectedRatio); data.WriteBits(TuningType, 4); data.FlushBits(); } @@ -1565,22 +1570,28 @@ namespace Game.Networking.Packets public short PlayerLevelDelta; public float PlayerItemLevel; public float TargetItemLevel; - public uint ScalingHealthItemLevelCurveID; + public int ScalingHealthItemLevelCurveID = 0; + public int Unused1117 = 0; + public int ScalingHealthPrimaryStatCurveID = 0; public byte TargetLevel; public byte Expansion; public sbyte TargetScalingLevelDelta; public ContentTuningFlags Flags = ContentTuningFlags.NoLevelScaling | ContentTuningFlags.NoItemLevelScaling; public uint PlayerContentTuningID; public uint TargetContentTuningID; - public int Unused927; + public int TargetHealingContentTuningID = 0; // direct heal only, not periodic + public float PlayerPrimaryStatToExpectedRatio = 1.0f; public enum ContentTuningType { CreatureToPlayerDamage = 1, PlayerToCreatureDamage = 2, - CreatureToCreatureDamage = 4, - PlayerToSandboxScaling = 7, // NYI - PlayerToPlayerExpectedStat = 8 + CreatureToPlayerHealing = 3, + PlayerToCreatureHealing = 4, + CreatureToCreatureDamage = 5, + CreatureToCreatureHealing = 6, + PlayerToPlayerDamage = 7, // Nyi + PlayerToPlayerHealing = 8, } public enum ContentTuningFlags diff --git a/Source/Game/Networking/Packets/SystemPackets.cs b/Source/Game/Networking/Packets/SystemPackets.cs index f911030ea..99b895aba 100644 --- a/Source/Game/Networking/Packets/SystemPackets.cs +++ b/Source/Game/Networking/Packets/SystemPackets.cs @@ -114,34 +114,12 @@ namespace Game.Networking.Packets _worldPacket.WriteBit(LobbyMatchmakerQueueFromMainlineEnabled); _worldPacket.WriteBit(CanSendLobbyMatchmakerPartyCustomizations); _worldPacket.WriteBit(AddonProfilerEnabled); + _worldPacket.WriteBit(false); // unused 11.1.7 + _worldPacket.WriteBit(false); // unused 11.1.7 _worldPacket.FlushBits(); - { - _worldPacket.WriteBit(QuickJoinConfig.ToastsDisabled); - _worldPacket.WriteFloat(QuickJoinConfig.ToastDuration); - _worldPacket.WriteFloat(QuickJoinConfig.DelayDuration); - _worldPacket.WriteFloat(QuickJoinConfig.QueueMultiplier); - _worldPacket.WriteFloat(QuickJoinConfig.PlayerMultiplier); - _worldPacket.WriteFloat(QuickJoinConfig.PlayerFriendValue); - _worldPacket.WriteFloat(QuickJoinConfig.PlayerGuildValue); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleInitialThreshold); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleDecayTime); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottlePrioritySpike); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleMinThreshold); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottlePvPPriorityNormal); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottlePvPPriorityLow); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottlePvPHonorThreshold); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleLfgListPriorityDefault); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleLfgListPriorityAbove); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleLfgListPriorityBelow); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleLfgListIlvlScalingAbove); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleLfgListIlvlScalingBelow); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleRfPriorityAbove); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleRfIlvlScalingAbove); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleDfMaxItemLevel); - _worldPacket.WriteFloat(QuickJoinConfig.ThrottleDfBestPriority); - } + QuickJoinConfig.Write(_worldPacket); if (SessionAlert.HasValue) { @@ -268,6 +246,34 @@ namespace Game.Networking.Packets public float ThrottleRfIlvlScalingAbove; public float ThrottleDfMaxItemLevel; public float ThrottleDfBestPriority; + + public void Write(WorldPacket data) + { + data.WriteFloat(ToastDuration); + data.WriteFloat(DelayDuration); + data.WriteFloat(QueueMultiplier); + data.WriteFloat(PlayerMultiplier); + data.WriteFloat(PlayerFriendValue); + data.WriteFloat(PlayerGuildValue); + data.WriteFloat(ThrottleInitialThreshold); + data.WriteFloat(ThrottleDecayTime); + data.WriteFloat(ThrottlePrioritySpike); + data.WriteFloat(ThrottleMinThreshold); + data.WriteFloat(ThrottlePvPPriorityNormal); + data.WriteFloat(ThrottlePvPPriorityLow); + data.WriteFloat(ThrottlePvPHonorThreshold); + data.WriteFloat(ThrottleLfgListPriorityDefault); + data.WriteFloat(ThrottleLfgListPriorityAbove); + data.WriteFloat(ThrottleLfgListPriorityBelow); + data.WriteFloat(ThrottleLfgListIlvlScalingAbove); + data.WriteFloat(ThrottleLfgListIlvlScalingBelow); + data.WriteFloat(ThrottleRfPriorityAbove); + data.WriteFloat(ThrottleRfIlvlScalingAbove); + data.WriteFloat(ThrottleDfMaxItemLevel); + data.WriteFloat(ThrottleDfBestPriority); + data.WriteBit(ToastsDisabled); + data.FlushBits(); + } } public struct SquelchInfo @@ -339,6 +345,10 @@ namespace Game.Networking.Packets _worldPacket.WriteBit(BNSendGameDataUseV2Services); _worldPacket.WriteBit(CharacterSelectListModeRealmless); + _worldPacket.WriteBit(WowTokenLimitedMode); + _worldPacket.WriteBit(false); // unused 11.1.7 + _worldPacket.WriteBit(false); // unused 11.1.7 + _worldPacket.WriteBit(PandarenLevelBoostAllowed); _worldPacket.FlushBits(); @@ -411,6 +421,8 @@ namespace Game.Networking.Packets public bool BNSendWhisperUseV2Services = true; ///< BNSendWhisper will send to v2.WhisperService instead of v1.NotificationService public bool BNSendGameDataUseV2Services = true; ///< BNSendGameData will send to v2.NotificationService instead of v1.NotificationService public bool CharacterSelectListModeRealmless; + public bool WowTokenLimitedMode; // classic only + public bool PandarenLevelBoostAllowed; // classic only public EuropaTicketConfig? EuropaTicketSystemStatus; public List LiveRegionCharacterCopySourceRegions = new(); public uint CommercePricePollTimeSeconds; // NYI diff --git a/Source/Game/Spells/SpellManager.cs b/Source/Game/Spells/SpellManager.cs index 6279a3314..6ac1ab9cf 100644 --- a/Source/Game/Spells/SpellManager.cs +++ b/Source/Game/Spells/SpellManager.cs @@ -4384,6 +4384,13 @@ namespace Game.Entities }); }); + // Flame Spout + ApplySpellFix([ 114685 ], spellInfo => + { + spellInfo.AttributesEx |= SpellAttr1.NoThreat; + spellInfo.AttributesEx8 |= SpellAttr8.CanAttackImmunePC; + }); + // END OF THE WANDERING ISLE SPELLS // @@ -4684,6 +4691,18 @@ namespace Game.Entities spellInfo._LoadSqrtTargetLimit(5, 0, null, 4, null, null); }); + // Keg Smash + ApplySpellFix([ 121253 ], spellInfo => + { + spellInfo._LoadSqrtTargetLimit(5, 0, null, 6, null, null); + }); + + // Odyn's Fury + ApplySpellFix([ 385060, 385061, 385062 ], spellInfo => + { + spellInfo._LoadSqrtTargetLimit(5, 0, 385059, 5, null, null); + }); + Log.outInfo(LogFilter.ServerLoading, $"Loaded SpellInfo target caps in {Time.GetMSTimeDiffToNow(oldMSTime)} ms"); }