diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index 5aa0a0e83..59bd38bbf 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -3,16 +3,16 @@ namespace Framework.Constants { - public enum AccountDataTypes + public enum AccountDataTypes : uint { - GlobalConfigCache = 0x00, - PerCharacterConfigCache = 0x01, - GlobalBindingsCache = 0x02, - PerCharacterBindingsCache = 0x03, - GlobalMacrosCache = 0x04, - PerCharacterMacrosCache = 0x05, - PerCharacterLayoutCache = 0x06, - PerCharacterChatCache = 0x07, + GlobalConfigCache = 0, + PerCharacterConfigCache = 1, + GlobalBindingsCache = 2, + PerCharacterBindingsCache = 3, + GlobalMacrosCache = 4, + PerCharacterMacrosCache = 5, + PerCharacterLayoutCache = 6, + PerCharacterChatCache = 7, GlobalTtsCache = 8, PerCharacterTtsCache = 9, GlobalFlaggedCache = 10, @@ -20,12 +20,14 @@ namespace Framework.Constants PerCharacterClickBindingsCache = 12, GlobalEditModeCache = 13, PerCharacterEditModeCache = 14, + GlobalFrontendChatSettings = 15, + GlobalCharacterListOrder = 16, - Max = 15, + Max = 17, - AllAccountDataCacheMask = 0x7FFF, - GlobalCacheMask = 0x2515, - PerCharacterCacheMask = 0x5AEA + AllAccountDataCacheMask = 0x0001FFFFu, + GlobalCacheMask = 0x0001A515u, + PerCharacterCacheMask = 0x00005AEAu } public enum TutorialAction diff --git a/Source/Framework/Constants/AuctionConst.cs b/Source/Framework/Constants/AuctionConst.cs index 33bdc5858..12adb22ba 100644 --- a/Source/Framework/Constants/AuctionConst.cs +++ b/Source/Framework/Constants/AuctionConst.cs @@ -71,7 +71,8 @@ namespace Framework.Constants Name = 1, Level = 2, Bid = 3, - Buyout = 4 + Buyout = 4, + TimeRemaining = 5 } public enum AuctionHouseBrowseMode diff --git a/Source/Framework/Constants/CliDBConst.cs b/Source/Framework/Constants/CliDBConst.cs index be002c428..518c744ce 100644 --- a/Source/Framework/Constants/CliDBConst.cs +++ b/Source/Framework/Constants/CliDBConst.cs @@ -2015,7 +2015,10 @@ namespace Framework.Constants BarbersChoice = 62, JailersTowerBuffs = 63, MajorFactionRenown = 64, - PersonalTabardVendor = 65 + PersonalTabardVendor = 65, + ForgeMaster = 66, + CharacterBanker = 67, + AccountBanker = 68, } [Flags] diff --git a/Source/Framework/Constants/CreatureConst.cs b/Source/Framework/Constants/CreatureConst.cs index 3863db629..2856a0eab 100644 --- a/Source/Framework/Constants/CreatureConst.cs +++ b/Source/Framework/Constants/CreatureConst.cs @@ -179,7 +179,7 @@ namespace Framework.Constants None = 0x00, Gossip = 0x01, // 100% QuestGiver = 0x02, // 100% - Unk1 = 0x04, + AccountBanker = 0x04, //account banker Unk2 = 0x08, Trainer = 0x10, // 100% TrainerClass = 0x20, // 100% diff --git a/Source/Framework/Constants/GossipConst.cs b/Source/Framework/Constants/GossipConst.cs index 69689c56c..c7f5acb1b 100644 --- a/Source/Framework/Constants/GossipConst.cs +++ b/Source/Framework/Constants/GossipConst.cs @@ -89,6 +89,9 @@ namespace Framework.Constants BarbersChoice = 52, MajorFactionRenown = 53, PersonalTabardVendor = 54, + ForgeMaster = 55, + CharacterBanker = 56, + AccountBanker = 57, Max } @@ -164,7 +167,8 @@ namespace Framework.Constants public enum GossipOptionFlags { None = 0x0, - QuestLabelPrepend = 0x1 + QuestLabelPrepend = 0x1, + HideOptionIDFromClient = 0x2 } [Flags] diff --git a/Source/Framework/Constants/GroupConst.cs b/Source/Framework/Constants/GroupConst.cs index 12950b38b..06254b061 100644 --- a/Source/Framework/Constants/GroupConst.cs +++ b/Source/Framework/Constants/GroupConst.cs @@ -61,7 +61,7 @@ namespace Framework.Constants EveryoneAssistant = 0x040, // Script_IsEveryoneAssistant() GuildGroup = 0x100, CrossFaction = 0x200, - RestrictPings = 0x400, + RestrictPings = 0x400, // deprecated MaskBgRaid = FakeRaid | Raid } @@ -173,4 +173,12 @@ namespace Framework.Constants ChallengeMode = 1, PlayerCountdown = 2 } + + public enum RestrictPingsTo + { + None = 0, + Lead = 1, + Assist = 2, + TankHealer = 3, + } } diff --git a/Source/Framework/Constants/ItemConst.cs b/Source/Framework/Constants/ItemConst.cs index ff0a2bd09..acc8d5791 100644 --- a/Source/Framework/Constants/ItemConst.cs +++ b/Source/Framework/Constants/ItemConst.cs @@ -11,7 +11,7 @@ namespace Framework.Constants public const int MaxGemSockets = 3; public const int MaxSpells = 5; public const int MaxStats = 10; - public const int MaxBagSize = 36; + public const int MaxBagSize = 98; public const byte NullBag = 0; public const byte NullSlot = 255; public const int MaxOutfitItems = 24; @@ -1293,7 +1293,15 @@ namespace Framework.Constants ReagentBagWrongSlot = 115,// Reagent Bags can only be placed in the reagent bag slot. SlotOnlyReagentBag = 116,// Only Reagent Bags can be placed in the reagent bag slot. ReagentBagItemType = 117,// Only Reagents can be placed in Reagent Bags. - CantBulkSellItemWithRefund = 118// Items that can be refunded can't be bulk sold. + CantBulkSellItemWithRefund = 118,// Items that can be refunded can't be bulk sold. + NoSoulboundItemInAccountBank = 119,// Soulbound items cannot be stored in the Warband Bank. + } + + public enum BankType + { + Character = 0, + Guild = 1, + Account = 2 } public enum BuyResult diff --git a/Source/Framework/Constants/MapConst.cs b/Source/Framework/Constants/MapConst.cs index 7acb3ff55..e66bb2ee0 100644 --- a/Source/Framework/Constants/MapConst.cs +++ b/Source/Framework/Constants/MapConst.cs @@ -70,11 +70,10 @@ namespace Framework.Constants public enum InstanceResetWarningType { - WarningHours = 1, // WARNING! %s is scheduled to reset in %d hour(s). - WarningMin = 2, // WARNING! %s is scheduled to reset in %d minute(s)! - WarningMinSoon = 3, // WARNING! %s is scheduled to reset in %d minute(s). Please exit the zone or you will be returned to your bind location! - Welcome = 4, // Welcome to %s. This raid instance is scheduled to reset in %s. - Expired = 5 + Welcome = 1, // Welcome to %s. Instance locks are scheduled to expire in %s. + Expired = 2, // Your instance lock for %s has expired. + WelcomeDaily = 3, // Welcome to %s. The daily reset is scheduled to occur in %s and will reset this instance. + WarningTime = 4, // any GlobalStrings tag that has 1 formattable argument, like DELVES_INSTANCE_RESET_WARNING } public enum InstanceResetMethod diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index b4fe9024a..b3c4bd1d2 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -5,35 +5,37 @@ namespace Framework.Constants { public enum ClientOpcodes : uint { - AbandonNpeResponse = 0x33f2, + AbandonNpeResponse = 0x33e9, AcceptGuildInvite = 0x35fd, - AcceptReturningPlayerPrompt = 0x339d, - AcceptSocialContract = 0x3742, + AcceptReturningPlayerPrompt = 0x33aa, + AcceptSocialContract = 0x3744, AcceptTrade = 0x315a, AcceptWargameInvite = 0x35e0, - AccountNotificationAcknowledged = 0x3731, - ActivateSoulbind = 0x33e1, + AccountBankDepositMoney = 0x342b, + AccountBankWithdrawMoney = 0x342c, + AccountNotificationAcknowledged = 0x3733, + ActivateSoulbind = 0x33d8, ActivateTaxi = 0x34b3, AddonList = 0x35d8, - AddAccountCosmetic = 0x32b7, - AddBattlenetFriend = 0x3657, - AddFriend = 0x36cb, - AddIgnore = 0x36cf, - AddToy = 0x32b6, - AdventureJournalOpenQuest = 0x3203, - AdventureJournalUpdateSuggestions = 0x33e4, - AdventureMapStartQuest = 0x3370, - AlterAppearance = 0x3505, + AddAccountCosmetic = 0x32c2, + AddBattlenetFriend = 0x3658, + AddFriend = 0x36cd, + AddIgnore = 0x36d1, + AddToy = 0x32c1, + AdventureJournalOpenQuest = 0x3206, + AdventureJournalUpdateSuggestions = 0x33db, + AdventureMapStartQuest = 0x337d, + AlterAppearance = 0x3504, AreaSpiritHealerQuery = 0x34b8, AreaSpiritHealerQueue = 0x34b9, - AreaTrigger = 0x31d7, + AreaTrigger = 0x31d9, ArtifactAddPower = 0x31aa, ArtifactSetAppearance = 0x31ac, - AssignEquipmentSetSpec = 0x320f, - AttackStop = 0x3268, - AttackSwing = 0x3267, - AuctionableTokenSell = 0x36e1, - AuctionableTokenSellAtMarketPrice = 0x36e2, + AssignEquipmentSetSpec = 0x3212, + AttackStop = 0x3270, + AttackSwing = 0x326f, + AuctionableTokenSell = 0x36e3, + AuctionableTokenSellAtMarketPrice = 0x36e4, AuctionBrowseQuery = 0x34d8, AuctionCancelCommoditiesPurchase = 0x34e0, AuctionConfirmCommoditiesPurchase = 0x34df, @@ -47,114 +49,117 @@ namespace Framework.Constants AuctionPlaceBid = 0x34d7, AuctionRemoveItem = 0x34d5, AuctionReplicateItems = 0x34d6, - AuctionRequestFavoriteList = 0x3733, + AuctionRequestFavoriteList = 0x3735, AuctionSellCommodity = 0x34e1, AuctionSellItem = 0x34d4, - AuctionSetFavoriteItem = 0x3732, + AuctionSetFavoriteItem = 0x3734, AuthContinuedSession = 0x377a, AuthSession = 0x3779, AutobankItem = 0x3997, AutobankReagent = 0x3999, AutostoreBankItem = 0x3996, AutostoreBankReagent = 0x3998, + AutoDepositAccountBank = 0x3436, AutoEquipItem = 0x399a, AutoEquipItemSlot = 0x399f, AutoGuildBankItem = 0x34bf, AutoStoreBagItem = 0x399b, AutoStoreGuildBankItem = 0x34c8, - AzeriteEmpoweredItemSelectPower = 0x3399, - AzeriteEmpoweredItemViewed = 0x337b, - AzeriteEssenceActivateEssence = 0x339b, - AzeriteEssenceUnlockMilestone = 0x339a, + AzeriteEmpoweredItemSelectPower = 0x33a6, + AzeriteEmpoweredItemViewed = 0x3388, + AzeriteEssenceActivateEssence = 0x33a8, + AzeriteEssenceUnlockMilestone = 0x33a7, BankerActivate = 0x34bb, BattlefieldLeave = 0x3173, BattlefieldList = 0x317e, BattlefieldPort = 0x353a, - BattlemasterHello = 0x32d4, - BattlemasterJoin = 0x3532, - BattlemasterJoinArena = 0x3533, + BattlemasterHello = 0x32df, + BattlemasterJoin = 0x3531, + BattlemasterJoinArena = 0x3532, BattlemasterJoinBrawl = 0x3538, - BattlemasterJoinRatedSoloShuffle = 0x3534, + BattlemasterJoinRatedBgBlitz = 0x3534, + BattlemasterJoinRatedSoloShuffle = 0x3533, BattlemasterJoinSkirmish = 0x3535, - BattlenetChallengeResponse = 0x36ce, - BattlenetRequest = 0x36f0, - BattlePayAckFailedResponse = 0x36c8, - BattlePayCancelOpenCheckout = 0x370f, - BattlePayConfirmPurchaseResponse = 0x36c7, - BattlePayDistributionAssignToTarget = 0x36be, - BattlePayDistributionAssignVas = 0x3736, - BattlePayGetProductList = 0x36b6, - BattlePayGetPurchaseList = 0x36b7, - BattlePayOpenCheckout = 0x3708, - BattlePayRequestPriceInfo = 0x3704, - BattlePayStartPurchase = 0x36c6, - BattlePayStartVasPurchase = 0x36ed, + BattlenetChallengeResponse = 0x36d0, + BattlenetRequest = 0x36f2, + BattlePayAckFailedResponse = 0x36ca, + BattlePayCancelOpenCheckout = 0x3711, + BattlePayConfirmPurchaseResponse = 0x36c9, + BattlePayDistributionAssignToTarget = 0x36c0, + BattlePayDistributionAssignVas = 0x3738, + BattlePayGetProductList = 0x36b8, + BattlePayGetPurchaseList = 0x36b9, + BattlePayOpenCheckout = 0x370a, + BattlePayRequestPriceInfo = 0x3706, + BattlePayStartPurchase = 0x36c8, + BattlePayStartVasPurchase = 0x36ef, BattlePetClearFanfare = 0x3126, - BattlePetDeletePet = 0x3622, - BattlePetDeletePetCheat = 0x3623, - BattlePetModifyName = 0x3625, - BattlePetRequestJournal = 0x3621, - BattlePetRequestJournalLock = 0x3620, - BattlePetSetBattleSlot = 0x362a, - BattlePetSetFlags = 0x362d, - BattlePetSummon = 0x3626, - BattlePetUpdateDisplayNotify = 0x31e1, - BattlePetUpdateNotify = 0x31e0, + BattlePetDeletePet = 0x3623, + BattlePetDeletePetCheat = 0x3624, + BattlePetModifyName = 0x3626, + BattlePetRequestJournal = 0x3622, + BattlePetRequestJournalLock = 0x3621, + BattlePetSetBattleSlot = 0x362b, + BattlePetSetFlags = 0x362e, + BattlePetSummon = 0x3627, + BattlePetUpdateDisplayNotify = 0x31e3, + BattlePetUpdateNotify = 0x31e2, BeginTrade = 0x3157, BinderActivate = 0x34ba, BlackMarketBidOnItem = 0x3542, BlackMarketOpen = 0x3540, BlackMarketRequestItems = 0x3541, - BonusRoll = 0x339c, - BugReport = 0x3682, + BonusRoll = 0x33a9, + BugReport = 0x3683, BusyTrade = 0x3158, + BuyAccountBankTab = 0x3597, BuyBackItem = 0x34ac, BuyBankSlot = 0x34bc, BuyItem = 0x34ab, BuyReagentBank = 0x34bd, - CageBattlePet = 0x31f3, - CalendarAddEvent = 0x367a, - CalendarCommunityInvite = 0x366e, - CalendarComplain = 0x3676, - CalendarCopyEvent = 0x3675, - CalendarEventSignUp = 0x3678, - CalendarGet = 0x366c, - CalendarGetEvent = 0x366d, - CalendarGetNumPending = 0x3677, - CalendarInvite = 0x366f, - CalendarModeratorStatus = 0x3673, - CalendarRemoveEvent = 0x3674, - CalendarRemoveInvite = 0x3670, - CalendarRsvp = 0x3671, - CalendarStatus = 0x3672, - CalendarUpdateEvent = 0x367b, + CageBattlePet = 0x31f6, + CalendarAddEvent = 0x367b, + CalendarCommunityInvite = 0x366f, + CalendarComplain = 0x3677, + CalendarCopyEvent = 0x3676, + CalendarEventSignUp = 0x3679, + CalendarGet = 0x366d, + CalendarGetEvent = 0x366e, + CalendarGetNumPending = 0x3678, + CalendarInvite = 0x3670, + CalendarModeratorStatus = 0x3674, + CalendarRemoveEvent = 0x3675, + CalendarRemoveInvite = 0x3671, + CalendarRsvp = 0x3672, + CalendarStatus = 0x3673, + CalendarUpdateEvent = 0x367c, CancelAura = 0x31ae, - CancelAutoRepeatSpell = 0x34f7, - CancelCast = 0x32bd, - CancelChannelling = 0x3280, - CancelGrowthAura = 0x3288, - CancelMasterLootRoll = 0x321b, + CancelAutoRepeatSpell = 0x34f6, + CancelCast = 0x32c8, + CancelChannelling = 0x3289, + CancelGrowthAura = 0x3291, + CancelMasterLootRoll = 0x321e, CancelModSpeedNoControlAuras = 0x31ad, - CancelMountAura = 0x329b, + CancelMountAura = 0x32a4, CancelQueuedSpell = 0x317f, - CancelTempEnchantment = 0x3502, + CancelTempEnchantment = 0x3501, CancelTrade = 0x315c, - CanDuel = 0x365f, - CanRedeemTokenForBalance = 0x3703, - CastSpell = 0x32ba, + CanDuel = 0x3660, + CanRedeemTokenForBalance = 0x3705, + CastSpell = 0x32c5, ChallengeModeRequestLeaders = 0x305e, - ChangeBagSlotFlag = 0x3354, - ChangeBankBagSlotFlag = 0x3355, - ChangeMonumentAppearance = 0x3335, - ChangeRealmTicket = 0x36f5, - ChangeSubGroup = 0x3649, - CharacterCheckUpgrade = 0x36c1, - CharacterRenameRequest = 0x36bc, - CharacterUpgradeManualUnrevokeRequest = 0x36bf, - CharacterUpgradeStart = 0x36c0, - CharCustomize = 0x3689, - CharDelete = 0x3699, - CharRaceOrFactionChange = 0x368f, + ChangeBagSlotFlag = 0x3361, + ChangeBankBagSlotFlag = 0x3362, + ChangeMonumentAppearance = 0x3342, + ChangeRealmTicket = 0x36f7, + ChangeSubGroup = 0x364a, + CharacterCheckUpgrade = 0x36c3, + CharacterRenameRequest = 0x36be, + CharacterUpgradeManualUnrevokeRequest = 0x36c1, + CharacterUpgradeStart = 0x36c2, + CharCustomize = 0x368a, + CharDelete = 0x369b, + CharRaceOrFactionChange = 0x3690, ChatAddonMessage = 0x3802, ChatAddonMessageTargeted = 0x3803, ChatCanLocalWhisperTargetRequest = 0x380a, @@ -194,298 +199,301 @@ namespace Framework.Constants ChatReportFiltered = 0x37e0, ChatReportIgnored = 0x37df, ChatUnregisterAllAddonPrefixes = 0x37e2, - CheckCharacterNameAvailability = 0x3642, - CheckIsAdventureMapPoiValid = 0x3259, - ChoiceResponse = 0x32c2, - ChromieTimeSelectExpansion = 0x33e0, - ClaimWeeklyReward = 0x33bc, - ClassTalentsDeleteConfig = 0x341b, - ClassTalentsNotifyEmptyConfig = 0x3213, - ClassTalentsNotifyValidationFailed = 0x341d, - ClassTalentsRenameConfig = 0x341a, - ClassTalentsRequestNewConfig = 0x3419, - ClassTalentsSetStarterBuildActive = 0x341e, - ClassTalentsSetUsesSharedActionBars = 0x3212, + CheckCharacterNameAvailability = 0x3643, + CheckIsAdventureMapPoiValid = 0x3261, + ChoiceResponse = 0x32cd, + ChromieTimeSelectExpansion = 0x33d7, + ClaimWeeklyReward = 0x33b4, + ClassTalentsDeleteConfig = 0x3410, + ClassTalentsNotifyEmptyConfig = 0x3216, + ClassTalentsNotifyValidationFailed = 0x3412, + ClassTalentsRenameConfig = 0x340f, + ClassTalentsRequestNewConfig = 0x340e, + ClassTalentsSetStarterBuildActive = 0x3413, + ClassTalentsSetUsesSharedActionBars = 0x3215, ClearNewAppearance = 0x3129, ClearRaidMarker = 0x31a6, ClearTradeItem = 0x315e, ClientPortGraveyard = 0x353c, CloseInteraction = 0x349a, - CloseQuestChoice = 0x32c3, - CloseRuneforgeInteraction = 0x33e8, - CloseTraitSystemInteraction = 0x341f, - ClubFinderApplicationResponse = 0x371a, - ClubFinderGetApplicantsList = 0x3718, - ClubFinderPost = 0x3715, - ClubFinderRequestClubsData = 0x371c, - ClubFinderRequestClubsList = 0x3716, - ClubFinderRequestMembershipToClub = 0x3717, - ClubFinderRequestPendingClubsList = 0x371b, - ClubFinderRequestSubscribedClubPostingIds = 0x371d, - ClubFinderRespondToApplicant = 0x3719, - ClubFinderWhisperApplicantRequest = 0x3739, - ClubPresenceSubscribe = 0x36f2, - CollectionItemSetFavorite = 0x3630, + CloseQuestChoice = 0x32ce, + CloseRuneforgeInteraction = 0x33df, + CloseTraitSystemInteraction = 0x3414, + ClubFinderApplicationResponse = 0x371c, + ClubFinderGetApplicantsList = 0x371a, + ClubFinderPost = 0x3717, + ClubFinderRequestClubsData = 0x371e, + ClubFinderRequestClubsList = 0x3718, + ClubFinderRequestMembershipToClub = 0x3719, + ClubFinderRequestPendingClubsList = 0x371d, + ClubFinderRequestSubscribedClubPostingIds = 0x371f, + ClubFinderRespondToApplicant = 0x371b, + ClubFinderWhisperApplicantRequest = 0x373b, + ClubPresenceSubscribe = 0x36f4, + CollectionItemSetFavorite = 0x3631, CommentatorEnable = 0x35f0, CommentatorEnterInstance = 0x35f4, CommentatorExitInstance = 0x35f5, CommentatorGetMapInfo = 0x35f1, CommentatorGetPlayerCooldowns = 0x35f3, CommentatorGetPlayerInfo = 0x35f2, - CommentatorSpectate = 0x3737, + CommentatorSpectate = 0x3739, CommentatorStartWargame = 0x35ef, - CommerceTokenGetCount = 0x36df, - CommerceTokenGetLog = 0x36e9, - CommerceTokenGetMarketPrice = 0x36e0, - Complaint = 0x3669, + CommerceTokenGetCount = 0x36e1, + CommerceTokenGetLog = 0x36eb, + CommerceTokenGetMarketPrice = 0x36e2, + Complaint = 0x366a, CompleteCinematic = 0x355a, - CompleteMovie = 0x34ed, + CompleteMovie = 0x34ec, ConfirmArtifactRespec = 0x31ab, - ConfirmRespecWipe = 0x3215, + ConfirmRespecWipe = 0x3218, ConnectToFailed = 0x35d4, - ConsumableTokenBuy = 0x36e4, - ConsumableTokenBuyAtMarketPrice = 0x36e5, - ConsumableTokenCanVeteranBuy = 0x36e3, - ConsumableTokenRedeem = 0x36e7, - ConsumableTokenRedeemConfirmation = 0x36e8, - ContentTrackingStartTracking = 0x342f, - ContentTrackingStopTracking = 0x3430, + ConsumableTokenBuy = 0x36e6, + ConsumableTokenBuyAtMarketPrice = 0x36e7, + ConsumableTokenCanVeteranBuy = 0x36e5, + ConsumableTokenRedeem = 0x36e9, + ConsumableTokenRedeemConfirmation = 0x36ea, + ContentTrackingStartTracking = 0x3424, + ContentTrackingStopTracking = 0x3425, ContributionContribute = 0x356f, ContributionLastUpdateRequest = 0x3570, ConversationCinematicReady = 0x355c, ConversationLineStarted = 0x355b, - ConvertRaid = 0x364b, + ConvertItemToBindToAccount = 0x3435, + ConvertRaid = 0x364c, CovenantRenownRequestCatchupState = 0x3583, - CraftingOrderCancel = 0x358e, - CraftingOrderClaim = 0x358b, + CraftingOrderCancel = 0x358f, + CraftingOrderClaim = 0x358c, CraftingOrderCreate = 0x3588, - CraftingOrderFulfill = 0x358d, + CraftingOrderFulfill = 0x358e, CraftingOrderListCrafterOrders = 0x358a, CraftingOrderListMyOrders = 0x3589, - CraftingOrderReject = 0x358f, - CraftingOrderRelease = 0x358c, - CraftingOrderReportPlayer = 0x3590, - CraftingOrderUpdateIgnoreList = 0x3591, - CreateCharacter = 0x3641, - CreateShipment = 0x3320, + CraftingOrderReject = 0x3590, + CraftingOrderRelease = 0x358d, + CraftingOrderReportPlayer = 0x3591, + CraftingOrderUpdateIgnoreList = 0x3592, + CreateCharacter = 0x3642, + CreateShipment = 0x332b, DbQueryBulk = 0x35e4, - DeclineGuildInvites = 0x352f, + DeclineGuildInvites = 0x352e, DeclinePetition = 0x3549, - DeleteEquipmentSet = 0x351b, - DelFriend = 0x36cc, - DelIgnore = 0x36d0, - DepositReagentBank = 0x335e, - DestroyItem = 0x32b0, - DfBootPlayerVote = 0x3617, - DfConfirmExpandSearch = 0x3609, - DfGetJoinStatus = 0x3615, - DfGetSystemInfo = 0x3614, - DfJoin = 0x360a, - DfLeave = 0x3613, - DfProposalResponse = 0x3608, - DfReadyCheckResponse = 0x361b, - DfSetRoles = 0x3616, - DfTeleport = 0x3618, - DiscardedTimeSyncAcks = 0x3a41, - DismissCritter = 0x3509, - DoCountdown = 0x3714, - DoMasterLootRoll = 0x321a, - DoReadyCheck = 0x3631, - DuelResponse = 0x34f2, - EjectPassenger = 0x324e, + DeleteEquipmentSet = 0x351a, + DelveTeleportOut = 0x359e, + DelFriend = 0x36ce, + DelIgnore = 0x36d2, + DepositReagentBank = 0x336b, + DestroyItem = 0x32bb, + DfBootPlayerVote = 0x3618, + DfConfirmExpandSearch = 0x360a, + DfGetJoinStatus = 0x3616, + DfGetSystemInfo = 0x3615, + DfJoin = 0x360b, + DfLeave = 0x3614, + DfProposalResponse = 0x3609, + DfReadyCheckResponse = 0x361c, + DfSetRoles = 0x3617, + DfTeleport = 0x3619, + DiscardedTimeSyncAcks = 0x3a42, + DismissCritter = 0x3508, + DoCountdown = 0x3716, + DoMasterLootRoll = 0x321d, + DoReadyCheck = 0x3632, + DuelResponse = 0x34f1, + EjectPassenger = 0x3256, Emote = 0x3556, EnableNagle = 0x377f, EnableTaxiNode = 0x34b1, - EngineSurvey = 0x36de, + EngineSurvey = 0x36e0, EnterEncryptedModeAck = 0x377b, EnumCharacters = 0x35e8, - EnumCharactersDeletedByClient = 0x36d8, - FarSight = 0x34f8, + EnumCharactersDeletedByClient = 0x36da, + FarSight = 0x34f7, GameEventDebugDisable = 0x31b2, GameEventDebugEnable = 0x31b1, - GameObjReportUse = 0x34ff, - GameObjUse = 0x34fe, - GarrisonAddFollowerHealth = 0x331b, - GarrisonAssignFollowerToBuilding = 0x3301, - GarrisonCancelConstruction = 0x32ee, - GarrisonCheckUpgradeable = 0x3350, - GarrisonCompleteMission = 0x3342, - GarrisonFullyHealAllFollowers = 0x331c, - GarrisonGenerateRecruits = 0x3304, - GarrisonGetClassSpecCategoryInfo = 0x3313, - GarrisonGetMapData = 0x331a, - GarrisonGetMissionReward = 0x3374, - GarrisonLearnTalent = 0x330f, - GarrisonMissionBonusRoll = 0x3344, - GarrisonPurchaseBuilding = 0x32ea, - GarrisonRecruitFollower = 0x3306, - GarrisonRemoveFollower = 0x3339, - GarrisonRemoveFollowerFromBuilding = 0x3302, - GarrisonRenameFollower = 0x3303, - GarrisonRequestBlueprintAndSpecializationData = 0x32e9, - GarrisonRequestShipmentInfo = 0x331e, - GarrisonResearchTalent = 0x3307, - GarrisonSetBuildingActive = 0x32eb, - GarrisonSetFollowerFavorite = 0x32ff, - GarrisonSetFollowerInactive = 0x32f7, - GarrisonSetRecruitmentPreferences = 0x3305, - GarrisonSocketTalent = 0x33f5, - GarrisonStartMission = 0x3341, - GarrisonSwapBuildings = 0x32ef, + GameObjReportUse = 0x34fe, + GameObjUse = 0x34fd, + GarrisonAddFollowerHealth = 0x3326, + GarrisonAssignFollowerToBuilding = 0x330c, + GarrisonCancelConstruction = 0x32f9, + GarrisonCheckUpgradeable = 0x335d, + GarrisonCompleteMission = 0x334f, + GarrisonFullyHealAllFollowers = 0x3327, + GarrisonGenerateRecruits = 0x330f, + GarrisonGetClassSpecCategoryInfo = 0x331e, + GarrisonGetMapData = 0x3325, + GarrisonGetMissionReward = 0x3381, + GarrisonLearnTalent = 0x331a, + GarrisonMissionBonusRoll = 0x3351, + GarrisonPurchaseBuilding = 0x32f5, + GarrisonRecruitFollower = 0x3311, + GarrisonRemoveFollower = 0x3346, + GarrisonRemoveFollowerFromBuilding = 0x330d, + GarrisonRenameFollower = 0x330e, + GarrisonRequestBlueprintAndSpecializationData = 0x32f4, + GarrisonRequestShipmentInfo = 0x3329, + GarrisonResearchTalent = 0x3312, + GarrisonSetBuildingActive = 0x32f6, + GarrisonSetFollowerFavorite = 0x330a, + GarrisonSetFollowerInactive = 0x3302, + GarrisonSetRecruitmentPreferences = 0x3310, + GarrisonSocketTalent = 0x33ec, + GarrisonStartMission = 0x334e, + GarrisonSwapBuildings = 0x32fa, GenerateRandomCharacterName = 0x35e7, - GetAccountCharacterList = 0x36b1, - GetAccountNotifications = 0x3730, - GetGarrisonInfo = 0x32e4, + GetAccountCharacterList = 0x36b3, + GetAccountNotifications = 0x3732, + GetGarrisonInfo = 0x32ef, GetItemPurchaseData = 0x3544, - GetLandingPageShipments = 0x331f, - GetMirrorImageData = 0x32b4, + GetLandingPageShipments = 0x332a, + GetMirrorImageData = 0x32bf, GetPvpOptionsEnabled = 0x35ee, - GetRafAccountInfo = 0x371e, - GetRemainingGameTime = 0x36e6, - GetTrophyList = 0x3332, - GetUndeleteCharacterCooldownStatus = 0x36da, - GetVasAccountCharacterList = 0x36eb, - GetVasTransferTargetRealmList = 0x36ec, - GmTicketAcknowledgeSurvey = 0x368d, - GmTicketGetCaseStatus = 0x368c, - GmTicketGetSystemStatus = 0x368b, + GetRafAccountInfo = 0x3720, + GetRegionwideCharacterRestrictionAndMailData = 0x375e, + GetRemainingGameTime = 0x36e8, + GetTrophyList = 0x333f, + GetUndeleteCharacterCooldownStatus = 0x36dc, + GetVasAccountCharacterList = 0x36ed, + GetVasTransferTargetRealmList = 0x36ee, + GmTicketAcknowledgeSurvey = 0x368e, + GmTicketGetCaseStatus = 0x368d, + GmTicketGetSystemStatus = 0x368c, GossipRefreshOptions = 0x3582, GossipSelectOption = 0x349b, - GuildAddBattlenetFriend = 0x5036, - GuildAddRank = 0x501b, + GuildAddBattlenetFriend = 0x5034, + GuildAddRank = 0x5019, GuildAssignMemberRank = 0x5016, - GuildAutoDeclineInvitation = 0x5018, GuildBankActivate = 0x34be, GuildBankBuyTab = 0x34cc, GuildBankDepositMoney = 0x34ce, - GuildBankLogQuery = 0x502f, + GuildBankLogQuery = 0x502d, GuildBankQueryTab = 0x34cb, - GuildBankRemainingWithdrawMoneyQuery = 0x5030, - GuildBankSetTabText = 0x5033, - GuildBankTextQuery = 0x5034, + GuildBankRemainingWithdrawMoneyQuery = 0x502e, + GuildBankSetTabText = 0x5031, + GuildBankTextQuery = 0x5032, GuildBankUpdateTab = 0x34cd, GuildBankWithdrawMoney = 0x34cf, - GuildChallengeUpdateRequest = 0x502d, - GuildChangeNameRequest = 0x502e, - GuildDeclineInvitation = 0x5017, - GuildDelete = 0x501f, - GuildDeleteRank = 0x501c, + GuildChallengeUpdateRequest = 0x502b, + GuildChangeNameRequest = 0x502c, + GuildDeclineInvitation = 0x35fe, + GuildDelete = 0x501d, + GuildDeleteRank = 0x501a, GuildDemoteMember = 0x5015, - GuildEventLogQuery = 0x5032, - GuildGetAchievementMembers = 0x5028, - GuildGetRanks = 0x5024, - GuildGetRoster = 0x502a, - GuildInviteByName = 0x3607, - GuildLeave = 0x5019, - GuildNewsUpdateSticky = 0x5025, - GuildOfficerRemoveMember = 0x501a, - GuildPermissionsQuery = 0x5031, + GuildEventLogQuery = 0x5030, + GuildGetAchievementMembers = 0x5026, + GuildGetRanks = 0x5022, + GuildGetRoster = 0x5028, + GuildInviteByName = 0x3608, + GuildLeave = 0x5017, + GuildNewsUpdateSticky = 0x5023, + GuildOfficerRemoveMember = 0x5018, + GuildPermissionsQuery = 0x502f, GuildPromoteMember = 0x5014, - GuildQueryMembersForRecipe = 0x5022, - GuildQueryMemberRecipes = 0x5020, - GuildQueryNews = 0x5023, - GuildQueryRecipes = 0x5021, - GuildReplaceGuildMaster = 0x5035, - GuildSetAchievementTracking = 0x5026, - GuildSetFocusedAchievement = 0x5027, - GuildSetGuildMaster = 0x36c3, - GuildSetMemberNote = 0x5029, - GuildSetRankPermissions = 0x501e, - GuildShiftRank = 0x501d, - GuildUpdateInfoText = 0x502c, - GuildUpdateMotdText = 0x502b, - HearthAndResurrect = 0x3517, - HideQuestChoice = 0x32c4, + GuildQueryMembersForRecipe = 0x5020, + GuildQueryMemberRecipes = 0x501e, + GuildQueryNews = 0x5021, + GuildQueryRecipes = 0x501f, + GuildReplaceGuildMaster = 0x5033, + GuildSetAchievementTracking = 0x5024, + GuildSetFocusedAchievement = 0x5025, + GuildSetGuildMaster = 0x36c5, + GuildSetMemberNote = 0x5027, + GuildSetRankPermissions = 0x501c, + GuildShiftRank = 0x501b, + GuildUpdateInfoText = 0x502a, + GuildUpdateMotdText = 0x5029, + HearthAndResurrect = 0x3516, + HideQuestChoice = 0x32cf, HotfixRequest = 0x35e5, IgnoreTrade = 0x3159, InitiateRolePoll = 0x35da, InitiateTrade = 0x3156, Inspect = 0x353e, - InstanceLockResponse = 0x351c, - IslandQueue = 0x33b8, + InstanceLockResponse = 0x351b, + IslandQueue = 0x33b0, ItemPurchaseRefund = 0x3545, - ItemTextQuery = 0x3351, - JoinPetBattleQueue = 0x31de, + ItemTextQuery = 0x335e, + JoinPetBattleQueue = 0x31e0, JoinRatedBattleground = 0x3179, - KeepAlive = 0x367c, - KeyboundOverride = 0x3230, + KeepAlive = 0x367d, + KeyboundOverride = 0x3233, LatencyReport = 0x3785, LearnPvpTalents = 0x356e, LearnTalents = 0x356c, - LeaveGroup = 0x3646, - LeavePetBattleQueue = 0x31df, - LfgListApplyToGroup = 0x360e, - LfgListCancelApplication = 0x360f, - LfgListDeclineApplicant = 0x3610, - LfgListGetStatus = 0x360c, - LfgListInviteApplicant = 0x3611, - LfgListInviteResponse = 0x3612, - LfgListJoin = 0x3397, - LfgListLeave = 0x360b, - LfgListSearch = 0x360d, - LfgListUpdateRequest = 0x3398, + LeaveGroup = 0x3647, + LeavePetBattleQueue = 0x31e1, + LfgListApplyToGroup = 0x360f, + LfgListCancelApplication = 0x3610, + LfgListDeclineApplicant = 0x3611, + LfgListGetStatus = 0x360d, + LfgListInviteApplicant = 0x3612, + LfgListInviteResponse = 0x3613, + LfgListJoin = 0x33a4, + LfgListLeave = 0x360c, + LfgListSearch = 0x360e, + LfgListUpdateRequest = 0x33a5, ListInventory = 0x34a8, - LiveRegionAccountRestore = 0x36b4, - LiveRegionCharacterCopy = 0x36b3, - LiveRegionGetAccountCharacterList = 0x36b2, - LiveRegionKeyBindingsCopy = 0x36b5, + LiveRegionAccountRestore = 0x36b6, + LiveRegionCharacterCopy = 0x36b5, + LiveRegionGetAccountCharacterList = 0x36b4, + LiveRegionKeyBindingsCopy = 0x36b7, LoadingScreenNotify = 0x35f8, - LoadSelectedTrophy = 0x3333, - LobbyMatchmakerAcceptPartyInvite = 0x373b, - LobbyMatchmakerCreateCharacter = 0x3749, - LobbyMatchmakerLeaveParty = 0x373e, - LobbyMatchmakerPartyInvite = 0x373a, - LobbyMatchmakerPartyUninvite = 0x373d, - LobbyMatchmakerRejectPartyInvite = 0x373c, - LobbyMatchmakerSetPartyPlaylistEntry = 0x373f, - LobbyMatchmakerSetPlayerReady = 0x3740, - LogoutCancel = 0x34e8, - LogoutInstant = 0x34e9, - LogoutLobbyMatchmaker = 0x3595, + LoadSelectedTrophy = 0x3340, + LobbyMatchmakerAcceptPartyInvite = 0x373d, + LobbyMatchmakerCreateCharacter = 0x374b, + LobbyMatchmakerLeaveParty = 0x3740, + LobbyMatchmakerPartyInvite = 0x373c, + LobbyMatchmakerPartyUninvite = 0x373f, + LobbyMatchmakerRejectPartyInvite = 0x373e, + LobbyMatchmakerSetPartyPlaylistEntry = 0x3741, + LobbyMatchmakerSetPlayerReady = 0x3742, + LogoutCancel = 0x34e7, + LogoutInstant = 0x34e8, + LogoutLobbyMatchmaker = 0x3596, LogoutRequest = 0x34e6, LogDisconnect = 0x377d, LogStreamingError = 0x3781, - LootItem = 0x3218, - LootMoney = 0x3217, - LootRelease = 0x321c, - LootRoll = 0x321d, - LootUnit = 0x3216, - LowLevelRaid1 = 0x369d, - LowLevelRaid2 = 0x3523, + LootItem = 0x321b, + LootMoney = 0x321a, + LootRelease = 0x321f, + LootRoll = 0x3220, + LootUnit = 0x3219, + LowLevelRaid1 = 0x369f, + LowLevelRaid2 = 0x3522, MailCreateTextItem = 0x3550, - MailDelete = 0x3232, + MailDelete = 0x3235, MailGetList = 0x354b, MailMarkAsRead = 0x354f, - MailReturnToSender = 0x3652, + MailReturnToSender = 0x3653, MailTakeItem = 0x354d, MailTakeMoney = 0x354c, - MakeContitionalAppearancePermanent = 0x3234, - MasterLootItem = 0x3219, + MakeContitionalAppearancePermanent = 0x3237, + MasterLootItem = 0x321c, MergeGuildBankItemWithGuildBankItem = 0x34c9, MergeGuildBankItemWithItem = 0x34c6, MergeItemWithGuildBankItem = 0x34c4, - MinimapPing = 0x3648, + MinimapPing = 0x3649, MissileTrajectoryCollision = 0x318a, MountClearFanfare = 0x3127, - MountSetFavorite = 0x362f, - MountSpecialAnim = 0x329c, - MoveAddImpulseAck = 0x3a50, - MoveApplyInertiaAck = 0x3a4e, + MountSetFavorite = 0x3630, + MountSpecialAnim = 0x32a5, + MoveAddImpulseAck = 0x3a51, + MoveApplyInertiaAck = 0x3a4f, MoveApplyMovementForceAck = 0x3a15, - MoveChangeTransport = 0x3a2f, - MoveChangeVehicleSeats = 0x3a34, - MoveCollisionDisableAck = 0x3a39, - MoveCollisionEnableAck = 0x3a3a, - MoveDismissVehicle = 0x3a33, + MoveChangeTransport = 0x3a30, + MoveChangeVehicleSeats = 0x3a35, + MoveCollisionDisableAck = 0x3a3a, + MoveCollisionEnableAck = 0x3a3b, + MoveDismissVehicle = 0x3a34, MoveDoubleJump = 0x39eb, MoveEnableDoubleJumpAck = 0x3a1e, + MoveEnableFullSpeedTurningAck = 0x3a65, MoveEnableSwimToFlyTransAck = 0x3a24, MoveFallLand = 0x39fb, MoveFallReset = 0x3a19, MoveFeatherFallAck = 0x3a1c, - MoveForceFlightBackSpeedChangeAck = 0x3a2e, - MoveForceFlightSpeedChangeAck = 0x3a2d, - MoveForcePitchRateChangeAck = 0x3a32, + MoveForceFlightBackSpeedChangeAck = 0x3a2f, + MoveForceFlightSpeedChangeAck = 0x3a2e, + MoveForcePitchRateChangeAck = 0x3a33, MoveForceRootAck = 0x3a0e, MoveForceRunBackSpeedChangeAck = 0x3a0c, MoveForceRunSpeedChangeAck = 0x3a0b, @@ -494,52 +502,51 @@ namespace Framework.Constants MoveForceTurnRateChangeAck = 0x3a23, MoveForceUnrootAck = 0x3a0f, MoveForceWalkSpeedChangeAck = 0x3a21, - MoveGravityDisableAck = 0x3a35, - MoveGravityEnableAck = 0x3a36, + MoveGravityDisableAck = 0x3a36, + MoveGravityEnableAck = 0x3a37, MoveGuildBankItem = 0x34c3, MoveHeartbeat = 0x3a10, MoveHoverAck = 0x3a13, - MoveInertiaDisableAck = 0x3a37, - MoveInertiaEnableAck = 0x3a38, - MoveInitActiveMoverComplete = 0x3a46, + MoveInertiaDisableAck = 0x3a38, + MoveInertiaEnableAck = 0x3a39, + MoveInitActiveMoverComplete = 0x3a47, MoveJump = 0x39ea, MoveKnockBackAck = 0x3a12, - MoveRemoveInertiaAck = 0x3a4f, + MoveRemoveInertiaAck = 0x3a50, MoveRemoveMovementForces = 0x3a17, MoveRemoveMovementForceAck = 0x3a16, - MoveSeamlessTransferComplete = 0x3a44, - MoveSetAdvFly = 0x3a52, - MoveSetAdvFlyingAddImpulseMaxSpeedAck = 0x3a58, - MoveSetAdvFlyingAirFrictionAck = 0x3a53, - MoveSetAdvFlyingBankingRateAck = 0x3a59, - MoveSetAdvFlyingDoubleJumpVelModAck = 0x3a56, - MoveSetAdvFlyingGlideStartMinHeightAck = 0x3a57, - MoveSetAdvFlyingLaunchSpeedCoefficientAck = 0x3a60, - MoveSetAdvFlyingLiftCoefficientAck = 0x3a55, - MoveSetAdvFlyingMaxVelAck = 0x3a54, - MoveSetAdvFlyingOverMaxDecelerationAck = 0x3a5e, - MoveSetAdvFlyingPitchingRateDownAck = 0x3a5a, - MoveSetAdvFlyingPitchingRateUpAck = 0x3a5b, - MoveSetAdvFlyingSurfaceFrictionAck = 0x3a5d, - MoveSetAdvFlyingTurnVelocityThresholdAck = 0x3a5c, - MoveSetCanAdvFlyAck = 0x3a51, + MoveSetAdvFly = 0x3a53, + MoveSetAdvFlyingAddImpulseMaxSpeedAck = 0x3a59, + MoveSetAdvFlyingAirFrictionAck = 0x3a54, + MoveSetAdvFlyingBankingRateAck = 0x3a5a, + MoveSetAdvFlyingDoubleJumpVelModAck = 0x3a57, + MoveSetAdvFlyingGlideStartMinHeightAck = 0x3a58, + MoveSetAdvFlyingLaunchSpeedCoefficientAck = 0x3a61, + MoveSetAdvFlyingLiftCoefficientAck = 0x3a56, + MoveSetAdvFlyingMaxVelAck = 0x3a55, + MoveSetAdvFlyingOverMaxDecelerationAck = 0x3a5f, + MoveSetAdvFlyingPitchingRateDownAck = 0x3a5b, + MoveSetAdvFlyingPitchingRateUpAck = 0x3a5c, + MoveSetAdvFlyingSurfaceFrictionAck = 0x3a5e, + MoveSetAdvFlyingTurnVelocityThresholdAck = 0x3a5d, + MoveSetCanAdvFlyAck = 0x3a52, MoveSetCanFlyAck = 0x3a27, MoveSetCanTurnWhileFallingAck = 0x3a25, - MoveSetCollisionHeightAck = 0x3a3b, + MoveSetCollisionHeightAck = 0x3a3c, MoveSetFacing = 0x3a09, - MoveSetFacingHeartbeat = 0x3a5f, - MoveSetFly = 0x3a28, + MoveSetFacingHeartbeat = 0x3a60, + MoveSetFly = 0x3a29, MoveSetIgnoreMovementForcesAck = 0x3a26, - MoveSetModMovementForceMagnitudeAck = 0x3a42, + MoveSetModMovementForceMagnitudeAck = 0x3a43, MoveSetPitch = 0x3a0a, MoveSetRunMode = 0x39f2, MoveSetTurnRateCheat = 0x3a06, MoveSetVehicleRecIdAck = 0x3a14, MoveSetWalkMode = 0x39f3, MoveSplineDone = 0x3a18, - MoveStartAscend = 0x3a29, + MoveStartAscend = 0x3a2a, MoveStartBackward = 0x39e5, - MoveStartDescend = 0x3a30, + MoveStartDescend = 0x3a31, MoveStartForward = 0x39e4, MoveStartPitchDown = 0x39f0, MoveStartPitchUp = 0x39ef, @@ -549,7 +556,7 @@ namespace Framework.Constants MoveStartTurnLeft = 0x39ec, MoveStartTurnRight = 0x39ed, MoveStop = 0x39e6, - MoveStopAscend = 0x3a2a, + MoveStopAscend = 0x3a2b, MoveStopPitch = 0x39f1, MoveStopStrafe = 0x39e9, MoveStopSwim = 0x39fd, @@ -559,48 +566,48 @@ namespace Framework.Constants MoveUpdateFallSpeed = 0x3a1a, MoveWaterWalkAck = 0x3a1d, MythicPlusRequestMapStats = 0x305d, - NeutralPlayerSelectFaction = 0x31d4, + NeutralPlayerSelectFaction = 0x31d6, NextCinematicCamera = 0x3559, ObjectUpdateFailed = 0x3180, ObjectUpdateRescued = 0x3181, - OfferPetition = 0x33df, + OfferPetition = 0x33d6, OpeningCinematic = 0x3558, - OpenItem = 0x3352, - OpenMissionNpc = 0x3315, - OpenShipmentNpc = 0x331d, - OpenTradeskillNpc = 0x3328, - OptOutOfLoot = 0x3506, - OverrideScreenFlash = 0x3530, - PartyInvite = 0x3603, - PartyInviteResponse = 0x3605, - PartyUninvite = 0x3644, - PerformItemInteraction = 0x323c, - PerksProgramItemsRefreshed = 0x3408, + OpenItem = 0x335f, + OpenMissionNpc = 0x3320, + OpenShipmentNpc = 0x3328, + OpenTradeskillNpc = 0x3333, + OptOutOfLoot = 0x3505, + OverrideScreenFlash = 0x352f, + PartyInvite = 0x3604, + PartyInviteResponse = 0x3606, + PartyUninvite = 0x3645, + PerformItemInteraction = 0x323f, + PerksProgramItemsRefreshed = 0x33fe, PerksProgramRequestPendingRewards = 0x3135, - PerksProgramRequestPurchase = 0x340a, - PerksProgramRequestRefund = 0x340b, - PerksProgramSetFrozenVendorItem = 0x340c, - PerksProgramStatusRequest = 0x3409, + PerksProgramRequestPurchase = 0x3400, + PerksProgramRequestRefund = 0x3401, + PerksProgramSetFrozenVendorItem = 0x3402, + PerksProgramStatusRequest = 0x33ff, PetitionBuy = 0x34d1, - PetitionRenameGuild = 0x36c4, + PetitionRenameGuild = 0x36c6, PetitionShowList = 0x34d0, PetitionShowSignatures = 0x34d2, PetAbandon = 0x3493, PetAbandonByNumber = 0x3494, PetAction = 0x3491, - PetBattleFinalNotify = 0x31e3, - PetBattleInput = 0x363e, - PetBattleQueueProposeMatchResult = 0x3231, - PetBattleQuitNotify = 0x31e2, - PetBattleReplaceFrontPet = 0x363f, - PetBattleRequestPvp = 0x31dc, - PetBattleRequestUpdate = 0x31dd, - PetBattleRequestWild = 0x31da, - PetBattleScriptErrorNotify = 0x31e4, - PetBattleWildLocationFail = 0x31db, + PetBattleFinalNotify = 0x31e5, + PetBattleInput = 0x363f, + PetBattleQueueProposeMatchResult = 0x3234, + PetBattleQuitNotify = 0x31e4, + PetBattleReplaceFrontPet = 0x3640, + PetBattleRequestPvp = 0x31de, + PetBattleRequestUpdate = 0x31df, + PetBattleRequestWild = 0x31dc, + PetBattleScriptErrorNotify = 0x31e6, + PetBattleWildLocationFail = 0x31dd, PetCancelAura = 0x3495, - PetCastSpell = 0x32b9, - PetRename = 0x3681, + PetCastSpell = 0x32c4, + PetRename = 0x3682, PetSetAction = 0x3490, PetSpellAutocast = 0x3496, PetStopAttack = 0x3492, @@ -608,30 +615,30 @@ namespace Framework.Constants PlayerLogin = 0x35ea, PushQuestToParty = 0x34a6, PvpLogData = 0x317c, - QueryBattlePetName = 0x328f, - QueryCorpseLocationFromClient = 0x365d, - QueryCorpseTransport = 0x365e, + QueryBattlePetName = 0x3298, + QueryCorpseLocationFromClient = 0x365e, + QueryCorpseTransport = 0x365f, QueryCountdownTimer = 0x31a9, - QueryCreature = 0x3289, - QueryGameObject = 0x328a, - QueryGarrisonPetName = 0x3290, - QueryGuildInfo = 0x3687, - QueryInspectAchievements = 0x3510, + QueryCreature = 0x3292, + QueryGameObject = 0x3293, + QueryGarrisonPetName = 0x3299, + QueryGuildInfo = 0x3688, + QueryInspectAchievements = 0x350f, QueryNextMailTime = 0x354e, - QueryNpcText = 0x328b, - QueryPageText = 0x328d, - QueryPetition = 0x3291, - QueryPetName = 0x328e, + QueryNpcText = 0x3294, + QueryPageText = 0x3296, + QueryPetition = 0x329a, + QueryPetName = 0x3297, QueryPlayerNames = 0x3786, QueryPlayerNamesForCommunity = 0x3784, QueryPlayerNameByCommunityId = 0x3783, QueryQuestCompletionNpcs = 0x3175, - QueryQuestInfo = 0x328c, + QueryQuestInfo = 0x3295, QueryQuestItemUsability = 0x3176, - QueryRealmName = 0x3686, - QueryScenarioPoi = 0x3653, + QueryRealmName = 0x3687, + QueryScenarioPoi = 0x3654, QueryTime = 0x34e5, - QueryTreasurePicker = 0x3377, + QueryTreasurePicker = 0x3384, QueryVoidStorage = 0x31a2, QuestConfirmAccept = 0x34a5, QuestGiverAcceptQuest = 0x349f, @@ -643,154 +650,157 @@ namespace Framework.Constants QuestGiverRequestReward = 0x34a2, QuestGiverStatusMultipleQuery = 0x34a4, QuestGiverStatusQuery = 0x34a3, - QuestGiverStatusTrackedQuery = 0x3593, + QuestGiverStatusTrackedQuery = 0x3594, QuestLogRemoveQuest = 0x3543, - QuestPoiQuery = 0x36ab, + QuestPoiQuery = 0x36ad, QuestPushResult = 0x34a7, - QuestSessionBeginResponse = 0x33d0, - QuestSessionRequestStart = 0x33cf, - QuestSessionRequestStop = 0x3729, + QuestSessionBeginResponse = 0x33c8, + QuestSessionRequestStart = 0x33c7, + QuestSessionRequestStop = 0x372b, QueuedMessagesEnd = 0x3780, - QuickJoinAutoAcceptRequests = 0x3701, - QuickJoinRequestInvite = 0x3700, - QuickJoinRequestInviteWithConfirmation = 0x372e, - QuickJoinRespondToInvite = 0x36ff, - QuickJoinSignalToastDisplayed = 0x36fe, - RafClaimActivityReward = 0x3514, - RafClaimNextReward = 0x371f, - RafGenerateRecruitmentLink = 0x3721, - RafUpdateRecruitmentInfo = 0x3720, - RandomRoll = 0x3651, - ReadyCheckResponse = 0x3632, - ReadItem = 0x3353, - ReclaimCorpse = 0x34eb, - RemoveNewItem = 0x337a, - RemoveRafRecruit = 0x3722, + QuickJoinAutoAcceptRequests = 0x3703, + QuickJoinRequestInvite = 0x3702, + QuickJoinRequestInviteWithConfirmation = 0x3730, + QuickJoinRespondToInvite = 0x3701, + QuickJoinSignalToastDisplayed = 0x3700, + RafClaimActivityReward = 0x3513, + RafClaimNextReward = 0x3721, + RafGenerateRecruitmentLink = 0x3723, + RafUpdateRecruitmentInfo = 0x3722, + RandomRoll = 0x3652, + ReadyCheckResponse = 0x3633, + ReadItem = 0x3360, + ReclaimCorpse = 0x34ea, + RemoveNewItem = 0x3387, + RemoveRafRecruit = 0x3724, ReorderCharacters = 0x35e9, - RepairItem = 0x34fc, - ReplaceTrophy = 0x3334, + RepairItem = 0x34fb, + ReplaceTrophy = 0x3341, RepopRequest = 0x353b, - ReportClientVariables = 0x36fb, - ReportEnabledAddons = 0x36fa, - ReportFrozenWhileLoadingMap = 0x36a3, - ReportKeybindingExecutionCounts = 0x36fc, - ReportPvpPlayerAfk = 0x3504, - ReportServerLag = 0x33c8, - ReportStuckInCombat = 0x33c9, - RequestAccountData = 0x3691, - RequestAreaPoiUpdate = 0x3379, + ReportClientVariables = 0x36fd, + ReportEnabledAddons = 0x36fc, + ReportKeybindingExecutionCounts = 0x36fe, + ReportPvpPlayerAfk = 0x3503, + ReportServerLag = 0x33c0, + ReportStuckInCombat = 0x33c1, + RequestAccountData = 0x3693, + RequestAreaPoiUpdate = 0x3386, RequestBattlefieldStatus = 0x35dc, RequestCemeteryList = 0x3177, - RequestCharacterGuildFollowInfo = 0x3688, - RequestCovenantCallings = 0x33ba, + RequestCharacterGuildFollowInfo = 0x3689, + RequestCovenantCallings = 0x33b2, RequestCrowdControlSpell = 0x353f, - RequestForcedReactions = 0x320d, - RequestGarrisonTalentWorldQuestUnlocks = 0x33f4, + RequestCurrencyDataForAccountCharacters = 0x313c, + RequestForcedReactions = 0x3210, + RequestGarrisonTalentWorldQuestUnlocks = 0x33eb, RequestGuildPartyState = 0x31a8, RequestGuildRewardsList = 0x31a7, - RequestLatestSplashScreen = 0x33ca, - RequestLfgListBlacklist = 0x32c5, - RequestMythicPlusAffixes = 0x3207, - RequestMythicPlusSeasonData = 0x3208, + RequestLatestSplashScreen = 0x33c2, + RequestLfgListBlacklist = 0x32d0, + RequestMythicPlusAffixes = 0x320a, + RequestMythicPlusSeasonData = 0x320b, RequestPartyJoinUpdates = 0x35f7, - RequestPartyMemberStats = 0x3650, + RequestPartyMemberStats = 0x3651, RequestPetInfo = 0x3497, - RequestPlayedTime = 0x3294, + RequestPlayedTime = 0x329d, RequestPvpRewards = 0x3195, - RequestRaidInfo = 0x36c5, + RequestRaidInfo = 0x36c7, RequestRatedPvpInfo = 0x35e3, - RequestRealmGuildMasterInfo = 0x5037, + RequestRealmGuildMasterInfo = 0x3761, RequestScheduledPvpInfo = 0x3196, RequestStabledPets = 0x3498, - RequestVehicleExit = 0x3249, - RequestVehicleNextSeat = 0x324b, - RequestVehiclePrevSeat = 0x324a, - RequestVehicleSwitchSeat = 0x324c, - RequestWeeklyRewards = 0x33bd, - RequestWorldQuestUpdate = 0x3378, - ResetChallengeMode = 0x3205, - ResetChallengeModeCheat = 0x3206, - ResetInstances = 0x3665, - ResurrectResponse = 0x3680, - RevertMonumentAppearance = 0x3336, - RideVehicleInteract = 0x324d, - RpeResetCharacter = 0x374c, - SaveAccountDataExport = 0x3746, + RequestVehicleExit = 0x3251, + RequestVehicleNextSeat = 0x3253, + RequestVehiclePrevSeat = 0x3252, + RequestVehicleSwitchSeat = 0x3254, + RequestWeeklyRewards = 0x33b5, + RequestWorldQuestUpdate = 0x3385, + ResetChallengeMode = 0x3208, + ResetChallengeModeCheat = 0x3209, + ResetInstances = 0x3666, + ResurrectResponse = 0x3681, + RevertMonumentAppearance = 0x3343, + RideVehicleInteract = 0x3255, + RpeResetCharacter = 0x374e, + SaveAccountDataExport = 0x3748, SaveCufProfiles = 0x318b, - SaveEquipmentSet = 0x351a, - SaveGuildEmblem = 0x32c9, - SavePersonalEmblem = 0x32ca, - ScenePlaybackCanceled = 0x322d, - ScenePlaybackComplete = 0x322c, - SceneTriggerEvent = 0x322e, + SaveEquipmentSet = 0x3519, + SaveGuildEmblem = 0x32d4, + SavePersonalEmblem = 0x32d5, + ScenePlaybackCanceled = 0x3230, + ScenePlaybackComplete = 0x322f, + SceneTriggerEvent = 0x3231, + SeamlessTransferComplete = 0x3427, SelfRes = 0x3546, SellAllJunkItems = 0x34aa, SellItem = 0x34a9, - SendCharacterClubInvitation = 0x36f4, - SendContactList = 0x36ca, + SendCharacterClubInvitation = 0x36f6, + SendContactList = 0x36cc, SendMail = 0x35fa, - SendPingUnit = 0x3433, - SendPingWorldPoint = 0x3434, + SendPingUnit = 0x3429, + SendPingWorldPoint = 0x342a, SendTextEmote = 0x348e, - ServerTimeOffsetRequest = 0x3698, - SetAchievementsHidden = 0x3233, + ServerTimeOffsetRequest = 0x369a, + SetupWarbandGroups = 0x375c, + SetAchievementsHidden = 0x3236, SetActionBarToggles = 0x3547, - SetActionButton = 0x3633, - SetActiveMover = 0x3a3c, - SetAdvancedCombatLogging = 0x32d7, - SetAssistantLeader = 0x364c, - SetBackpackAutosortDisabled = 0x3356, - SetBackpackSellJunkDisabled = 0x3357, - SetBankAutosortDisabled = 0x3358, - SetContactNotes = 0x36cd, + SetActionButton = 0x3634, + SetActiveMover = 0x3a3d, + SetAdvancedCombatLogging = 0x32e2, + SetAssistantLeader = 0x364d, + SetBackpackAutosortDisabled = 0x3363, + SetBackpackSellJunkDisabled = 0x3364, + SetBankAutosortDisabled = 0x3365, + SetContactNotes = 0x36cf, SetCurrencyFlags = 0x3169, - SetDifficultyId = 0x322f, - SetDungeonDifficulty = 0x367f, - SetEmpowerMinHoldStagePercent = 0x3283, - SetEveryoneIsAssistant = 0x3619, - SetExcludedChatCensorSources = 0x3702, - SetFactionAtWar = 0x34ee, - SetFactionInactive = 0x34f0, - SetFactionNotAtWar = 0x34ef, + SetDifficultyId = 0x3232, + SetDungeonDifficulty = 0x3680, + SetEmpowerMinHoldStagePercent = 0x328c, + SetEveryoneIsAssistant = 0x361a, + SetExcludedChatCensorSources = 0x3704, + SetFactionAtWar = 0x34ed, + SetFactionInactive = 0x34ef, + SetFactionNotAtWar = 0x34ee, SetGameEventDebugViewState = 0x31b9, - SetInsertItemsLeftToRight = 0x335a, - SetLootMethod = 0x3645, + SetInsertItemsLeftToRight = 0x3367, + SetLootMethod = 0x3646, SetLootSpecialization = 0x3554, - SetPartyAssignment = 0x364e, - SetPartyLeader = 0x3647, + SetPartyAssignment = 0x364f, + SetPartyLeader = 0x3648, SetPetFavorite = 0x3168, SetPetSlot = 0x3167, - SetPlayerDeclinedNames = 0x3685, + SetPlayerDeclinedNames = 0x3686, SetPreferredCemetery = 0x3178, - SetPvp = 0x32ce, - SetRaidDifficulty = 0x36d6, - SetRestrictPingsToAssistants = 0x361a, + SetPvp = 0x32d9, + SetRaidDifficulty = 0x36d8, + SetRestrictPingsToAssistants = 0x361b, SetRole = 0x35d9, - SetSavedInstanceExtend = 0x3683, + SetSavedInstanceExtend = 0x3684, SetSelection = 0x353d, SetSheathed = 0x348f, - SetSortBagsRightToLeft = 0x3359, - SetTaxiBenchmarkMode = 0x3503, - SetTitle = 0x329a, + SetSortBagsRightToLeft = 0x3366, + SetTaxiBenchmarkMode = 0x3502, + SetTitle = 0x32a3, SetTradeCurrency = 0x3160, SetTradeGold = 0x315f, SetTradeItem = 0x315d, - SetUsingPartyGarrison = 0x3317, - SetWarMode = 0x32cf, - SetWatchedFaction = 0x34f1, - ShowTradeSkill = 0x36bd, + SetUsingPartyGarrison = 0x3322, + SetWarMode = 0x32da, + SetWatchedFaction = 0x34f0, + ShowTradeSkill = 0x36bf, SignPetition = 0x3548, - SilencePartyTalker = 0x364f, - SocialContractRequest = 0x3741, - SocketGems = 0x34fb, - SortBags = 0x335b, - SortBankBags = 0x335c, - SortReagentBankBags = 0x335d, - SpawnTrackingUpdate = 0x32af, - SpectateChange = 0x342b, + SilencePartyTalker = 0x3650, + SocialContractRequest = 0x3743, + SocketGems = 0x34fa, + SortAccountBankBags = 0x342d, + SortBags = 0x3368, + SortBankBags = 0x3369, + SortReagentBankBags = 0x336a, + SpawnTrackingUpdate = 0x32b8, + SpectateChange = 0x3420, SpellClick = 0x349c, - SpellEmpowerRelease = 0x3281, - SpellEmpowerRestart = 0x3282, + SpellEmpowerRelease = 0x328a, + SpellEmpowerRestart = 0x328b, SpiritHealerActivate = 0x34b7, SplitGuildBankItem = 0x34ca, SplitGuildBankItemToInventory = 0x34c7, @@ -801,10 +811,10 @@ namespace Framework.Constants StartSpectatorWarGame = 0x35df, StartWarGame = 0x35de, StoreGuildBankItem = 0x34c0, - SubmitUserFeedback = 0x3690, - SubscriptionInterstitialResponse = 0x33e9, - SummonResponse = 0x3667, - SupportTicketSubmitComplaint = 0x3643, + SubmitUserFeedback = 0x3692, + SubscriptionInterstitialResponse = 0x33e0, + SummonResponse = 0x3668, + SupportTicketSubmitComplaint = 0x3644, SurrenderArena = 0x3174, SuspendCommsAck = 0x3778, SuspendTokenResponse = 0x377e, @@ -812,63 +822,65 @@ namespace Framework.Constants SwapInvItem = 0x399d, SwapItem = 0x399c, SwapItemWithGuildBankItem = 0x34c1, - SwapSubGroups = 0x364a, + SwapSubGroups = 0x364b, SwapVoidItem = 0x31a4, - TabardVendorActivate = 0x32cb, + TabardVendorActivate = 0x32d6, TalkToGossip = 0x3499, TaxiNodeStatusQuery = 0x34b0, TaxiQueryAvailableNodes = 0x34b2, TaxiRequestEarlyLanding = 0x34b4, - TimeAdjustmentResponse = 0x3a40, - TimeSyncResponse = 0x3a3d, - TimeSyncResponseDropped = 0x3a3f, - TimeSyncResponseFailed = 0x3a3e, - ToggleDifficulty = 0x3654, - TogglePvp = 0x32cd, - TotemDestroyed = 0x3508, + TimeAdjustmentResponse = 0x3a41, + TimeSyncResponse = 0x3a3e, + TimeSyncResponseDropped = 0x3a40, + TimeSyncResponseFailed = 0x3a3f, + ToggleDifficulty = 0x3655, + TogglePvp = 0x32d8, + TotemDestroyed = 0x3507, ToyClearFanfare = 0x3128, - TradeSkillSetFavorite = 0x3376, + TradeSkillSetFavorite = 0x3383, TrainerBuySpell = 0x34b6, TrainerList = 0x34b5, - TraitsCommitConfig = 0x3413, - TraitsTalentTestUnlearnSpells = 0x3411, + TraitsCommitConfig = 0x3408, + TraitsTalentTestUnlearnSpells = 0x3406, + TransferCurrencyFromAccountCharacter = 0x3437, TransmogrifyItems = 0x3197, TurnInPetition = 0x354a, - Tutorial = 0x36d7, - UiMapQuestLinesRequest = 0x33b9, + Tutorial = 0x36d9, + UiMapQuestLinesRequest = 0x33b1, UnacceptTrade = 0x315b, - UndeleteCharacter = 0x36d9, - UnlearnSkill = 0x34f5, + UndeleteCharacter = 0x36db, + UnlearnSkill = 0x34f4, UnlearnSpecialization = 0x31a5, UnlockVoidStorage = 0x31a1, - UpdateAadcStatus = 0x3735, - UpdateAccountData = 0x3692, - UpdateAreaTriggerVisual = 0x32bc, - UpdateClientSettings = 0x3661, - UpdateCraftingNpcRecipes = 0x3329, - UpdateMissileTrajectory = 0x3a43, - UpdateRaidTarget = 0x364d, - UpdateSpellVisual = 0x32bb, - UpdateVasPurchaseStates = 0x36ee, - UpgradeGarrison = 0x32df, - UpgradeRuneforgeLegendary = 0x33e7, + UpdateAadcStatus = 0x3737, + UpdateAccountBankTabSettings = 0x359d, + UpdateAccountData = 0x3694, + UpdateAreaTriggerVisual = 0x32c7, + UpdateClientSettings = 0x3662, + UpdateCraftingNpcRecipes = 0x3334, + UpdateMissileTrajectory = 0x3a44, + UpdateRaidTarget = 0x364e, + UpdateSpellVisual = 0x32c6, + UpdateVasPurchaseStates = 0x36f0, + UpgradeGarrison = 0x32ea, + UpgradeRuneforgeLegendary = 0x33de, UsedFollow = 0x3186, - UseCritterItem = 0x3253, + UseCritterItem = 0x325b, UseEquipmentSet = 0x3995, - UseItem = 0x32b5, - UseToy = 0x32b8, - VasCheckTransferOk = 0x3707, - VasGetQueueMinutes = 0x3706, - VasGetServiceStatus = 0x3705, + UseItem = 0x32c0, + UseToy = 0x32c3, + VasCheckTransferOk = 0x3709, + VasGetQueueMinutes = 0x3708, + VasGetServiceStatus = 0x3707, ViolenceLevel = 0x3184, - VoiceChannelSttTokenRequest = 0x370b, - VoiceChatJoinChannel = 0x370c, - VoiceChatLogin = 0x370a, + VoiceChannelSttTokenRequest = 0x370d, + VoiceChatJoinChannel = 0x370e, + VoiceChatLogin = 0x370c, VoidStorageTransfer = 0x31a3, Warden3Data = 0x35ec, - Who = 0x367e, - WhoIs = 0x367d, - WorldLootObjectClick = 0x342e, + Who = 0x367f, + WhoIs = 0x367e, + WorldLootObjectClick = 0x3423, WorldPortResponse = 0x35f9, WrapItem = 0x3994, @@ -878,90 +890,92 @@ namespace Framework.Constants public enum ServerOpcodes : uint { - AbortNewWorld = 0x2599, - AccountCosmeticAdded = 0x2879, - AccountCriteriaUpdate = 0x285f, - AccountDataTimes = 0x2709, - AccountExportResponse = 0x28b6, - AccountMountRemoved = 0x25b0, - AccountMountUpdate = 0x25af, - AccountNotificationsResponse = 0x2878, - AccountToyUpdate = 0x25b1, - AccountTransmogSetFavoritesUpdate = 0x25b5, - AccountTransmogUpdate = 0x25b4, - AchievementDeleted = 0x26e7, - AchievementEarned = 0x2642, - ActivateEssenceFailed = 0x3015, - ActivateSoulbindFailed = 0x3017, - ActivateTaxiReply = 0x267e, + AbortNewWorld = 0x259b, + AccountCharacterCurrencyLists = 0x28a1, + AccountConversionStateUpdate = 0x28a6, + AccountCosmeticAdded = 0x2864, + AccountCriteriaUpdate = 0x284b, + AccountDataTimes = 0x270c, + AccountExportResponse = 0x2892, + AccountMountRemoved = 0x25b2, + AccountMountUpdate = 0x25b1, + AccountNotificationsResponse = 0x2863, + AccountToyUpdate = 0x25b3, + AccountTransmogSetFavoritesUpdate = 0x25b7, + AccountTransmogUpdate = 0x25b6, + AchievementDeleted = 0x26ea, + AchievementEarned = 0x2644, + ActivateEssenceFailed = 0x3017, + ActivateSoulbindFailed = 0x3019, + ActivateTaxiReply = 0x2681, ActiveGlyphs = 0x2c56, - ActiveScheduledWorldStateInfo = 0x2745, - AddonListRequest = 0x2641, - AddBattlenetFriendResponse = 0x263c, - AddItemPassive = 0x25ab, - AddLossOfControl = 0x2672, - AddRunePower = 0x26b8, - AdjustSplineDuration = 0x25d1, - AdvancedCombatLog = 0x2875, - AdventureJournalDataResponse = 0x286f, - AeLootTargets = 0x2617, - AeLootTargetAck = 0x2618, - AiReaction = 0x26b5, - AlliedRaceDetails = 0x27f3, + ActiveScheduledWorldStateInfo = 0x2748, + AddonListRequest = 0x2643, + AddBattlenetFriendResponse = 0x263e, + AddItemPassive = 0x25ad, + AddLossOfControl = 0x2674, + AddRunePower = 0x26bb, + AdjustSplineDuration = 0x25d3, + AdvancedCombatLog = 0x2860, + AdventureJournalDataResponse = 0x285b, + AeLootTargets = 0x2619, + AeLootTargetAck = 0x261a, + AiReaction = 0x26b8, + AlliedRaceDetails = 0x27f6, AllAccountCriteria = 0x2571, AllAchievementData = 0x2570, AllGuildAchievements = 0x29b8, - ApplyMountEquipmentResult = 0x284c, - ArchaeologySurveryCast = 0x2587, + ApplyMountEquipmentResult = 0x2839, + ArchaeologySurveryCast = 0x2589, AreaPoiUpdateResponse = 0x3010, - AreaSpiritHealerTime = 0x273e, + AreaSpiritHealerTime = 0x2741, AreaTriggerDenied = 0x2903, AreaTriggerForceSetPositionAndFacing = 0x2900, - AreaTriggerNoCorpse = 0x2715, + AreaTriggerNoCorpse = 0x2718, AreaTriggerPlaySpellVisual = 0x28fe, AreaTriggerRePath = 0x28fd, AreaTriggerReShape = 0x2902, AreaTriggerUnattach = 0x2901, AreaTriggerUpdateDecalProperties = 0x28ff, - ArenaClearOpponents = 0x2648, - ArenaCrowdControlSpellResult = 0x2631, - ArenaPrepOpponentSpecializations = 0x2647, - ArtifactEndgamePowersRefunded = 0x279f, - ArtifactForgeError = 0x279d, - ArtifactRespecPrompt = 0x279e, - ArtifactXpGain = 0x27e6, + ArenaClearOpponents = 0x264a, + ArenaCrowdControlSpellResult = 0x2633, + ArenaPrepOpponentSpecializations = 0x2649, + ArtifactEndgamePowersRefunded = 0x27a2, + ArtifactForgeError = 0x27a0, + ArtifactRespecPrompt = 0x27a1, + ArtifactXpGain = 0x27e9, AttackerStateUpdate = 0x294e, AttackStart = 0x2939, AttackStop = 0x293a, AttackSwingError = 0x2948, AttackSwingLandedLog = 0x2949, - AuctionableTokenAuctionSold = 0x27cf, - AuctionableTokenSellAtMarketPriceResponse = 0x27ce, - AuctionableTokenSellConfirmRequired = 0x27cd, - AuctionClosedNotification = 0x26f2, - AuctionCommandResult = 0x26ef, - AuctionDisableNewPostings = 0x2896, - AuctionFavoriteList = 0x2866, - AuctionGetCommodityQuoteResult = 0x285d, - AuctionHelloResponse = 0x26ed, - AuctionListBiddedItemsResult = 0x285c, - AuctionListBucketsResult = 0x2859, - AuctionListItemsResult = 0x285a, - AuctionListOwnedItemsResult = 0x285b, - AuctionOutbidNotification = 0x26f1, - AuctionOwnerBidNotification = 0x26f3, - AuctionReplicateResponse = 0x26ee, - AuctionWonNotification = 0x26f0, + AuctionableTokenAuctionSold = 0x27d2, + AuctionableTokenSellAtMarketPriceResponse = 0x27d1, + AuctionableTokenSellConfirmRequired = 0x27d0, + AuctionClosedNotification = 0x26f5, + AuctionCommandResult = 0x26f2, + AuctionDisableNewPostings = 0x287f, + AuctionFavoriteList = 0x2852, + AuctionGetCommodityQuoteResult = 0x284a, + AuctionHelloResponse = 0x26f0, + AuctionListBiddedItemsResult = 0x2849, + AuctionListBucketsResult = 0x2846, + AuctionListItemsResult = 0x2847, + AuctionListOwnedItemsResult = 0x2848, + AuctionOutbidNotification = 0x26f4, + AuctionOwnerBidNotification = 0x26f6, + AuctionReplicateResponse = 0x26f1, + AuctionWonNotification = 0x26f3, AuraPointsDepleted = 0x2c22, AuraUpdate = 0x2c21, AuthChallenge = 0x3048, AuthFailed = 0x256c, AuthResponse = 0x256d, AvailableHotfixes = 0x290f, - BackpackDefaultSizeChanged = 0x289b, + BackpackDefaultSizeChanged = 0x2880, BagCleanupFinished = 0x2da7, - BarberShopResult = 0x26bd, - BatchPresenceSubscription = 0x283d, + BarberShopResult = 0x26c0, + BatchPresenceSubscription = 0x282a, BattlefieldList = 0x2927, BattlefieldPortDenied = 0x292d, BattlefieldStatusActive = 0x2923, @@ -977,117 +991,119 @@ namespace Framework.Constants BattlegroundPlayerLeft = 0x292c, BattlegroundPlayerPositions = 0x2928, BattlegroundPoints = 0x294a, - BattlenetChallengeAbort = 0x2787, - BattlenetChallengeStart = 0x2786, - BattlenetNotification = 0x27ff, - BattlenetResponse = 0x27fe, - BattleNetConnectionStatus = 0x2800, - BattlePayAckFailed = 0x2782, - BattlePayBattlePetDelivered = 0x2777, - BattlePayCollectionItemDelivered = 0x2778, - BattlePayConfirmPurchase = 0x2781, - BattlePayDeliveryEnded = 0x2775, - BattlePayDeliveryStarted = 0x2774, - BattlePayDistributionAssignVasResponse = 0x287e, - BattlePayDistributionUnrevoked = 0x2772, - BattlePayDistributionUpdate = 0x2773, - BattlePayGetDistributionListResponse = 0x2771, - BattlePayGetProductListResponse = 0x276f, - BattlePayGetPurchaseListResponse = 0x2770, - BattlePayMountDelivered = 0x2776, - BattlePayPurchaseUpdate = 0x2780, - BattlePayStartCheckout = 0x281b, - BattlePayStartDistributionAssignToTargetResponse = 0x277e, - BattlePayStartPurchaseResponse = 0x277d, - BattlePayValidatePurchaseResponse = 0x280f, - BattlePetsHealed = 0x25f3, - BattlePetCageDateError = 0x2679, - BattlePetDeleted = 0x25f0, - BattlePetError = 0x2637, - BattlePetJournal = 0x25ef, - BattlePetJournalLockAcquired = 0x25ed, - BattlePetJournalLockDenied = 0x25ee, - BattlePetRestored = 0x25f2, - BattlePetRevoked = 0x25f1, - BattlePetTrapLevel = 0x25eb, - BattlePetUpdates = 0x25ea, + BattlenetChallengeAbort = 0x278a, + BattlenetChallengeStart = 0x2789, + BattlenetNotification = 0x2802, + BattlenetResponse = 0x2801, + BattleNetConnectionStatus = 0x2803, + BattlePayAckFailed = 0x2785, + BattlePayBattlePetDelivered = 0x277a, + BattlePayCollectionItemDelivered = 0x277b, + BattlePayConfirmPurchase = 0x2784, + BattlePayDeliveryEnded = 0x2778, + BattlePayDeliveryStarted = 0x2777, + BattlePayDistributionAssignVasResponse = 0x2869, + BattlePayDistributionUnrevoked = 0x2775, + BattlePayDistributionUpdate = 0x2776, + BattlePayGetDistributionListResponse = 0x2774, + BattlePayGetProductListResponse = 0x2772, + BattlePayGetPurchaseListResponse = 0x2773, + BattlePayMountDelivered = 0x2779, + BattlePayPurchaseUpdate = 0x2783, + BattlePayStartCheckout = 0x281e, + BattlePayStartDistributionAssignToTargetResponse = 0x2781, + BattlePayStartPurchaseResponse = 0x2780, + BattlePayValidatePurchaseResponse = 0x2812, + BattlePetsHealed = 0x25f5, + BattlePetCageDateError = 0x267c, + BattlePetDeleted = 0x25f2, + BattlePetError = 0x2639, + BattlePetJournal = 0x25f1, + BattlePetJournalLockAcquired = 0x25ef, + BattlePetJournalLockDenied = 0x25f0, + BattlePetRestored = 0x25f4, + BattlePetRevoked = 0x25f3, + BattlePetTrapLevel = 0x25ed, + BattlePetUpdates = 0x25ec, BindPointUpdate = 0x257d, - BlackMarketBidOnItemResult = 0x2627, - BlackMarketOutbid = 0x2628, - BlackMarketRequestItemsResult = 0x2626, - BlackMarketWon = 0x2629, - BonusRollEmpty = 0x2644, + BlackMarketBidOnItemResult = 0x2629, + BlackMarketOutbid = 0x262a, + BlackMarketRequestItemsResult = 0x2628, + BlackMarketWon = 0x262b, + BonusRollEmpty = 0x2646, BossKill = 0x294d, BreakTarget = 0x2938, BroadcastAchievement = 0x2bbc, - BroadcastSummonCast = 0x283f, - BroadcastSummonResponse = 0x2840, - BuyFailed = 0x26c6, - BuySucceeded = 0x26c5, + BroadcastSummonCast = 0x282c, + BroadcastSummonResponse = 0x282d, + BuyFailed = 0x26c9, + BuySucceeded = 0x26c8, CacheInfo = 0x291d, CacheVersion = 0x291c, - CalendarClearPendingAction = 0x269e, - CalendarCommandResult = 0x269f, - CalendarCommunityInvite = 0x268e, - CalendarEventRemovedAlert = 0x2696, - CalendarEventUpdatedAlert = 0x2697, - CalendarInviteAdded = 0x268f, - CalendarInviteAlert = 0x2693, - CalendarInviteNotes = 0x2698, - CalendarInviteNotesAlert = 0x2699, - CalendarInviteRemoved = 0x2690, - CalendarInviteRemovedAlert = 0x2695, - CalendarInviteStatus = 0x2691, - CalendarInviteStatusAlert = 0x2694, - CalendarModeratorStatus = 0x2692, - CalendarRaidLockoutAdded = 0x269a, - CalendarRaidLockoutRemoved = 0x269b, - CalendarRaidLockoutUpdated = 0x269c, - CalendarSendCalendar = 0x268c, - CalendarSendEvent = 0x268d, - CalendarSendNumPending = 0x269d, - CameraEffect = 0x2724, - CancelAutoRepeat = 0x26dd, + CalendarClearPendingAction = 0x26a1, + CalendarCommandResult = 0x26a2, + CalendarCommunityInvite = 0x2691, + CalendarEventRemovedAlert = 0x2699, + CalendarEventUpdatedAlert = 0x269a, + CalendarInviteAdded = 0x2692, + CalendarInviteAlert = 0x2696, + CalendarInviteNotes = 0x269b, + CalendarInviteNotesAlert = 0x269c, + CalendarInviteRemoved = 0x2693, + CalendarInviteRemovedAlert = 0x2698, + CalendarInviteStatus = 0x2694, + CalendarInviteStatusAlert = 0x2697, + CalendarModeratorStatus = 0x2695, + CalendarRaidLockoutAdded = 0x269d, + CalendarRaidLockoutRemoved = 0x269e, + CalendarRaidLockoutUpdated = 0x269f, + CalendarSendCalendar = 0x268f, + CalendarSendEvent = 0x2690, + CalendarSendNumPending = 0x26a0, + CameraEffect = 0x2727, + CancelAutoRepeat = 0x26e0, CancelCombat = 0x2947, CancelOrphanSpellVisual = 0x2c48, - CancelPingPin = 0x25a4, - CancelPreloadWorld = 0x2597, - CancelScene = 0x2636, + CancelPingPin = 0x25a6, + CancelPreloadWorld = 0x2599, + CancelScene = 0x2638, CancelSpellVisual = 0x2c46, CancelSpellVisualKit = 0x2c4a, CanDuelResult = 0x2943, - CanRedeemTokenForBalanceResponse = 0x280e, + CanRedeemTokenForBalanceResponse = 0x2811, CapturePointRemoved = 0x292a, CastFailed = 0x2c59, - ChainMissileBounce = 0x25c9, - ChallengeModeComplete = 0x260a, - ChallengeModeRequestLeadersResult = 0x260f, - ChallengeModeReset = 0x2609, - ChallengeModeStart = 0x2607, - ChallengeModeUpdateDeathCount = 0x2608, + CasRefreshRemoteData = 0x267a, + ChainMissileBounce = 0x25cb, + ChallengeModeComplete = 0x260c, + ChallengeModeRequestLeadersResult = 0x2611, + ChallengeModeReset = 0x260b, + ChallengeModeStart = 0x2609, + ChallengeModeUpdateDeathCount = 0x260a, ChangePlayerDifficultyResult = 0x3004, - ChangeRealmTicketResponse = 0x2801, + ChangeRealmTicketResponse = 0x2804, ChannelList = 0x2bc4, ChannelNotify = 0x2bc1, ChannelNotifyJoined = 0x2bc2, ChannelNotifyLeft = 0x2bc3, - CharacterCheckUpgradeResult = 0x27ba, - CharacterLoginFailed = 0x2704, - CharacterObjectTestResponse = 0x2785, - CharacterRenameResult = 0x2761, - CharacterUpgradeAborted = 0x27b9, - CharacterUpgradeComplete = 0x27b8, - CharacterUpgradeManualUnrevokeResult = 0x27bb, - CharacterUpgradeStarted = 0x27b7, - CharCustomizeFailure = 0x26e1, - CharCustomizeSuccess = 0x26e2, - CharFactionChangeResult = 0x27a4, + CharacterCheckUpgradeResult = 0x27bd, + CharacterLoginFailed = 0x2707, + CharacterObjectTestResponse = 0x2788, + CharacterRenameResult = 0x2764, + CharacterUpgradeAborted = 0x27bc, + CharacterUpgradeComplete = 0x27bb, + CharacterUpgradeManualUnrevokeResult = 0x27be, + CharacterUpgradeStarted = 0x27ba, + CharCustomizeFailure = 0x26e4, + CharCustomizeSuccess = 0x26e5, + CharFactionChangeResult = 0x27a7, Chat = 0x2bad, ChatAutoResponded = 0x2bb8, ChatCanLocalWhisperTargetResponse = 0x2bcb, ChatDown = 0x2bbe, ChatIgnoredAccountMuted = 0x2bac, ChatIsDown = 0x2bbf, + ChatNotInGuild = 0x2bcc, ChatNotInParty = 0x2bb2, ChatPlayerAmbiguous = 0x2bb0, ChatPlayerNotfound = 0x2bb7, @@ -1096,99 +1112,102 @@ namespace Framework.Constants ChatRestricted = 0x2bb3, ChatServerMessage = 0x2bc5, CheatIgnoreDimishingReturns = 0x2c12, - CheckAbandonNpe = 0x3018, - CheckCharacterNameAvailabilityResult = 0x2585, - CheckWargameEntry = 0x2591, - ChromieTimeSelectExpansionSuccess = 0x2869, - ClaimRafRewardResponse = 0x2850, + CheckAbandonNpe = 0x301a, + CheckCharacterNameAvailabilityResult = 0x2587, + CheckWargameEntry = 0x2593, + ChromieTimeSelectExpansionSuccess = 0x2855, + ClaimRafRewardResponse = 0x283d, ClearAllSpellCharges = 0x2c26, - ClearBossEmotes = 0x25bc, - ClearCooldown = 0x26ba, + ClearBossEmotes = 0x25be, + ClearCooldown = 0x26bd, ClearCooldowns = 0x2c25, ClearResurrect = 0x257f, ClearSpellCharges = 0x2c27, ClearTarget = 0x2944, - ClearTreasurePickerCache = 0x2aa1, - CloseArtifactForge = 0x279c, - ClubFinderErrorMessage = 0x2848, - ClubFinderGetClubPostingIdsResponse = 0x284b, - ClubFinderLookupClubPostingsList = 0x2849, - ClubFinderResponseCharacterApplicationList = 0x2846, - ClubFinderResponsePostRecruitmentMessage = 0x284a, - ClubFinderUpdateApplications = 0x2847, - ClubFinderWhisperApplicantResponse = 0x288c, - CoinRemoved = 0x2616, + ClearTreasurePickerCache = 0x2aa2, + CloseArtifactForge = 0x279f, + ClubFinderErrorMessage = 0x2835, + ClubFinderGetClubPostingIdsResponse = 0x2838, + ClubFinderLookupClubPostingsList = 0x2836, + ClubFinderResponseCharacterApplicationList = 0x2833, + ClubFinderResponsePostRecruitmentMessage = 0x2837, + ClubFinderUpdateApplications = 0x2834, + ClubFinderWhisperApplicantResponse = 0x2875, + CoinRemoved = 0x2618, CombatEventFailed = 0x293b, - CommentatorMapInfo = 0x2706, - CommentatorPlayerInfo = 0x2707, - CommentatorStateChanged = 0x2705, - CommerceTokenGetCountResponse = 0x27ca, - CommerceTokenGetLogResponse = 0x27d6, - CommerceTokenGetMarketPriceResponse = 0x27cc, - CommerceTokenUpdate = 0x27cb, - ComplaintResult = 0x26ac, - CompleteShipmentResponse = 0x2795, - ConfirmPartyInvite = 0x280d, + CommentatorMapInfo = 0x2709, + CommentatorPlayerInfo = 0x270a, + CommentatorStateChanged = 0x2708, + CommerceTokenGetCountResponse = 0x27cd, + CommerceTokenGetLogResponse = 0x27d9, + CommerceTokenGetMarketPriceResponse = 0x27cf, + CommerceTokenUpdate = 0x27ce, + ComplaintResult = 0x26af, + CompleteShipmentResponse = 0x2798, + ConfirmPartyInvite = 0x2810, ConnectTo = 0x304d, - ConsoleWrite = 0x2634, - ConsumableTokenBuyAtMarketPriceResponse = 0x27d2, - ConsumableTokenBuyChoiceRequired = 0x27d1, - ConsumableTokenCanVeteranBuyResponse = 0x27d0, - ConsumableTokenRedeemConfirmRequired = 0x27d4, - ConsumableTokenRedeemResponse = 0x27d5, - ContactList = 0x2783, - ContributionLastUpdateResponse = 0x2814, - ControlUpdate = 0x2646, - ConvertItemsToCurrencyValue = 0x2872, - CooldownCheat = 0x2737, - CooldownEvent = 0x26b9, - CorpseLocation = 0x264e, - CorpseReclaimDelay = 0x2748, - CorpseTransportQuery = 0x2711, - CovenantCallingsAvailabilityResponse = 0x2aa3, - CovenantPreviewOpenNpc = 0x27f6, - CovenantRenownSendCatchupState = 0x2873, - CraftingHouseHelloResponse = 0x28a9, - CraftingOrderCancelResult = 0x28a5, - CraftingOrderClaimResult = 0x28a1, - CraftingOrderCraftResult = 0x28a3, - CraftingOrderCreateResult = 0x289f, - CraftingOrderFulfillResult = 0x28a4, - CraftingOrderListOrdersResponse = 0x28a0, - CraftingOrderRejectResult = 0x28a7, - CraftingOrderReleaseResult = 0x28a2, - CraftingOrderUpdateState = 0x28aa, - CraftEnchantResult = 0x28a8, - CreateChar = 0x2700, - CreateShipmentResponse = 0x2794, - CreatorVisualsOverride = 0x28ad, - CriteriaDeleted = 0x26e6, - CriteriaUpdate = 0x26e0, - CrossedInebriationThreshold = 0x26c1, - CustomLoadScreen = 0x25cc, + ConsoleWrite = 0x2636, + ConsumableTokenBuyAtMarketPriceResponse = 0x27d5, + ConsumableTokenBuyChoiceRequired = 0x27d4, + ConsumableTokenCanVeteranBuyResponse = 0x27d3, + ConsumableTokenRedeemConfirmRequired = 0x27d7, + ConsumableTokenRedeemResponse = 0x27d8, + ContactList = 0x2786, + ContributionLastUpdateResponse = 0x2817, + ControlUpdate = 0x2648, + ConvertItemsToCurrencyValue = 0x285e, + CooldownCheat = 0x273a, + CooldownEvent = 0x26bc, + CorpseLocation = 0x2650, + CorpseReclaimDelay = 0x274b, + CorpseTransportQuery = 0x2714, + CovenantCallingsAvailabilityResponse = 0x2aa4, + CovenantPreviewOpenNpc = 0x27f9, + CovenantRenownSendCatchupState = 0x285f, + CraftingHouseHelloResponse = 0x288c, + CraftingOrderCancelResult = 0x2888, + CraftingOrderClaimResult = 0x2884, + CraftingOrderCraftResult = 0x2886, + CraftingOrderCreateResult = 0x2882, + CraftingOrderFulfillResult = 0x2887, + CraftingOrderListOrdersResponse = 0x2883, + CraftingOrderNpcRewardInfo = 0x288e, + CraftingOrderRejectResult = 0x288a, + CraftingOrderReleaseResult = 0x2885, + CraftingOrderUpdateState = 0x288d, + CraftEnchantResult = 0x288b, + CreateChar = 0x2703, + CreateShipmentResponse = 0x2797, + CreatorVisualsOverride = 0x2891, + CriteriaDeleted = 0x26e9, + CriteriaUpdate = 0x26e3, + CrossedInebriationThreshold = 0x26c4, + CurrencyTransferLog = 0x28a3, + CurrencyTransferResult = 0x28a2, + CustomLoadScreen = 0x25ce, DailyQuestsReset = 0x2a80, DamageCalcLog = 0x2c65, DbReply = 0x290e, - DeathReleaseLoc = 0x26d3, - DebugMenuManagerFullUpdate = 0x2656, + DeathReleaseLoc = 0x26d6, + DebugMenuManagerFullUpdate = 0x2658, DefenseMessage = 0x2bb6, - DeleteChar = 0x2701, + DeleteChar = 0x2704, DeleteExpiredMissionsResult = 0x2980, - DestroyArenaUnit = 0x2740, - DestructibleBuildingDamage = 0x26f8, - DifferentInstanceFromParty = 0x258a, - DisenchantCredit = 0x25a8, + DestroyArenaUnit = 0x2743, + DestructibleBuildingDamage = 0x26fb, + DifferentInstanceFromParty = 0x258c, + DisenchantCredit = 0x25aa, DismountResult = 0x257c, DispelFailed = 0x2c2f, - DisplayGameError = 0x259e, + DisplayGameError = 0x25a0, DisplayPlayerChoice = 0x2ffc, - DisplayPromotion = 0x264b, + DisplayPromotion = 0x264d, DisplayQuestPopup = 0x2a9e, - DisplaySoulbindUpdateMessage = 0x2877, - DisplayToast = 0x2623, - DisplayWorldText = 0x27e7, + DisplaySoulbindUpdateMessage = 0x2862, + DisplayToast = 0x2625, + DisplayWorldText = 0x27ea, DisplayWorldTextOnTarget = 0x2c64, - DontAutoPushSpellsToActionBar = 0x25e1, + DontAutoPushSpellsToActionBar = 0x25e3, DropNewConnection = 0x304c, DuelArranged = 0x293d, DuelComplete = 0x2941, @@ -1197,53 +1216,53 @@ namespace Framework.Constants DuelOutOfBounds = 0x293e, DuelRequested = 0x293c, DuelWinner = 0x2942, - DurabilityDamageDeath = 0x2743, - Emote = 0x27c1, - EnableBarberShop = 0x26bc, - EnchantmentLog = 0x2712, - EncounterEnd = 0x277c, - EncounterStart = 0x277b, - EndLightningStorm = 0x26a9, - EnsureWorldLoaded = 0x2886, + DurabilityDamageDeath = 0x2746, + Emote = 0x27c4, + EnableBarberShop = 0x26bf, + EnchantmentLog = 0x2715, + EncounterEnd = 0x277f, + EncounterStart = 0x277e, + EndLightningStorm = 0x26ac, EnterEncryptedMode = 0x3049, EnumCharactersResult = 0x2584, - EnumVasPurchaseStatesResponse = 0x27ec, + EnumVasPurchaseStatesResponse = 0x27ef, EnvironmentalDamageLog = 0x2c1e, - EquipmentSetId = 0x26b2, + EquipmentSetId = 0x26b5, ExpectedSpamRecords = 0x2bb1, - ExplorationExperience = 0x275d, - ExternalTransactionIdGenerated = 0x2870, - FactionBonusInfo = 0x2723, + ExplorationExperience = 0x2760, + ExternalTransactionIdGenerated = 0x285c, + FactionBonusInfo = 0x2726, FailedPlayerCondition = 0x2ffa, - FailedQuestTurnIn = 0x280a, - FeatureSystemStatus = 0x25c0, - FeatureSystemStatus2 = 0x28c1, - FeatureSystemStatusGlueScreen = 0x25c1, - FeignDeathResisted = 0x2742, - FishEscaped = 0x26d0, - FishNotHooked = 0x26cf, - FlightSplineSync = 0x2e2b, + FailedQuestTurnIn = 0x280d, + FeatureSystemStatus = 0x25c2, + FeatureSystemStatus2 = 0x28a0, + FeatureSystemStatusGlueScreen = 0x25c3, + FeignDeathResisted = 0x2745, + FishEscaped = 0x26d3, + FishNotHooked = 0x26d2, + FlightSplineSync = 0x2e2d, FlushCombatLogFile = 0x2c20, - ForcedDeathUpdate = 0x26d4, - ForceAnim = 0x274f, - ForceAnimations = 0x2750, - ForceObjectRelink = 0x264a, - ForceRandomTransmogToast = 0x25b3, - FriendStatus = 0x2784, - GainMawPower = 0x27db, - GameObjectActivateAnimKit = 0x25c4, - GameObjectBase = 0x2821, - GameObjectCloseInteraction = 0x288a, - GameObjectCustomAnim = 0x25c5, - GameObjectDespawn = 0x25c6, - GameObjectInteraction = 0x2889, + ForcedDeathUpdate = 0x26d7, + ForceAnim = 0x2752, + ForceAnimations = 0x2753, + ForceObjectRelink = 0x264c, + ForceRandomTransmogToast = 0x25b5, + ForceSpawnTrackingUpdate = 0x2aa1, + FriendStatus = 0x2787, + GainMawPower = 0x27de, + GameObjectActivateAnimKit = 0x25c6, + GameObjectBase = 0x2824, + GameObjectCloseInteraction = 0x2874, + GameObjectCustomAnim = 0x25c7, + GameObjectDespawn = 0x25c8, + GameObjectInteraction = 0x2873, GameObjectPlaySpellVisual = 0x2c4d, GameObjectPlaySpellVisualKit = 0x2c4c, - GameObjectResetState = 0x271d, - GameObjectSetStateLocal = 0x27fd, - GameSpeedSet = 0x2682, - GameTimeSet = 0x270b, - GameTimeUpdate = 0x270a, + GameObjectResetState = 0x2720, + GameObjectSetStateLocal = 0x2800, + GameSpeedSet = 0x2685, + GameTimeSet = 0x270e, + GameTimeUpdate = 0x270d, GarrisonActivateMissionBonusAbility = 0x2982, GarrisonAddEvent = 0x29a6, GarrisonAddFollowerResult = 0x2974, @@ -1314,37 +1333,37 @@ namespace Framework.Constants GarrisonUpdateMissionCheatResult = 0x29ae, GarrisonUpgradeResult = 0x296b, GarrisonUseRecallPortalResult = 0x297d, - GenerateRandomCharacterNameResult = 0x2586, - GenerateSsoTokenResponse = 0x2815, - GetAccountCharacterListResult = 0x275f, + GenerateRandomCharacterNameResult = 0x2588, + GenerateSsoTokenResponse = 0x2818, + GetAccountCharacterListResult = 0x2762, GetGarrisonInfoResult = 0x295e, - GetLandingPageShipmentsResponse = 0x2797, - GetRealmHiddenResult = 0x28bb, - GetRemainingGameTimeResponse = 0x27d3, - GetSelectedTrophyIdResponse = 0x27bf, - GetShipmentsOfTypeResponse = 0x2796, - GetShipmentInfoResponse = 0x2792, - GetTrophyListResponse = 0x27be, - GetVasAccountCharacterListResult = 0x27e8, - GetVasTransferTargetRealmListResult = 0x27e9, + GetLandingPageShipmentsResponse = 0x279a, + GetRealmHiddenResult = 0x2897, + GetRemainingGameTimeResponse = 0x27d6, + GetSelectedTrophyIdResponse = 0x27c2, + GetShipmentsOfTypeResponse = 0x2799, + GetShipmentInfoResponse = 0x2795, + GetTrophyListResponse = 0x27c1, + GetVasAccountCharacterListResult = 0x27eb, + GetVasTransferTargetRealmListResult = 0x27ec, GmPlayerInfo = 0x3005, GmRequestPlayerInfo = 0x2ffb, - GmTicketCaseStatus = 0x26a4, - GmTicketSystemStatus = 0x26a3, - GodMode = 0x26fb, + GmTicketCaseStatus = 0x26a7, + GmTicketSystemStatus = 0x26a6, + GodMode = 0x26fe, GossipComplete = 0x2a97, GossipMessage = 0x2a98, - GossipOptionNpcInteraction = 0x2aa7, - GossipPoi = 0x278f, + GossipOptionNpcInteraction = 0x2aa8, + GossipPoi = 0x2792, GossipQuestUpdate = 0x2a99, - GossipRefreshOptions = 0x2aa6, - GroupActionThrottled = 0x258e, - GroupAutoKick = 0x278c, - GroupDecline = 0x2788, - GroupDestroyed = 0x278b, - GroupNewLeader = 0x262c, - GroupRequestDecline = 0x2789, - GroupUninvite = 0x278a, + GossipRefreshOptions = 0x2aa7, + GroupActionThrottled = 0x2590, + GroupAutoKick = 0x278f, + GroupDecline = 0x278b, + GroupDestroyed = 0x278e, + GroupNewLeader = 0x262e, + GroupRequestDecline = 0x278c, + GroupUninvite = 0x278d, GuildAchievementDeleted = 0x29c6, GuildAchievementEarned = 0x29c5, GuildAchievementMembers = 0x29c8, @@ -1375,6 +1394,7 @@ namespace Framework.Constants GuildEventTabModified = 0x29f6, GuildEventTabTextChanged = 0x29f7, GuildFlaggedForRename = 0x29dd, + GuildHardcoreMemberDeath = 0x29bd, GuildInvite = 0x29cb, GuildInviteDeclined = 0x29e9, GuildInviteExpired = 0x29ea, @@ -1398,59 +1418,60 @@ namespace Framework.Constants GuildRoster = 0x29bb, GuildRosterUpdate = 0x29bc, GuildSendRankChange = 0x29b9, - HealthUpdate = 0x26d1, - HighestThreatUpdate = 0x26d9, + HardcoreDeathAlert = 0x289f, + HealthUpdate = 0x26d4, + HighestThreatUpdate = 0x26dc, HotfixConnect = 0x2911, HotfixMessage = 0x2910, - InitializeFactions = 0x2722, + InitializeFactions = 0x2725, InitialSetup = 0x2580, - InitWorldStates = 0x2744, - InspectResult = 0x2630, - InstanceEncounterChangePriority = 0x27aa, - InstanceEncounterDisengageUnit = 0x27a9, - InstanceEncounterEnd = 0x27b2, - InstanceEncounterEngageUnit = 0x27a8, - InstanceEncounterGainCombatResurrectionCharge = 0x27b4, - InstanceEncounterInCombatResurrection = 0x27b3, - InstanceEncounterObjectiveComplete = 0x27ad, - InstanceEncounterObjectiveStart = 0x27ac, - InstanceEncounterObjectiveUpdate = 0x27b1, - InstanceEncounterPhaseShiftChanged = 0x27b5, - InstanceEncounterStart = 0x27ae, - InstanceEncounterTimerStart = 0x27ab, - InstanceEncounterUpdateAllowReleaseInProgress = 0x27b0, - InstanceEncounterUpdateSuppressRelease = 0x27af, - InstanceGroupSizeChanged = 0x26f9, - InstanceInfo = 0x2633, - InstanceReset = 0x2687, - InstanceResetFailed = 0x2688, - InstanceSaveCreated = 0x277a, + InitWorldStates = 0x2747, + InspectResult = 0x2632, + InstanceEncounterChangePriority = 0x27ad, + InstanceEncounterDisengageUnit = 0x27ac, + InstanceEncounterEnd = 0x27b5, + InstanceEncounterEngageUnit = 0x27ab, + InstanceEncounterGainCombatResurrectionCharge = 0x27b7, + InstanceEncounterInCombatResurrection = 0x27b6, + InstanceEncounterObjectiveComplete = 0x27b0, + InstanceEncounterObjectiveStart = 0x27af, + InstanceEncounterObjectiveUpdate = 0x27b4, + InstanceEncounterPhaseShiftChanged = 0x27b8, + InstanceEncounterStart = 0x27b1, + InstanceEncounterTimerStart = 0x27ae, + InstanceEncounterUpdateAllowReleaseInProgress = 0x27b3, + InstanceEncounterUpdateSuppressRelease = 0x27b2, + InstanceGroupSizeChanged = 0x26fc, + InstanceInfo = 0x2635, + InstanceReset = 0x268a, + InstanceResetFailed = 0x268b, + InstanceSaveCreated = 0x277d, InterruptPowerRegen = 0x2c5b, InvalidatePageText = 0x2918, InvalidatePlayer = 0x2fff, - InvalidPromotionCode = 0x2751, + InvalidPromotionCode = 0x2754, InventoryChangeFailure = 0x2da5, - InventoryFixupComplete = 0x280c, - InventoryFullOverflow = 0x281d, - IslandAzeriteGain = 0x275a, - IslandComplete = 0x275b, + InventoryFixupComplete = 0x280f, + InventoryFullOverflow = 0x2820, + IslandAzeriteGain = 0x275d, + IslandComplete = 0x275e, IsQuestCompleteResponse = 0x2a84, - ItemChanged = 0x26ea, - ItemCooldown = 0x27c0, - ItemEnchantTimeUpdate = 0x2753, - ItemExpirePurchaseRefund = 0x259d, - ItemInteractionComplete = 0x2868, - ItemPurchaseRefundResult = 0x259b, - ItemPushResult = 0x2622, - ItemTimeUpdate = 0x2752, - KickReason = 0x268a, - LatencyReportPing = 0x287a, + ItemChanged = 0x26ed, + ItemCooldown = 0x27c3, + ItemEnchantTimeUpdate = 0x2756, + ItemExpirePurchaseRefund = 0x259f, + ItemInteractionComplete = 0x2854, + ItemPurchaseRefundResult = 0x259d, + ItemPushResult = 0x2624, + ItemTimeUpdate = 0x2755, + KickReason = 0x268d, + LatencyReportPing = 0x2865, LearnedSpells = 0x2c4f, - LearnPvpTalentFailed = 0x25d5, - LearnTalentFailed = 0x25d4, - LegacyLootRules = 0x2822, - LevelLinkingResult = 0x284e, - LevelUpInfo = 0x26e8, + LearnPvpTalentFailed = 0x25d7, + LearnTalentFailed = 0x25d6, + LegacyLootRules = 0x2825, + LevelLinkingResult = 0x283b, + LevelUpInfo = 0x26eb, LfgBootPlayer = 0x2a35, LfgDisabled = 0x2a33, LfgExpandSearchPrompt = 0x2a3b, @@ -1478,89 +1499,91 @@ namespace Framework.Constants LfgSlotInvalid = 0x2a30, LfgTeleportDenied = 0x2a32, LfgUpdateStatus = 0x2a24, - LiveRegionAccountRestoreResult = 0x276c, - LiveRegionCharacterCopyResult = 0x276b, - LiveRegionGetAccountCharacterListResult = 0x2760, - LiveRegionKeyBindingsCopyResult = 0x276d, - LoadCufProfiles = 0x25bd, - LoadEquipmentSet = 0x270d, - LobbyMatchmakerLobbyAcquiredServer = 0x288d, - LobbyMatchmakerPartyInfo = 0x288e, - LobbyMatchmakerPartyInviteRejected = 0x288f, - LobbyMatchmakerReceiveInvite = 0x2890, - LoginSetTimeSpeed = 0x270c, - LoginVerifyWorld = 0x2598, - LogoutCancelAck = 0x2686, - LogoutComplete = 0x2685, - LogoutResponse = 0x2684, - LogXpGain = 0x26e4, - LootAllPassed = 0x2620, - LootList = 0x273f, - LootMoneyNotify = 0x261b, - LootRelease = 0x261a, - LootReleaseAll = 0x2619, - LootRemoved = 0x2615, - LootResponse = 0x2614, - LootRoll = 0x261d, - LootRollsComplete = 0x261f, - LootRollWon = 0x2621, - LossOfControlAuraUpdate = 0x2671, - MailCommandResult = 0x263a, - MailListResult = 0x2754, - MailQueryNextTimeResult = 0x2755, + LiveRegionAccountRestoreResult = 0x276f, + LiveRegionCharacterCopyResult = 0x276e, + LiveRegionGetAccountCharacterListResult = 0x2763, + LiveRegionKeyBindingsCopyResult = 0x2770, + LoadCufProfiles = 0x25bf, + LoadEquipmentSet = 0x2710, + LobbyMatchmakerLobbyAcquiredServer = 0x2876, + LobbyMatchmakerPartyInfo = 0x2877, + LobbyMatchmakerPartyInviteRejected = 0x2878, + LobbyMatchmakerReceiveInvite = 0x2879, + LoginSetTimeSpeed = 0x270f, + LoginVerifyWorld = 0x259a, + LogoutCancelAck = 0x2689, + LogoutComplete = 0x2688, + LogoutResponse = 0x2687, + LogXpGain = 0x26e7, + LootAllPassed = 0x2622, + LootList = 0x2742, + LootMoneyNotify = 0x261d, + LootRelease = 0x261c, + LootReleaseAll = 0x261b, + LootRemoved = 0x2617, + LootResponse = 0x2616, + LootRoll = 0x261f, + LootRollsComplete = 0x2621, + LootRollWon = 0x2623, + LossOfControlAuraUpdate = 0x2673, + MailCommandResult = 0x263c, + MailListResult = 0x2757, + MailQueryNextTimeResult = 0x2758, MapObjectivesInit = 0x294c, - MapObjEvents = 0x25c7, - MasterLootCandidateList = 0x261e, - MeetingStoneFailed = 0x2891, + MapObjEvents = 0x25c9, + MasterLootCandidateList = 0x2620, + MeetingStoneFailed = 0x287a, MessageBox = 0x2576, - MinimapPing = 0x26ce, + MinimapPing = 0x26d1, MirrorImageComponentedData = 0x2c14, MirrorImageCreatureData = 0x2c13, - MissileCancel = 0x25c8, - ModifyCooldown = 0x2762, + MissileCancel = 0x25ca, + ModifyCooldown = 0x2765, MountResult = 0x257b, - MovementEnforcementAlert = 0x283e, - MoveAddImpulse = 0x2e32, - MoveApplyInertia = 0x2e2e, - MoveApplyMovementForce = 0x2e15, - MoveDisableCollision = 0x2e11, + MovementEnforcementAlert = 0x282b, + MoveAddImpulse = 0x2e34, + MoveApplyInertia = 0x2e30, + MoveApplyMovementForce = 0x2e17, + MoveDisableCollision = 0x2e13, MoveDisableDoubleJump = 0x2dfd, - MoveDisableGravity = 0x2e0d, - MoveDisableInertia = 0x2e0f, - MoveDisableTransitionBetweenSwimAndFly = 0x2e0c, - MoveEnableCollision = 0x2e12, + MoveDisableFullSpeedTurning = 0x2e47, + MoveDisableGravity = 0x2e0f, + MoveDisableInertia = 0x2e11, + MoveDisableTransitionBetweenSwimAndFly = 0x2e0e, + MoveEnableCollision = 0x2e14, MoveEnableDoubleJump = 0x2dfc, - MoveEnableGravity = 0x2e0e, - MoveEnableInertia = 0x2e10, - MoveEnableTransitionBetweenSwimAndFly = 0x2e0b, + MoveEnableFullSpeedTurning = 0x2e46, + MoveEnableGravity = 0x2e10, + MoveEnableInertia = 0x2e12, + MoveEnableTransitionBetweenSwimAndFly = 0x2e0d, MoveKnockBack = 0x2e03, - MoveRemoveInertia = 0x2e2f, - MoveRemoveMovementForce = 0x2e16, + MoveRemoveInertia = 0x2e31, + MoveRemoveMovementForce = 0x2e18, MoveRoot = 0x2df9, MoveSetActiveMover = 0x2dd5, - MoveSetAdvFlyingAddImpulseMaxSpeed = 0x2e3b, - MoveSetAdvFlyingAirFriction = 0x2e36, - MoveSetAdvFlyingBankingRate = 0x2e3c, - MoveSetAdvFlyingDoubleJumpVelMod = 0x2e39, - MoveSetAdvFlyingGlideStartMinHeight = 0x2e3a, - MoveSetAdvFlyingLaunchSpeedCoefficient = 0x2e42, - MoveSetAdvFlyingLiftCoefficient = 0x2e38, - MoveSetAdvFlyingMaxVel = 0x2e37, - MoveSetAdvFlyingOverMaxDeceleration = 0x2e41, - MoveSetAdvFlyingPitchingRateDown = 0x2e3d, - MoveSetAdvFlyingPitchingRateUp = 0x2e3e, - MoveSetAdvFlyingSurfaceFriction = 0x2e40, - MoveSetAdvFlyingTurnVelocityThreshold = 0x2e3f, - MoveSetCanAdvFly = 0x2e34, + MoveSetAdvFlyingAddImpulseMaxSpeed = 0x2e3d, + MoveSetAdvFlyingAirFriction = 0x2e38, + MoveSetAdvFlyingBankingRate = 0x2e3e, + MoveSetAdvFlyingDoubleJumpVelMod = 0x2e3b, + MoveSetAdvFlyingGlideStartMinHeight = 0x2e3c, + MoveSetAdvFlyingLaunchSpeedCoefficient = 0x2e44, + MoveSetAdvFlyingLiftCoefficient = 0x2e3a, + MoveSetAdvFlyingMaxVel = 0x2e39, + MoveSetAdvFlyingOverMaxDeceleration = 0x2e43, + MoveSetAdvFlyingPitchingRateDown = 0x2e3f, + MoveSetAdvFlyingPitchingRateUp = 0x2e40, + MoveSetAdvFlyingSurfaceFriction = 0x2e42, + MoveSetAdvFlyingTurnVelocityThreshold = 0x2e41, + MoveSetCanAdvFly = 0x2e36, MoveSetCanFly = 0x2e05, - MoveSetCanTurnWhileFalling = 0x2e07, - MoveSetCollisionHeight = 0x2e13, - MoveSetCompoundState = 0x2e17, + MoveSetCanTurnWhileFalling = 0x2e09, + MoveSetCollisionHeight = 0x2e15, + MoveSetCompoundState = 0x2e19, MoveSetFeatherFall = 0x2dff, MoveSetFlightBackSpeed = 0x2df5, MoveSetFlightSpeed = 0x2df4, MoveSetHovering = 0x2e01, - MoveSetIgnoreMovementForces = 0x2e09, + MoveSetIgnoreMovementForces = 0x2e0b, MoveSetLandWalk = 0x2dfe, MoveSetModMovementForceMagnitude = 0x2de6, MoveSetNormalFall = 0x2e00, @@ -1570,47 +1593,47 @@ namespace Framework.Constants MoveSetSwimBackSpeed = 0x2df3, MoveSetSwimSpeed = 0x2df2, MoveSetTurnRate = 0x2df7, - MoveSetVehicleRecId = 0x2e14, + MoveSetVehicleRecId = 0x2e16, MoveSetWalkSpeed = 0x2df6, MoveSetWaterWalk = 0x2dfb, - MoveSkipTime = 0x2e18, - MoveSplineDisableCollision = 0x2e1d, - MoveSplineDisableGravity = 0x2e1b, - MoveSplineEnableCollision = 0x2e1e, - MoveSplineEnableGravity = 0x2e1c, - MoveSplineRoot = 0x2e19, - MoveSplineSetFeatherFall = 0x2e1f, + MoveSkipTime = 0x2e1a, + MoveSplineDisableCollision = 0x2e1f, + MoveSplineDisableGravity = 0x2e1d, + MoveSplineEnableCollision = 0x2e20, + MoveSplineEnableGravity = 0x2e1e, + MoveSplineRoot = 0x2e1b, + MoveSplineSetFeatherFall = 0x2e21, MoveSplineSetFlightBackSpeed = 0x2dec, MoveSplineSetFlightSpeed = 0x2deb, - MoveSplineSetFlying = 0x2e29, - MoveSplineSetHover = 0x2e21, - MoveSplineSetLandWalk = 0x2e24, - MoveSplineSetNormalFall = 0x2e20, + MoveSplineSetFlying = 0x2e2b, + MoveSplineSetHover = 0x2e23, + MoveSplineSetLandWalk = 0x2e26, + MoveSplineSetNormalFall = 0x2e22, MoveSplineSetPitchRate = 0x2def, MoveSplineSetRunBackSpeed = 0x2de8, - MoveSplineSetRunMode = 0x2e27, + MoveSplineSetRunMode = 0x2e29, MoveSplineSetRunSpeed = 0x2de7, MoveSplineSetSwimBackSpeed = 0x2dea, MoveSplineSetSwimSpeed = 0x2de9, MoveSplineSetTurnRate = 0x2dee, - MoveSplineSetWalkMode = 0x2e28, + MoveSplineSetWalkMode = 0x2e2a, MoveSplineSetWalkSpeed = 0x2ded, - MoveSplineSetWaterWalk = 0x2e23, - MoveSplineStartSwim = 0x2e25, - MoveSplineStopSwim = 0x2e26, - MoveSplineUnroot = 0x2e1a, - MoveSplineUnsetFlying = 0x2e2a, - MoveSplineUnsetHover = 0x2e22, + MoveSplineSetWaterWalk = 0x2e25, + MoveSplineStartSwim = 0x2e27, + MoveSplineStopSwim = 0x2e28, + MoveSplineUnroot = 0x2e1c, + MoveSplineUnsetFlying = 0x2e2c, + MoveSplineUnsetHover = 0x2e24, MoveTeleport = 0x2e04, MoveUnroot = 0x2dfa, - MoveUnsetCanAdvFly = 0x2e35, + MoveUnsetCanAdvFly = 0x2e37, MoveUnsetCanFly = 0x2e06, - MoveUnsetCanTurnWhileFalling = 0x2e08, + MoveUnsetCanTurnWhileFalling = 0x2e0a, MoveUnsetHovering = 0x2e02, - MoveUnsetIgnoreMovementForces = 0x2e0a, + MoveUnsetIgnoreMovementForces = 0x2e0c, MoveUpdate = 0x2de0, - MoveUpdateAddImpulse = 0x2e33, - MoveUpdateApplyInertia = 0x2e30, + MoveUpdateAddImpulse = 0x2e35, + MoveUpdateApplyInertia = 0x2e32, MoveUpdateApplyMovementForce = 0x2de4, MoveUpdateCollisionHeight = 0x2ddf, MoveUpdateFlightBackSpeed = 0x2ddc, @@ -1618,7 +1641,7 @@ namespace Framework.Constants MoveUpdateKnockBack = 0x2de2, MoveUpdateModMovementForceMagnitude = 0x2de3, MoveUpdatePitchRate = 0x2dde, - MoveUpdateRemoveInertia = 0x2e31, + MoveUpdateRemoveInertia = 0x2e33, MoveUpdateRemoveMovementForce = 0x2de5, MoveUpdateRunBackSpeed = 0x2dd7, MoveUpdateRunSpeed = 0x2dd6, @@ -1627,121 +1650,121 @@ namespace Framework.Constants MoveUpdateTeleport = 0x2de1, MoveUpdateTurnRate = 0x2ddd, MoveUpdateWalkSpeed = 0x2dd8, - MultiFloorLeaveFloor = 0x27d8, - MultiFloorNewFloor = 0x27d7, - MythicPlusAllMapStats = 0x260b, - MythicPlusCurrentAffixes = 0x260d, - MythicPlusNewWeekRecord = 0x2611, - MythicPlusSeasonData = 0x260c, - NeutralPlayerFactionSelectResult = 0x25dc, - NewDataBuild = 0x28ba, - NewTaxiPath = 0x267f, - NewWorld = 0x2595, + MultiFloorLeaveFloor = 0x27db, + MultiFloorNewFloor = 0x27da, + MythicPlusAllMapStats = 0x260d, + MythicPlusCurrentAffixes = 0x260f, + MythicPlusNewWeekRecord = 0x2613, + MythicPlusSeasonData = 0x260e, + NeutralPlayerFactionSelectResult = 0x25de, + NewDataBuild = 0x2896, + NewTaxiPath = 0x2682, + NewWorld = 0x2597, NotifyDestLocSpellCast = 0x2c45, - NotifyMissileTrajectoryCollision = 0x26ab, - NotifyMoney = 0x259a, - NotifyReceivedMail = 0x263b, - NpcInteractionOpenResult = 0x2888, - OfferPetitionError = 0x26b6, - OnCancelExpectedRideVehicleAura = 0x26e5, + NotifyMissileTrajectoryCollision = 0x26ae, + NotifyMoney = 0x259c, + NotifyReceivedMail = 0x263d, + NpcInteractionOpenResult = 0x2872, + OfferPetitionError = 0x26b9, + OnCancelExpectedRideVehicleAura = 0x26e8, OnMonsterMove = 0x2dd4, - OpenArtifactForge = 0x279b, + OpenArtifactForge = 0x279e, OpenContainer = 0x2da6, OpenLfgDungeonFinder = 0x2a31, - OpenShipmentNpcResult = 0x2793, - OverrideLight = 0x26bb, - PageText = 0x2718, - PartyCommandResult = 0x278d, - PartyInvite = 0x25be, - PartyKillLog = 0x2758, - PartyMemberFullState = 0x2757, - PartyMemberPartialState = 0x2756, - PartyNotifyLfgLeaderChange = 0x286e, - PartyUpdate = 0x25f4, - PastTimeEvents = 0x25c3, - PauseMirrorTimer = 0x270f, - PendingRaidLock = 0x26f7, - PerksProgramActivityComplete = 0x2884, - PerksProgramActivityUpdate = 0x2880, - PerksProgramDisabled = 0x2885, - PerksProgramResult = 0x2881, - PerksProgramVendorUpdate = 0x287f, - PetitionAlreadySigned = 0x25a0, + OpenShipmentNpcResult = 0x2796, + OverrideLight = 0x26be, + PageText = 0x271b, + PartyCommandResult = 0x2790, + PartyInvite = 0x25c0, + PartyKillLog = 0x275b, + PartyMemberFullState = 0x275a, + PartyMemberPartialState = 0x2759, + PartyNotifyLfgLeaderChange = 0x285a, + PartyUpdate = 0x25f6, + PastTimeEvents = 0x25c5, + PauseMirrorTimer = 0x2712, + PendingRaidLock = 0x26fa, + PerksProgramActivityComplete = 0x286f, + PerksProgramActivityUpdate = 0x286b, + PerksProgramDisabled = 0x2870, + PerksProgramResult = 0x286c, + PerksProgramVendorUpdate = 0x286a, + PetitionAlreadySigned = 0x25a2, PetitionRenameGuildResponse = 0x29fb, - PetitionShowList = 0x26be, - PetitionShowSignatures = 0x26bf, - PetitionSignResults = 0x274a, - PetActionFeedback = 0x2747, - PetActionSound = 0x26a1, - PetBattleChatRestricted = 0x2602, - PetBattleDebugQueueDumpResponse = 0x2676, - PetBattleFinalizeLocation = 0x25fb, - PetBattleFinalRound = 0x2600, - PetBattleFinished = 0x2601, - PetBattleFirstRound = 0x25fd, - PetBattleInitialUpdate = 0x25fc, - PetBattleMaxGameLengthWarning = 0x2603, - PetBattlePvpChallenge = 0x25fa, - PetBattleQueueProposeMatch = 0x2638, - PetBattleQueueStatus = 0x2639, - PetBattleReplacementsMade = 0x25ff, - PetBattleRequestFailed = 0x25f9, - PetBattleRoundResult = 0x25fe, - PetBattleSlotUpdates = 0x25ec, + PetitionShowList = 0x26c1, + PetitionShowSignatures = 0x26c2, + PetitionSignResults = 0x274d, + PetActionFeedback = 0x274a, + PetActionSound = 0x26a4, + PetBattleChatRestricted = 0x2604, + PetBattleDebugQueueDumpResponse = 0x2678, + PetBattleFinalizeLocation = 0x25fd, + PetBattleFinalRound = 0x2602, + PetBattleFinished = 0x2603, + PetBattleFirstRound = 0x25ff, + PetBattleInitialUpdate = 0x25fe, + PetBattleMaxGameLengthWarning = 0x2605, + PetBattlePvpChallenge = 0x25fc, + PetBattleQueueProposeMatch = 0x263a, + PetBattleQueueStatus = 0x263b, + PetBattleReplacementsMade = 0x2601, + PetBattleRequestFailed = 0x25fb, + PetBattleRoundResult = 0x2600, + PetBattleSlotUpdates = 0x25ee, PetCastFailed = 0x2c5a, PetClearSpells = 0x2c23, - PetDismissSound = 0x26a2, - PetGodMode = 0x267c, - PetGuids = 0x2703, + PetDismissSound = 0x26a5, + PetGodMode = 0x267f, + PetGuids = 0x2706, PetLearnedSpells = 0x2c51, - PetMode = 0x2589, - PetNameInvalid = 0x26c3, - PetNewlyTamed = 0x2588, + PetMode = 0x258b, + PetNameInvalid = 0x26c6, + PetNewlyTamed = 0x258a, PetSpellsMessage = 0x2c24, - PetStableResult = 0x2594, - PetTameFailure = 0x26b3, + PetStableResult = 0x2596, + PetTameFailure = 0x26b6, PetUnlearnedSpells = 0x2c52, PhaseShiftChange = 0x2578, - PlayedTime = 0x26d5, - PlayerAckowledgeArrowCallout = 0x3022, - PlayerAzeriteItemEquippedStatusChanged = 0x3014, - PlayerAzeriteItemGains = 0x3013, - PlayerBonusRollFailed = 0x3016, + PlayedTime = 0x26d8, + PlayerAckowledgeArrowCallout = 0x3024, + PlayerAzeriteItemEquippedStatusChanged = 0x3016, + PlayerAzeriteItemGains = 0x3015, + PlayerBonusRollFailed = 0x3018, PlayerBound = 0x2ff8, PlayerChoiceClear = 0x2ffe, PlayerChoiceDisplayError = 0x2ffd, PlayerConditionResult = 0x300a, - PlayerHideArrowCallout = 0x3021, + PlayerHideArrowCallout = 0x3023, PlayerIsAdventureMapPoiValid = 0x3009, PlayerOpenSubscriptionInterstitial = 0x300e, PlayerSaveGuildEmblem = 0x29fa, - PlayerSavePersonalEmblem = 0x3023, - PlayerShowArrowCallout = 0x3020, - PlayerShowGenericWidgetDisplay = 0x301e, - PlayerShowPartyPoseUi = 0x301f, - PlayerShowUiEventToast = 0x3019, + PlayerSavePersonalEmblem = 0x3025, + PlayerShowArrowCallout = 0x3022, + PlayerShowGenericWidgetDisplay = 0x3020, + PlayerShowPartyPoseUi = 0x3021, + PlayerShowUiEventToast = 0x301b, PlayerSkinned = 0x3006, PlayerTutorialHighlightSpell = 0x300d, PlayerTutorialUnhighlightSpell = 0x300c, - PlayMusic = 0x2767, - PlayObjectSound = 0x2768, - PlayOneShotAnimKit = 0x272f, + PlayMusic = 0x276a, + PlayObjectSound = 0x276b, + PlayOneShotAnimKit = 0x2732, PlayOrphanSpellVisual = 0x2c49, - PlayScene = 0x2635, - PlaySound = 0x2766, - PlaySpeakerbotSound = 0x2769, + PlayScene = 0x2637, + PlaySound = 0x2769, + PlaySpeakerbotSound = 0x276c, PlaySpellVisual = 0x2c47, PlaySpellVisualKit = 0x2c4b, - PlayTimeWarning = 0x26fd, + PlayTimeWarning = 0x2700, Pong = 0x304e, - PowerUpdate = 0x26d2, + PowerUpdate = 0x26d5, PreloadChildMap = 0x2579, - PreloadWorld = 0x2596, - PrepopulateNameCache = 0x2841, - PreRessurect = 0x2765, - PrintNotification = 0x25cb, - ProcResist = 0x2759, - ProfessionGossip = 0x27f8, + PreloadWorld = 0x2598, + PrepopulateNameCache = 0x282e, + PreRessurect = 0x2768, + PrintNotification = 0x25cd, + ProcResist = 0x275c, + ProfessionGossip = 0x27fb, PushSpellToActionBar = 0x2c53, PvpCredit = 0x2946, PvpMatchComplete = 0x2951, @@ -1750,7 +1773,7 @@ namespace Framework.Constants PvpMatchStart = 0x294f, PvpMatchStatistics = 0x2932, PvpOptionsEnabled = 0x2935, - PvpTierRecord = 0x287b, + PvpTierRecord = 0x2866, QueryBattlePetNameResponse = 0x291a, QueryCreatureResponse = 0x2914, QueryGameObjectResponse = 0x2915, @@ -1762,11 +1785,11 @@ namespace Framework.Constants QueryPageTextResponse = 0x2917, QueryPetitionResponse = 0x291b, QueryPetNameResponse = 0x2919, - QueryPlayerNamesResponse = 0x301b, + QueryPlayerNamesResponse = 0x301d, QueryPlayerNameByCommunityIdResponse = 0x3002, QueryQuestInfoResponse = 0x2a96, QueryRealmGuildMasterInfoResponse = 0x29e7, - QueryTimeResponse = 0x26e3, + QueryTimeResponse = 0x26e6, QuestCompletionNpcResponse = 0x2a81, QuestConfirmAccept = 0x2a8f, QuestForceRemoved = 0x2a9c, @@ -1785,141 +1808,144 @@ namespace Framework.Constants QuestPoiQueryResponse = 0x2a9d, QuestPoiUpdateResponse = 0x2a9f, QuestPushResult = 0x2a90, - QuestSessionInfoResponse = 0x2864, - QuestSessionReadyCheck = 0x2852, - QuestSessionReadyCheckResponse = 0x2853, - QuestSessionResult = 0x2851, + QuestSessionInfoResponse = 0x2850, + QuestSessionReadyCheck = 0x283f, + QuestSessionReadyCheckResponse = 0x2840, + QuestSessionResult = 0x283e, QuestUpdateAddCredit = 0x2a8c, QuestUpdateAddCreditSimple = 0x2a8d, QuestUpdateAddPvpCredit = 0x2a8e, QuestUpdateComplete = 0x2a89, QuestUpdateFailed = 0x2a8a, QuestUpdateFailedTimer = 0x2a8b, - QueueSummaryUpdate = 0x280b, - RafAccountInfo = 0x284f, - RafActivityStateChanged = 0x2860, - RafDebugFriendMonths = 0x28b7, - RaidDifficultySet = 0x27a5, - RaidGroupOnly = 0x27a7, + QueueSummaryUpdate = 0x280e, + RafAccountInfo = 0x283c, + RafActivityStateChanged = 0x284c, + RafDebugFriendMonths = 0x2893, + RaidDifficultySet = 0x27a8, + RaidGroupOnly = 0x27aa, RaidInstanceMessage = 0x2bb4, - RaidMarkersChanged = 0x25a1, - RandomRoll = 0x262f, + RaidMarkersChanged = 0x25a3, + RandomRoll = 0x2631, RatedPvpInfo = 0x2931, - ReadyCheckCompleted = 0x25f8, - ReadyCheckResponse = 0x25f7, - ReadyCheckStarted = 0x25f6, - ReadItemResultFailed = 0x27a1, - ReadItemResultOk = 0x2798, + ReadyCheckCompleted = 0x25fa, + ReadyCheckResponse = 0x25f9, + ReadyCheckStarted = 0x25f8, + ReadItemResultFailed = 0x27a4, + ReadItemResultOk = 0x279b, RealmQueryResponse = 0x2913, - ReattachResurrect = 0x2749, - ReceivePingUnit = 0x25a2, - ReceivePingWorldPoint = 0x25a3, - RecraftItemResult = 0x28a6, - RecruitAFriendFailure = 0x26c0, - RefreshComponent = 0x2650, + ReattachResurrect = 0x274c, + ReceivePingUnit = 0x25a4, + ReceivePingWorldPoint = 0x25a5, + RecraftItemResult = 0x2889, + RecruitAFriendFailure = 0x26c3, + RefreshComponent = 0x2652, RefreshSpellHistory = 0x2c2b, - RemoveItemPassive = 0x25ac, + RegionwideCharacterMailData = 0x2586, + RegionwideCharacterRestrictionsData = 0x2585, + RemoveItemPassive = 0x25ae, RemoveSpellFromActionBar = 0x2c54, - ReplaceTrophyResponse = 0x27bd, + ReplaceTrophyResponse = 0x27c0, ReportPvpPlayerAfkResult = 0x3001, - RequestCemeteryListResponse = 0x258f, + RequestCemeteryListResponse = 0x2591, RequestPvpRewardsResponse = 0x2936, RequestScheduledPvpInfoResponse = 0x2937, ResetCompressionContext = 0x304f, - ResetFailedNotify = 0x26b7, - ResetLastLoadedConfigCvars = 0x28ac, + ResetFailedNotify = 0x26ba, + ResetLastLoadedConfigCvars = 0x2890, ResetQuestPoi = 0x2aa0, ResetRangedCombatTimer = 0x2945, ResetWeeklyCurrency = 0x2575, - RespecWipeConfirm = 0x2612, + RespecWipeConfirm = 0x2614, RespondInspectAchievements = 0x2572, - ResponsePerkPendingRewards = 0x2882, - ResponsePerkRecentPurchases = 0x2883, + ResponsePerkPendingRewards = 0x286d, + ResponsePerkRecentPurchases = 0x286e, RestartGlobalCooldown = 0x2c63, - RestrictedAccountWarning = 0x25ba, + RestrictedAccountWarning = 0x25bc, ResumeCast = 0x2c3d, ResumeCastBar = 0x2c40, ResumeComms = 0x304b, - ResumeToken = 0x25aa, + ResumeToken = 0x25ac, ResurrectRequest = 0x257e, ResyncRunes = 0x2c61, - ReturningPlayerPrompt = 0x27a0, - ReturnApplicantList = 0x2845, - ReturnRecruitingClubs = 0x2844, - RoleChangedInform = 0x258b, + ReturningPlayerPrompt = 0x27a3, + ReturnApplicantList = 0x2832, + ReturnRecruitingClubs = 0x2831, + RoleChangedInform = 0x258d, RoleChosen = 0x2a39, - RolePollInform = 0x258c, - RuneforgeLegendaryCraftingOpenNpc = 0x27f7, - RuneRegenDebug = 0x25b7, - ScenarioCompleted = 0x27e5, - ScenarioPois = 0x2632, - ScenarioProgressUpdate = 0x262b, - ScenarioShowCriteria = 0x27fb, - ScenarioState = 0x262a, - ScenarioUiUpdate = 0x27fa, - ScenarioVacate = 0x27a2, - SceneObjectEvent = 0x25e2, - SceneObjectPetBattleFinalRound = 0x25e7, - SceneObjectPetBattleFinished = 0x25e8, - SceneObjectPetBattleFirstRound = 0x25e4, - SceneObjectPetBattleInitialUpdate = 0x25e3, - SceneObjectPetBattleReplacementsMade = 0x25e6, - SceneObjectPetBattleRoundResult = 0x25e5, + RolePollInform = 0x258e, + RuneforgeLegendaryCraftingOpenNpc = 0x27fa, + RuneRegenDebug = 0x25b9, + ScenarioCompleted = 0x27e8, + ScenarioPois = 0x2634, + ScenarioProgressUpdate = 0x262d, + ScenarioShowCriteria = 0x27fe, + ScenarioState = 0x262c, + ScenarioUiUpdate = 0x27fd, + ScenarioVacate = 0x27a5, + SceneObjectEvent = 0x25e4, + SceneObjectPetBattleFinalRound = 0x25e9, + SceneObjectPetBattleFinished = 0x25ea, + SceneObjectPetBattleFirstRound = 0x25e6, + SceneObjectPetBattleInitialUpdate = 0x25e5, + SceneObjectPetBattleReplacementsMade = 0x25e8, + SceneObjectPetBattleRoundResult = 0x25e7, ScriptCast = 0x2c58, - SeasonInfo = 0x25c2, - SellResponse = 0x26c4, - SendItemPassives = 0x25ad, + SeasonInfo = 0x25c4, + SellResponse = 0x26c7, + SendItemPassives = 0x25af, SendKnownSpells = 0x2c29, - SendRaidTargetUpdateAll = 0x262d, - SendRaidTargetUpdateSingle = 0x262e, + SendRaidTargetUpdateAll = 0x262f, + SendRaidTargetUpdateSingle = 0x2630, SendSpellCharges = 0x2c2c, SendSpellHistory = 0x2c2a, SendUnlearnSpells = 0x2c2d, - ServerFirstAchievements = 0x264d, - ServerTime = 0x2683, - ServerTimeOffset = 0x2713, + ServerFirstAchievements = 0x264f, + ServerTime = 0x2686, + ServerTimeOffset = 0x2716, SetupCombatLogFileFlush = 0x2c1f, SetupCurrency = 0x2573, - SetAiAnimKit = 0x272e, - SetAnimTier = 0x2732, - SetChrUpgradeTier = 0x25df, + SetAiAnimKit = 0x2731, + SetAnimTier = 0x2735, + SetChrUpgradeTier = 0x25e1, SetCurrency = 0x2574, SetDfFastLaunchResult = 0x2a2e, - SetDungeonDifficulty = 0x26a5, - SetFactionAtWar = 0x26ff, - SetFactionNotVisible = 0x2729, - SetFactionStanding = 0x272a, - SetFactionVisible = 0x2728, + SetDungeonDifficulty = 0x26a8, + SetFactionAtWar = 0x2702, + SetFactionNotVisible = 0x272c, + SetFactionStanding = 0x272d, + SetFactionVisible = 0x272b, SetFlatSpellModifier = 0x2c38, - SetForcedReactions = 0x271c, - SetItemPurchaseData = 0x259c, - SetLootMethodFailed = 0x27c9, - SetMaxWeeklyQuantity = 0x259f, - SetMeleeAnimKit = 0x2731, - SetMovementAnimKit = 0x2730, + SetForcedReactions = 0x271f, + SetItemPurchaseData = 0x259e, + SetLootMethodFailed = 0x27cc, + SetMaxWeeklyQuantity = 0x25a1, + SetMeleeAnimKit = 0x2734, + SetMovementAnimKit = 0x2733, SetPctSpellModifier = 0x2c39, - SetPetSpecialization = 0x2624, + SetPetSpecialization = 0x2626, SetPlayerDeclinedNamesResult = 0x3003, - SetPlayHoverAnim = 0x25bb, - SetProficiency = 0x2733, - SetQuestReplayCooldownOverride = 0x2858, + SetPlayHoverAnim = 0x25bd, + SetProficiency = 0x2736, + SetQuestReplayCooldownOverride = 0x2845, SetShipmentReadyResponse = 0x2998, SetSpellCharges = 0x2c28, - SetTimeZoneInformation = 0x2678, - SetVehicleRecId = 0x26f6, - ShadowlandsCapacitanceUpdate = 0x2887, + SetTimeZoneInformation = 0x267b, + SetVehicleRecId = 0x26f9, + ShadowlandsCapacitanceUpdate = 0x2871, ShipmentFactionUpdateResult = 0x2999, - ShowNeutralPlayerFactionSelectUi = 0x25db, + ShowDelvesDisplayUi = 0x28a7, + ShowNeutralPlayerFactionSelectUi = 0x25dd, ShowQuestCompletionText = 0x2a95, - ShowTaxiNodes = 0x26cd, - ShowTradeSkillResponse = 0x276e, - SocialContractRequestResponse = 0x2892, - SocketGemsFailure = 0x2726, - SocketGemsSuccess = 0x2725, - SpecialMountAnim = 0x26a0, - SpectateEnd = 0x28b9, - SpectatePlayer = 0x28b8, - SpecInvoluntarilyChanged = 0x2717, + ShowTaxiNodes = 0x26d0, + ShowTradeSkillResponse = 0x2771, + SocialContractRequestResponse = 0x287b, + SocketGemsFailure = 0x2729, + SocketGemsSuccess = 0x2728, + SpecialMountAnim = 0x26a3, + SpectateEnd = 0x2895, + SpectatePlayer = 0x2894, + SpecInvoluntarilyChanged = 0x271a, SpellAbsorbLog = 0x2c1c, SpellCategoryCooldown = 0x2c16, SpellChannelStart = 0x2c33, @@ -1947,94 +1973,95 @@ namespace Framework.Constants SpellPeriodicAuraLog = 0x2c18, SpellPrepare = 0x2c3a, SpellStart = 0x2c3c, - SpellVisualLoadScreen = 0x25cd, - SplashScreenShowLatest = 0x286a, - StandStateUpdate = 0x271b, - StarterBuildActivateFailed = 0x25d3, - StartElapsedTimer = 0x2604, - StartElapsedTimers = 0x2606, - StartLightningStorm = 0x26a8, - StartLootRoll = 0x261c, - StartMirrorTimer = 0x270e, - StartTimer = 0x25a6, - StopElapsedTimer = 0x2605, - StopMirrorTimer = 0x2710, - StopSpeakerbotSound = 0x276a, - StopTimer = 0x25a7, - StreamingMovies = 0x25a5, - SuggestInviteInform = 0x278e, - SummonCancel = 0x26b1, - SummonRaidMemberValidateFailed = 0x258d, - SummonRequest = 0x2720, + SpellVisualLoadScreen = 0x25cf, + SplashScreenShowLatest = 0x2856, + StandStateUpdate = 0x271e, + StarterBuildActivateFailed = 0x25d5, + StartElapsedTimer = 0x2606, + StartElapsedTimers = 0x2608, + StartLightningStorm = 0x26ab, + StartLootRoll = 0x261e, + StartMirrorTimer = 0x2711, + StartTimer = 0x25a8, + StopElapsedTimer = 0x2607, + StopMirrorTimer = 0x2713, + StopSpeakerbotSound = 0x276d, + StopTimer = 0x25a9, + StreamingMovies = 0x25a7, + SuggestInviteInform = 0x2791, + SummonCancel = 0x26b4, + SummonRaidMemberValidateFailed = 0x258f, + SummonRequest = 0x2723, SupercededSpells = 0x2c4e, SuspendComms = 0x304a, - SuspendToken = 0x25a9, - SyncWowEntitlements = 0x2862, - TalentsInvoluntarilyReset = 0x2716, - TaxiNodeStatus = 0x267d, - TextEmote = 0x267b, - ThreatClear = 0x26dc, - ThreatRemove = 0x26db, - ThreatUpdate = 0x26da, + SuspendToken = 0x25ab, + SyncWowEntitlements = 0x284e, + TalentsInvoluntarilyReset = 0x2719, + TaxiNodeStatus = 0x2680, + TextEmote = 0x267e, + ThreatClear = 0x26df, + ThreatRemove = 0x26de, + ThreatUpdate = 0x26dd, + TimerunningSeasonEnded = 0x28aa, TimeAdjustment = 0x2dd3, TimeSyncRequest = 0x2dd2, - TitleEarned = 0x26d7, - TitleLost = 0x26d8, - TotemCreated = 0x26c7, - TotemDurationChanged = 0x26c9, - TotemMoved = 0x26ca, - TotemRemoved = 0x26c8, + TitleEarned = 0x26da, + TitleLost = 0x26db, + TotemCreated = 0x26ca, + TotemDurationChanged = 0x26cc, + TotemMoved = 0x26cd, + TotemRemoved = 0x26cb, TradeStatus = 0x2583, TradeUpdated = 0x2582, - TrainerBuyFailed = 0x26df, - TrainerList = 0x26de, - TraitConfigCommitFailed = 0x25d2, - TransferAborted = 0x2702, - TransferPending = 0x25ce, + TrainerBuyFailed = 0x26e2, + TrainerList = 0x26e1, + TraitConfigCommitFailed = 0x25d4, + TransferAborted = 0x2705, + TransferPending = 0x25d0, TreasurePickerResponse = 0x291f, - TriggerCinematic = 0x27c2, - TriggerMovie = 0x26cb, - TurnInPetitionResult = 0x274c, - TutorialFlags = 0x27b6, - UiMapQuestLinesResponse = 0x2aa2, - UndeleteCharacterResponse = 0x27c4, - UndeleteCooldownStatusResponse = 0x27c5, + TriggerCinematic = 0x27c5, + TriggerMovie = 0x26ce, + TurnInPetitionResult = 0x274f, + TutorialFlags = 0x27b9, + UiMapQuestLinesResponse = 0x2aa3, + UndeleteCharacterResponse = 0x27c7, + UndeleteCooldownStatusResponse = 0x27c8, UnlearnedSpells = 0x2c50, UnloadChildMap = 0x257a, - UpdateAadcStatusResponse = 0x287c, - UpdateAccountData = 0x2708, - UpdateActionButtons = 0x25e0, - UpdateBnetSessionKey = 0x281c, + UpdateAadcStatusResponse = 0x2867, + UpdateAccountData = 0x270b, + UpdateActionButtons = 0x25e2, + UpdateBnetSessionKey = 0x281f, UpdateCapturePoint = 0x2929, - UpdateCelestialBody = 0x2818, - UpdateCharacterFlags = 0x27bc, - UpdateChargeCategoryCooldown = 0x2764, - UpdateCooldown = 0x2763, + UpdateCelestialBody = 0x281b, + UpdateCharacterFlags = 0x27bf, + UpdateChargeCategoryCooldown = 0x2767, + UpdateCooldown = 0x2766, UpdateCraftingNpcRecipes = 0x2996, UpdateDailyMissionCounter = 0x297f, - UpdateExpansionLevel = 0x2645, - UpdateGameTimeState = 0x281f, - UpdateInstanceOwnership = 0x26aa, - UpdateLastInstance = 0x2689, - UpdateObject = 0x27c3, - UpdatePrimarySpec = 0x25d8, - UpdateRecentPlayerGuids = 0x25f5, - UpdateTalentData = 0x25d7, - UpdateWorldState = 0x2746, + UpdateExpansionLevel = 0x2647, + UpdateGameTimeState = 0x2822, + UpdateInstanceOwnership = 0x26ad, + UpdateLastInstance = 0x268c, + UpdateObject = 0x27c6, + UpdatePrimarySpec = 0x25da, + UpdateRecentPlayerGuids = 0x25f7, + UpdateTalentData = 0x25d9, + UpdateWorldState = 0x2749, UserlistAdd = 0x2bb9, UserlistRemove = 0x2bba, UserlistUpdate = 0x2bbb, - UseEquipmentSetResult = 0x274d, - VasCheckTransferOkResponse = 0x2813, - VasGetQueueMinutesResponse = 0x2811, - VasGetServiceStatusResponse = 0x2810, - VasPurchaseComplete = 0x27eb, - VasPurchaseStateUpdate = 0x27ea, - VendorInventory = 0x25b9, + UseEquipmentSetResult = 0x2750, + VasCheckTransferOkResponse = 0x2816, + VasGetQueueMinutesResponse = 0x2814, + VasGetServiceStatusResponse = 0x2813, + VasPurchaseComplete = 0x27ee, + VasPurchaseStateUpdate = 0x27ed, + VendorInventory = 0x25bb, VignetteUpdate = 0x3008, - VoiceChannelInfoResponse = 0x2817, - VoiceChannelSttTokenResponse = 0x2876, - VoiceLoginResponse = 0x2816, + VoiceChannelInfoResponse = 0x281a, + VoiceChannelSttTokenResponse = 0x2861, + VoiceLoginResponse = 0x2819, VoidItemSwapResponse = 0x2da4, VoidStorageContents = 0x2da1, VoidStorageFailed = 0x2da0, @@ -2043,28 +2070,28 @@ namespace Framework.Constants WaitQueueFinish = 0x256f, WaitQueueUpdate = 0x256e, Warden3Data = 0x2577, - Warden3Disabled = 0x281a, - Warden3Enabled = 0x2819, - WarfrontComplete = 0x275c, + Warden3Disabled = 0x281d, + Warden3Enabled = 0x281c, + WarfrontComplete = 0x275f, WargameRequestOpponentResponse = 0x2934, WargameRequestSuccessfullySentToOpponent = 0x2933, - Weather = 0x26a7, - WeeklyRewardsProgressResult = 0x286d, - WeeklyRewardsResult = 0x286b, - WeeklyRewardClaimResult = 0x286c, + Weather = 0x26aa, + WeeklyRewardsProgressResult = 0x2859, + WeeklyRewardsResult = 0x2857, + WeeklyRewardClaimResult = 0x2858, Who = 0x2bae, - WhoIs = 0x26a6, - WillBeKickedForAddedSubscriptionTime = 0x281e, + WhoIs = 0x26a9, + WillBeKickedForAddedSubscriptionTime = 0x2821, WorldQuestUpdateResponse = 0x300f, - WorldServerInfo = 0x25ae, - WowEntitlementNotification = 0x2863, - WowLabsNotifyPlayersMatchEnd = 0x2893, - WowLabsNotifyPlayersMatchStateChanged = 0x2894, - WowLabsPartyError = 0x289c, - WowLabsSetPredictionCircle = 0x2895, - XpAwardedFromCurrency = 0x28ab, - XpGainAborted = 0x25ca, - XpGainEnabled = 0x27a6, + WorldServerInfo = 0x25b0, + WowEntitlementNotification = 0x284f, + WowLabsNotifyPlayersMatchEnd = 0x287c, + WowLabsNotifyPlayersMatchStateChanged = 0x287d, + WowLabsPartyError = 0x2881, + WowLabsSetPredictionCircle = 0x287e, + XpAwardedFromCurrency = 0x288f, + XpGainAborted = 0x25cc, + XpGainEnabled = 0x27a9, ZoneUnderAttack = 0x2bb5, // Opcodes That Are Not Generated Automatically diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index 914ba0a6e..a140f8cc1 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -518,10 +518,16 @@ namespace Framework.Constants // first slot for item stored (in any way in player items data) Start = 0, // last+1 slot for item stored (in any way in player items data) - End = 227, + End = 232, Count = (End - Start) } + enum AccountBankBagSlots + { + Start = 227, + End = 232 + } + public enum PlayerTitle : ulong { Disabled = 0x0000000000000000, diff --git a/Source/Framework/Constants/QuestConst.cs b/Source/Framework/Constants/QuestConst.cs index 75e7f40e2..d7600355a 100644 --- a/Source/Framework/Constants/QuestConst.cs +++ b/Source/Framework/Constants/QuestConst.cs @@ -84,7 +84,7 @@ namespace Framework.Constants public enum QuestType { - TurnIn= 0, + TurnIn = 0, WithMaxLevel = 1, Normal = 2, Task = 3, @@ -417,39 +417,53 @@ namespace Framework.Constants public enum QuestGiverStatus : ulong { - None = 0x00, - Future = 0x02, - Trivial = 0x04, - TrivialRepeatableTurnin = 0x08, - TrivialDailyQuest = 0x10, - Reward = 0x20, - JourneyReward = 0x40, - CovenantCallingReward = 0x80, - RepeatableTurnin = 0x100, - DailyQuest = 0x200, - Quest = 0x400, - RewardCompleteNoPOI = 0x800, - RewardCompletePOI = 0x1000, - LegendaryQuest = 0x2000, - LegendaryRewardCompleteNoPOI = 0x4000, - LegendaryRewardCompletePOI = 0x8000, - JourneyQuest = 0x10000, - JourneyRewardCompleteNoPOI = 0x20000, - JourneyRewardCompletePOI = 0x40000, - CovenantCallingQuest = 0x80000, - CovenantCallingRewardCompleteNoPOI = 0x100000, - CovenantCallingRewardCompletePOI = 0x200000, - TrivialLegendaryQuest = 0x400000, - FutureLegendaryQuest = 0x800000, - LegendaryReward = 0x1000000, - ImportantReward = 0x2000000, - ImportantQuest = 0x4000000, - TrivialImportantQuest = 0x8000000, - FutureImportantQuest = 0x010000000, - ImportantQuestRewardCompleteNoPOI = 0x20000000, - ImportantQuestRewardCompletePOI = 0x40000000, - TrivialJourneyQuest = 0x80000000, - FutureJourneyQuest = 0x100000000, + None = 0x000000000000, + Future = 0x000000000002, + FutureJourneyQuest = 0x000000000004, + FutureLegendaryQuest = 0x000000000008, + FutureImportantQuest = 0x000000000010, + TrivialRepeatableTurnin = 0x000000000020, + Trivial = 0x000000000040, + TrivialDailyQuest = 0x000000000080, + TrivialRepeatableQuest = 0x000000000100, + TrivialMetaQuest = 0x000000000200, + TrivialJourneyQuest = 0x000000000400, + TrivialLegendaryQuest = 0x000000000800, + TrivialImportantQuest = 0x000000001000, + Reward = 0x000000002000, + RepeatableReward = 0x000000004000, + MetaReward = 0x000000008000, + JourneyReward = 0x000000010000, + CovenantCallingReward = 0x000000020000, + LegendaryReward = 0x000000040000, + ImportantReward = 0x000000080000, + RepeatableTurnin = 0x000000100000, + QuestAccountCompleted = 0x000000200000, + Quest = 0x000000400000, + DailyQuest = 0x000000800000, + RepeatableQuest = 0x000001000000, + MetaQuest = 0x000002000000, + CovenantCallingQuest = 0x000004000000, + JourneyQuestAccountCompleted = 0x000008000000, + JourneyQuest = 0x000010000000, + LegendaryQuestAccountCompleted = 0x000020000000, + LegendaryQuest = 0x000040000000, + ImportantQuestAccountCompleted = 0x000080000000, + ImportantQuest = 0x000100000000, + RewardCompleteNoPOI = 0x000200000000, + RewardCompletePOI = 0x000400000000, + RepeatableRewardCompleteNoPOI = 0x000800000000, + RepeatableRewardCompletePOI = 0x001000000000, + MetaQuestRewardCompleteNoPOI = 0x002000000000, + MetaQuestRewardCompletePOI = 0x004000000000, + CovenantCallingRewardCompleteNoPOI = 0x008000000000, + CovenantCallingRewardCompletePOI = 0x010000000000, + JourneyRewardCompleteNoPOI = 0x020000000000, + JourneyRewardCompletePOI = 0x040000000000, + LegendaryRewardCompleteNoPOI = 0x080000000000, + LegendaryRewardCompletePOI = 0x100000000000, + ImportantQuestRewardCompleteNoPOI = 0x200000000000, + ImportantQuestRewardCompletePOI = 0x400000000000, } [Flags] @@ -554,6 +568,8 @@ namespace Framework.Constants IgnoreSoulboundItems = 0x00200000, DontDeferStartEffects = 0x00400000, HideRequiredItemsPreTurnIn = 0x00800000, + + AbandonOnDisable = 0x04000000, } public enum QuestSpecialFlags @@ -598,4 +614,11 @@ namespace Framework.Constants Threat, CovenantCalling } + + public enum QuestRewardContextFlags + { + None = 0x0, + FirstCompletionBonus = 0x1, + RepeatCompletionBonus = 0x2 + } } diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index caa3d06df..eb8f4d61f 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -1955,1107 +1955,1134 @@ namespace Framework.Constants OnlyOneQuiver = 35, NoBankSlot = 36, NoBankHere = 37, - ItemLocked = 38, - Handed2Equipped = 39, - VendorNotInterested = 40, - VendorRefuseScrappableAzerite = 41, - VendorHatesYou = 42, - VendorSoldOut = 43, - VendorTooFar = 44, - VendorDoesntBuy = 45, - NotEnoughMoney = 46, - ReceiveItemS = 47, - DropBoundItem = 48, - TradeBoundItem = 49, - TradeQuestItem = 50, - TradeTempEnchantBound = 51, - TradeGroundItem = 52, - TradeBag = 53, - TradeFactionSpecific = 54, - SpellFailedS = 55, - ItemCooldown = 56, - PotionCooldown = 57, - FoodCooldown = 58, - SpellCooldown = 59, - AbilityCooldown = 60, - SpellAlreadyKnownS = 61, - PetSpellAlreadyKnownS = 62, - ProficiencyGainedS = 63, - SkillGainedS = 64, - SkillUpSi = 65, - LearnSpellS = 66, - LearnAbilityS = 67, - LearnPassiveS = 68, - LearnRecipeS = 69, - ProfessionsRecipeDiscoveryS = 70, - LearnCompanionS = 71, - LearnMountS = 72, - LearnToyS = 73, - LearnHeirloomS = 74, - LearnTransmogS = 75, - CompletedTransmogSetS = 76, - AppearanceAlreadyLearned = 77, - RevokeTransmogS = 78, - InvitePlayerS = 79, - SuggestInvitePlayerS = 80, - InformSuggestInviteS = 81, - InformSuggestInviteSs = 82, - RequestJoinPlayerS = 83, - InviteSelf = 84, - InvitedToGroupSs = 85, - InvitedAlreadyInGroupSs = 86, - AlreadyInGroupS = 87, - RequestedInviteToGroupSs = 88, - CrossRealmRaidInvite = 89, - PlayerBusyS = 90, - NewLeaderS = 91, - NewLeaderYou = 92, - NewGuideS = 93, - NewGuideYou = 94, - LeftGroupS = 95, - LeftGroupYou = 96, - GroupDisbanded = 97, - DeclineGroupS = 98, - DeclineGroupRequestS = 99, - JoinedGroupS = 100, - UninviteYou = 101, - BadPlayerNameS = 102, - NotInGroup = 103, - TargetNotInGroupS = 104, - TargetNotInInstanceS = 105, - NotInInstanceGroup = 106, - GroupFull = 107, - NotLeader = 108, - PlayerDiedS = 109, - GuildCreateS = 110, - GuildInviteS = 111, - InvitedToGuildSss = 112, - AlreadyInGuildS = 113, - AlreadyInvitedToGuildS = 114, - InvitedToGuild = 115, - AlreadyInGuild = 116, - GuildAccept = 117, - GuildDeclineS = 118, - GuildDeclineAutoS = 119, - GuildPermissions = 120, - GuildJoinS = 121, - GuildFounderS = 122, - GuildPromoteSss = 123, - GuildDemoteSs = 124, - GuildDemoteSss = 125, - GuildInviteSelf = 126, - GuildQuitS = 127, - GuildLeaveS = 128, - GuildRemoveSs = 129, - GuildRemoveSelf = 130, - GuildDisbandS = 131, - GuildDisbandSelf = 132, - GuildLeaderS = 133, - GuildLeaderSelf = 134, - GuildPlayerNotFoundS = 135, - GuildPlayerNotInGuildS = 136, - GuildPlayerNotInGuild = 137, - GuildBankNotAvailable = 138, - GuildCantPromoteS = 139, - GuildCantDemoteS = 140, - GuildNotInAGuild = 141, - GuildInternal = 142, - GuildLeaderIsS = 143, - GuildLeaderChangedSs = 144, - GuildDisbanded = 145, - GuildNotAllied = 146, - GuildNewLeaderNotAllied = 147, - GuildLeaderLeave = 148, - GuildRanksLocked = 149, - GuildRankInUse = 150, - GuildRankTooHighS = 151, - GuildRankTooLowS = 152, - GuildNameExistsS = 153, - GuildWithdrawLimit = 154, - GuildNotEnoughMoney = 155, - GuildTooMuchMoney = 156, - GuildBankConjuredItem = 157, - GuildBankEquippedItem = 158, - GuildBankBoundItem = 159, - GuildBankQuestItem = 160, - GuildBankWrappedItem = 161, - GuildBankFull = 162, - GuildBankWrongTab = 163, - NoGuildCharter = 164, - OutOfRange = 165, - PlayerDead = 166, - ClientLockedOut = 167, - ClientOnTransport = 168, - KilledByS = 169, - LootLocked = 170, - LootTooFar = 171, - LootDidntKill = 172, - LootBadFacing = 173, - LootNotstanding = 174, - LootStunned = 175, - LootNoUi = 176, - LootWhileInvulnerable = 177, - NoLoot = 178, - QuestAcceptedS = 179, - QuestCompleteS = 180, - QuestFailedS = 181, - QuestFailedBagFullS = 182, - QuestFailedMaxCountS = 183, - QuestFailedLowLevel = 184, - QuestFailedMissingItems = 185, - QuestFailedWrongRace = 186, - QuestFailedNotEnoughMoney = 187, - QuestFailedExpansion = 188, - QuestOnlyOneTimed = 189, - QuestNeedPrereqs = 190, - QuestNeedPrereqsCustom = 191, - QuestAlreadyOn = 192, - QuestAlreadyDone = 193, - QuestAlreadyDoneDaily = 194, - QuestHasInProgress = 195, - QuestRewardExpI = 196, - QuestRewardMoneyS = 197, - QuestMustChoose = 198, - QuestLogFull = 199, - CombatDamageSsi = 200, - InspectS = 201, - CantUseItem = 202, - CantUseItemInArena = 203, - CantUseItemInRatedBattleground = 204, - MustEquipItem = 205, - PassiveAbility = 206, - H2SkillNotFound = 207, - NoAttackTarget = 208, - InvalidAttackTarget = 209, - AttackPvpTargetWhileUnflagged = 210, - AttackStunned = 211, - AttackPacified = 212, - AttackMounted = 213, - AttackFleeing = 214, - AttackConfused = 215, - AttackCharmed = 216, - AttackDead = 217, - AttackPreventedByMechanicS = 218, - AttackChannel = 219, - Taxisamenode = 220, - Taxinosuchpath = 221, - Taxiunspecifiedservererror = 222, - Taxinotenoughmoney = 223, - Taxitoofaraway = 224, - Taxinovendornearby = 225, - Taxinotvisited = 226, - Taxiplayerbusy = 227, - Taxiplayeralreadymounted = 228, - Taxiplayershapeshifted = 229, - Taxiplayermoving = 230, - Taxinopaths = 231, - Taxinoteligible = 232, - Taxinotstanding = 233, - Taxiincombat = 234, - NoReplyTarget = 235, - GenericNoTarget = 236, - InitiateTradeS = 237, - TradeRequestS = 238, - TradeBlockedS = 239, - TradeTargetDead = 240, - TradeTooFar = 241, - TradeCancelled = 242, - TradeComplete = 243, - TradeBagFull = 244, - TradeTargetBagFull = 245, - TradeMaxCountExceeded = 246, - TradeTargetMaxCountExceeded = 247, - InventoryTradeTooManyUniqueItem = 248, - AlreadyTrading = 249, - MountInvalidmountee = 250, - MountToofaraway = 251, - MountAlreadymounted = 252, - MountNotmountable = 253, - MountNotyourpet = 254, - MountOther = 255, - MountLooting = 256, - MountRacecantmount = 257, - MountShapeshifted = 258, - MountNoFavorites = 259, - MountNoMounts = 260, - DismountNopet = 261, - DismountNotmounted = 262, - DismountNotyourpet = 263, - SpellFailedTotems = 264, - SpellFailedReagents = 265, - SpellFailedReagentsGeneric = 266, - SpellFailedOptionalReagents = 267, - CantTradeGold = 268, - SpellFailedEquippedItem = 269, - SpellFailedEquippedItemClassS = 270, - SpellFailedShapeshiftFormS = 271, - SpellFailedAnotherInProgress = 272, - Badattackfacing = 273, - Badattackpos = 274, - ChestInUse = 275, - UseCantOpen = 276, - UseLocked = 277, - DoorLocked = 278, - ButtonLocked = 279, - UseLockedWithItemS = 280, - UseLockedWithSpellS = 281, - UseLockedWithSpellKnownSi = 282, - UseTooFar = 283, - UseBadAngle = 284, - UseObjectMoving = 285, - UseSpellFocus = 286, - UseDestroyed = 287, - SetLootFreeforall = 288, - SetLootRoundrobin = 289, - SetLootMaster = 290, - SetLootGroup = 291, - SetLootThresholdS = 292, - NewLootMasterS = 293, - SpecifyMasterLooter = 294, - LootSpecChangedS = 295, - TameFailed = 296, - ChatWhileDead = 297, - ChatPlayerNotFoundS = 298, - Newtaxipath = 299, - NoPet = 300, - Notyourpet = 301, - PetNotRenameable = 302, - QuestObjectiveCompleteS = 303, - QuestUnknownComplete = 304, - QuestAddKillSii = 305, - QuestAddFoundSii = 306, - QuestAddItemSii = 307, - QuestAddPlayerKillSii = 308, - Cannotcreatedirectory = 309, - Cannotcreatefile = 310, - PlayerWrongFaction = 311, - PlayerIsNeutral = 312, - BankslotFailedTooMany = 313, - BankslotInsufficientFunds = 314, - BankslotNotbanker = 315, - FriendDbError = 316, - FriendListFull = 317, - FriendAddedS = 318, - BattletagFriendAddedS = 319, - FriendOnlineSs = 320, - FriendOfflineS = 321, - FriendNotFound = 322, - FriendWrongFaction = 323, - FriendRemovedS = 324, - BattletagFriendRemovedS = 325, - FriendError = 326, - FriendAlreadyS = 327, - FriendSelf = 328, - FriendDeleted = 329, - IgnoreFull = 330, - IgnoreSelf = 331, - IgnoreNotFound = 332, - IgnoreAlreadyS = 333, - IgnoreAddedS = 334, - IgnoreRemovedS = 335, - IgnoreAmbiguous = 336, - IgnoreDeleted = 337, - OnlyOneBolt = 338, - OnlyOneAmmo = 339, - SpellFailedEquippedSpecificItem = 340, - WrongBagTypeSubclass = 341, - CantWrapStackable = 342, - CantWrapEquipped = 343, - CantWrapWrapped = 344, - CantWrapBound = 345, - CantWrapUnique = 346, - CantWrapBags = 347, - OutOfMana = 348, - OutOfRage = 349, - OutOfFocus = 350, - OutOfEnergy = 351, - OutOfChi = 352, - OutOfHealth = 353, - OutOfRunes = 354, - OutOfRunicPower = 355, - OutOfSoulShards = 356, - OutOfLunarPower = 357, - OutOfHolyPower = 358, - OutOfMaelstrom = 359, - OutOfComboPoints = 360, - OutOfInsanity = 361, - OutOfEssence = 362, - OutOfArcaneCharges = 363, - OutOfFury = 364, - OutOfPain = 365, - OutOfPowerDisplay = 366, - LootGone = 367, - MountForceddismount = 368, - AutofollowTooFar = 369, - UnitNotFound = 370, - InvalidFollowTarget = 371, - InvalidFollowPvpCombat = 372, - InvalidFollowTargetPvpCombat = 373, - InvalidInspectTarget = 374, - GuildemblemSuccess = 375, - GuildemblemInvalidTabardColors = 376, - GuildemblemNoguild = 377, - GuildemblemNotguildmaster = 378, - GuildemblemNotenoughmoney = 379, - GuildemblemInvalidvendor = 380, - EmblemerrorNotabardgeoset = 381, - SpellOutOfRange = 382, - CommandNeedsTarget = 383, - NoammoS = 384, - Toobusytofollow = 385, - DuelRequested = 386, - DuelCancelled = 387, - Deathbindalreadybound = 388, - DeathbindSuccessS = 389, - Noemotewhilerunning = 390, - ZoneExplored = 391, - ZoneExploredXp = 392, - InvalidItemTarget = 393, - InvalidQuestTarget = 394, - IgnoringYouS = 395, - FishNotHooked = 396, - FishEscaped = 397, - SpellFailedNotunsheathed = 398, - PetitionOfferedS = 399, - PetitionSigned = 400, - PetitionSignedS = 401, - PetitionDeclinedS = 402, - PetitionAlreadySigned = 403, - PetitionRestrictedAccountTrial = 404, - PetitionAlreadySignedOther = 405, - PetitionInGuild = 406, - PetitionCreator = 407, - PetitionNotEnoughSignatures = 408, - PetitionNotSameServer = 409, - PetitionFull = 410, - PetitionAlreadySignedByS = 411, - GuildNameInvalid = 412, - SpellUnlearnedS = 413, - PetSpellRooted = 414, - PetSpellAffectingCombat = 415, - PetSpellOutOfRange = 416, - PetSpellNotBehind = 417, - PetSpellTargetsDead = 418, - PetSpellDead = 419, - PetSpellNopath = 420, - ItemCantBeDestroyed = 421, - TicketAlreadyExists = 422, - TicketCreateError = 423, - TicketUpdateError = 424, - TicketDbError = 425, - TicketNoText = 426, - TicketTextTooLong = 427, - ObjectIsBusy = 428, - ExhaustionWellrested = 429, - ExhaustionRested = 430, - ExhaustionNormal = 431, - ExhaustionTired = 432, - ExhaustionExhausted = 433, - NoItemsWhileShapeshifted = 434, - CantInteractShapeshifted = 435, - RealmNotFound = 436, - MailQuestItem = 437, - MailBoundItem = 438, - MailConjuredItem = 439, - MailBag = 440, - MailToSelf = 441, - MailTargetNotFound = 442, - MailDatabaseError = 443, - MailDeleteItemError = 444, - MailWrappedCod = 445, - MailCantSendRealm = 446, - MailTempReturnOutage = 447, - MailRecepientCantReceiveMail = 448, - MailSent = 449, - MailTargetIsTrial = 450, - NotHappyEnough = 451, - UseCantImmune = 452, - CantBeDisenchanted = 453, - CantUseDisarmed = 454, - AuctionDatabaseError = 455, - AuctionHigherBid = 456, - AuctionAlreadyBid = 457, - AuctionOutbidS = 458, - AuctionWonS = 459, - AuctionRemovedS = 460, - AuctionBidPlaced = 461, - LogoutFailed = 462, - QuestPushSuccessS = 463, - QuestPushInvalidS = 464, - QuestPushInvalidToRecipientS = 465, - QuestPushAcceptedS = 466, - QuestPushDeclinedS = 467, - QuestPushBusyS = 468, - QuestPushDeadS = 469, - QuestPushDeadToRecipientS = 470, - QuestPushLogFullS = 471, - QuestPushLogFullToRecipientS = 472, - QuestPushOnquestS = 473, - QuestPushOnquestToRecipientS = 474, - QuestPushAlreadyDoneS = 475, - QuestPushAlreadyDoneToRecipientS = 476, - QuestPushNotDailyS = 477, - QuestPushTimerExpiredS = 478, - QuestPushNotInPartyS = 479, - QuestPushDifferentServerDailyS = 480, - QuestPushDifferentServerDailyToRecipientS = 481, - QuestPushNotAllowedS = 482, - QuestPushPrerequisiteS = 483, - QuestPushPrerequisiteToRecipientS = 484, - QuestPushLowLevelS = 485, - QuestPushLowLevelToRecipientS = 486, - QuestPushHighLevelS = 487, - QuestPushHighLevelToRecipientS = 488, - QuestPushClassS = 489, - QuestPushClassToRecipientS = 490, - QuestPushRaceS = 491, - QuestPushRaceToRecipientS = 492, - QuestPushLowFactionS = 493, - QuestPushLowFactionToRecipientS = 494, - QuestPushHighFactionS = 495, - QuestPushHighFactionToRecipientS = 496, - QuestPushExpansionS = 497, - QuestPushExpansionToRecipientS = 498, - QuestPushNotGarrisonOwnerS = 499, - QuestPushNotGarrisonOwnerToRecipientS = 500, - QuestPushWrongCovenantS = 501, - QuestPushWrongCovenantToRecipientS = 502, - QuestPushNewPlayerExperienceS = 503, - QuestPushNewPlayerExperienceToRecipientS = 504, - QuestPushWrongFactionS = 505, - QuestPushWrongFactionToRecipientS = 506, - QuestPushCrossFactionRestrictedS = 507, - RaidGroupLowlevel = 508, - RaidGroupOnly = 509, - RaidGroupFull = 510, - RaidGroupRequirementsUnmatch = 511, - CorpseIsNotInInstance = 512, - PvpKillHonorable = 513, - PvpKillDishonorable = 514, - SpellFailedAlreadyAtFullHealth = 515, - SpellFailedAlreadyAtFullMana = 516, - SpellFailedAlreadyAtFullPowerS = 517, - AutolootMoneyS = 518, - GenericStunned = 519, - GenericThrottle = 520, - ClubFinderSearchingTooFast = 521, - TargetStunned = 522, - MustRepairDurability = 523, - RaidYouJoined = 524, - RaidYouLeft = 525, - InstanceGroupJoinedWithParty = 526, - InstanceGroupJoinedWithRaid = 527, - RaidMemberAddedS = 528, - RaidMemberRemovedS = 529, - InstanceGroupAddedS = 530, - InstanceGroupRemovedS = 531, - ClickOnItemToFeed = 532, - TooManyChatChannels = 533, - LootRollPending = 534, - LootPlayerNotFound = 535, - NotInRaid = 536, - LoggingOut = 537, - TargetLoggingOut = 538, - NotWhileMounted = 539, - NotWhileShapeshifted = 540, - NotInCombat = 541, - NotWhileDisarmed = 542, - PetBroken = 543, - TalentWipeError = 544, - SpecWipeError = 545, - GlyphWipeError = 546, - PetSpecWipeError = 547, - FeignDeathResisted = 548, - MeetingStoneInQueueS = 549, - MeetingStoneLeftQueueS = 550, - MeetingStoneOtherMemberLeft = 551, - MeetingStonePartyKickedFromQueue = 552, - MeetingStoneMemberStillInQueue = 553, - MeetingStoneSuccess = 554, - MeetingStoneInProgress = 555, - MeetingStoneMemberAddedS = 556, - MeetingStoneGroupFull = 557, - MeetingStoneNotLeader = 558, - MeetingStoneInvalidLevel = 559, - MeetingStoneTargetNotInParty = 560, - MeetingStoneTargetInvalidLevel = 561, - MeetingStoneMustBeLeader = 562, - MeetingStoneNoRaidGroup = 563, - MeetingStoneNeedParty = 564, - MeetingStoneNotFound = 565, - MeetingStoneTargetInVehicle = 566, - GuildemblemSame = 567, - EquipTradeItem = 568, - PvpToggleOn = 569, - PvpToggleOff = 570, - GroupJoinBattlegroundDeserters = 571, - GroupJoinBattlegroundDead = 572, - GroupJoinBattlegroundS = 573, - GroupJoinBattlegroundFail = 574, - GroupJoinBattlegroundTooMany = 575, - SoloJoinBattlegroundS = 576, - JoinSingleScenarioS = 577, - BattlegroundTooManyQueues = 578, - BattlegroundCannotQueueForRated = 579, - BattledgroundQueuedForRated = 580, - BattlegroundTeamLeftQueue = 581, - BattlegroundNotInBattleground = 582, - AlreadyInArenaTeamS = 583, - InvalidPromotionCode = 584, - BgPlayerJoinedSs = 585, - BgPlayerLeftS = 586, - RestrictedAccount = 587, - RestrictedAccountTrial = 588, - PlayTimeExceeded = 589, - ApproachingPartialPlayTime = 590, - ApproachingPartialPlayTime2 = 591, - ApproachingNoPlayTime = 592, - ApproachingNoPlayTime2 = 593, - UnhealthyTime = 594, - ChatRestrictedTrial = 595, - ChatThrottled = 596, - MailReachedCap = 597, - InvalidRaidTarget = 598, - RaidLeaderReadyCheckStartS = 599, - ReadyCheckInProgress = 600, - ReadyCheckThrottled = 601, - DungeonDifficultyFailed = 602, - DungeonDifficultyChangedS = 603, - TradeWrongRealm = 604, - TradeNotOnTaplist = 605, - ChatPlayerAmbiguousS = 606, - LootCantLootThatNow = 607, - LootMasterInvFull = 608, - LootMasterUniqueItem = 609, - LootMasterOther = 610, - FilteringYouS = 611, - UsePreventedByMechanicS = 612, - ItemUniqueEquippable = 613, - LfgLeaderIsLfmS = 614, - LfgPending = 615, - CantSpeakLangage = 616, - VendorMissingTurnins = 617, - BattlegroundNotInTeam = 618, - NotInBattleground = 619, - NotEnoughHonorPoints = 620, - NotEnoughArenaPoints = 621, - SocketingRequiresMetaGem = 622, - SocketingMetaGemOnlyInMetaslot = 623, - SocketingRequiresHydraulicGem = 624, - SocketingHydraulicGemOnlyInHydraulicslot = 625, - SocketingRequiresCogwheelGem = 626, - SocketingCogwheelGemOnlyInCogwheelslot = 627, - SocketingItemTooLowLevel = 628, - ItemMaxCountSocketed = 629, - SystemDisabled = 630, - QuestFailedTooManyDailyQuestsI = 631, - ItemMaxCountEquippedSocketed = 632, - ItemUniqueEquippableSocketed = 633, - UserSquelched = 634, - AccountSilenced = 635, - PartyMemberSilenced = 636, - PartyMemberSilencedLfgDelist = 637, - TooMuchGold = 638, - NotBarberSitting = 639, - QuestFailedCais = 640, - InviteRestrictedTrial = 641, - VoiceIgnoreFull = 642, - VoiceIgnoreSelf = 643, - VoiceIgnoreNotFound = 644, - VoiceIgnoreAlreadyS = 645, - VoiceIgnoreAddedS = 646, - VoiceIgnoreRemovedS = 647, - VoiceIgnoreAmbiguous = 648, - VoiceIgnoreDeleted = 649, - UnknownMacroOptionS = 650, - NotDuringArenaMatch = 651, - NotInRatedBattleground = 652, - PlayerSilenced = 653, - PlayerUnsilenced = 654, - ComsatDisconnect = 655, - ComsatReconnectAttempt = 656, - ComsatConnectFail = 657, - MailInvalidAttachmentSlot = 658, - MailTooManyAttachments = 659, - MailInvalidAttachment = 660, - MailAttachmentExpired = 661, - VoiceChatParentalDisableMic = 662, - ProfaneChatName = 663, - PlayerSilencedEcho = 664, - PlayerUnsilencedEcho = 665, - LootCantLootThat = 666, - ArenaExpiredCais = 667, - GroupActionThrottled = 668, - AlreadyPickpocketed = 669, - NameInvalid = 670, - NameNoName = 671, - NameTooShort = 672, - NameTooLong = 673, - NameMixedLanguages = 674, - NameProfane = 675, - NameReserved = 676, - NameThreeConsecutive = 677, - NameInvalidSpace = 678, - NameConsecutiveSpaces = 679, - NameRussianConsecutiveSilentCharacters = 680, - NameRussianSilentCharacterAtBeginningOrEnd = 681, - NameDeclensionDoesntMatchBaseName = 682, - RecruitAFriendNotLinked = 683, - RecruitAFriendNotNow = 684, - RecruitAFriendSummonLevelMax = 685, - RecruitAFriendSummonCooldown = 686, - RecruitAFriendSummonOffline = 687, - RecruitAFriendInsufExpanLvl = 688, - RecruitAFriendMapIncomingTransferNotAllowed = 689, - NotSameAccount = 690, - BadOnUseEnchant = 691, - TradeSelf = 692, - TooManySockets = 693, - ItemMaxLimitCategoryCountExceededIs = 694, - TradeTargetMaxLimitCategoryCountExceededIs = 695, - ItemMaxLimitCategorySocketedExceededIs = 696, - ItemMaxLimitCategoryEquippedExceededIs = 697, - ShapeshiftFormCannotEquip = 698, - ItemInventoryFullSatchel = 699, - ScalingStatItemLevelExceeded = 700, - ScalingStatItemLevelTooLow = 701, - PurchaseLevelTooLow = 702, - GroupSwapFailed = 703, - InviteInCombat = 704, - InvalidGlyphSlot = 705, - GenericNoValidTargets = 706, - CalendarEventAlertS = 707, - PetLearnSpellS = 708, - PetLearnAbilityS = 709, - PetSpellUnlearnedS = 710, - InviteUnknownRealm = 711, - InviteNoPartyServer = 712, - InvitePartyBusy = 713, - InvitePartyBusyPendingRequest = 714, - InvitePartyBusyPendingSuggest = 715, - PartyTargetAmbiguous = 716, - PartyLfgInviteRaidLocked = 717, - PartyLfgBootLimit = 718, - PartyLfgBootCooldownS = 719, - PartyLfgBootNotEligibleS = 720, - PartyLfgBootInpatientTimerS = 721, - PartyLfgBootInProgress = 722, - PartyLfgBootTooFewPlayers = 723, - PartyLfgBootVoteSucceeded = 724, - PartyLfgBootVoteFailed = 725, - PartyLfgBootDisallowedByMap = 726, - PartyLfgBootDungeonComplete = 727, - PartyLfgBootLootRolls = 728, - PartyLfgBootVoteRegistered = 729, - PartyPrivateGroupOnly = 730, - PartyLfgTeleportInCombat = 731, - PartyTimeRunningSeasonIdMustMatch = 732, - RaidDisallowedByLevel = 733, - RaidDisallowedByCrossRealm = 734, - PartyRoleNotAvailable = 735, - JoinLfgObjectFailed = 736, - LfgRemovedLevelup = 737, - LfgRemovedXpToggle = 738, - LfgRemovedFactionChange = 739, - BattlegroundInfoThrottled = 740, - BattlegroundAlreadyIn = 741, - ArenaTeamChangeFailedQueued = 742, - ArenaTeamPermissions = 743, - NotWhileFalling = 744, - NotWhileMoving = 745, - NotWhileFatigued = 746, - MaxSockets = 747, - MultiCastActionTotemS = 748, - BattlegroundJoinLevelup = 749, - RemoveFromPvpQueueXpGain = 750, - BattlegroundJoinXpGain = 751, - BattlegroundJoinMercenary = 752, - BattlegroundJoinTooManyHealers = 753, - BattlegroundJoinRatedTooManyHealers = 754, - BattlegroundJoinTooManyTanks = 755, - BattlegroundJoinTooManyDamage = 756, - RaidDifficultyFailed = 757, - RaidDifficultyChangedS = 758, - LegacyRaidDifficultyChangedS = 759, - RaidLockoutChangedS = 760, - RaidConvertedToParty = 761, - PartyConvertedToRaid = 762, - PlayerDifficultyChangedS = 763, - GmresponseDbError = 764, - BattlegroundJoinRangeIndex = 765, - ArenaJoinRangeIndex = 766, - RemoveFromPvpQueueFactionChange = 767, - BattlegroundJoinFailed = 768, - BattlegroundJoinNoValidSpecForRole = 769, - BattlegroundJoinRespec = 770, - BattlegroundInvitationDeclined = 771, - BattlegroundInvitationDeclinedBy = 772, - BattlegroundJoinTimedOut = 773, - BattlegroundDupeQueue = 774, - BattlegroundJoinMustCompleteQuest = 775, - InBattlegroundRespec = 776, - MailLimitedDurationItem = 777, - YellRestrictedTrial = 778, - ChatRaidRestrictedTrial = 779, - LfgRoleCheckFailed = 780, - LfgRoleCheckFailedTimeout = 781, - LfgRoleCheckFailedNotViable = 782, - LfgReadyCheckFailed = 783, - LfgReadyCheckFailedTimeout = 784, - LfgGroupFull = 785, - LfgNoLfgObject = 786, - LfgNoSlotsPlayer = 787, - LfgNoSlotsParty = 788, - LfgNoSpec = 789, - LfgMismatchedSlots = 790, - LfgMismatchedSlotsLocalXrealm = 791, - LfgPartyPlayersFromDifferentRealms = 792, - LfgMembersNotPresent = 793, - LfgGetInfoTimeout = 794, - LfgInvalidSlot = 795, - LfgDeserterPlayer = 796, - LfgDeserterParty = 797, - LfgDead = 798, - LfgRandomCooldownPlayer = 799, - LfgRandomCooldownParty = 800, - LfgTooManyMembers = 801, - LfgTooFewMembers = 802, - LfgProposalFailed = 803, - LfgProposalDeclinedSelf = 804, - LfgProposalDeclinedParty = 805, - LfgNoSlotsSelected = 806, - LfgNoRolesSelected = 807, - LfgRoleCheckInitiated = 808, - LfgReadyCheckInitiated = 809, - LfgPlayerDeclinedRoleCheck = 810, - LfgPlayerDeclinedReadyCheck = 811, - LfgJoinedQueue = 812, - LfgJoinedFlexQueue = 813, - LfgJoinedRfQueue = 814, - LfgJoinedScenarioQueue = 815, - LfgJoinedWorldPvpQueue = 816, - LfgJoinedBattlefieldQueue = 817, - LfgJoinedList = 818, - LfgLeftQueue = 819, - LfgLeftList = 820, - LfgRoleCheckAborted = 821, - LfgReadyCheckAborted = 822, - LfgCantUseBattleground = 823, - LfgCantUseDungeons = 824, - LfgReasonTooManyLfg = 825, - LfgFarmLimit = 826, - LfgNoCrossFactionParties = 827, - InvalidTeleportLocation = 828, - TooFarToInteract = 829, - BattlegroundPlayersFromDifferentRealms = 830, - DifficultyChangeCooldownS = 831, - DifficultyChangeCombatCooldownS = 832, - DifficultyChangeWorldstate = 833, - DifficultyChangeEncounter = 834, - DifficultyChangeCombat = 835, - DifficultyChangePlayerBusy = 836, - DifficultyChangePlayerOnVehicle = 837, - DifficultyChangeAlreadyStarted = 838, - DifficultyChangeOtherHeroicS = 839, - DifficultyChangeHeroicInstanceAlreadyRunning = 840, - ArenaTeamPartySize = 841, - SoloShuffleWargameGroupSize = 842, - SoloShuffleWargameGroupComp = 843, - SoloMinItemLevel = 844, - PvpPlayerAbandoned = 845, - BattlegroundJoinGroupQueueWithoutHealer = 846, - QuestForceRemovedS = 847, - AttackNoActions = 848, - InRandomBg = 849, - InNonRandomBg = 850, - BnFriendSelf = 851, - BnFriendAlready = 852, - BnFriendBlocked = 853, - BnFriendListFull = 854, - BnFriendRequestSent = 855, - BnBroadcastThrottle = 856, - BgDeveloperOnly = 857, - CurrencySpellSlotMismatch = 858, - CurrencyNotTradable = 859, - RequiresExpansionS = 860, - QuestFailedSpell = 861, - TalentFailedUnspentTalentPoints = 862, - TalentFailedNotEnoughTalentsInPrimaryTree = 863, - TalentFailedNoPrimaryTreeSelected = 864, - TalentFailedCantRemoveTalent = 865, - TalentFailedUnknown = 866, - TalentFailedInCombat = 867, - TalentFailedInPvpMatch = 868, - TalentFailedInMythicPlus = 869, - WargameRequestFailure = 870, - RankRequiresAuthenticator = 871, - GuildBankVoucherFailed = 872, - WargameRequestSent = 873, - RequiresAchievementI = 874, - RefundResultExceedMaxCurrency = 875, - CantBuyQuantity = 876, - ItemIsBattlePayLocked = 877, - PartyAlreadyInBattlegroundQueue = 878, - PartyConfirmingBattlegroundQueue = 879, - BattlefieldTeamPartySize = 880, - InsuffTrackedCurrencyIs = 881, - NotOnTournamentRealm = 882, - GuildTrialAccountTrial = 883, - GuildTrialAccountVeteran = 884, - GuildUndeletableDueToLevel = 885, - CantDoThatInAGroup = 886, - GuildLeaderReplaced = 887, - TransmogrifyCantEquip = 888, - TransmogrifyInvalidItemType = 889, - TransmogrifyNotSoulbound = 890, - TransmogrifyInvalidSource = 891, - TransmogrifyInvalidDestination = 892, - TransmogrifyMismatch = 893, - TransmogrifyLegendary = 894, - TransmogrifySameItem = 895, - TransmogrifySameAppearance = 896, - TransmogrifyNotEquipped = 897, - VoidDepositFull = 898, - VoidWithdrawFull = 899, - VoidStorageWrapped = 900, - VoidStorageStackable = 901, - VoidStorageUnbound = 902, - VoidStorageRepair = 903, - VoidStorageCharges = 904, - VoidStorageQuest = 905, - VoidStorageConjured = 906, - VoidStorageMail = 907, - VoidStorageBag = 908, - VoidTransferStorageFull = 909, - VoidTransferInvFull = 910, - VoidTransferInternalError = 911, - VoidTransferItemInvalid = 912, - DifficultyDisabledInLfg = 913, - VoidStorageUnique = 914, - VoidStorageLoot = 915, - VoidStorageHoliday = 916, - VoidStorageDuration = 917, - VoidStorageLoadFailed = 918, - VoidStorageInvalidItem = 919, - ParentalControlsChatMuted = 920, - SorStartExperienceIncomplete = 921, - SorInvalidEmail = 922, - SorInvalidComment = 923, - ChallengeModeResetCooldownS = 924, - ChallengeModeResetKeystone = 925, - PetJournalAlreadyInLoadout = 926, - ReportSubmittedSuccessfully = 927, - ReportSubmissionFailed = 928, - SuggestionSubmittedSuccessfully = 929, - BugSubmittedSuccessfully = 930, - ChallengeModeEnabled = 931, - ChallengeModeDisabled = 932, - PetbattleCreateFailed = 933, - PetbattleNotHere = 934, - PetbattleNotHereOnTransport = 935, - PetbattleNotHereUnevenGround = 936, - PetbattleNotHereObstructed = 937, - PetbattleNotWhileInCombat = 938, - PetbattleNotWhileDead = 939, - PetbattleNotWhileFlying = 940, - PetbattleTargetInvalid = 941, - PetbattleTargetOutOfRange = 942, - PetbattleTargetNotCapturable = 943, - PetbattleNotATrainer = 944, - PetbattleDeclined = 945, - PetbattleInBattle = 946, - PetbattleInvalidLoadout = 947, - PetbattleAllPetsDead = 948, - PetbattleNoPetsInSlots = 949, - PetbattleNoAccountLock = 950, - PetbattleWildPetTapped = 951, - PetbattleRestrictedAccount = 952, - PetbattleOpponentNotAvailable = 953, - PetbattleNotWhileInMatchedBattle = 954, - CantHaveMorePetsOfThatType = 955, - CantHaveMorePets = 956, - PvpMapNotFound = 957, - PvpMapNotSet = 958, - PetbattleQueueQueued = 959, - PetbattleQueueAlreadyQueued = 960, - PetbattleQueueJoinFailed = 961, - PetbattleQueueJournalLock = 962, - PetbattleQueueRemoved = 963, - PetbattleQueueProposalDeclined = 964, - PetbattleQueueProposalTimeout = 965, - PetbattleQueueOpponentDeclined = 966, - PetbattleQueueRequeuedInternal = 967, - PetbattleQueueRequeuedRemoved = 968, - PetbattleQueueSlotLocked = 969, - PetbattleQueueSlotEmpty = 970, - PetbattleQueueSlotNoTracker = 971, - PetbattleQueueSlotNoSpecies = 972, - PetbattleQueueSlotCantBattle = 973, - PetbattleQueueSlotRevoked = 974, - PetbattleQueueSlotDead = 975, - PetbattleQueueSlotNoPet = 976, - PetbattleQueueNotWhileNeutral = 977, - PetbattleGameTimeLimitWarning = 978, - PetbattleGameRoundsLimitWarning = 979, - HasRestriction = 980, - ItemUpgradeItemTooLowLevel = 981, - ItemUpgradeNoPath = 982, - ItemUpgradeNoMoreUpgrades = 983, - BonusRollEmpty = 984, - ChallengeModeFull = 985, - ChallengeModeInProgress = 986, - ChallengeModeIncorrectKeystone = 987, - BattletagFriendNotFound = 988, - BattletagFriendNotValid = 989, - BattletagFriendNotAllowed = 990, - BattletagFriendThrottled = 991, - BattletagFriendSuccess = 992, - PetTooHighLevelToUncage = 993, - PetbattleInternal = 994, - CantCagePetYet = 995, - NoLootInChallengeMode = 996, - QuestPetBattleVictoriesPvpIi = 997, - RoleCheckAlreadyInProgress = 998, - RecruitAFriendAccountLimit = 999, - RecruitAFriendFailed = 1000, - SetLootPersonal = 1001, - SetLootMethodFailedCombat = 1002, - ReagentBankFull = 1003, - ReagentBankLocked = 1004, - GarrisonBuildingExists = 1005, - GarrisonInvalidPlot = 1006, - GarrisonInvalidBuildingid = 1007, - GarrisonInvalidPlotBuilding = 1008, - GarrisonRequiresBlueprint = 1009, - GarrisonNotEnoughCurrency = 1010, - GarrisonNotEnoughGold = 1011, - GarrisonCompleteMissionWrongFollowerType = 1012, - AlreadyUsingLfgList = 1013, - RestrictedAccountLfgListTrial = 1014, - ToyUseLimitReached = 1015, - ToyAlreadyKnown = 1016, - TransmogSetAlreadyKnown = 1017, - NotEnoughCurrency = 1018, - SpecIsDisabled = 1019, - FeatureRestrictedTrial = 1020, - CantBeObliterated = 1021, - CantBeScrapped = 1022, - CantBeRecrafted = 1023, - ArtifactRelicDoesNotMatchArtifact = 1024, - MustEquipArtifact = 1025, - CantDoThatRightNow = 1026, - AffectingCombat = 1027, - EquipmentManagerCombatSwapS = 1028, - EquipmentManagerBagsFull = 1029, - EquipmentManagerMissingItemS = 1030, - MovieRecordingWarningPerf = 1031, - MovieRecordingWarningDiskFull = 1032, - MovieRecordingWarningNoMovie = 1033, - MovieRecordingWarningRequirements = 1034, - MovieRecordingWarningCompressing = 1035, - NoChallengeModeReward = 1036, - ClaimedChallengeModeReward = 1037, - ChallengeModePeriodResetSs = 1038, - CantDoThatChallengeModeActive = 1039, - TalentFailedRestArea = 1040, - CannotAbandonLastPet = 1041, - TestCvarSetSss = 1042, - QuestTurnInFailReason = 1043, - ClaimedChallengeModeRewardOld = 1044, - TalentGrantedByAura = 1045, - ChallengeModeAlreadyComplete = 1046, - GlyphTargetNotAvailable = 1047, - PvpWarmodeToggleOn = 1048, - PvpWarmodeToggleOff = 1049, - SpellFailedLevelRequirement = 1050, - SpellFailedCantFlyHere = 1051, - BattlegroundJoinRequiresLevel = 1052, - BattlegroundJoinDisqualified = 1053, - BattlegroundJoinDisqualifiedNoName = 1054, - VoiceChatGenericUnableToConnect = 1055, - VoiceChatServiceLost = 1056, - VoiceChatChannelNameTooShort = 1057, - VoiceChatChannelNameTooLong = 1058, - VoiceChatChannelAlreadyExists = 1059, - VoiceChatTargetNotFound = 1060, - VoiceChatTooManyRequests = 1061, - VoiceChatPlayerSilenced = 1062, - VoiceChatParentalDisableAll = 1063, - VoiceChatDisabled = 1064, - NoPvpReward = 1065, - ClaimedPvpReward = 1066, - AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1067, - AzeriteEssenceSelectionFailedCantRemoveEssence = 1068, - AzeriteEssenceSelectionFailedConditionFailed = 1069, - AzeriteEssenceSelectionFailedRestArea = 1070, - AzeriteEssenceSelectionFailedSlotLocked = 1071, - AzeriteEssenceSelectionFailedNotAtForge = 1072, - AzeriteEssenceSelectionFailedHeartLevelTooLow = 1073, - AzeriteEssenceSelectionFailedNotEquipped = 1074, - SocketingRequiresPunchcardredGem = 1075, - SocketingPunchcardredGemOnlyInPunchcardredslot = 1076, - SocketingRequiresPunchcardyellowGem = 1077, - SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1078, - SocketingRequiresPunchcardblueGem = 1079, - SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1080, - SocketingRequiresDominationShard = 1081, - SocketingDominationShardOnlyInDominationslot = 1082, - SocketingRequiresCypherGem = 1083, - SocketingCypherGemOnlyInCypherslot = 1084, - SocketingRequiresTinkerGem = 1085, - SocketingTinkerGemOnlyInTinkerslot = 1086, - SocketingRequiresPrimordialGem = 1087, - SocketingPrimordialGemOnlyInPrimordialslot = 1088, - LevelLinkingResultLinked = 1089, - LevelLinkingResultUnlinked = 1090, - ClubFinderErrorPostClub = 1091, - ClubFinderErrorApplyClub = 1092, - ClubFinderErrorRespondApplicant = 1093, - ClubFinderErrorCancelApplication = 1094, - ClubFinderErrorTypeAcceptApplication = 1095, - ClubFinderErrorTypeNoInvitePermissions = 1096, - ClubFinderErrorTypeNoPostingPermissions = 1097, - ClubFinderErrorTypeApplicantList = 1098, - ClubFinderErrorTypeApplicantListNoPerm = 1099, - ClubFinderErrorTypeFinderNotAvailable = 1100, - ClubFinderErrorTypeGetPostingIds = 1101, - ClubFinderErrorTypeJoinApplication = 1102, - ClubFinderErrorTypeRealmNotEligible = 1103, - ClubFinderErrorTypeFlaggedRename = 1104, - ClubFinderErrorTypeFlaggedDescriptionChange = 1105, - ItemInteractionNotEnoughGold = 1106, - ItemInteractionNotEnoughCurrency = 1107, - ItemInteractionNoConversionOutput = 1108, - PlayerChoiceErrorPendingChoice = 1109, - SoulbindInvalidConduit = 1110, - SoulbindInvalidConduitItem = 1111, - SoulbindInvalidTalent = 1112, - SoulbindDuplicateConduit = 1113, - ActivateSoulbindS = 1114, - ActivateSoulbindFailedRestArea = 1115, - CantUseProfanity = 1116, - NotInPetBattle = 1117, - NotInNpe = 1118, - NoSpec = 1119, - NoDominationshardOverwrite = 1120, - UseWeeklyRewardsDisabled = 1121, - CrossFactionGroupJoined = 1122, - CantTargetUnfriendlyInOverworld = 1123, - EquipablespellsSlotsFull = 1124, - ItemModAppearanceGroupAlreadyKnown = 1125, - CantBulkSellItemWithRefund = 1126, - WowLabsPartyErrorTypePartyIsFull = 1127, - WowLabsPartyErrorTypeMaxInviteSent = 1128, - WowLabsPartyErrorTypePlayerAlreadyInvited = 1129, - WowLabsPartyErrorTypePartyInviteInvalid = 1130, - WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1131, - WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1132, - TargetIsSelfFoundCannotTrade = 1133, - PlayerIsSelfFoundCannotTrade = 1134, - MailRecepientIsSelfFoundCannotReceiveMail = 1135, - PlayerIsSelfFoundCannotSendMail = 1136, - PlayerIsSelfFoundCannotUseAuctionHouse = 1137, - MailTargetCannotReceiveMail = 1138, + NoAccountBankHere = 38, + ItemLocked = 39, + Handed2Equipped = 40, + VendorNotInterested = 41, + VendorRefuseScrappableAzerite = 42, + VendorHatesYou = 43, + VendorSoldOut = 44, + VendorTooFar = 45, + VendorDoesntBuy = 46, + NotEnoughMoney = 47, + ReceiveItemS = 48, + DropBoundItem = 49, + TradeBoundItem = 50, + TradeQuestItem = 51, + TradeTempEnchantBound = 52, + TradeGroundItem = 53, + TradeBag = 54, + TradeFactionSpecific = 55, + SpellFailedS = 56, + ItemCooldown = 57, + PotionCooldown = 58, + FoodCooldown = 59, + SpellCooldown = 60, + AbilityCooldown = 61, + SpellAlreadyKnownS = 62, + PetSpellAlreadyKnownS = 63, + ProficiencyGainedS = 64, + SkillGainedS = 65, + SkillUpSi = 66, + LearnSpellS = 67, + LearnAbilityS = 68, + LearnPassiveS = 69, + LearnRecipeS = 70, + ProfessionsRecipeDiscoveryS = 71, + LearnCompanionS = 72, + LearnMountS = 73, + LearnToyS = 74, + LearnHeirloomS = 75, + LearnTransmogS = 76, + CompletedTransmogSetS = 77, + AppearanceAlreadyLearned = 78, + RevokeTransmogS = 79, + InvitePlayerS = 80, + SuggestInvitePlayerS = 81, + InformSuggestInviteS = 82, + InformSuggestInviteSs = 83, + RequestJoinPlayerS = 84, + InviteSelf = 85, + InvitedToGroupSs = 86, + InvitedAlreadyInGroupSs = 87, + AlreadyInGroupS = 88, + RequestedInviteToGroupSs = 89, + CrossRealmRaidInvite = 90, + PlayerBusyS = 91, + NewLeaderS = 92, + NewLeaderYou = 93, + NewGuideS = 94, + NewGuideYou = 95, + LeftGroupS = 96, + LeftGroupYou = 97, + GroupDisbanded = 98, + DeclineGroupS = 99, + DeclineGroupRequestS = 100, + JoinedGroupS = 101, + UninviteYou = 102, + BadPlayerNameS = 103, + NotInGroup = 104, + TargetNotInGroupS = 105, + TargetNotInInstanceS = 106, + NotInInstanceGroup = 107, + GroupFull = 108, + NotLeader = 109, + PlayerDiedS = 110, + GuildCreateS = 111, + GuildInviteS = 112, + InvitedToGuildSss = 113, + AlreadyInGuildS = 114, + AlreadyInvitedToGuildS = 115, + InvitedToGuild = 116, + AlreadyInGuild = 117, + GuildAccept = 118, + GuildDeclineS = 119, + GuildDeclineAutoS = 120, + GuildPermissions = 121, + GuildJoinS = 122, + GuildFounderS = 123, + GuildPromoteSss = 124, + GuildDemoteSs = 125, + GuildDemoteSss = 126, + GuildInviteSelf = 127, + GuildQuitS = 128, + GuildLeaveS = 129, + GuildRemoveSs = 130, + GuildRemoveSelf = 131, + GuildDisbandS = 132, + GuildDisbandSelf = 133, + GuildLeaderS = 134, + GuildLeaderSelf = 135, + GuildPlayerNotFoundS = 136, + GuildPlayerNotInGuildS = 137, + GuildPlayerNotInGuild = 138, + GuildBankNotAvailable = 139, + GuildCantPromoteS = 140, + GuildCantDemoteS = 141, + GuildNotInAGuild = 142, + GuildInternal = 143, + GuildLeaderIsS = 144, + GuildLeaderChangedSs = 145, + GuildDisbanded = 146, + GuildNotAllied = 147, + GuildNewLeaderNotAllied = 148, + GuildLeaderLeave = 149, + GuildRanksLocked = 150, + GuildRankInUse = 151, + GuildRankTooHighS = 152, + GuildRankTooLowS = 153, + GuildNameExistsS = 154, + GuildWithdrawLimit = 155, + GuildNotEnoughMoney = 156, + GuildTooMuchMoney = 157, + GuildBankConjuredItem = 158, + GuildBankEquippedItem = 159, + GuildBankBoundItem = 160, + GuildBankQuestItem = 161, + GuildBankWrappedItem = 162, + GuildBankFull = 163, + GuildBankWrongTab = 164, + GuildNewLeaderWrongRealm = 165, + NoGuildCharter = 166, + OutOfRange = 167, + PlayerDead = 168, + ClientLockedOut = 169, + ClientOnTransport = 170, + KilledByS = 171, + LootLocked = 172, + LootTooFar = 173, + LootDidntKill = 174, + LootBadFacing = 175, + LootNotstanding = 176, + LootStunned = 177, + LootNoUi = 178, + LootWhileInvulnerable = 179, + NoLoot = 180, + QuestAcceptedS = 181, + QuestCompleteS = 182, + QuestFailedS = 183, + QuestFailedBagFullS = 184, + QuestFailedMaxCountS = 185, + QuestFailedLowLevel = 186, + QuestFailedMissingItems = 187, + QuestFailedWrongRace = 188, + QuestFailedNotEnoughMoney = 189, + QuestFailedExpansion = 190, + QuestOnlyOneTimed = 191, + QuestNeedPrereqs = 192, + QuestNeedPrereqsCustom = 193, + QuestAlreadyOn = 194, + QuestAlreadyDone = 195, + QuestAlreadyDoneDaily = 196, + QuestHasInProgress = 197, + QuestRewardExpI = 198, + QuestRewardMoneyS = 199, + QuestMustChoose = 200, + QuestLogFull = 201, + CombatDamageSsi = 202, + InspectS = 203, + CantUseItem = 204, + CantUseItemInArena = 205, + CantUseItemInRatedBattleground = 206, + MustEquipItem = 207, + PassiveAbility = 208, + H2SkillNotFound = 209, + NoAttackTarget = 210, + InvalidAttackTarget = 211, + AttackPvpTargetWhileUnflagged = 212, + AttackStunned = 213, + AttackPacified = 214, + AttackMounted = 215, + AttackFleeing = 216, + AttackConfused = 217, + AttackCharmed = 218, + AttackDead = 219, + AttackPreventedByMechanicS = 220, + AttackChannel = 221, + Taxisamenode = 222, + Taxinosuchpath = 223, + Taxiunspecifiedservererror = 224, + Taxinotenoughmoney = 225, + Taxitoofaraway = 226, + Taxinovendornearby = 227, + Taxinotvisited = 228, + Taxiplayerbusy = 229, + Taxiplayeralreadymounted = 230, + Taxiplayershapeshifted = 231, + Taxiplayermoving = 232, + Taxinopaths = 233, + Taxinoteligible = 234, + Taxinotstanding = 235, + Taxiincombat = 236, + NoReplyTarget = 237, + GenericNoTarget = 238, + InitiateTradeS = 239, + TradeRequestS = 240, + TradeBlockedS = 241, + TradeTargetDead = 242, + TradeTooFar = 243, + TradeCancelled = 244, + TradeComplete = 245, + TradeBagFull = 246, + TradeTargetBagFull = 247, + TradeMaxCountExceeded = 248, + TradeTargetMaxCountExceeded = 249, + InventoryTradeTooManyUniqueItem = 250, + AlreadyTrading = 251, + MountInvalidmountee = 252, + MountToofaraway = 253, + MountAlreadymounted = 254, + MountNotmountable = 255, + MountNotyourpet = 256, + MountOther = 257, + MountLooting = 258, + MountRacecantmount = 259, + MountShapeshifted = 260, + MountNoFavorites = 261, + MountNoMounts = 262, + DismountNopet = 263, + DismountNotmounted = 264, + DismountNotyourpet = 265, + SpellFailedTotems = 266, + SpellFailedReagents = 267, + SpellFailedReagentsGeneric = 268, + SpellFailedOptionalReagents = 269, + CantTradeGold = 270, + SpellFailedEquippedItem = 271, + SpellFailedEquippedItemClassS = 272, + SpellFailedShapeshiftFormS = 273, + SpellFailedAnotherInProgress = 274, + Badattackfacing = 275, + Badattackpos = 276, + ChestInUse = 277, + UseCantOpen = 278, + UseLocked = 279, + DoorLocked = 280, + ButtonLocked = 281, + UseLockedWithItemS = 282, + UseLockedWithSpellS = 283, + UseLockedWithSpellKnownSi = 284, + UseTooFar = 285, + UseBadAngle = 286, + UseObjectMoving = 287, + UseSpellFocus = 288, + UseDestroyed = 289, + SetLootFreeforall = 290, + SetLootRoundrobin = 291, + SetLootMaster = 292, + SetLootGroup = 293, + SetLootThresholdS = 294, + NewLootMasterS = 295, + SpecifyMasterLooter = 296, + LootSpecChangedS = 297, + TameFailed = 298, + ChatWhileDead = 299, + ChatPlayerNotFoundS = 300, + Newtaxipath = 301, + NoPet = 302, + Notyourpet = 303, + PetNotRenameable = 304, + QuestObjectiveCompleteS = 305, + QuestUnknownComplete = 306, + QuestAddKillSii = 307, + QuestAddFoundSii = 308, + QuestAddItemSii = 309, + QuestAddPlayerKillSii = 310, + Cannotcreatedirectory = 311, + Cannotcreatefile = 312, + PlayerWrongFaction = 313, + PlayerIsNeutral = 314, + BankslotFailedTooMany = 315, + BankslotInsufficientFunds = 316, + BankslotNotbanker = 317, + FriendDbError = 318, + FriendListFull = 319, + FriendAddedS = 320, + BattletagFriendAddedS = 321, + FriendOnlineSs = 322, + FriendOfflineS = 323, + FriendNotFound = 324, + FriendWrongFaction = 325, + FriendRemovedS = 326, + BattletagFriendRemovedS = 327, + FriendError = 328, + FriendAlreadyS = 329, + FriendSelf = 330, + FriendDeleted = 331, + IgnoreFull = 332, + IgnoreSelf = 333, + IgnoreNotFound = 334, + IgnoreAlreadyS = 335, + IgnoreAddedS = 336, + IgnoreRemovedS = 337, + IgnoreAmbiguous = 338, + IgnoreDeleted = 339, + OnlyOneBolt = 340, + OnlyOneAmmo = 341, + SpellFailedEquippedSpecificItem = 342, + WrongBagTypeSubclass = 343, + CantWrapStackable = 344, + CantWrapEquipped = 345, + CantWrapWrapped = 346, + CantWrapBound = 347, + CantWrapUnique = 348, + CantWrapBags = 349, + OutOfMana = 350, + OutOfRage = 351, + OutOfFocus = 352, + OutOfEnergy = 353, + OutOfChi = 354, + OutOfHealth = 355, + OutOfRunes = 356, + OutOfRunicPower = 357, + OutOfSoulShards = 358, + OutOfLunarPower = 359, + OutOfHolyPower = 360, + OutOfMaelstrom = 361, + OutOfComboPoints = 362, + OutOfInsanity = 363, + OutOfEssence = 364, + OutOfArcaneCharges = 365, + OutOfFury = 366, + OutOfPain = 367, + OutOfPowerDisplay = 368, + LootGone = 369, + MountForceddismount = 370, + AutofollowTooFar = 371, + UnitNotFound = 372, + InvalidFollowTarget = 373, + InvalidFollowPvpCombat = 374, + InvalidFollowTargetPvpCombat = 375, + InvalidInspectTarget = 376, + GuildemblemSuccess = 377, + GuildemblemInvalidTabardColors = 378, + GuildemblemNoguild = 379, + GuildemblemNotguildmaster = 380, + GuildemblemNotenoughmoney = 381, + GuildemblemInvalidvendor = 382, + EmblemerrorNotabardgeoset = 383, + SpellOutOfRange = 384, + CommandNeedsTarget = 385, + NoammoS = 386, + Toobusytofollow = 387, + DuelRequested = 388, + DuelCancelled = 389, + Deathbindalreadybound = 390, + DeathbindSuccessS = 391, + Noemotewhilerunning = 392, + ZoneExplored = 393, + ZoneExploredXp = 394, + InvalidItemTarget = 395, + InvalidQuestTarget = 396, + IgnoringYouS = 397, + FishNotHooked = 398, + FishEscaped = 399, + SpellFailedNotunsheathed = 400, + PetitionOfferedS = 401, + PetitionSigned = 402, + PetitionSignedS = 403, + PetitionDeclinedS = 404, + PetitionAlreadySigned = 405, + PetitionRestrictedAccountTrial = 406, + PetitionAlreadySignedOther = 407, + PetitionInGuild = 408, + PetitionCreator = 409, + PetitionNotEnoughSignatures = 410, + PetitionNotSameServer = 411, + PetitionFull = 412, + PetitionAlreadySignedByS = 413, + GuildNameInvalid = 414, + SpellUnlearnedS = 415, + PetSpellRooted = 416, + PetSpellAffectingCombat = 417, + PetSpellOutOfRange = 418, + PetSpellNotBehind = 419, + PetSpellTargetsDead = 420, + PetSpellDead = 421, + PetSpellNopath = 422, + ItemCantBeDestroyed = 423, + TicketAlreadyExists = 424, + TicketCreateError = 425, + TicketUpdateError = 426, + TicketDbError = 427, + TicketNoText = 428, + TicketTextTooLong = 429, + ObjectIsBusy = 430, + ExhaustionWellrested = 431, + ExhaustionRested = 432, + ExhaustionNormal = 433, + ExhaustionTired = 434, + ExhaustionExhausted = 435, + NoItemsWhileShapeshifted = 436, + CantInteractShapeshifted = 437, + RealmNotFound = 438, + MailQuestItem = 439, + MailBoundItem = 440, + MailConjuredItem = 441, + MailBag = 442, + MailToSelf = 443, + MailTargetNotFound = 444, + MailDatabaseError = 445, + MailDeleteItemError = 446, + MailWrappedCod = 447, + MailCantSendRealm = 448, + MailTempReturnOutage = 449, + MailRecepientCantReceiveMail = 450, + MailSent = 451, + MailTargetIsTrial = 452, + NotHappyEnough = 453, + UseCantImmune = 454, + CantBeDisenchanted = 455, + CantUseDisarmed = 456, + AuctionDatabaseError = 457, + AuctionHigherBid = 458, + AuctionAlreadyBid = 459, + AuctionOutbidS = 460, + AuctionWonS = 461, + AuctionRemovedS = 462, + AuctionBidPlaced = 463, + LogoutFailed = 464, + QuestPushSuccessS = 465, + QuestPushInvalidS = 466, + QuestPushInvalidToRecipientS = 467, + QuestPushAcceptedS = 468, + QuestPushDeclinedS = 469, + QuestPushBusyS = 470, + QuestPushDeadS = 471, + QuestPushDeadToRecipientS = 472, + QuestPushLogFullS = 473, + QuestPushLogFullToRecipientS = 474, + QuestPushOnquestS = 475, + QuestPushOnquestToRecipientS = 476, + QuestPushAlreadyDoneS = 477, + QuestPushAlreadyDoneToRecipientS = 478, + QuestPushNotDailyS = 479, + QuestPushTimerExpiredS = 480, + QuestPushNotInPartyS = 481, + QuestPushDifferentServerDailyS = 482, + QuestPushDifferentServerDailyToRecipientS = 483, + QuestPushNotAllowedS = 484, + QuestPushPrerequisiteS = 485, + QuestPushPrerequisiteToRecipientS = 486, + QuestPushLowLevelS = 487, + QuestPushLowLevelToRecipientS = 488, + QuestPushHighLevelS = 489, + QuestPushHighLevelToRecipientS = 490, + QuestPushClassS = 491, + QuestPushClassToRecipientS = 492, + QuestPushRaceS = 493, + QuestPushRaceToRecipientS = 494, + QuestPushLowFactionS = 495, + QuestPushLowFactionToRecipientS = 496, + QuestPushHighFactionS = 497, + QuestPushHighFactionToRecipientS = 498, + QuestPushExpansionS = 499, + QuestPushExpansionToRecipientS = 500, + QuestPushNotGarrisonOwnerS = 501, + QuestPushNotGarrisonOwnerToRecipientS = 502, + QuestPushWrongCovenantS = 503, + QuestPushWrongCovenantToRecipientS = 504, + QuestPushNewPlayerExperienceS = 505, + QuestPushNewPlayerExperienceToRecipientS = 506, + QuestPushWrongFactionS = 507, + QuestPushWrongFactionToRecipientS = 508, + QuestPushCrossFactionRestrictedS = 509, + RaidGroupLowlevel = 510, + RaidGroupOnly = 511, + RaidGroupFull = 512, + RaidGroupRequirementsUnmatch = 513, + CorpseIsNotInInstance = 514, + PvpKillHonorable = 515, + PvpKillDishonorable = 516, + SpellFailedAlreadyAtFullHealth = 517, + SpellFailedAlreadyAtFullMana = 518, + SpellFailedAlreadyAtFullPowerS = 519, + AutolootMoneyS = 520, + GenericStunned = 521, + GenericThrottle = 522, + ClubFinderSearchingTooFast = 523, + TargetStunned = 524, + MustRepairDurability = 525, + RaidYouJoined = 526, + RaidYouLeft = 527, + InstanceGroupJoinedWithParty = 528, + InstanceGroupJoinedWithRaid = 529, + RaidMemberAddedS = 530, + RaidMemberRemovedS = 531, + InstanceGroupAddedS = 532, + InstanceGroupRemovedS = 533, + ClickOnItemToFeed = 534, + TooManyChatChannels = 535, + LootRollPending = 536, + LootPlayerNotFound = 537, + NotInRaid = 538, + LoggingOut = 539, + TargetLoggingOut = 540, + NotWhileMounted = 541, + NotWhileShapeshifted = 542, + NotInCombat = 543, + NotWhileDisarmed = 544, + PetBroken = 545, + TalentWipeError = 546, + SpecWipeError = 547, + GlyphWipeError = 548, + PetSpecWipeError = 549, + FeignDeathResisted = 550, + MeetingStoneInQueueS = 551, + MeetingStoneLeftQueueS = 552, + MeetingStoneOtherMemberLeft = 553, + MeetingStonePartyKickedFromQueue = 554, + MeetingStoneMemberStillInQueue = 555, + MeetingStoneSuccess = 556, + MeetingStoneInProgress = 557, + MeetingStoneMemberAddedS = 558, + MeetingStoneGroupFull = 559, + MeetingStoneNotLeader = 560, + MeetingStoneInvalidLevel = 561, + MeetingStoneTargetNotInParty = 562, + MeetingStoneTargetInvalidLevel = 563, + MeetingStoneMustBeLeader = 564, + MeetingStoneNoRaidGroup = 565, + MeetingStoneNeedParty = 566, + MeetingStoneNotFound = 567, + MeetingStoneTargetInVehicle = 568, + GuildemblemSame = 569, + EquipTradeItem = 570, + PvpToggleOn = 571, + PvpToggleOff = 572, + GroupJoinBattlegroundDeserters = 573, + GroupJoinBattlegroundDead = 574, + GroupJoinBattlegroundS = 575, + GroupJoinBattlegroundFail = 576, + GroupJoinBattlegroundTooMany = 577, + SoloJoinBattlegroundS = 578, + JoinSingleScenarioS = 579, + BattlegroundTooManyQueues = 580, + BattlegroundCannotQueueForRated = 581, + BattledgroundQueuedForRated = 582, + BattlegroundTeamLeftQueue = 583, + BattlegroundNotInBattleground = 584, + AlreadyInArenaTeamS = 585, + InvalidPromotionCode = 586, + BgPlayerJoinedSs = 587, + BgPlayerLeftS = 588, + RestrictedAccount = 589, + RestrictedAccountTrial = 590, + NotEnoughPurchasedGameTime = 591, + PlayTimeExceeded = 592, + ApproachingPartialPlayTime = 593, + ApproachingPartialPlayTime2 = 594, + ApproachingNoPlayTime = 595, + ApproachingNoPlayTime2 = 596, + UnhealthyTime = 597, + ChatRestrictedTrial = 598, + ChatThrottled = 599, + MailReachedCap = 600, + InvalidRaidTarget = 601, + RaidLeaderReadyCheckStartS = 602, + ReadyCheckInProgress = 603, + ReadyCheckThrottled = 604, + DungeonDifficultyFailed = 605, + DungeonDifficultyChangedS = 606, + TradeWrongRealm = 607, + TradeNotOnTaplist = 608, + ChatPlayerAmbiguousS = 609, + LootCantLootThatNow = 610, + LootMasterInvFull = 611, + LootMasterUniqueItem = 612, + LootMasterOther = 613, + FilteringYouS = 614, + UsePreventedByMechanicS = 615, + ItemUniqueEquippable = 616, + LfgLeaderIsLfmS = 617, + LfgPending = 618, + CantSpeakLangage = 619, + VendorMissingTurnins = 620, + BattlegroundNotInTeam = 621, + NotInBattleground = 622, + NotEnoughHonorPoints = 623, + NotEnoughArenaPoints = 624, + SocketingRequiresMetaGem = 625, + SocketingMetaGemOnlyInMetaslot = 626, + SocketingRequiresHydraulicGem = 627, + SocketingHydraulicGemOnlyInHydraulicslot = 628, + SocketingRequiresCogwheelGem = 629, + SocketingCogwheelGemOnlyInCogwheelslot = 630, + SocketingItemTooLowLevel = 631, + ItemMaxCountSocketed = 632, + SystemDisabled = 633, + QuestFailedTooManyDailyQuestsI = 634, + ItemMaxCountEquippedSocketed = 635, + ItemUniqueEquippableSocketed = 636, + UserSquelched = 637, + AccountSilenced = 638, + PartyMemberSilenced = 639, + PartyMemberSilencedLfgDelist = 640, + TooMuchGold = 641, + NotBarberSitting = 642, + QuestFailedCais = 643, + InviteRestrictedTrial = 644, + VoiceIgnoreFull = 645, + VoiceIgnoreSelf = 646, + VoiceIgnoreNotFound = 647, + VoiceIgnoreAlreadyS = 648, + VoiceIgnoreAddedS = 649, + VoiceIgnoreRemovedS = 650, + VoiceIgnoreAmbiguous = 651, + VoiceIgnoreDeleted = 652, + UnknownMacroOptionS = 653, + NotDuringArenaMatch = 654, + NotInRatedBattleground = 655, + PlayerSilenced = 656, + PlayerUnsilenced = 657, + ComsatDisconnect = 658, + ComsatReconnectAttempt = 659, + ComsatConnectFail = 660, + MailInvalidAttachmentSlot = 661, + MailTooManyAttachments = 662, + MailInvalidAttachment = 663, + MailAttachmentExpired = 664, + VoiceChatParentalDisableMic = 665, + ProfaneChatName = 666, + PlayerSilencedEcho = 667, + PlayerUnsilencedEcho = 668, + LootCantLootThat = 669, + ArenaExpiredCais = 670, + GroupActionThrottled = 671, + AlreadyPickpocketed = 672, + NameInvalid = 673, + NameNoName = 674, + NameTooShort = 675, + NameTooLong = 676, + NameMixedLanguages = 677, + NameProfane = 678, + NameReserved = 679, + NameThreeConsecutive = 680, + NameInvalidSpace = 681, + NameConsecutiveSpaces = 682, + NameRussianConsecutiveSilentCharacters = 683, + NameRussianSilentCharacterAtBeginningOrEnd = 684, + NameDeclensionDoesntMatchBaseName = 685, + RecruitAFriendNotLinked = 686, + RecruitAFriendNotNow = 687, + RecruitAFriendSummonLevelMax = 688, + RecruitAFriendSummonCooldown = 689, + RecruitAFriendSummonOffline = 690, + RecruitAFriendInsufExpanLvl = 691, + RecruitAFriendMapIncomingTransferNotAllowed = 692, + NotSameAccount = 693, + BadOnUseEnchant = 694, + TradeSelf = 695, + TooManySockets = 696, + ItemMaxLimitCategoryCountExceededIs = 697, + TradeTargetMaxLimitCategoryCountExceededIs = 698, + ItemMaxLimitCategorySocketedExceededIs = 699, + ItemMaxLimitCategoryEquippedExceededIs = 700, + ShapeshiftFormCannotEquip = 701, + ItemInventoryFullSatchel = 702, + ScalingStatItemLevelExceeded = 703, + ScalingStatItemLevelTooLow = 704, + PurchaseLevelTooLow = 705, + GroupSwapFailed = 706, + InviteInCombat = 707, + InvalidGlyphSlot = 708, + GenericNoValidTargets = 709, + CalendarEventAlertS = 710, + PetLearnSpellS = 711, + PetLearnAbilityS = 712, + PetSpellUnlearnedS = 713, + InviteUnknownRealm = 714, + InviteNoPartyServer = 715, + InvitePartyBusy = 716, + InvitePartyBusyPendingRequest = 717, + InvitePartyBusyPendingSuggest = 718, + PartyTargetAmbiguous = 719, + PartyLfgInviteRaidLocked = 720, + PartyLfgBootLimit = 721, + PartyLfgBootCooldownS = 722, + PartyLfgBootNotEligibleS = 723, + PartyLfgBootInpatientTimerS = 724, + PartyLfgBootInProgress = 725, + PartyLfgBootTooFewPlayers = 726, + PartyLfgBootVoteSucceeded = 727, + PartyLfgBootVoteFailed = 728, + PartyLfgBootDisallowedByMap = 729, + PartyLfgBootDungeonComplete = 730, + PartyLfgBootLootRolls = 731, + PartyLfgBootVoteRegistered = 732, + PartyPrivateGroupOnly = 733, + PartyLfgTeleportInCombat = 734, + PartyTimeRunningSeasonIdMustMatch = 735, + RaidDisallowedByLevel = 736, + RaidDisallowedByCrossRealm = 737, + PartyRoleNotAvailable = 738, + JoinLfgObjectFailed = 739, + LfgRemovedLevelup = 740, + LfgRemovedXpToggle = 741, + LfgRemovedFactionChange = 742, + BattlegroundInfoThrottled = 743, + BattlegroundAlreadyIn = 744, + ArenaTeamChangeFailedQueued = 745, + ArenaTeamPermissions = 746, + NotWhileFalling = 747, + NotWhileMoving = 748, + NotWhileFatigued = 749, + MaxSockets = 750, + MultiCastActionTotemS = 751, + BattlegroundJoinLevelup = 752, + RemoveFromPvpQueueXpGain = 753, + BattlegroundJoinXpGain = 754, + BattlegroundJoinMercenary = 755, + BattlegroundJoinTooManyHealers = 756, + BattlegroundJoinRatedTooManyHealers = 757, + BattlegroundJoinTooManyTanks = 758, + BattlegroundJoinTooManyDamage = 759, + RaidDifficultyFailed = 760, + RaidDifficultyChangedS = 761, + LegacyRaidDifficultyChangedS = 762, + RaidLockoutChangedS = 763, + RaidConvertedToParty = 764, + PartyConvertedToRaid = 765, + PlayerDifficultyChangedS = 766, + GmresponseDbError = 767, + BattlegroundJoinRangeIndex = 768, + ArenaJoinRangeIndex = 769, + RemoveFromPvpQueueFactionChange = 770, + BattlegroundJoinFailed = 771, + BattlegroundJoinNoValidSpecForRole = 772, + BattlegroundJoinRespec = 773, + BattlegroundInvitationDeclined = 774, + BattlegroundInvitationDeclinedBy = 775, + BattlegroundJoinTimedOut = 776, + BattlegroundDupeQueue = 777, + BattlegroundJoinMustCompleteQuest = 778, + InBattlegroundRespec = 779, + MailLimitedDurationItem = 780, + YellRestrictedTrial = 781, + ChatRaidRestrictedTrial = 782, + LfgRoleCheckFailed = 783, + LfgRoleCheckFailedTimeout = 784, + LfgRoleCheckFailedNotViable = 785, + LfgReadyCheckFailed = 786, + LfgReadyCheckFailedTimeout = 787, + LfgGroupFull = 788, + LfgNoLfgObject = 789, + LfgNoSlotsPlayer = 790, + LfgNoSlotsParty = 791, + LfgNoSpec = 792, + LfgMismatchedSlots = 793, + LfgMismatchedSlotsLocalXrealm = 794, + LfgPartyPlayersFromDifferentRealms = 795, + LfgMembersNotPresent = 796, + LfgGetInfoTimeout = 797, + LfgInvalidSlot = 798, + LfgDeserterPlayer = 799, + LfgDeserterParty = 800, + LfgDead = 801, + LfgRandomCooldownPlayer = 802, + LfgRandomCooldownParty = 803, + LfgTooManyMembers = 804, + LfgTooFewMembers = 805, + LfgProposalFailed = 806, + LfgProposalDeclinedSelf = 807, + LfgProposalDeclinedParty = 808, + LfgNoSlotsSelected = 809, + LfgNoRolesSelected = 810, + LfgRoleCheckInitiated = 811, + LfgReadyCheckInitiated = 812, + LfgPlayerDeclinedRoleCheck = 813, + LfgPlayerDeclinedReadyCheck = 814, + LfgJoinedQueue = 815, + LfgJoinedFlexQueue = 816, + LfgJoinedRfQueue = 817, + LfgJoinedScenarioQueue = 818, + LfgJoinedWorldPvpQueue = 819, + LfgJoinedBattlefieldQueue = 820, + LfgJoinedList = 821, + LfgLeftQueue = 822, + LfgLeftList = 823, + LfgRoleCheckAborted = 824, + LfgReadyCheckAborted = 825, + LfgCantUseBattleground = 826, + LfgCantUseDungeons = 827, + LfgReasonTooManyLfg = 828, + LfgFarmLimit = 829, + LfgNoCrossFactionParties = 830, + InvalidTeleportLocation = 831, + TooFarToInteract = 832, + BattlegroundPlayersFromDifferentRealms = 833, + DifficultyChangeCooldownS = 834, + DifficultyChangeCombatCooldownS = 835, + DifficultyChangeWorldstate = 836, + DifficultyChangeEncounter = 837, + DifficultyChangeCombat = 838, + DifficultyChangePlayerBusy = 839, + DifficultyChangePlayerOnVehicle = 840, + DifficultyChangeAlreadyStarted = 841, + DifficultyChangeOtherHeroicS = 842, + DifficultyChangeHeroicInstanceAlreadyRunning = 843, + ArenaTeamPartySize = 844, + SoloShuffleWargameGroupSize = 845, + SoloShuffleWargameGroupComp = 846, + SoloRbgWargameGroupSize = 847, + SoloRbgWargameGroupComp = 848, + SoloMinItemLevel = 849, + PvpPlayerAbandoned = 850, + BattlegroundJoinGroupQueueWithoutHealer = 851, + QuestForceRemovedS = 852, + AttackNoActions = 853, + InRandomBg = 854, + InNonRandomBg = 855, + BnFriendSelf = 856, + BnFriendAlready = 857, + BnFriendBlocked = 858, + BnFriendListFull = 859, + BnFriendRequestSent = 860, + BnBroadcastThrottle = 861, + BgDeveloperOnly = 862, + CurrencySpellSlotMismatch = 863, + CurrencyNotTradable = 864, + RequiresExpansionS = 865, + QuestFailedSpell = 866, + TalentFailedUnspentTalentPoints = 867, + TalentFailedNotEnoughTalentsInPrimaryTree = 868, + TalentFailedNoPrimaryTreeSelected = 869, + TalentFailedCantRemoveTalent = 870, + TalentFailedUnknown = 871, + TalentFailedInCombat = 872, + TalentFailedInPvpMatch = 873, + TalentFailedInMythicPlus = 874, + WargameRequestFailure = 875, + RankRequiresAuthenticator = 876, + GuildBankVoucherFailed = 877, + WargameRequestSent = 878, + RequiresAchievementI = 879, + RefundResultExceedMaxCurrency = 880, + CantBuyQuantity = 881, + ItemIsBattlePayLocked = 882, + PartyAlreadyInBattlegroundQueue = 883, + PartyConfirmingBattlegroundQueue = 884, + BattlefieldTeamPartySize = 885, + InsuffTrackedCurrencyIs = 886, + NotOnTournamentRealm = 887, + GuildTrialAccountTrial = 888, + GuildTrialAccountVeteran = 889, + GuildUndeletableDueToLevel = 890, + CantDoThatInAGroup = 891, + GuildLeaderReplaced = 892, + TransmogrifyCantEquip = 893, + TransmogrifyInvalidItemType = 894, + TransmogrifyNotSoulbound = 895, + TransmogrifyInvalidSource = 896, + TransmogrifyInvalidDestination = 897, + TransmogrifyMismatch = 898, + TransmogrifyLegendary = 899, + TransmogrifySameItem = 900, + TransmogrifySameAppearance = 901, + TransmogrifyNotEquipped = 902, + VoidDepositFull = 903, + VoidWithdrawFull = 904, + VoidStorageWrapped = 905, + VoidStorageStackable = 906, + VoidStorageUnbound = 907, + VoidStorageRepair = 908, + VoidStorageCharges = 909, + VoidStorageQuest = 910, + VoidStorageConjured = 911, + VoidStorageMail = 912, + VoidStorageBag = 913, + VoidTransferStorageFull = 914, + VoidTransferInvFull = 915, + VoidTransferInternalError = 916, + VoidTransferItemInvalid = 917, + DifficultyDisabledInLfg = 918, + VoidStorageUnique = 919, + VoidStorageLoot = 920, + VoidStorageHoliday = 921, + VoidStorageDuration = 922, + VoidStorageLoadFailed = 923, + VoidStorageInvalidItem = 924, + VoidStorageAccountItem = 925, + ParentalControlsChatMuted = 926, + SorStartExperienceIncomplete = 927, + SorInvalidEmail = 928, + SorInvalidComment = 929, + ChallengeModeResetCooldownS = 930, + ChallengeModeResetKeystone = 931, + PetJournalAlreadyInLoadout = 932, + ReportSubmittedSuccessfully = 933, + ReportSubmissionFailed = 934, + SuggestionSubmittedSuccessfully = 935, + BugSubmittedSuccessfully = 936, + ChallengeModeEnabled = 937, + ChallengeModeDisabled = 938, + PetbattleCreateFailed = 939, + PetbattleNotHere = 940, + PetbattleNotHereOnTransport = 941, + PetbattleNotHereUnevenGround = 942, + PetbattleNotHereObstructed = 943, + PetbattleNotWhileInCombat = 944, + PetbattleNotWhileDead = 945, + PetbattleNotWhileFlying = 946, + PetbattleTargetInvalid = 947, + PetbattleTargetOutOfRange = 948, + PetbattleTargetNotCapturable = 949, + PetbattleNotATrainer = 950, + PetbattleDeclined = 951, + PetbattleInBattle = 952, + PetbattleInvalidLoadout = 953, + PetbattleAllPetsDead = 954, + PetbattleNoPetsInSlots = 955, + PetbattleNoAccountLock = 956, + PetbattleWildPetTapped = 957, + PetbattleRestrictedAccount = 958, + PetbattleOpponentNotAvailable = 959, + PetbattleNotWhileInMatchedBattle = 960, + CantHaveMorePetsOfThatType = 961, + CantHaveMorePets = 962, + PvpMapNotFound = 963, + PvpMapNotSet = 964, + PetbattleQueueQueued = 965, + PetbattleQueueAlreadyQueued = 966, + PetbattleQueueJoinFailed = 967, + PetbattleQueueJournalLock = 968, + PetbattleQueueRemoved = 969, + PetbattleQueueProposalDeclined = 970, + PetbattleQueueProposalTimeout = 971, + PetbattleQueueOpponentDeclined = 972, + PetbattleQueueRequeuedInternal = 973, + PetbattleQueueRequeuedRemoved = 974, + PetbattleQueueSlotLocked = 975, + PetbattleQueueSlotEmpty = 976, + PetbattleQueueSlotNoTracker = 977, + PetbattleQueueSlotNoSpecies = 978, + PetbattleQueueSlotCantBattle = 979, + PetbattleQueueSlotRevoked = 980, + PetbattleQueueSlotDead = 981, + PetbattleQueueSlotNoPet = 982, + PetbattleQueueNotWhileNeutral = 983, + PetbattleGameTimeLimitWarning = 984, + PetbattleGameRoundsLimitWarning = 985, + HasRestriction = 986, + ItemUpgradeItemTooLowLevel = 987, + ItemUpgradeNoPath = 988, + ItemUpgradeNoMoreUpgrades = 989, + BonusRollEmpty = 990, + ChallengeModeFull = 991, + ChallengeModeInProgress = 992, + ChallengeModeIncorrectKeystone = 993, + BattletagFriendNotFound = 994, + BattletagFriendNotValid = 995, + BattletagFriendNotAllowed = 996, + BattletagFriendThrottled = 997, + BattletagFriendSuccess = 998, + PetTooHighLevelToUncage = 999, + PetbattleInternal = 1000, + CantCagePetYet = 1001, + NoLootInChallengeMode = 1002, + QuestPetBattleVictoriesPvpIi = 1003, + RoleCheckAlreadyInProgress = 1004, + RecruitAFriendAccountLimit = 1005, + RecruitAFriendFailed = 1006, + SetLootPersonal = 1007, + SetLootMethodFailedCombat = 1008, + ReagentBankFull = 1009, + ReagentBankLocked = 1010, + GarrisonBuildingExists = 1011, + GarrisonInvalidPlot = 1012, + GarrisonInvalidBuildingid = 1013, + GarrisonInvalidPlotBuilding = 1014, + GarrisonRequiresBlueprint = 1015, + GarrisonNotEnoughCurrency = 1016, + GarrisonNotEnoughGold = 1017, + GarrisonCompleteMissionWrongFollowerType = 1018, + AlreadyUsingLfgList = 1019, + RestrictedAccountLfgListTrial = 1020, + ToyUseLimitReached = 1021, + ToyAlreadyKnown = 1022, + TransmogSetAlreadyKnown = 1023, + NotEnoughCurrency = 1024, + SpecIsDisabled = 1025, + FeatureRestrictedTrial = 1026, + CantBeObliterated = 1027, + CantBeScrapped = 1028, + CantBeRecrafted = 1029, + ArtifactRelicDoesNotMatchArtifact = 1030, + MustEquipArtifact = 1031, + CantDoThatRightNow = 1032, + AffectingCombat = 1033, + EquipmentManagerCombatSwapS = 1034, + EquipmentManagerBagsFull = 1035, + EquipmentManagerMissingItemS = 1036, + MovieRecordingWarningPerf = 1037, + MovieRecordingWarningDiskFull = 1038, + MovieRecordingWarningNoMovie = 1039, + MovieRecordingWarningRequirements = 1040, + MovieRecordingWarningCompressing = 1041, + NoChallengeModeReward = 1042, + ClaimedChallengeModeReward = 1043, + ChallengeModePeriodResetSs = 1044, + CantDoThatChallengeModeActive = 1045, + TalentFailedRestArea = 1046, + CannotAbandonLastPet = 1047, + TestCvarSetSss = 1048, + QuestTurnInFailReason = 1049, + ClaimedChallengeModeRewardOld = 1050, + TalentGrantedByAura = 1051, + ChallengeModeAlreadyComplete = 1052, + GlyphTargetNotAvailable = 1053, + PvpWarmodeToggleOn = 1054, + PvpWarmodeToggleOff = 1055, + SpellFailedLevelRequirement = 1056, + SpellFailedCantFlyHere = 1057, + BattlegroundJoinRequiresLevel = 1058, + BattlegroundJoinDisqualified = 1059, + BattlegroundJoinDisqualifiedNoName = 1060, + VoiceChatGenericUnableToConnect = 1061, + VoiceChatServiceLost = 1062, + VoiceChatChannelNameTooShort = 1063, + VoiceChatChannelNameTooLong = 1064, + VoiceChatChannelAlreadyExists = 1065, + VoiceChatTargetNotFound = 1066, + VoiceChatTooManyRequests = 1067, + VoiceChatPlayerSilenced = 1068, + VoiceChatParentalDisableAll = 1069, + VoiceChatDisabled = 1070, + NoPvpReward = 1071, + ClaimedPvpReward = 1072, + AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1073, + AzeriteEssenceSelectionFailedCantRemoveEssence = 1074, + AzeriteEssenceSelectionFailedConditionFailed = 1075, + AzeriteEssenceSelectionFailedRestArea = 1076, + AzeriteEssenceSelectionFailedSlotLocked = 1077, + AzeriteEssenceSelectionFailedNotAtForge = 1078, + AzeriteEssenceSelectionFailedHeartLevelTooLow = 1079, + AzeriteEssenceSelectionFailedNotEquipped = 1080, + SocketingRequiresPunchcardredGem = 1081, + SocketingPunchcardredGemOnlyInPunchcardredslot = 1082, + SocketingRequiresPunchcardyellowGem = 1083, + SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1084, + SocketingRequiresPunchcardblueGem = 1085, + SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1086, + SocketingRequiresDominationShard = 1087, + SocketingDominationShardOnlyInDominationslot = 1088, + SocketingRequiresCypherGem = 1089, + SocketingCypherGemOnlyInCypherslot = 1090, + SocketingRequiresTinkerGem = 1091, + SocketingTinkerGemOnlyInTinkerslot = 1092, + SocketingRequiresPrimordialGem = 1093, + SocketingPrimordialGemOnlyInPrimordialslot = 1094, + SocketingRequiresFragranceGem = 1095, + SocketingFragranceGemOnlyInFragranceslot = 1096, + LevelLinkingResultLinked = 1097, + LevelLinkingResultUnlinked = 1098, + ClubFinderErrorPostClub = 1099, + ClubFinderErrorApplyClub = 1100, + ClubFinderErrorRespondApplicant = 1101, + ClubFinderErrorCancelApplication = 1102, + ClubFinderErrorTypeAcceptApplication = 1103, + ClubFinderErrorTypeNoInvitePermissions = 1104, + ClubFinderErrorTypeNoPostingPermissions = 1105, + ClubFinderErrorTypeApplicantList = 1106, + ClubFinderErrorTypeApplicantListNoPerm = 1107, + ClubFinderErrorTypeFinderNotAvailable = 1108, + ClubFinderErrorTypeGetPostingIds = 1109, + ClubFinderErrorTypeJoinApplication = 1110, + ClubFinderErrorTypeRealmNotEligible = 1111, + ClubFinderErrorTypeFlaggedRename = 1112, + ClubFinderErrorTypeFlaggedDescriptionChange = 1113, + ItemInteractionNotEnoughGold = 1114, + ItemInteractionNotEnoughCurrency = 1115, + ItemInteractionNoConversionOutput = 1116, + PlayerChoiceErrorPendingChoice = 1117, + SoulbindInvalidConduit = 1118, + SoulbindInvalidConduitItem = 1119, + SoulbindInvalidTalent = 1120, + SoulbindDuplicateConduit = 1121, + ActivateSoulbindS = 1122, + ActivateSoulbindFailedRestArea = 1123, + CantUseProfanity = 1124, + NotInPetBattle = 1125, + NotInNpe = 1126, + NoSpec = 1127, + NoDominationshardOverwrite = 1128, + UseWeeklyRewardsDisabled = 1129, + CrossFactionGroupJoined = 1130, + CantTargetUnfriendlyInOverworld = 1131, + EquipablespellsSlotsFull = 1132, + ItemModAppearanceGroupAlreadyKnown = 1133, + CantBulkSellItemWithRefund = 1134, + NoSoulboundItemInAccountBank = 1135, + NoRefundableItemInAccountBank = 1136, + CantDeleteInAccountBank = 1137, + NoImmediateContainerInAccountBank = 1138, + NoOpenImmediateContainerInAccountBank = 1139, + NoAccountInventoryLock = 1140, + TooManyAccountBankTabs = 1141, + AccountBankTabNotUnlocked = 1142, + BankTabInvalidName = 1143, + BankTabInvalidText = 1144, + WowLabsPartyErrorTypePartyIsFull = 1145, + WowLabsPartyErrorTypeMaxInviteSent = 1146, + WowLabsPartyErrorTypePlayerAlreadyInvited = 1147, + WowLabsPartyErrorTypePartyInviteInvalid = 1148, + WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1149, + WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1150, + TargetIsSelfFoundCannotTrade = 1151, + PlayerIsSelfFoundCannotTrade = 1152, + MailRecepientIsSelfFoundCannotReceiveMail = 1153, + PlayerIsSelfFoundCannotSendMail = 1154, + PlayerIsSelfFoundCannotUseAuctionHouse = 1155, + MailTargetCannotReceiveMail = 1156, + RemixInvalidTransferRequest = 1157, + CurrencyTransferInvalidCharacter = 1158, + CurrencyTransferInvalidCurrency = 1159, + CurrencyTransferInsufficientCurrency = 1160, + CurrencyTransferMaxQuantity = 1161, + CurrencyTransferNoValidSource = 1162, + CurrencyTransferCharacterLoggedIn = 1163, + CurrencyTransferServerError = 1164, + CurrencyTransferUnmetRequirements = 1165, } public enum SceneFlags diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs index 0b225be9e..9b502f3b1 100644 --- a/Source/Framework/Constants/Spells/SpellConst.cs +++ b/Source/Framework/Constants/Spells/SpellConst.cs @@ -774,7 +774,8 @@ namespace Framework.Constants CantFlyHere = 318, DragonridingRidingRequirement = 319, ItemModAppearanceGroupAlreadyKnown = 320, - Unknown = 321, + ItemCreationDisabledForEvent = 321, + Unknown = 322, // Ok Cast Value - Here In Case A Future Version Removes Success And We Need To Use A Custom Value (Not Sent To Client Either Way) SpellCastOk = Success @@ -1416,8 +1417,48 @@ namespace Framework.Constants YouDontHaveTheSwirlingMojoStone = 999, // You Don'T Have The Swirling Mojo Stone Equipped. YouMustBeNearADragonflightOathstone = 1000, // You Must Be Near One Of The Five Dragonflight Oathstones In The Dragon Isles. CanOnlyUseThisItemWhileAirborne = 1001, // You Can Only Use This Item While Airborne. + ThisPlayerIsNotOppositeFaction = 1002, // This Player Is Not Of The Opposite Faction. + ThisPlayerAlreadyHasThisMount = 1003, // This Player Already Has This Mount. + YourTargetIsInWarMode = 1004, // Your Target Is In War Mode. + CooldownReset = 1005, // Cooldown Reset + SoilNutrientsMustReplenish = 1006, // The Nutrients Of This Soil Must Replenish Before Further Growth. + TargetAlreadyHadSomeFeathersPlucked = 1007, // The Target Has Already Had Some Feathers Plucked. It Would Be Rude To Take More. + ThisCreatureHasAlreadyBeenAttunedWith = 1008, // This Creature Has Already Been Attuned With Recently. + YouAlreadyHaveSomeMulchPrepared = 1009, // You Already Have Some Mulch Prepared. Use Your Current Mulch First. + YouDontKnowHowToGatherThis = 1010, // You Don't Know How To Gather This. + YouDontHaveAnyItemsOfThisType = 1011, // You Don't Have Any Items Of This Type. + YouDontHaveAnyRadiantRemnants = 1012, // You Don't Have Any Radiant Remnants. + TargetsRingIsAlreadyBoundToAnotherPlayer = 1013, // Your Target's Ring Is Already Bound To Another Player. + TargetIsNotWearingThisRing = 1014, // Your Target Is Not Also Wearing This Ring. + CanOnlyBeUsedOnSocketablePvpTwwItems = 1015, // Can Only Be Used On Socket Eligible Pvp Items From The War Within Expansion. + HarvestbotsAlreadyActive = 1016, // Harvestbots Already Active. + AirshipDauntlessIsAlreadyActive = 1017, // The Airship Dauntless Is Already Active. + CannotSwapSpellsOnCooldownInCombat = 1026, // You Cannot Swap Spells On Cooldown While In Combat. + MustEquipCloakOfInfinitePotential = 1027, // You Must First Equip The Cloak Of Infinite Potential. + InsufficientBronze = 1028, // You Have Insufficient Bronze To Make This Trade. + RequiresSkyriding = 1029, // Requires Skyriding + YouAlreadyOverloadedThisGatheringNode = 1030, // You Have Already Overloaded This Gathering Node. + YouDontKnowHowToOverloadThisNode = 1031, // You Do Not Know How To Overload This Gathering Node. + TimerunnersCannotTeleportOutOfPandaria = 1032, // Timerunners Cannot Teleport Outside Of Pandaria. + SpecializeFurtherForTheseNotes = 1033, // Specialize Further Or Improve Your Hasty Handwriting To Make Sense Of These Notes. + ThereIsNothingLeftToInvent = 1034, // There Is Nothing Left To Invent And You Cannot Be Convinced Otherwise. + PlayerInPartyDoesntHaveThisTierUnlocked = 1035, // A Player In Your Party Does Not Have This Tier Unlocked + YouDontHaveAnyRadiantEchoes = 1036, // You Don't Have Any Radiant Echoes. + RequiresTwwPathfinderUnlocked = 1037, // Requires The War Within Pathfinder Unlocked To Use In This Area. + CanOnlyBeUsedWhileInCombat = 1039, // Can Only Be Used While In Combat. + NotHighEnoughLevelToEnterADelve = 1040, // You Are Not High Enough Level To Enter A Delve. + WondrousWisdomballIsNonresponsive = 1041, // For Some Reason The Wondrous Wisdomball Is Nonresponsive. + YouAlreadyHaveThisCurioInYourCollection = 1042, // You Already Have This Curio In Your Collection. + AlreadyHaveIdentifiedPrototype = 1043, // You Must Choose What To Do With Your Current Prototype Before Identifying New Ones. + YouAlreadyUsedKhazAlgarContract = 1044, // You Have Already Used A Khaz Algar Contract This Week. + YouAlreadyRevealedAllTodayPactLocations = 1051, // You Have Revealed Or Completed All Of Today's Pact Locations. + TimerunnersCannotCastThisSpell = 1053, // Timerunners Cannot Cast This Spell. + ThisEmblemHasNoMagicStored = 2001, // The Emblem Has No Magic Stored. YouMustBeInVisageForm = 2222, // You Must Be In Visage Form To Do This. - TooCloseToAnotherMoltenRitual = 2424, // You Can'T Begin A Molten Ritual This Close To Another One. + ATrialIsBeingUndergoneNearby = 2223, // A Trial Is Already Being Undergone Nearby. + YouCannotUseVantusRuneInStoryMode = 2224, // You Cannot Use A Vantus Rune In Story Mode. + TooCloseToAnotherMoltenRitual = 2424, // You Can't Begin A Molten Ritual This Close To Another One. + EarthenCannotConsumeRegularFoodOrDrink = 2425, // Earthen Cannot Consume Traditional Food Or Drink. } public enum SpellMissInfo diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs index d246bb52a..8859df104 100644 --- a/Source/Framework/Database/Databases/CharacterDatabase.cs +++ b/Source/Framework/Database/Databases/CharacterDatabase.cs @@ -473,7 +473,7 @@ namespace Framework.Database PrepareStatement(CharStatements.UPD_ACCOUNT_ONLINE, "UPDATE characters SET online = 0 WHERE account = ?"); PrepareStatement(CharStatements.INS_CHARACTER_CUSTOMIZATION, "INSERT INTO character_customizations (guid, chrCustomizationOptionID, chrCustomizationChoiceID) VALUES (?, ?, ?)"); PrepareStatement(CharStatements.DEL_CHARACTER_CUSTOMIZATIONS, "DELETE FROM character_customizations WHERE guid = ?"); - PrepareStatement(CharStatements.INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + PrepareStatement(CharStatements.INS_GROUP, "INSERT INTO `groups` (guid, leaderGuid, lootMethod, looterGuid, lootThreshold, icon1, icon2, icon3, icon4, icon5, icon6, icon7, icon8, groupType, difficulty, raidDifficulty, legacyRaidDifficulty, masterLooterGuid, pingRestriction) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.INS_GROUP_MEMBER, "INSERT INTO group_member (guid, memberGuid, memberFlags, subgroup, roles) VALUES(?, ?, ?, ?, ?)"); PrepareStatement(CharStatements.DEL_GROUP_MEMBER, "DELETE FROM group_member WHERE memberGuid = ?"); PrepareStatement(CharStatements.UPD_GROUP_LEADER, "UPDATE `groups` SET leaderGuid = ? WHERE guid = ?"); @@ -483,6 +483,7 @@ namespace Framework.Database PrepareStatement(CharStatements.UPD_GROUP_DIFFICULTY, "UPDATE `groups` SET difficulty = ? WHERE guid = ?"); PrepareStatement(CharStatements.UPD_GROUP_RAID_DIFFICULTY, "UPDATE `groups` SET raidDifficulty = ? WHERE guid = ?"); PrepareStatement(CharStatements.UPD_GROUP_LEGACY_RAID_DIFFICULTY, "UPDATE `groups` SET legacyRaidDifficulty = ? WHERE guid = ?"); + PrepareStatement(CharStatements.UPD_GROUP_PING_RESTRICTION, "UPDATE `groups` SET pingRestriction = ? WHERE guid = ?"); PrepareStatement(CharStatements.DEL_INVALID_SPELL_SPELLS, "DELETE FROM character_spell WHERE spell = ?"); PrepareStatement(CharStatements.UPD_DELETE_INFO, "UPDATE characters SET deleteInfos_Name = name, deleteInfos_Account = account, deleteDate = UNIX_TIMESTAMP(), name = '', account = 0 WHERE guid = ?"); PrepareStatement(CharStatements.UPD_RESTORE_DELETE_INFO, "UPDATE characters SET name = ?, account = ?, deleteDate = NULL, deleteInfos_Name = NULL, deleteInfos_Account = NULL WHERE deleteDate IS NOT NULL AND guid = ?"); @@ -1121,6 +1122,7 @@ namespace Framework.Database UPD_GROUP_DIFFICULTY, UPD_GROUP_RAID_DIFFICULTY, UPD_GROUP_LEGACY_RAID_DIFFICULTY, + UPD_GROUP_PING_RESTRICTION, DEL_INVALID_SPELL_SPELLS, UPD_DELETE_INFO, UPD_RESTORE_DELETE_INFO, diff --git a/Source/Game/AuctionHouse/AuctionManager.cs b/Source/Game/AuctionHouse/AuctionManager.cs index ae8d63e91..2961a2a63 100644 --- a/Source/Game/AuctionHouse/AuctionManager.cs +++ b/Source/Game/AuctionHouse/AuctionManager.cs @@ -1771,6 +1771,8 @@ namespace Game return (long)(left.BidAmount - right.BidAmount); case AuctionHouseSortOrder.Buyout: return (long)(left.BuyoutOrUnitPrice - right.BuyoutOrUnitPrice); + case AuctionHouseSortOrder.TimeRemaining: + return (long)(left.EndTime - right.EndTime).TotalMilliseconds; default: break; } diff --git a/Source/Game/Chat/Commands/MiscCommands.cs b/Source/Game/Chat/Commands/MiscCommands.cs index 69ce9bb5a..f6093fc94 100644 --- a/Source/Game/Chat/Commands/MiscCommands.cs +++ b/Source/Game/Chat/Commands/MiscCommands.cs @@ -145,7 +145,7 @@ namespace Game.Chat [CommandNonGroup("bank", RBACPermissions.CommandBank)] static bool HandleBankCommand(CommandHandler handler) { - handler.GetSession().SendShowBank(handler.GetSession().GetPlayer().GetGUID()); + handler.GetSession().SendShowBank(handler.GetSession().GetPlayer().GetGUID(), PlayerInteractionType.Banker); return true; } diff --git a/Source/Game/Chat/Commands/ModifyCommands.cs b/Source/Game/Chat/Commands/ModifyCommands.cs index 8dd4bb037..a8704f67c 100644 --- a/Source/Game/Chat/Commands/ModifyCommands.cs +++ b/Source/Game/Chat/Commands/ModifyCommands.cs @@ -107,7 +107,7 @@ namespace Game.Chat flag = target.m_unitData.Flags; if (!npcflag.HasValue) - npcflag = (ulong)target.m_unitData.NpcFlags[0] << 32 | target.m_unitData.NpcFlags[1]; + npcflag = (ulong)target.m_unitData.NpcFlags2 << 32 | target.m_unitData.NpcFlags; if (!dyflag.HasValue) dyflag = target.m_objectData.DynamicFlags; diff --git a/Source/Game/Chat/Commands/NPCCommands.cs b/Source/Game/Chat/Commands/NPCCommands.cs index df3fc6da8..fe31d6cde 100644 --- a/Source/Game/Chat/Commands/NPCCommands.cs +++ b/Source/Game/Chat/Commands/NPCCommands.cs @@ -82,7 +82,7 @@ namespace Game.Chat CreatureTemplate cInfo = target.GetCreatureTemplate(); uint faction = target.GetFaction(); - ulong npcflags = (ulong)target.m_unitData.NpcFlags[1] << 32 | target.m_unitData.NpcFlags[0]; + ulong npcflags = (ulong)target.m_unitData.NpcFlags2 << 32 | target.m_unitData.NpcFlags; ulong mechanicImmuneMask = 0; CreatureImmunities immunities = Global.SpellMgr.GetCreatureImmunities(cInfo.CreatureImmunitiesId); if (immunities != null) @@ -151,7 +151,7 @@ namespace Game.Chat if (cInfo.FlagsExtra.HasAnyFlag((CreatureFlagsExtra)value)) handler.SendSysMessage("{0} (0x{1:X})", (CreatureFlagsExtra)value, value); - handler.SendSysMessage(CypherStrings.NpcinfoNpcFlags, target.m_unitData.NpcFlags[0]); + handler.SendSysMessage(CypherStrings.NpcinfoNpcFlags, target.m_unitData.NpcFlags); foreach (uint value in Enum.GetValues(typeof(NPCFlags))) if (npcflags.HasAnyFlag(value)) handler.SendSysMessage("{0} (0x{1:X})", (NPCFlags)value, value); diff --git a/Source/Game/DungeonFinding/LFGManager.cs b/Source/Game/DungeonFinding/LFGManager.cs index 3db1766ad..78b0da84a 100644 --- a/Source/Game/DungeonFinding/LFGManager.cs +++ b/Source/Game/DungeonFinding/LFGManager.cs @@ -53,8 +53,8 @@ namespace Game.DungeonFinding SetLeader(guid, ObjectGuid.Create(HighGuid.Player, field.Read(0))); - uint dungeon = field.Read(18); - LfgState state = (LfgState)field.Read(19); + uint dungeon = field.Read(19); + LfgState state = (LfgState)field.Read(20); if (dungeon == 0 || state == 0) return; diff --git a/Source/Game/Entities/Creature/Creature.cs b/Source/Game/Entities/Creature/Creature.cs index f9620301f..b13ef743e 100644 --- a/Source/Game/Entities/Creature/Creature.cs +++ b/Source/Game/Entities/Creature/Creature.cs @@ -1395,7 +1395,7 @@ namespace Game.Entities CreatureData data = Global.ObjectMgr.NewOrExistCreatureData(m_spawnId); uint displayId = GetNativeDisplayId(); - ulong spawnNpcFlags = ((ulong)m_unitData.NpcFlags[1] << 32) | m_unitData.NpcFlags[0]; + ulong spawnNpcFlags = ((ulong)GetNpcFlags2() << 32) | (uint)GetNpcFlags(); ulong? npcflag = null; uint? unitFlags = null; uint? unitFlags2 = null; diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index 275e192b3..7511eca31 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -245,8 +245,11 @@ namespace Game.Misc GossipMenuAddon addon = Global.ObjectMgr.GetGossipMenuAddon(packet.GossipID); if (addon != null) + { packet.FriendshipFactionID = addon.FriendshipFactionID; - + packet.LfgDungeonsID = addon.LfgDungeonsID; + } + NpcText text = Global.ObjectMgr.GetNpcText(titleTextId); if (text != null) packet.BroadcastTextID = (int)text.Data.SelectRandomElementByWeight(data => data.Probability).BroadcastTextID; @@ -282,8 +285,11 @@ namespace Game.Misc gossipText.QuestType = item.QuestIcon; gossipText.QuestFlags = (uint)quest.Flags; gossipText.QuestFlagsEx = (uint)quest.FlagsEx; + gossipText.QuestFlagsEx2 = (uint)quest.FlagsEx2; gossipText.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly(); + gossipText.ResetByScheduler = quest.IsResetByScheduler(); gossipText.Important = quest.IsImportant(); + gossipText.Meta = quest.IsMeta(); gossipText.QuestTitle = quest.LogTitle; Locale locale = _session.GetSessionDbLocaleIndex(); @@ -375,10 +381,13 @@ namespace Game.Misc text.QuestType = questMenuItem.QuestIcon; text.QuestFlags = (uint)quest.Flags; text.QuestFlagsEx = (uint)quest.FlagsEx; + text.QuestFlagsEx2 = (uint)quest.FlagsEx2; text.Repeatable = quest.IsTurnIn() && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly(); + text.ResetByScheduler = quest.IsResetByScheduler(); text.Important = quest.IsImportant(); - text.QuestTitle = quest.LogTitle; + text.Meta = quest.IsMeta(); + text.QuestTitle = quest.LogTitle; if (localeConstant != Locale.enUS) { QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id); @@ -446,6 +455,7 @@ namespace Game.Misc packet.PortraitGiverMount = quest.QuestGiverPortraitMount; packet.PortraitGiverModelSceneID = quest.QuestGiverPortraitModelSceneId; packet.PortraitTurnIn = quest.QuestTurnInPortrait; + packet.QuestInfoID = (int)quest.QuestInfoID; packet.QuestSessionBonus = 0; //quest.GetQuestSessionBonus(); // this is only sent while quest session is active packet.AutoLaunched = autoLaunched; packet.DisplayPopup = displayPopup; @@ -481,9 +491,10 @@ namespace Game.Misc { var obj = new QuestObjectiveSimple(); obj.Id = objs[i].Id; + obj.Type = (byte)objs[i].Type; obj.ObjectID = objs[i].ObjectID; obj.Amount = objs[i].Amount; - obj.Type = (byte)objs[i].Type; + packet.Objectives.Add(obj); } @@ -554,6 +565,7 @@ namespace Game.Misc offer.QuestID = quest.Id; offer.AutoLaunched = autoLaunched; offer.SuggestedPartyMembers = quest.SuggestedPlayers; + offer.QuestInfoID = (int)quest.QuestInfoID; for (uint i = 0; i < SharedConst.QuestEmoteCount && quest.OfferRewardEmote[i] != 0; ++i) offer.Emotes.Add(new QuestDescEmote(quest.OfferRewardEmote[i], quest.OfferRewardEmoteDelay[i])); @@ -632,6 +644,7 @@ namespace Game.Misc packet.QuestFlags[1] = (uint)quest.FlagsEx; packet.QuestFlags[2] = (uint)quest.FlagsEx2; packet.SuggestPartyMembers = quest.SuggestedPlayers; + packet.QuestInfoID = (int)quest.QuestInfoID; // incomplete: FD // incomplete quest with item objective but item objective is complete DD @@ -795,6 +808,7 @@ namespace Game.Misc public class GossipMenuAddon { public int FriendshipFactionID; + public uint LfgDungeonsID; } public class PointOfInterest diff --git a/Source/Game/Entities/GameObject/GameObjectData.cs b/Source/Game/Entities/GameObject/GameObjectData.cs index 62989d248..1e101b68e 100644 --- a/Source/Game/Entities/GameObject/GameObjectData.cs +++ b/Source/Game/Entities/GameObject/GameObjectData.cs @@ -857,7 +857,7 @@ namespace Game.Entities public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 10 Infinite AOI, enum { false, true, }; Default: false public uint NotLOSBlocking; // 11 Not LOS Blocking, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Collisionupdatedelayafteropen; // 13 Collision update delay(ms) after open, int, Min value: 0, Max value: 2147483647, Default value: 0 } @@ -873,7 +873,7 @@ namespace Game.Entities public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 public uint requireLOS; // 8 require LOS, enum { false, true, }; Default: false public uint conditionID1; // 9 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct questgiver @@ -890,7 +890,7 @@ namespace Game.Entities public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint conditionID1; // 10 conditionID1, References: PlayerCondition, NoValue = 0 public uint NeverUsableWhileMounted; // 11 Never Usable While Mounted, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 12 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 12 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct chest @@ -904,7 +904,7 @@ namespace Game.Entities public uint triggeredEvent; // 6 triggeredEvent, References: GameEvents, NoValue = 0 public uint linkedTrap; // 7 linkedTrap, References: GameObjects, NoValue = 0 public uint questID; // 8 questID, References: QuestV2, NoValue = 0 - public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint requireLOS; // 10 require LOS, enum { false, true, }; Default: false public uint leaveLoot; // 11 leaveLoot, enum { false, true, }; Default: false public uint notInCombat; // 12 notInCombat, enum { false, true, }; Default: false @@ -913,9 +913,9 @@ namespace Game.Entities public uint usegrouplootrules; // 15 use group loot rules, enum { false, true, }; Default: false public uint floatingTooltip; // 16 floatingTooltip, enum { false, true, }; Default: false public uint conditionID1; // 17 conditionID1, References: PlayerCondition, NoValue = 0 - public uint Unused; // 18 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public uint xpLevel; // 18 xpLevel, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint xpDifficulty; // 19 xpDifficulty, enum { No Exp, Trivial, Very Small, Small, Substandard, Standard, High, Epic, Dungeon, 5, }; Default: No Exp - public uint Unused2; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 + public uint Unused ; // 20 Unused, int, Min value: 0, Max value: 123, Default value: 0 public uint GroupXP; // 21 Group XP, enum { false, true, }; Default: false public uint DamageImmuneOK; // 22 Damage Immune OK, enum { false, true, }; Default: false public uint trivialSkillLow; // 23 trivialSkillLow, int, Min value: 0, Max value: 65535, Default value: 0 @@ -934,7 +934,7 @@ namespace Game.Entities public struct binder { - public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct generic @@ -948,7 +948,7 @@ namespace Game.Entities public uint conditionID1; // 6 conditionID1, References: PlayerCondition, NoValue = 0 public uint LargeAOI; // 7 Large AOI, enum { false, true, }; Default: false public uint UseGarrisonOwnerGuildColors; // 8 Use Garrison Owner Guild Colors, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Allowunfriendlycrossfactionpartymemberstocollaborateonaritual;// 10 Allow unfriendly cross faction party members to collaborate on a ritual, enum { false, true, }; Default: false } @@ -975,7 +975,7 @@ namespace Game.Entities public uint requireLOS; // 18 require LOS, enum { false, true, }; Default: false public uint TriggerCondition; // 19 Trigger Condition, References: PlayerCondition, NoValue = 0 public uint Checkallunits; // 20 Check all units (spawned traps only check players), enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 21 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 21 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct chair @@ -985,7 +985,7 @@ namespace Game.Entities public uint onlyCreatorUse; // 2 onlyCreatorUse, enum { false, true, }; Default: false public uint triggeredEvent; // 3 triggeredEvent, References: GameEvents, NoValue = 0 public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct spellFocus @@ -999,7 +999,7 @@ namespace Game.Entities public uint floatingTooltip; // 6 floatingTooltip, enum { false, true, }; Default: false public uint floatOnWater; // 7 floatOnWater, enum { false, true, }; Default: false public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint gossipID; // 10 gossipID, References: Gossip, NoValue = 0 public uint spellFocusType2; // 11 spellFocusType 2, References: SpellFocusObject, NoValue = 0 public uint spellFocusType3; // 12 spellFocusType 3, References: SpellFocusObject, NoValue = 0 @@ -1017,7 +1017,7 @@ namespace Game.Entities public uint allowMounted; // 3 allowMounted, enum { false, true, }; Default: false public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 public uint NeverUsableWhileMounted; // 5 Never Usable While Mounted, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct goober @@ -1055,7 +1055,7 @@ namespace Game.Entities public uint SyncAnimationtoObjectLifetime; // 30 Sync Animation to Object Lifetime (global track only), enum { false, true, }; Default: false public uint NoFuzzyHit; // 31 No Fuzzy Hit, enum { false, true, }; Default: false public uint LargeAOI; // 32 Large AOI, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 33 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 33 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct transport @@ -1084,7 +1084,7 @@ namespace Game.Entities public uint Reached10thfloor; // 21 Reached 10th floor, References: GameEvents, NoValue = 0 public uint onlychargeheightcheck; // 22 only charge height check. (yards), int, Min value: 0, Max value: 65535, Default value: 0 public uint onlychargetimecheck; // 23 only charge time check, int, Min value: 0, Max value: 65535, Default value: 0 - public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct areadamage @@ -1097,7 +1097,7 @@ namespace Game.Entities public uint autoClose; // 5 autoClose (ms), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint openTextID; // 6 openTextID, References: BroadcastText, NoValue = 0 public uint closeTextID; // 7 closeTextID, References: BroadcastText, NoValue = 0 - public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct camera @@ -1107,7 +1107,7 @@ namespace Game.Entities public uint eventID; // 2 eventID, References: GameEvents, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 public uint conditionID1; // 4 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct moTransport @@ -1123,19 +1123,19 @@ namespace Game.Entities public uint allowstopping; // 8 allow stopping, enum { false, true, }; Default: false public uint InitStopped; // 9 Init Stopped, enum { false, true, }; Default: false public uint TrueInfiniteAOI; // 10 True Infinite AOI (programmer only!), enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Allowareaexplorationwhileonthistransport;// 12 Allow area exploration while on this transport, enum { false, true, }; Default: false } public struct duelflag { - public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Willthisduelgountilaplayerdies; // 1 Will this duel go until a player dies?, enum { false, true, }; Default: false } public struct fishingnode { - public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct ritual @@ -1149,13 +1149,13 @@ namespace Game.Entities public uint castersGrouped; // 6 castersGrouped, enum { false, true, }; Default: true public uint ritualNoTargetCheck; // 7 ritualNoTargetCheck, enum { false, true, }; Default: true public uint conditionID1; // 8 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 9 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 9 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct mailbox { public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct guardpost @@ -1163,7 +1163,7 @@ namespace Game.Entities public uint creatureID; // 0 creatureID, References: Creature, NoValue = 0 public uint charges; // 1 charges, int, Min value: 0, Max value: 65535, Default value: 1 public uint Preferonlyifinlineofsight; // 2 Prefer only if in line of sight (expensive), enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct spellcaster @@ -1176,7 +1176,7 @@ namespace Game.Entities public uint conditionID1; // 5 conditionID1, References: PlayerCondition, NoValue = 0 public uint playerCast; // 6 playerCast, enum { false, true, }; Default: false public uint NeverUsableWhileMounted; // 7 Never Usable While Mounted, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct meetingstone @@ -1184,7 +1184,7 @@ namespace Game.Entities public uint Unused; // 0 Unused, int, Min value: 0, Max value: 65535, Default value: 1 public uint Unused2; // 1 Unused, int, Min value: 1, Max value: 65535, Default value: 60 public uint areaID; // 2 areaID, References: AreaTable, NoValue = 0 - public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Preventmeetingstonefromtargetinganunfriendlypartymemberoutsideofinstances;// 4 Prevent meeting stone from targeting an unfriendly party member outside of instances, enum { false, true, }; Default: false } @@ -1203,7 +1203,7 @@ namespace Game.Entities public uint GiganticAOI; // 10 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 11 Infinite AOI, enum { false, true, }; Default: false public uint cooldown; // 12 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 - public uint InteractRadiusOverride; // 13 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 13 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct fishinghole @@ -1213,7 +1213,7 @@ namespace Game.Entities public uint minRestock; // 2 minRestock, int, Min value: 0, Max value: 65535, Default value: 0 public uint maxRestock; // 3 maxRestock, int, Min value: 0, Max value: 65535, Default value: 0 public uint open; // 4 open, References: Lock_, NoValue = 0 - public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct flagdrop @@ -1228,7 +1228,7 @@ namespace Game.Entities public uint GiganticAOI; // 7 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 8 Infinite AOI, enum { false, true, }; Default: false public uint cooldown; // 9 cooldown, int, Min value: 0, Max value: 2147483647, Default value: 3000 - public uint InteractRadiusOverride; // 10 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 10 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct controlzone @@ -1261,7 +1261,7 @@ namespace Game.Entities public uint UncontestedTime; // 25 Uncontested Time, int, Min value: 0, Max value: 65535, Default value: 0 public uint FrequentHeartbeat; // 26 Frequent Heartbeat, enum { false, true, }; Default: false public uint EnablingWorldStateExpression; // 27 Enabling World State Expression, References: WorldStateExpression, NoValue = 0 - public uint InteractRadiusOverride; // 28 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 28 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct auraGenerator @@ -1273,7 +1273,7 @@ namespace Game.Entities public uint auraID2; // 4 auraID2, References: Spell, NoValue = 0 public uint conditionID2; // 5 conditionID2, References: PlayerCondition, NoValue = 0 public uint serverOnly; // 6 serverOnly, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct dungeonDifficulty @@ -1289,7 +1289,7 @@ namespace Game.Entities public uint LargeAOI; // 8 Large AOI, enum { false, true, }; Default: false public uint GiganticAOI; // 9 Gigantic AOI, enum { false, true, }; Default: false public uint Legacy; // 10 Legacy, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 11 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 11 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct barberChair @@ -1297,7 +1297,7 @@ namespace Game.Entities public uint chairheight; // 0 chairheight, int, Min value: 0, Max value: 2, Default value: 1 public int HeightOffset; // 1 Height Offset (inches), int, Min value: -100, Max value: 100, Default value: 0 public uint SitAnimKit; // 2 Sit Anim Kit, References: AnimKit, NoValue = 0 - public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint CustomizationScope; // 4 Customization Scope, int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Preventteleportingtheplayeroutofthebarbershopchair;// 5 Prevent teleporting the player out of the barbershop chair, enum { false, true, }; Default: false } @@ -1328,16 +1328,16 @@ namespace Game.Entities public int Unused10; // 21 Unused, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint DamageEvent; // 22 Damage Event, References: GameEvents, NoValue = 0 public uint Displaymouseoverasanameplate; // 23 Display mouseover as a nameplate, enum { false, true, }; Default: false - public int Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - public int Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - public int Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (in hundredths) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - public uint InteractRadiusOverride; // 27 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public int Thexoffsetofthedestructiblenameplateifitisenabled;// 24 The x offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public int Theyoffsetofthedestructiblenameplateifitisenabled;// 25 The y offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public int Thezoffsetofthedestructiblenameplateifitisenabled;// 26 The z offset (Yards * 100) of the destructible nameplate, if it is enabled, int, Min value: -2147483648, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 27 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct guildbank { public uint conditionID1; // 0 conditionID1, References: PlayerCondition, NoValue = 0 - public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct trapDoor @@ -1350,7 +1350,7 @@ namespace Game.Entities public uint GiganticAOI; // 5 Gigantic AOI, enum { false, true, }; Default: false public uint InfiniteAOI; // 6 Infinite AOI, enum { false, true, }; Default: false public uint DoorisOpaque; // 7 Door is Opaque (Disable portal on close), enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 8 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 8 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct newflag @@ -1369,27 +1369,27 @@ namespace Game.Entities public uint worldState1; // 11 worldState1, References: WorldState, NoValue = 0 public uint ReturnonDefenderInteract; // 12 Return on Defender Interact, enum { false, true, }; Default: false public uint SpawnVignette; // 13 Spawn Vignette, References: vignette, NoValue = 0 - public uint InteractRadiusOverride; // 14 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 14 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct newflagdrop { public uint open; // 0 open, References: Lock_, NoValue = 0 public uint SpawnVignette; // 1 Spawn Vignette, References: vignette, NoValue = 0 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonbuilding { public int SpawnMap; // 0 Spawn Map, References: Map, NoValue = -1 - public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonplot { public uint PlotInstance; // 0 Plot Instance, References: GarrPlotInstance, NoValue = 0 public int SpawnMap; // 1 Spawn Map, References: Map, NoValue = -1 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct clientcreature @@ -1429,7 +1429,7 @@ namespace Game.Entities public uint SpellVisual4; // 20 Spell Visual 4, References: SpellVisual, NoValue = 0 public uint SpellVisual5; // 21 Spell Visual 5, References: SpellVisual, NoValue = 0 public uint SpawnVignette; // 22 Spawn Vignette, References: vignette, NoValue = 0 - public uint InteractRadiusOverride; // 23 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 23 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct phaseablemo @@ -1438,14 +1438,14 @@ namespace Game.Entities public int AreaNameSet; // 1 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 public uint DoodadSetA; // 2 Doodad Set A, int, Min value: 0, Max value: 2147483647, Default value: 0 public uint DoodadSetB; // 3 Doodad Set B, int, Min value: 0, Max value: 2147483647, Default value: 0 - public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonmonument { public uint TrophyTypeID; // 0 Trophy Type ID, References: TrophyType, NoValue = 0 public uint TrophyInstanceID; // 1 Trophy Instance ID, References: TrophyInstance, NoValue = 0 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonshipment @@ -1453,13 +1453,13 @@ namespace Game.Entities public uint ShipmentContainer; // 0 Shipment Container, References: CharShipmentContainer, NoValue = 0 public uint GiganticAOI; // 1 Gigantic AOI, enum { false, true, }; Default: false public uint LargeAOI; // 2 Large AOI, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 3 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 3 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrisonmonumentplaque { public uint TrophyInstanceID; // 0 Trophy Instance ID, References: TrophyInstance, NoValue = 0 - public uint InteractRadiusOverride; // 1 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 1 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct itemforge @@ -1470,7 +1470,7 @@ namespace Game.Entities public uint CameraMode; // 3 Camera Mode, References: CameraMode, NoValue = 0 public uint FadeRegionRadius; // 4 Fade Region Radius, int, Min value: 0, Max value: 2147483647, Default value: 0 public uint ForgeType; // 5 Forge Type, enum { Artifact Forge, Relic Forge, Heart Forge, Soulbind Forge, Anima Reservoir, }; Default: Relic Forge - public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint GarrTalentTreeID; // 7 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 } @@ -1481,13 +1481,13 @@ namespace Game.Entities public uint GiganticAOI; // 2 Gigantic AOI, enum { false, true, }; Default: false public uint spellFocusType; // 3 spellFocusType, References: SpellFocusObject, NoValue = 0 public uint radius; // 4 radius, int, Min value: 0, Max value: 50, Default value: 10 - public uint InteractRadiusOverride; // 5 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 5 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint ItemInteractionID; // 6 Item Interaction ID, References: UiItemInteraction, NoValue = 0 } public struct keystonereceptacle { - public uint InteractRadiusOverride; // 0 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 0 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct gatheringnode @@ -1516,7 +1516,7 @@ namespace Game.Entities public uint PlayOpenAnimationonOpening; // 21 Play Open Animation on Opening, enum { false, true, }; Default: false public uint turnpersonallootsecurityoff; // 22 turn personal loot security off, enum { false, true, }; Default: false public uint ClearObjectVignetteonOpening; // 23 Clear Object Vignette on Opening, enum { false, true, }; Default: false - public uint InteractRadiusOverride; // 24 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 24 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Overrideminimaptrackingicon; // 25 Override minimap tracking icon, References: UiTextureAtlasMember, NoValue = 0 } @@ -1526,7 +1526,7 @@ namespace Game.Entities public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 public uint open; // 2 open, References: Lock_, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 - public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct multi @@ -1548,7 +1548,7 @@ namespace Game.Entities public uint DoodadSetC; // 3 Doodad Set C, int, Min value: 0, Max value: 2147483647, Default value: 0 public int SpawnMap; // 4 Spawn Map, References: Map, NoValue = -1 public int AreaNameSet; // 5 Area Name Set (Index), int, Min value: -2147483648, Max value: 2147483647, Default value: 0 - public uint InteractRadiusOverride; // 6 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 6 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct pvpReward @@ -1557,7 +1557,7 @@ namespace Game.Entities public uint WhenAvailable; // 1 When Available, References: GameObjectDisplayInfo, NoValue = 0 public uint open; // 2 open, References: Lock_, NoValue = 0 public uint openTextID; // 3 openTextID, References: BroadcastText, NoValue = 0 - public uint InteractRadiusOverride; // 4 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 4 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct playerchoicechest @@ -1569,7 +1569,7 @@ namespace Game.Entities public uint MawPowerFilter; // 4 Maw Power Filter, References: MawPowerFilter, NoValue = 0 public uint Script; // 5 Script, References: SpellScript, NoValue = 0 public uint SpellVisual1; // 6 Spell Visual 1, References: SpellVisual, NoValue = 0 - public uint InteractRadiusOverride; // 7 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 7 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint Dontupdateplayerinteractability; // 8 Don't update player interactability, enum { false, true, }; Default: false } @@ -1577,21 +1577,21 @@ namespace Game.Entities { public uint PlayerChoice; // 0 Player Choice, References: PlayerChoice, NoValue = 0 public uint CustomItemBonusFilter; // 1 Custom Item Bonus Filter, References: CustomItemBonusFilter, NoValue = 0 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct garrtalenttree { public uint UiMapID; // 0 Ui Map ID, References: UiMap, NoValue = 0 public uint GarrTalentTreeID; // 1 GarrTalentTree ID, References: GarrTalentTree, NoValue = 0 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 } public struct weeklyrewardchest { public uint WhenAvailable; // 0 When Available, References: GameObjectDisplayInfo, NoValue = 0 public uint open; // 1 open, References: Lock_, NoValue = 0 - public uint InteractRadiusOverride; // 2 Interact Radius Override (in hundredths), int, Min value: 0, Max value: 2147483647, Default value: 0 + public uint InteractRadiusOverride; // 2 Interact Radius Override (Yards * 100), int, Min value: 0, Max value: 2147483647, Default value: 0 public uint ExpansionLevel; // 3 Expansion Level, int, Min value: 0, Max value: 2147483647, Default value: 0 } diff --git a/Source/Game/Entities/Item/Item.cs b/Source/Game/Entities/Item/Item.cs index 2eb0dcc77..ee25cf35e 100644 --- a/Source/Game/Entities/Item/Item.cs +++ b/Source/Game/Entities/Item/Item.cs @@ -2342,7 +2342,7 @@ namespace Game.Entities } public ItemContext GetContext() { return (ItemContext)(int)m_itemData.Context; } - public void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Context), (int)context); } + public void SetContext(ItemContext context) { SetUpdateFieldValue(m_values.ModifyValue(m_itemData).ModifyValue(m_itemData.Context), (byte)context); } public void SetPetitionId(uint petitionId) { diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index 22d698cd3..eaaf886a0 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -69,6 +69,8 @@ namespace Game.Entities return updateField._value; } + public int Size() { return _value.GetByteCount(); } + public void SetValue(string value) { _value = value; } public string GetValue() { return _value; } @@ -411,7 +413,8 @@ namespace Game.Entities public void ClearChanged(UpdateFieldArray updateField, int index) where U : new() { - _changesMask.Reset(updateField.FirstElementBit + index); + if (updateField.FirstElementBit >= 0) + _changesMask.Reset(updateField.FirstElementBit + index); } public void ClearChanged(DynamicUpdateField updateField, int index) where U : new() @@ -518,9 +521,10 @@ namespace Game.Entities updateField[index]._updateMask.Resize((uint)(updateField[index]._values.Count + 31) / 32); } - //MarkChanged(updateField, index); _changesMask.Set(updateField.Bit); - _changesMask.Set(updateField.FirstElementBit); + if (updateField.FirstElementBit >= 0) + _changesMask.Set(updateField.FirstElementBit); + updateField[index].MarkChanged(dynamicIndex); return new DynamicUpdateFieldSetter(updateField[index], dynamicIndex); @@ -547,13 +551,15 @@ namespace Game.Entities public void MarkChanged(UpdateFieldArray updateField, int index) where U : new() { _changesMask.Set(updateField.Bit); - _changesMask.Set(updateField.FirstElementBit + index); + if (updateField.FirstElementBit >= 0) + _changesMask.Set(updateField.FirstElementBit + index); } public void MarkChanged(UpdateFieldArrayString updateField, int index) { _changesMask.Set(updateField.Bit); - _changesMask.Set(updateField.FirstElementBit + index); + if (updateField.FirstElementBit >= 0) + _changesMask.Set(updateField.FirstElementBit + index); } public void WriteCompleteDynamicFieldUpdateMask(int size, WorldPacket data, int bitsForSize = 32) diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index 03dd1252c..014792a68 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -229,19 +229,19 @@ namespace Game.Entities public class ItemMod { - public uint Value; public byte Type; + public uint Value; public void WriteCreate(WorldPacket data, Item owner, Player receiver) { - data.WriteUInt32(Value); data.WriteUInt8(Type); + data.WriteUInt32(Value); } public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Item owner, Player receiver) { - data.WriteUInt32(Value); data.WriteUInt8(Type); + data.WriteUInt32(Value); } } @@ -392,7 +392,7 @@ namespace Game.Entities public UpdateField Durability = new(0, 10); public UpdateField MaxDurability = new(0, 11); public UpdateField CreatePlayedTime = new(0, 12); - public UpdateField Context = new(0, 13); + public UpdateField Context = new(0, 13); public UpdateField CreateTime = new(0, 14); public UpdateField ArtifactXP = new(0, 15); public UpdateField ItemAppearanceModID = new(0, 16); @@ -431,7 +431,7 @@ namespace Game.Entities data.WriteUInt32(MaxDurability); } data.WriteUInt32(CreatePlayedTime); - data.WriteInt32(Context); + data.WriteUInt8(Context); data.WriteInt64(CreateTime); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { @@ -569,7 +569,7 @@ namespace Game.Entities } if (changesMask[13]) { - data.WriteInt32(Context); + data.WriteUInt8(Context); } if (changesMask[14]) { @@ -653,13 +653,13 @@ namespace Game.Entities public class ContainerData : HasChangesMask { public UpdateField NumSlots = new(0, 1); - public UpdateFieldArray Slots = new(36, 2, 3); + public UpdateFieldArray Slots = new(98, 2, 3); - public ContainerData() : base(0, TypeId.Container, 39) { } + public ContainerData() : base(0, TypeId.Container, 101) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Bag owner, Player receiver) { - for (int i = 0; i < 36; ++i) + for (int i = 0; i < 98; ++i) { data.WritePackedGuid(Slots[i]); } @@ -673,8 +673,8 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, Bag owner, Player receiver) { - data.WriteBits(_changesMask.GetBlocksMask(0), 2); - for (uint i = 0; i < 2; ++i) + data.WriteBits(_changesMask.GetBlocksMask(0), 4); + for (uint i = 0; i < 4; ++i) if (_changesMask.GetBlock(i) != 0) data.WriteBits(_changesMask.GetBlock(i), 32); @@ -688,7 +688,7 @@ namespace Game.Entities } if (_changesMask[2]) { - for (int i = 0; i < 36; ++i) + for (int i = 0; i < 98; ++i) { if (_changesMask[3 + i]) { @@ -1126,153 +1126,157 @@ namespace Game.Entities public class UnitData : HasChangesMask { - static int ChangeMaskLength = 217; + static int ChangeMaskLength = 220; - public UpdateField> StateWorldEffectIDs = new(0, 1); - public DynamicUpdateField PassiveSpells = new(0, 2); - public DynamicUpdateField WorldEffects = new(0, 3); - public DynamicUpdateField ChannelObjects = new(0, 4); - public UpdateField DisplayID = new(0, 5); - public UpdateField StateSpellVisualID = new(0, 6); - public UpdateField StateAnimID = new(0, 7); - public UpdateField StateAnimKitID = new(0, 8); - public UpdateField StateWorldEffectsQuestObjectiveID = new(0, 9); - public UpdateField SpellOverrideNameID = new(0, 10); - public UpdateField Charm = new(0, 11); - public UpdateField Summon = new(0, 12); - public UpdateField Critter = new(0, 13); - public UpdateField CharmedBy = new(0, 14); - public UpdateField SummonedBy = new(0, 15); - public UpdateField CreatedBy = new(0, 16); - public UpdateField DemonCreator = new(0, 17); - public UpdateField LookAtControllerTarget = new(0, 18); - public UpdateField Target = new(0, 19); - public UpdateField BattlePetCompanionGUID = new(0, 20); - public UpdateField BattlePetDBID = new(0, 21); - public UpdateField ChannelData = new(0, 22); - public UpdateField SpellEmpowerStage = new(0, 23); - public UpdateField SummonedByHomeRealm = new(0, 24); - public UpdateField Race = new(0, 25); - public UpdateField ClassId = new(0, 26); - public UpdateField PlayerClassId = new(0, 27); - public UpdateField Sex = new(0, 28); - public UpdateField DisplayPower = new(0, 29); - public UpdateField OverrideDisplayPowerID = new(0, 30); - public UpdateField Health = new(0, 31); - public UpdateField MaxHealth = new(32, 33); - public UpdateField Level = new(32, 34); - public UpdateField EffectiveLevel = new(32, 35); - public UpdateField ContentTuningID = new(32, 36); - public UpdateField ScalingLevelMin = new(32, 37); - public UpdateField ScalingLevelMax = new(32, 38); - public UpdateField ScalingLevelDelta = new(32, 39); - public UpdateField ScalingFactionGroup = new(32, 40); - public UpdateField FactionTemplate = new(32, 41); - public UpdateField Flags = new(32, 42); - public UpdateField Flags2 = new(32, 43); - public UpdateField Flags3 = new(32, 44); - public UpdateField AuraState = new(32, 45); - public UpdateField RangedAttackRoundBaseTime = new(32, 46); - public UpdateField BoundingRadius = new(32, 47); - public UpdateField CombatReach = new(32, 48); - public UpdateField DisplayScale = new(32, 49); - public UpdateField CreatureFamily = new(32, 50); - public UpdateField CreatureType = new(32, 51); - public UpdateField NativeDisplayID = new(32, 52); - public UpdateField NativeXDisplayScale = new(32, 53); - public UpdateField MountDisplayID = new(32, 54); - public UpdateField CosmeticMountDisplayID = new(32, 55); - public UpdateField MinDamage = new(32, 56); - public UpdateField MaxDamage = new(32, 57); - public UpdateField MinOffHandDamage = new(32, 58); - public UpdateField MaxOffHandDamage = new(32, 59); - public UpdateField StandState = new(32, 60); - public UpdateField PetTalentPoints = new(32, 61); - public UpdateField VisFlags = new(32, 62); - public UpdateField AnimTier = new(32, 63); - public UpdateField PetNumber = new(32, 65); - public UpdateField PetNameTimestamp = new(64, 66); - public UpdateField PetExperience = new(64, 67); - public UpdateField PetNextLevelExperience = new(64, 68); - public UpdateField ModCastingSpeed = new(64, 69); - public UpdateField ModCastingSpeedNeg = new(64, 70); - public UpdateField ModSpellHaste = new(64, 71); - public UpdateField ModHaste = new(64, 72); - public UpdateField ModRangedHaste = new(64, 73); - public UpdateField ModHasteRegen = new(64, 74); - public UpdateField ModTimeRate = new(64, 75); - public UpdateField CreatedBySpell = new(64, 76); - public UpdateField EmoteState = new(64, 77); - public UpdateField BaseMana = new(64, 78); - public UpdateField BaseHealth = new(64, 79); - public UpdateField SheatheState = new(64, 80); - public UpdateField PvpFlags = new(64, 81); - public UpdateField PetFlags = new(64, 82); - public UpdateField ShapeshiftForm = new(64, 83); - public UpdateField AttackPower = new(64, 84); - public UpdateField AttackPowerModPos = new(64, 85); - public UpdateField AttackPowerModNeg = new(64, 86); - public UpdateField AttackPowerMultiplier = new(64, 87); - public UpdateField AttackPowerModSupport = new(64, 88); - public UpdateField RangedAttackPower = new(64, 89); - public UpdateField RangedAttackPowerModPos = new(64, 90); - public UpdateField RangedAttackPowerModNeg = new(64, 91); - public UpdateField RangedAttackPowerMultiplier = new(64, 92); - public UpdateField RangedAttackPowerModSupport = new(64, 93); - public UpdateField MainHandWeaponAttackPower = new(64, 94); - public UpdateField OffHandWeaponAttackPower = new(64, 95); - public UpdateField RangedWeaponAttackPower = new(96, 97); - public UpdateField SetAttackSpeedAura = new(96, 98); - public UpdateField Lifesteal = new(96, 99); - public UpdateField MinRangedDamage = new(96, 100); - public UpdateField MaxRangedDamage = new(96, 101); - public UpdateField ManaCostMultiplier = new(96, 102); - public UpdateField MaxHealthModifier = new(96, 103); - public UpdateField HoverHeight = new(96, 104); - public UpdateField MinItemLevelCutoff = new(96, 105); - public UpdateField MinItemLevel = new(96, 106); - public UpdateField MaxItemLevel = new(96, 107); - public UpdateField AzeriteItemLevel = new(96, 108); - public UpdateField WildBattlePetLevel = new(96, 109); - public UpdateField BattlePetCompanionExperience = new(96, 110); - public UpdateField BattlePetCompanionNameTimestamp = new(96, 111); - public UpdateField InteractSpellID = new(96, 112); - public UpdateField ScaleDuration = new(96, 113); - public UpdateField LooksLikeMountID = new(96, 114); - public UpdateField LooksLikeCreatureID = new(96, 115); - public UpdateField LookAtControllerID = new(96, 116); - public UpdateField PerksVendorItemID = new(96, 117); - public UpdateField TaxiNodesID = new(96, 118); - public UpdateField GuildGUID = new(96, 119); - public UpdateField FlightCapabilityID = new(96, 120); - public UpdateField GlideEventSpeedDivisor = new(96, 121); // Movement speed gets divided by this value when evaluating what GlideEvents to use - public UpdateField Field_308 = new(96, 122); - public UpdateField Field_30C = new(96, 123); - public UpdateField SilencedSchoolMask = new(96, 124); - public UpdateField CurrentAreaID = new(96, 125); - public UpdateField NameplateAttachToGUID = new(96, 126); // When set, nameplate of this unit will instead appear on that object - public UpdateFieldArray NpcFlags = new(2, 127, 128); - public UpdateFieldArray Power = new(10, 130, 131); - public UpdateFieldArray MaxPower = new(10, 130, 141); - public UpdateFieldArray PowerRegenFlatModifier = new(10, 130, 151); - public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(10, 130, 161); - public UpdateFieldArray VirtualItems = new(3, 171, 172); - public UpdateFieldArray AttackRoundBaseTime = new(2, 175, 176); - public UpdateFieldArray Stats = new(4, 178, 179); - public UpdateFieldArray StatPosBuff = new(4, 178, 183); - public UpdateFieldArray StatNegBuff = new(4, 178, 187); - public UpdateFieldArray StatSupportBuff = new(4, 178, 191); - public UpdateFieldArray Resistances = new(7, 195, 196); - public UpdateFieldArray BonusResistanceMods = new(7, 195, 203); - public UpdateFieldArray ManaCostModifier = new(7, 195, 210); + public UpdateField Field_314 = new(0, 1); + public UpdateField> StateWorldEffectIDs = new(0, 2); + public DynamicUpdateField PassiveSpells = new(0, 3); + public DynamicUpdateField WorldEffects = new(0, 4); + public DynamicUpdateField ChannelObjects = new(0, 5); + public UpdateField DisplayID = new(0, 6); + public UpdateField NpcFlags = new(0, 7); + public UpdateField NpcFlags2 = new(0, 8); + public UpdateField StateSpellVisualID = new(0, 9); + public UpdateField StateAnimID = new(0, 10); + public UpdateField StateAnimKitID = new(0, 11); + public UpdateField StateWorldEffectsQuestObjectiveID = new(0, 12); + public UpdateField SpellOverrideNameID = new(0, 13); + public UpdateField Charm = new(0, 14); + public UpdateField Summon = new(0, 15); + public UpdateField Critter = new(0, 16); + public UpdateField CharmedBy = new(0, 17); + public UpdateField SummonedBy = new(0, 18); + public UpdateField CreatedBy = new(0, 19); + public UpdateField DemonCreator = new(0, 20); + public UpdateField LookAtControllerTarget = new(0, 21); + public UpdateField Target = new(0, 22); + public UpdateField BattlePetCompanionGUID = new(0, 23); + public UpdateField BattlePetDBID = new(0, 24); + public UpdateField ChannelData = new(0, 25); + public UpdateField SpellEmpowerStage = new(0, 26); + public UpdateField SummonedByHomeRealm = new(0, 27); + public UpdateField Race = new(0, 28); + public UpdateField ClassId = new(0, 29); + public UpdateField PlayerClassId = new(0, 30); + public UpdateField Sex = new(0, 31); + public UpdateField DisplayPower = new(32, 33); + public UpdateField OverrideDisplayPowerID = new(32, 34); + public UpdateField Health = new(32, 35); + public UpdateField MaxHealth = new(32, 36); + public UpdateField Level = new(32, 37); + public UpdateField EffectiveLevel = new(32, 38); + public UpdateField ContentTuningID = new(32, 39); + public UpdateField ScalingLevelMin = new(32, 40); + public UpdateField ScalingLevelMax = new(32, 41); + public UpdateField ScalingLevelDelta = new(32, 42); + public UpdateField ScalingFactionGroup = new(32, 43); + public UpdateField FactionTemplate = new(32, 44); + public UpdateField Flags = new(32, 45); + public UpdateField Flags2 = new(32, 46); + public UpdateField Flags3 = new(32, 47); + public UpdateField AuraState = new(32, 48); + public UpdateField RangedAttackRoundBaseTime = new(32, 49); + public UpdateField BoundingRadius = new(32, 50); + public UpdateField CombatReach = new(32, 51); + public UpdateField DisplayScale = new(32, 52); + public UpdateField CreatureFamily = new(32, 53); + public UpdateField CreatureType = new(32, 54); + public UpdateField NativeDisplayID = new(32, 55); + public UpdateField NativeXDisplayScale = new(32, 56); + public UpdateField MountDisplayID = new(32, 57); + public UpdateField CosmeticMountDisplayID = new(32, 58); + public UpdateField MinDamage = new(32, 59); + public UpdateField MaxDamage = new(32, 60); + public UpdateField MinOffHandDamage = new(32, 61); + public UpdateField MaxOffHandDamage = new(32, 62); + public UpdateField StandState = new(32, 63); + public UpdateField PetTalentPoints = new(64, 65); + public UpdateField VisFlags = new(64, 66); + public UpdateField AnimTier = new(64, 67); + public UpdateField PetNumber = new(64, 68); + public UpdateField PetNameTimestamp = new(64, 69); + public UpdateField PetExperience = new(64, 70); + public UpdateField PetNextLevelExperience = new(64, 71); + public UpdateField ModCastingSpeed = new(64, 72); + public UpdateField ModCastingSpeedNeg = new(64, 73); + public UpdateField ModSpellHaste = new(64, 74); + public UpdateField ModHaste = new(64, 75); + public UpdateField ModRangedHaste = new(64, 76); + public UpdateField ModHasteRegen = new(64, 77); + public UpdateField ModTimeRate = new(64, 78); + public UpdateField CreatedBySpell = new(64, 79); + public UpdateField EmoteState = new(64, 80); + public UpdateField BaseMana = new(64, 81); + public UpdateField BaseHealth = new(64, 82); + public UpdateField SheatheState = new(64, 83); + public UpdateField PvpFlags = new(64, 84); + public UpdateField PetFlags = new(64, 85); + public UpdateField ShapeshiftForm = new(64, 86); + public UpdateField AttackPower = new(64, 87); + public UpdateField AttackPowerModPos = new(64, 88); + public UpdateField AttackPowerModNeg = new(64, 89); + public UpdateField AttackPowerMultiplier = new(64, 90); + public UpdateField AttackPowerModSupport = new(64, 91); + public UpdateField RangedAttackPower = new(64, 92); + public UpdateField RangedAttackPowerModPos = new(64, 93); + public UpdateField RangedAttackPowerModNeg = new(64, 94); + public UpdateField RangedAttackPowerMultiplier = new(64, 95); + public UpdateField RangedAttackPowerModSupport = new(96, 97); + public UpdateField MainHandWeaponAttackPower = new(96, 98); + public UpdateField OffHandWeaponAttackPower = new(96, 99); + public UpdateField RangedWeaponAttackPower = new(96, 100); + public UpdateField SetAttackSpeedAura = new(96, 101); + public UpdateField Lifesteal = new(96, 102); + public UpdateField MinRangedDamage = new(96, 103); + public UpdateField MaxRangedDamage = new(96, 104); + public UpdateField ManaCostMultiplier = new(96, 105); + public UpdateField MaxHealthModifier = new(96, 106); + public UpdateField HoverHeight = new(96, 107); + public UpdateField MinItemLevelCutoff = new(96, 108); + public UpdateField MinItemLevel = new(96, 109); + public UpdateField MaxItemLevel = new(96, 110); + public UpdateField AzeriteItemLevel = new(96, 111); + public UpdateField WildBattlePetLevel = new(96, 112); + public UpdateField BattlePetCompanionExperience = new(96, 113); + public UpdateField BattlePetCompanionNameTimestamp = new(96, 114); + public UpdateField InteractSpellID = new(96, 115); + public UpdateField ScaleDuration = new(96, 116); + public UpdateField LooksLikeMountID = new(96, 117); + public UpdateField LooksLikeCreatureID = new(96, 118); + public UpdateField LookAtControllerID = new(96, 119); + public UpdateField PerksVendorItemID = new(96, 120); + public UpdateField TaxiNodesID = new(96, 121); + public UpdateField GuildGUID = new(96, 122); + public UpdateField FlightCapabilityID = new(96, 123); + public UpdateField GlideEventSpeedDivisor = new(96, 124); // Movement speed gets divided by this value when evaluating what GlideEvents to use + public UpdateField MaxHealthModifierFlatNeg = new(96, 125); + public UpdateField MaxHealthModifierFlatPos = new(96, 126); + public UpdateField SilencedSchoolMask = new(96, 127); + public UpdateField CurrentAreaID = new(128, 129); + public UpdateField Field_31C = new(128, 130); + public UpdateField Field_320 = new(128, 131); // Soft targeting related? When UnitFlags3 & 0x40000000 is set, increases some range check using CombatReach by this amount + public UpdateField NameplateAttachToGUID = new(128, 132); // When set, nameplate of this unit will instead appear on that object + public UpdateFieldArray Power = new(10, 133, 134); + public UpdateFieldArray MaxPower = new(10, 133, 144); + public UpdateFieldArray PowerRegenFlatModifier = new(10, 133, 154); + public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(10, 133, 164); + public UpdateFieldArray VirtualItems = new(3, 174, 175); + public UpdateFieldArray AttackRoundBaseTime = new(2, 178, 179); + public UpdateFieldArray Stats = new(4, 181, 182); + public UpdateFieldArray StatPosBuff = new(4, 181, 186); + public UpdateFieldArray StatNegBuff = new(4, 181, 190); + public UpdateFieldArray StatSupportBuff = new(4, 181, 194); + public UpdateFieldArray Resistances = new(7, 198, 199); + public UpdateFieldArray BonusResistanceMods = new(7, 198, 206); + public UpdateFieldArray ManaCostModifier = new(7, 198, 213); public UnitData() : base(0, TypeId.Unit, ChangeMaskLength) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { data.WriteUInt32(GetViewerDependentDisplayId(this, owner, receiver)); - for (int i = 0; i < 2; ++i) - data.WriteUInt32(GetViewerDependentNpcFlags(this, i, owner, receiver)); + data.WriteUInt32(GetViewerDependentNpcFlags(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentNpcFlags2(this, owner, receiver)); data.WriteUInt32(StateSpellVisualID); data.WriteUInt32(StateAnimID); @@ -1427,13 +1431,13 @@ namespace Game.Entities data.WriteFloat(MinRangedDamage); data.WriteFloat(MaxRangedDamage); data.WriteFloat(ManaCostMultiplier); - data.WriteFloat(MaxHealthModifier); } + data.WriteFloat(MaxHealthModifier); data.WriteFloat(HoverHeight); data.WriteUInt32(MinItemLevelCutoff); data.WriteUInt32(MinItemLevel); data.WriteUInt32(MaxItemLevel); - data.WriteInt32(AzeriteItemLevel); + data.WriteUInt32(AzeriteItemLevel); data.WriteUInt32(WildBattlePetLevel); data.WriteUInt32(BattlePetCompanionExperience); data.WriteUInt32(BattlePetCompanionNameTimestamp); @@ -1450,10 +1454,12 @@ namespace Game.Entities data.WriteInt32(ChannelObjects.Size()); data.WriteInt32(FlightCapabilityID); data.WriteFloat(GlideEventSpeedDivisor); - data.WriteUInt32(Field_308); - data.WriteUInt32(Field_30C); + data.WriteUInt32(MaxHealthModifierFlatNeg); + data.WriteUInt32(MaxHealthModifierFlatPos); data.WriteUInt32(SilencedSchoolMask); data.WriteUInt32(CurrentAreaID); + data.WriteFloat(Field_31C); + data.WriteFloat(Field_320); data.WritePackedGuid(NameplateAttachToGUID); for (int i = 0; i < PassiveSpells.Size(); ++i) @@ -1464,11 +1470,14 @@ namespace Game.Entities for (int i = 0; i < ChannelObjects.Size(); ++i) data.WritePackedGuid(ChannelObjects[i]); + + data.WriteBit(Field_314); + data.FlushBits(); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u]); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1476,16 +1485,16 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00002000u, 0x0F004000u, 0xFFF08000u, 0x000000FEu, 0xFF800004u, 0xFFFC07FFu, 0x01FFFFFFu])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00010000u, 0x78020000u, 0xFF840000u, 0x000003FEu, 0xFC000020u, 0xFFE03FFFu, 0x0FFFFFFFu])); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFF800004u, 0x000007FFu, 0x00000000u])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0xFC000020u, 0x00003FFFu, 0x00000000u])); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath)) - allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x0F000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000007F8u])); + allowedMaskForTarget.OR(new UpdateMask(ChangeMaskLength, [0x00000000u, 0x78000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x00003FC0u])); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { - UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFFDFFFu, 0xF0FFBFFFu, 0x000F7FFFu, 0xFFFFFF01u, 0x007FFFFFu, 0x0003F800u, 0x00000000u]); + UpdateMask allowedMaskForTarget = new(ChangeMaskLength, [0xFFFEFFFFu, 0x87FDFFFFu, 0x007BFFFFu, 0xFFFFFC01u, 0x03FFFFFFu, 0x001FC000u, 0x00000000u]); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask.AND(allowedMaskForTarget); } @@ -1501,31 +1510,36 @@ namespace Game.Entities { if (changesMask[1]) { - data.WriteBits(StateWorldEffectIDs.GetValue().Count, 32); - for (int i = 0; i < StateWorldEffectIDs.GetValue().Count; ++i) + data.WriteBit(Field_314); + } + if (changesMask[2]) + { + var list = StateWorldEffectIDs.GetValue(); + data.WriteBits(list.Count, 32); + for (int i = 0; i < list.Count; ++i) { - data.WriteUInt32(StateWorldEffectIDs.GetValue()[i]); + data.WriteUInt32(list[i]); } } } data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { if (!ignoreNestedChangesMask) PassiveSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(PassiveSpells.Size(), data); } - if (changesMask[3]) + if (changesMask[4]) { if (!ignoreNestedChangesMask) WorldEffects.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WorldEffects.Size(), data); } - if (changesMask[4]) + if (changesMask[5]) { if (!ignoreNestedChangesMask) ChannelObjects.WriteUpdateMask(data); @@ -1536,7 +1550,7 @@ namespace Game.Entities data.FlushBits(); if (changesMask[0]) { - if (changesMask[2]) + if (changesMask[3]) { for (int i = 0; i < PassiveSpells.Size(); ++i) { @@ -1546,7 +1560,7 @@ namespace Game.Entities } } } - if (changesMask[3]) + if (changesMask[4]) { for (int i = 0; i < WorldEffects.Size(); ++i) { @@ -1556,7 +1570,7 @@ namespace Game.Entities } } } - if (changesMask[4]) + if (changesMask[5]) { for (int i = 0; i < ChannelObjects.Size(); ++i) { @@ -1566,593 +1580,606 @@ namespace Game.Entities } } } - if (changesMask[5]) + if (changesMask[6]) { data.WriteUInt32(GetViewerDependentDisplayId(this, owner, receiver)); } - if (changesMask[6]) - { - data.WriteUInt32(StateSpellVisualID); - } if (changesMask[7]) { - data.WriteUInt32(StateAnimID); + data.WriteUInt32(GetViewerDependentNpcFlags(this, owner, receiver)); } if (changesMask[8]) { - data.WriteUInt32(StateAnimKitID); + data.WriteUInt32(GetViewerDependentNpcFlags2(this, owner, receiver)); } if (changesMask[9]) { - data.WriteUInt32(StateWorldEffectsQuestObjectiveID); + data.WriteUInt32(StateSpellVisualID); } if (changesMask[10]) { - data.WriteInt32(SpellOverrideNameID); + data.WriteUInt32(StateAnimID); } if (changesMask[11]) { - data.WritePackedGuid(Charm); + data.WriteUInt32(StateAnimKitID); } if (changesMask[12]) { - data.WritePackedGuid(Summon); + data.WriteUInt32(StateWorldEffectsQuestObjectiveID); } if (changesMask[13]) { - data.WritePackedGuid(Critter); + data.WriteInt32(SpellOverrideNameID); } if (changesMask[14]) { - data.WritePackedGuid(CharmedBy); + data.WritePackedGuid(Charm); } if (changesMask[15]) { - data.WritePackedGuid(SummonedBy); + data.WritePackedGuid(Summon); } if (changesMask[16]) { - data.WritePackedGuid(CreatedBy); + data.WritePackedGuid(Critter); } if (changesMask[17]) { - data.WritePackedGuid(DemonCreator); + data.WritePackedGuid(CharmedBy); } if (changesMask[18]) { - data.WritePackedGuid(LookAtControllerTarget); + data.WritePackedGuid(SummonedBy); } if (changesMask[19]) { - data.WritePackedGuid(Target); + data.WritePackedGuid(CreatedBy); } if (changesMask[20]) { - data.WritePackedGuid(BattlePetCompanionGUID); + data.WritePackedGuid(DemonCreator); } if (changesMask[21]) { - data.WriteUInt64(BattlePetDBID); + data.WritePackedGuid(LookAtControllerTarget); } if (changesMask[22]) { - ChannelData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WritePackedGuid(Target); } if (changesMask[23]) { - data.WriteInt8(SpellEmpowerStage); + data.WritePackedGuid(BattlePetCompanionGUID); } if (changesMask[24]) { - data.WriteUInt32(SummonedByHomeRealm); + data.WriteUInt64(BattlePetDBID); } if (changesMask[25]) { - data.WriteUInt8(Race); + ChannelData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[26]) { - data.WriteUInt8(ClassId); + data.WriteInt8(SpellEmpowerStage); } if (changesMask[27]) { - data.WriteUInt8(PlayerClassId); + data.WriteUInt32(SummonedByHomeRealm); } if (changesMask[28]) { - data.WriteUInt8(Sex); + data.WriteUInt8(Race); } if (changesMask[29]) { - data.WriteUInt8(DisplayPower); + data.WriteUInt8(ClassId); } if (changesMask[30]) { - data.WriteUInt32(OverrideDisplayPowerID); + data.WriteUInt8(PlayerClassId); } if (changesMask[31]) { - data.WriteUInt64(Health); + data.WriteUInt8(Sex); } } if (changesMask[32]) { if (changesMask[33]) { - data.WriteUInt64(MaxHealth); + data.WriteUInt8(DisplayPower); } if (changesMask[34]) { - data.WriteUInt32(Level); + data.WriteUInt32(OverrideDisplayPowerID); } if (changesMask[35]) { - data.WriteUInt32(EffectiveLevel); + data.WriteUInt64(Health); } if (changesMask[36]) { - data.WriteUInt32(ContentTuningID); + data.WriteUInt64(MaxHealth); } if (changesMask[37]) { - data.WriteInt32(ScalingLevelMin); + data.WriteUInt32(Level); } if (changesMask[38]) { - data.WriteInt32(ScalingLevelMax); + data.WriteUInt32(EffectiveLevel); } if (changesMask[39]) { - data.WriteInt32(ScalingLevelDelta); + data.WriteUInt32(ContentTuningID); } if (changesMask[40]) { - data.WriteInt32(ScalingFactionGroup); + data.WriteInt32(ScalingLevelMin); } if (changesMask[41]) { - data.WriteUInt32(GetViewerDependentFactionTemplate(this, owner, receiver)); + data.WriteInt32(ScalingLevelMax); } if (changesMask[42]) { - data.WriteUInt32(GetViewerDependentFlags(this, owner, receiver)); + data.WriteInt32(ScalingLevelDelta); } if (changesMask[43]) { - data.WriteUInt32(GetViewerDependentFlags2(this, owner, receiver)); + data.WriteInt32(ScalingFactionGroup); } if (changesMask[44]) { - data.WriteUInt32(GetViewerDependentFlags3(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFactionTemplate(this, owner, receiver)); } if (changesMask[45]) { - data.WriteUInt32(GetViewerDependentAuraState(this, owner, receiver)); + data.WriteUInt32(GetViewerDependentFlags(this, owner, receiver)); } if (changesMask[46]) { - data.WriteUInt32(RangedAttackRoundBaseTime); + data.WriteUInt32(GetViewerDependentFlags2(this, owner, receiver)); } if (changesMask[47]) { - data.WriteFloat(BoundingRadius); + data.WriteUInt32(GetViewerDependentFlags3(this, owner, receiver)); } if (changesMask[48]) { - data.WriteFloat(CombatReach); + data.WriteUInt32(GetViewerDependentAuraState(this, owner, receiver)); } if (changesMask[49]) { - data.WriteFloat(DisplayScale); + data.WriteUInt32(RangedAttackRoundBaseTime); } if (changesMask[50]) { - data.WriteInt32(CreatureFamily); + data.WriteFloat(BoundingRadius); } if (changesMask[51]) { - data.WriteInt32(CreatureType); + data.WriteFloat(CombatReach); } if (changesMask[52]) { - data.WriteUInt32(NativeDisplayID); + data.WriteFloat(DisplayScale); } if (changesMask[53]) { - data.WriteFloat(NativeXDisplayScale); + data.WriteInt32(CreatureFamily); } if (changesMask[54]) { - data.WriteUInt32(MountDisplayID); + data.WriteInt32(CreatureType); } if (changesMask[55]) { - data.WriteUInt32(CosmeticMountDisplayID); + data.WriteUInt32(NativeDisplayID); } if (changesMask[56]) { - data.WriteFloat(MinDamage); + data.WriteFloat(NativeXDisplayScale); } if (changesMask[57]) { - data.WriteFloat(MaxDamage); + data.WriteUInt32(MountDisplayID); } if (changesMask[58]) { - data.WriteFloat(MinOffHandDamage); + data.WriteUInt32(CosmeticMountDisplayID); } if (changesMask[59]) { - data.WriteFloat(MaxOffHandDamage); + data.WriteFloat(MinDamage); } if (changesMask[60]) { - data.WriteUInt8(StandState); + data.WriteFloat(MaxDamage); } if (changesMask[61]) { - data.WriteUInt8(PetTalentPoints); + data.WriteFloat(MinOffHandDamage); } if (changesMask[62]) { - data.WriteUInt8(VisFlags); + data.WriteFloat(MaxOffHandDamage); } if (changesMask[63]) { - data.WriteUInt8(AnimTier); + data.WriteUInt8(StandState); } } if (changesMask[64]) { if (changesMask[65]) { - data.WriteUInt32(PetNumber); + data.WriteUInt8(PetTalentPoints); } if (changesMask[66]) { - data.WriteUInt32(PetNameTimestamp); + data.WriteUInt8(VisFlags); } if (changesMask[67]) { - data.WriteUInt32(PetExperience); + data.WriteUInt8(AnimTier); } if (changesMask[68]) { - data.WriteUInt32(PetNextLevelExperience); + data.WriteUInt32(PetNumber); } if (changesMask[69]) { - data.WriteFloat(ModCastingSpeed); + data.WriteUInt32(PetNameTimestamp); } if (changesMask[70]) { - data.WriteFloat(ModCastingSpeedNeg); + data.WriteUInt32(PetExperience); } if (changesMask[71]) { - data.WriteFloat(ModSpellHaste); + data.WriteUInt32(PetNextLevelExperience); } if (changesMask[72]) { - data.WriteFloat(ModHaste); + data.WriteFloat(ModCastingSpeed); } if (changesMask[73]) { - data.WriteFloat(ModRangedHaste); + data.WriteFloat(ModCastingSpeedNeg); } if (changesMask[74]) { - data.WriteFloat(ModHasteRegen); + data.WriteFloat(ModSpellHaste); } if (changesMask[75]) { - data.WriteFloat(ModTimeRate); + data.WriteFloat(ModHaste); } if (changesMask[76]) { - data.WriteUInt32(CreatedBySpell); + data.WriteFloat(ModRangedHaste); } if (changesMask[77]) { - data.WriteInt32(EmoteState); + data.WriteFloat(ModHasteRegen); } if (changesMask[78]) { - data.WriteUInt32(BaseMana); + data.WriteFloat(ModTimeRate); } if (changesMask[79]) { - data.WriteUInt32(BaseHealth); + data.WriteUInt32(CreatedBySpell); } if (changesMask[80]) { - data.WriteUInt8(SheatheState); + data.WriteInt32(EmoteState); } if (changesMask[81]) { - data.WriteUInt8(GetViewerDependentPvpFlags(this, owner, receiver)); + data.WriteUInt32(BaseMana); } if (changesMask[82]) { - data.WriteUInt8(PetFlags); + data.WriteUInt32(BaseHealth); } if (changesMask[83]) { - data.WriteUInt8(ShapeshiftForm); + data.WriteUInt8(SheatheState); } if (changesMask[84]) { - data.WriteInt32(AttackPower); + data.WriteUInt8(GetViewerDependentPvpFlags(this, owner, receiver)); } if (changesMask[85]) { - data.WriteInt32(AttackPowerModPos); + data.WriteUInt8(PetFlags); } if (changesMask[86]) { - data.WriteInt32(AttackPowerModNeg); + data.WriteUInt8(ShapeshiftForm); } if (changesMask[87]) { - data.WriteFloat(AttackPowerMultiplier); + data.WriteInt32(AttackPower); } if (changesMask[88]) { - data.WriteInt32(AttackPowerModSupport); + data.WriteInt32(AttackPowerModPos); } if (changesMask[89]) { - data.WriteInt32(RangedAttackPower); + data.WriteInt32(AttackPowerModNeg); } if (changesMask[90]) { - data.WriteInt32(RangedAttackPowerModPos); + data.WriteFloat(AttackPowerMultiplier); } if (changesMask[91]) { - data.WriteInt32(RangedAttackPowerModNeg); + data.WriteInt32(AttackPowerModSupport); } if (changesMask[92]) { - data.WriteFloat(RangedAttackPowerMultiplier); + data.WriteInt32(RangedAttackPower); } if (changesMask[93]) { - data.WriteInt32(RangedAttackPowerModSupport); + data.WriteInt32(RangedAttackPowerModPos); } if (changesMask[94]) { - data.WriteInt32(MainHandWeaponAttackPower); + data.WriteInt32(RangedAttackPowerModNeg); } if (changesMask[95]) { - data.WriteInt32(OffHandWeaponAttackPower); + data.WriteFloat(RangedAttackPowerMultiplier); } } if (changesMask[96]) { if (changesMask[97]) { - data.WriteInt32(RangedWeaponAttackPower); + data.WriteInt32(RangedAttackPowerModSupport); } if (changesMask[98]) { - data.WriteInt32(SetAttackSpeedAura); + data.WriteInt32(MainHandWeaponAttackPower); } if (changesMask[99]) { - data.WriteFloat(Lifesteal); + data.WriteInt32(OffHandWeaponAttackPower); } if (changesMask[100]) { - data.WriteFloat(MinRangedDamage); + data.WriteInt32(RangedWeaponAttackPower); } if (changesMask[101]) { - data.WriteFloat(MaxRangedDamage); + data.WriteInt32(SetAttackSpeedAura); } if (changesMask[102]) { - data.WriteFloat(ManaCostMultiplier); + data.WriteFloat(Lifesteal); } if (changesMask[103]) { - data.WriteFloat(MaxHealthModifier); + data.WriteFloat(MinRangedDamage); } if (changesMask[104]) { - data.WriteFloat(HoverHeight); + data.WriteFloat(MaxRangedDamage); } if (changesMask[105]) { - data.WriteUInt32(MinItemLevelCutoff); + data.WriteFloat(ManaCostMultiplier); } if (changesMask[106]) { - data.WriteUInt32(MinItemLevel); + data.WriteFloat(MaxHealthModifier); } if (changesMask[107]) { - data.WriteUInt32(MaxItemLevel); + data.WriteFloat(HoverHeight); } if (changesMask[108]) { - data.WriteInt32(AzeriteItemLevel); + data.WriteUInt32(MinItemLevelCutoff); } if (changesMask[109]) { - data.WriteUInt32(WildBattlePetLevel); + data.WriteUInt32(MinItemLevel); } if (changesMask[110]) { - data.WriteUInt32(BattlePetCompanionExperience); + data.WriteUInt32(MaxItemLevel); } if (changesMask[111]) { - data.WriteUInt32(BattlePetCompanionNameTimestamp); + data.WriteUInt32(AzeriteItemLevel); } if (changesMask[112]) { - data.WriteInt32(GetViewerDependentInteractSpellId(this, owner, receiver)); + data.WriteUInt32(WildBattlePetLevel); } if (changesMask[113]) { - data.WriteInt32(ScaleDuration); + data.WriteUInt32(BattlePetCompanionExperience); } if (changesMask[114]) { - data.WriteInt32(LooksLikeMountID); + data.WriteUInt32(BattlePetCompanionNameTimestamp); } if (changesMask[115]) { - data.WriteInt32(LooksLikeCreatureID); + data.WriteInt32(GetViewerDependentInteractSpellId(this, owner, receiver)); } if (changesMask[116]) { - data.WriteInt32(LookAtControllerID); + data.WriteInt32(ScaleDuration); } if (changesMask[117]) { - data.WriteInt32(PerksVendorItemID); + data.WriteInt32(LooksLikeMountID); } if (changesMask[118]) { - data.WriteInt32(TaxiNodesID); + data.WriteInt32(LooksLikeCreatureID); } if (changesMask[119]) { - data.WritePackedGuid(GuildGUID); + data.WriteInt32(LookAtControllerID); } if (changesMask[120]) { - data.WriteInt32(FlightCapabilityID); + data.WriteInt32(PerksVendorItemID); } if (changesMask[121]) { - data.WriteFloat(GlideEventSpeedDivisor); + data.WriteInt32(TaxiNodesID); } if (changesMask[122]) { - data.WriteUInt32(Field_308); + data.WritePackedGuid(GuildGUID); } if (changesMask[123]) { - data.WriteUInt32(Field_30C); + data.WriteInt32(FlightCapabilityID); } if (changesMask[124]) { - data.WriteUInt32(SilencedSchoolMask); + data.WriteFloat(GlideEventSpeedDivisor); } if (changesMask[125]) { - data.WriteUInt32(CurrentAreaID); + data.WriteUInt32(MaxHealthModifierFlatNeg); } if (changesMask[126]) + { + data.WriteUInt32(MaxHealthModifierFlatPos); + } + if (changesMask[127]) + { + data.WriteUInt32(SilencedSchoolMask); + } + } + if (changesMask[128]) + { + if (changesMask[129]) + { + data.WriteUInt32(CurrentAreaID); + } + if (changesMask[130]) + { + data.WriteFloat(Field_31C); + } + if (changesMask[131]) + { + data.WriteFloat(Field_320); + } + if (changesMask[132]) { data.WritePackedGuid(NameplateAttachToGUID); } } - if (changesMask[127]) - { - for (int i = 0; i < 2; ++i) - { - if (changesMask[128 + i]) - { - data.WriteUInt32(GetViewerDependentNpcFlags(this, i, owner, receiver)); - } - } - } - if (changesMask[130]) + if (changesMask[133]) { for (int i = 0; i < 10; ++i) { - if (changesMask[131 + i]) + if (changesMask[134 + i]) { data.WriteInt32(Power[i]); } - if (changesMask[141 + i]) + if (changesMask[144 + i]) { data.WriteUInt32(MaxPower[i]); } - if (changesMask[151 + i]) + if (changesMask[154 + i]) { data.WriteFloat(PowerRegenFlatModifier[i]); } - if (changesMask[161 + i]) + if (changesMask[164 + i]) { data.WriteFloat(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[171]) + if (changesMask[174]) { for (int i = 0; i < 3; ++i) { - if (changesMask[172 + i]) + if (changesMask[175 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[175]) + if (changesMask[178]) { for (int i = 0; i < 2; ++i) { - if (changesMask[176 + i]) + if (changesMask[179 + i]) { data.WriteUInt32(AttackRoundBaseTime[i]); } } } - if (changesMask[178]) + if (changesMask[181]) { for (int i = 0; i < 4; ++i) { - if (changesMask[179 + i]) + if (changesMask[182 + i]) { data.WriteInt32(Stats[i]); } - if (changesMask[183 + i]) + if (changesMask[186 + i]) { data.WriteInt32(StatPosBuff[i]); } - if (changesMask[187 + i]) + if (changesMask[190 + i]) { data.WriteInt32(StatNegBuff[i]); } - if (changesMask[191 + i]) + if (changesMask[194 + i]) { data.WriteInt32(StatSupportBuff[i]); } } } - if (changesMask[195]) + if (changesMask[198]) { for (int i = 0; i < 7; ++i) { - if (changesMask[196 + i]) + if (changesMask[199 + i]) { data.WriteInt32(Resistances[i]); } - if (changesMask[203 + i]) + if (changesMask[206 + i]) { data.WriteInt32(BonusResistanceMods[i]); } - if (changesMask[210 + i]) + if (changesMask[213 + i]) { data.WriteInt32(ManaCostModifier[i]); } } } + data.FlushBits(); } public override void ClearChangesMask() { + ClearChangesMask(Field_314); ClearChangesMask(StateWorldEffectIDs); ClearChangesMask(PassiveSpells); ClearChangesMask(WorldEffects); ClearChangesMask(ChannelObjects); ClearChangesMask(DisplayID); + ClearChangesMask(NpcFlags); + ClearChangesMask(NpcFlags2); ClearChangesMask(StateSpellVisualID); ClearChangesMask(StateAnimID); ClearChangesMask(StateAnimKitID); @@ -2266,12 +2293,13 @@ namespace Game.Entities ClearChangesMask(GuildGUID); ClearChangesMask(FlightCapabilityID); ClearChangesMask(GlideEventSpeedDivisor); - ClearChangesMask(Field_308); - ClearChangesMask(Field_30C); + ClearChangesMask(MaxHealthModifierFlatNeg); + ClearChangesMask(MaxHealthModifierFlatPos); ClearChangesMask(SilencedSchoolMask); ClearChangesMask(CurrentAreaID); + ClearChangesMask(Field_31C); + ClearChangesMask(Field_320); ClearChangesMask(NameplateAttachToGUID); - ClearChangesMask(NpcFlags); ClearChangesMask(Power); ClearChangesMask(MaxPower); ClearChangesMask(PowerRegenFlatModifier); @@ -2332,9 +2360,9 @@ namespace Game.Entities return displayId; } - uint GetViewerDependentNpcFlags(UnitData unitData, int i, Unit unit, Player receiver) + uint GetViewerDependentNpcFlags(UnitData unitData, Unit unit, Player receiver) { - uint npcFlag = unitData.NpcFlags[i]; + uint npcFlag = unitData.NpcFlags; if (npcFlag != 0) { if ((!unit.IsInteractionAllowedInCombat() && unit.IsInCombat()) @@ -2345,20 +2373,29 @@ namespace Game.Entities Creature creature = unit.ToCreature(); if (creature != null) { - if (i == 0) - { - if (!receiver.CanSeeGossipOn(creature)) - npcFlag &= ~(uint)(NPCFlags.Gossip | NPCFlags.QuestGiver); + if (!receiver.CanSeeGossipOn(creature)) + npcFlag &= ~(uint)(NPCFlags.Gossip | NPCFlags.QuestGiver); - if (!receiver.CanSeeSpellClickOn(creature)) - npcFlag &= ~(uint)NPCFlags.SpellClick; - } + if (!receiver.CanSeeSpellClickOn(creature)) + npcFlag &= ~(uint)NPCFlags.SpellClick; } } } return npcFlag; } + uint GetViewerDependentNpcFlags2(UnitData unitData, Unit unit, Player receiver) + { + uint npcFlag = unitData.NpcFlags2; + if (npcFlag != 0) + { + if ((!unit.IsInteractionAllowedInCombat() && unit.IsInCombat()) + || (!unit.IsInteractionAllowedWhileHostile() && unit.IsHostileTo(receiver))) + npcFlag = 0; + } + + return npcFlag; + } uint GetViewerDependentFactionTemplate(UnitData unitData, Unit unit, Player receiver) { uint factionTemplate = unitData.FactionTemplate; @@ -2421,7 +2458,7 @@ namespace Game.Entities int GetViewerDependentInteractSpellId(UnitData unitData, Unit unit, Player receiver) { int interactSpellId = unitData.InteractSpellID; - if ((unitData.NpcFlags[0] & (uint)NPCFlags.SpellClick) != 0 && interactSpellId == 0) + if ((unitData.NpcFlags & (uint)NPCFlags.SpellClick) != 0 && interactSpellId == 0) { // this field is not set if there are multiple available spellclick spells var clickBounds = Global.ObjectMgr.GetSpellClickInfoMapBounds(unit.GetEntry()); @@ -2630,7 +2667,7 @@ namespace Game.Entities public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteUInt32(CreatureID); - data.WriteBits(Name.GetValue().GetByteCount(), 8); + data.WriteBits(Name.Size(), 8); data.WriteString(Name); data.FlushBits(); } @@ -2652,7 +2689,7 @@ namespace Game.Entities } if (changesMask[2]) { - data.WriteBits(Name.GetValue().GetByteCount(), 8); + data.WriteBits(Name.Size(), 8); data.WriteString(Name); } } @@ -2956,7 +2993,7 @@ namespace Game.Entities data.WriteInt32(VisualItemReplacements[i]); } data.FlushBits(); - data.WriteBits(Name.GetValue().GetByteCount(), 6); + data.WriteBits(Name.Size(), 6); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) { data.WriteBit(HasQuestSession); @@ -3264,7 +3301,7 @@ namespace Game.Entities } if (changesMask[34]) { - data.WriteBits(Name.GetValue().GetByteCount(), 6); + data.WriteBits(Name.Size(), 6); } data.WriteBits(DeclinedNames.HasValue(), 1); data.FlushBits(); @@ -3497,6 +3534,99 @@ namespace Game.Entities } } + public class BitVectors : HasChangesMask + { + public UpdateFieldArray> Values = new(11, 0, -1); + + public BitVectors() : base(1) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + for (int i = 0; i < 11; ++i) + { + data.WriteInt32(Values[i].Size()); + for (int j = 0; j < Values[i].Size(); ++j) + { + data.WriteUInt64(Values[i][j]); + } + } + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 1); + + if (changesMask[0]) + { + for (int i = 0; i < 11; ++i) + { + if (!ignoreChangesMask) + Values[i].WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(Values[i].Size(), data); + } + } + if (changesMask[0]) + { + for (int i = 0; i < 11; ++i) + { + for (int j = 0; j < Values[i].Size(); ++j) + { + if (Values[i].HasChanged(j) || ignoreChangesMask) + { + data.WriteUInt64(Values[i][j]); + } + } + } + } + data.FlushBits(); + } + + public override void ClearChangesMask() + { + ClearChangesMask(Values); + _changesMask.ResetAll(); + } + } + + public class PlayerDataElement + { + public uint Type; + public float FloatValue; + public long Int64Value; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteBits(Type, 1); + if (Type == 1) + { + data.WriteFloat(FloatValue); + } + if (Type == 0) + { + data.WriteInt64(Int64Value); + } + data.FlushBits(); + } + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteBits(Type, 1); + if (Type == 1) + { + data.WriteFloat(FloatValue); + } + if (Type == 0) + { + data.WriteInt64(Int64Value); + } + data.FlushBits(); + } + } + public class RestInfo : HasChangesMask { public UpdateField Threshold = new(0, 1); @@ -4110,25 +4240,59 @@ namespace Game.Entities } } + public class TraitSubTreeCache + { + public List Entries; + public int TraitSubTreeID; + public uint Active; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(TraitSubTreeID); + data.WriteInt32(Entries.Count); + for (int i = 0; i < Entries.Count; ++i) + { + Entries[i].WriteCreate(data, owner, receiver); + } + data.WriteBits(Active, 1); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(TraitSubTreeID); + data.WriteInt32(Entries.Count); + for (int i = 0; i < Entries.Count; ++i) + { + Entries[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + data.FlushBits(); + data.WriteBits(Active, 1); + data.FlushBits(); + } + } + public class TraitConfig : HasChangesMask { public DynamicUpdateField Entries = new(0, 1); - public UpdateField ID = new(0, 2); - public UpdateFieldString Name = new(0, 3); - public UpdateField Type = new(4, 5); - public UpdateField SkillLineID = new(4, 6); - public UpdateField ChrSpecializationID = new(4, 7); - public UpdateField CombatConfigFlags = new(8, 9); - public UpdateField LocalIdentifier = new(8, 10); - public UpdateField TraitSystemID = new(8, 11); + public DynamicUpdateField SubTrees = new(0, 2); + public UpdateField ID = new(0, 3); + public UpdateFieldString Name = new(4, 5); + public UpdateField Type = new(4, 6); + public UpdateField SkillLineID = new(4, 7); + public UpdateField ChrSpecializationID = new(8, 9); + public UpdateField CombatConfigFlags = new(8, 10); + public UpdateField LocalIdentifier = new(8, 11); + public UpdateField TraitSystemID = new(12, 13); - public TraitConfig() : base(12) { } + public TraitConfig() : base(14) { } public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(ID); data.WriteInt32(Type); data.WriteInt32(Entries.Size()); + data.WriteInt32(SubTrees.Size()); if (Type == 2) { data.WriteInt32(SkillLineID); @@ -4147,7 +4311,11 @@ namespace Game.Entities { Entries[i].WriteCreate(data, owner, receiver); } - data.WriteBits(Name.GetValue().GetByteCount(), 9); + data.WriteBits(Name.Size(), 9); + for (int i = 0; i < SubTrees.Size(); ++i) + { + SubTrees[i].WriteCreate(data, owner, receiver); + } data.WriteString(Name); data.FlushBits(); } @@ -4158,7 +4326,7 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 12); + data.WriteBits(changesMask.GetBlock(0), 14); if (changesMask[0]) { @@ -4169,6 +4337,13 @@ namespace Game.Entities else WriteCompleteDynamicFieldUpdateMask(Entries.Size(), data); } + if (changesMask[2]) + { + if (!ignoreChangesMask) + SubTrees.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(SubTrees.Size(), data); + } } data.FlushBits(); if (changesMask[0]) @@ -4184,30 +4359,33 @@ namespace Game.Entities } } if (changesMask[2]) + { + for (int i = 0; i < SubTrees.Size(); ++i) + { + if (SubTrees.HasChanged(i) || ignoreChangesMask) + { + SubTrees[i].WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + } + if (changesMask[3]) { data.WriteInt32(ID); } } if (changesMask[4]) { - if (changesMask[5]) + if (changesMask[6]) { data.WriteInt32(Type); } - if (changesMask[6]) + if (changesMask[7]) { if (Type == 2) { data.WriteInt32(SkillLineID); } } - if (changesMask[7]) - { - if (Type == 1) - { - data.WriteInt32(ChrSpecializationID); - } - } } if (changesMask[8]) { @@ -4215,17 +4393,27 @@ namespace Game.Entities { if (Type == 1) { - data.WriteInt32(CombatConfigFlags); + data.WriteInt32(ChrSpecializationID); } } if (changesMask[10]) { if (Type == 1) { - data.WriteInt32(LocalIdentifier); + data.WriteInt32(CombatConfigFlags); } } if (changesMask[11]) + { + if (Type == 1) + { + data.WriteInt32(LocalIdentifier); + } + } + } + if (changesMask[12]) + { + if (changesMask[13]) { if (Type == 3) { @@ -4233,11 +4421,11 @@ namespace Game.Entities } } } - if (changesMask[0]) + if (changesMask[4]) { - if (changesMask[3]) + if (changesMask[5]) { - data.WriteBits(Name.GetValue().GetByteCount(), 9); + data.WriteBits(Name.Size(), 9); data.WriteString(Name); } } @@ -4247,6 +4435,7 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(Entries); + ClearChangesMask(SubTrees); ClearChangesMask(ID); ClearChangesMask(Name); ClearChangesMask(Type); @@ -4344,29 +4533,111 @@ namespace Game.Entities } } + public class CraftingOrderCustomer : HasChangesMask + { + public UpdateField CustomerGUID = new(-1, 0); + public UpdateField CustomerAccountGUID = new(-1, 1); + + public CraftingOrderCustomer() : base(2) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(CustomerGUID); + data.WritePackedGuid(CustomerAccountGUID); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + data.WritePackedGuid(CustomerGUID); + } + if (changesMask[1]) + { + data.WritePackedGuid(CustomerAccountGUID); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(CustomerGUID); + ClearChangesMask(CustomerAccountGUID); + _changesMask.ResetAll(); + } + } + + public class CraftingOrderNpcCustomer : HasChangesMask + { + public UpdateField NpcCraftingOrderCustomerID = new(-1, 0); + public UpdateField Field_8 = new(-1, 1); + + public CraftingOrderNpcCustomer() : base(2) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt64(NpcCraftingOrderCustomerID); + data.WriteInt32(Field_8); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 2); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteInt64(NpcCraftingOrderCustomerID); + } + if (changesMask[1]) + { + data.WriteInt32(Field_8); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(NpcCraftingOrderCustomerID); + ClearChangesMask(Field_8); + _changesMask.ResetAll(); + } + } + public class CraftingOrderData : HasChangesMask { public DynamicUpdateField Reagents = new(0, 1); public UpdateField Field_0 = new(0, 2); public UpdateField OrderID = new(0, 3); public UpdateField SkillLineAbilityID = new(0, 4); - public UpdateField OrderState = new(5, 6); - public UpdateField OrderType = new(5, 7); - public UpdateField MinQuality = new(5, 8); - public UpdateField ExpirationTime = new(5, 9); - public UpdateField ClaimEndTime = new(10, 11); - public UpdateField TipAmount = new(10, 12); - public UpdateField ConsortiumCut = new(10, 13); - public UpdateField Flags = new(10, 14); - public UpdateField CustomerGUID = new(15, 16); - public UpdateField CustomerAccountGUID = new(15, 17); - public UpdateField CrafterGUID = new(15, 18); - public UpdateField PersonalCrafterGUID = new(15, 19); - public UpdateFieldString CustomerNotes = new(20, 21); - public OptionalUpdateField OutputItem = new(20, 22); - public OptionalUpdateField OutputItemData = new(20, 23); + public UpdateField OrderState = new(0, 5); + public UpdateField OrderType = new(6, 7); + public UpdateField MinQuality = new(6, 8); + public UpdateField ExpirationTime = new(6, 9); + public UpdateField ClaimEndTime = new(6, 10); + public UpdateField TipAmount = new(6, 11); + public UpdateField ConsortiumCut = new(12, 13); + public UpdateField Flags = new(12, 14); + public UpdateField CrafterGUID = new(12, 15); + public UpdateField PersonalCrafterGUID = new(12, 16); + public UpdateField NpcCraftingOrderSetID = new(12, 17); + public UpdateField NpcTreasureID = new(18, 19); + public UpdateFieldString CustomerNotes = new(18, 20); + public OptionalUpdateField Customer = new(18, 21); + public OptionalUpdateField NpcCustomer = new(18, 22); + public OptionalUpdateField OutputItem = new(18, 23); + public OptionalUpdateField OutputItemData = new(24, 25); - public CraftingOrderData() : base(24) { } + public CraftingOrderData() : base(26) { } public void WriteCreate(WorldPacket data, Player owner, Player receiver) { @@ -4381,12 +4652,14 @@ namespace Game.Entities data.WriteInt64(TipAmount); data.WriteInt64(ConsortiumCut); data.WriteUInt32(Flags); - data.WritePackedGuid(CustomerGUID); - data.WritePackedGuid(CustomerAccountGUID); data.WritePackedGuid(CrafterGUID); data.WritePackedGuid(PersonalCrafterGUID); + data.WriteInt32(NpcCraftingOrderSetID); + data.WriteInt32(NpcTreasureID); data.WriteInt32(Reagents.Size()); - data.WriteBits(CustomerNotes.GetValue().GetByteCount(), 10); + data.WriteBits(CustomerNotes.Size(), 10); + data.WriteBits(Customer.HasValue(), 1); + data.WriteBits(NpcCustomer.HasValue(), 1); data.WriteBits(OutputItem.HasValue(), 1); data.WriteBits(OutputItemData.HasValue(), 1); data.FlushBits(); @@ -4395,6 +4668,14 @@ namespace Game.Entities Reagents[i].WriteCreate(data, owner, receiver); } data.WriteString(CustomerNotes); + if (Customer.HasValue()) + { + Customer.GetValue().WriteCreate(data, owner, receiver); + } + if (NpcCustomer.HasValue()) + { + NpcCustomer.GetValue().WriteCreate(data, owner, receiver); + } if (OutputItem.HasValue()) { OutputItem.GetValue().WriteCreate(data, owner, receiver); @@ -4412,7 +4693,7 @@ namespace Game.Entities if (ignoreChangesMask) changesMask.SetAll(); - data.WriteBits(changesMask.GetBlock(0), 24); + data.WriteBits(changesMask.GetBlock(0), 26); if (changesMask[0]) { @@ -4449,13 +4730,13 @@ namespace Game.Entities { data.WriteInt32(SkillLineAbilityID); } - } - if (changesMask[5]) - { - if (changesMask[6]) + if (changesMask[5]) { data.WriteUInt8(OrderState); } + } + if (changesMask[6]) + { if (changesMask[7]) { data.WriteUInt8(OrderType); @@ -4468,17 +4749,17 @@ namespace Game.Entities { data.WriteInt64(ExpirationTime); } - } - if (changesMask[10]) - { - if (changesMask[11]) + if (changesMask[10]) { data.WriteInt64(ClaimEndTime); } - if (changesMask[12]) + if (changesMask[11]) { data.WriteInt64(TipAmount); } + } + if (changesMask[12]) + { if (changesMask[13]) { data.WriteInt64(ConsortiumCut); @@ -4487,47 +4768,69 @@ namespace Game.Entities { data.WriteUInt32(Flags); } - } - if (changesMask[15]) - { - if (changesMask[16]) - { - data.WritePackedGuid(CustomerGUID); - } - if (changesMask[17]) - { - data.WritePackedGuid(CustomerAccountGUID); - } - if (changesMask[18]) + if (changesMask[15]) { data.WritePackedGuid(CrafterGUID); } - if (changesMask[19]) + if (changesMask[16]) { data.WritePackedGuid(PersonalCrafterGUID); } - } - if (changesMask[20]) - { - if (changesMask[21]) + if (changesMask[17]) + { + data.WriteInt32(NpcCraftingOrderSetID); + } + } + if (changesMask[18]) + { + if (changesMask[19]) + { + data.WriteInt32(NpcTreasureID); + } + if (changesMask[20]) + { + data.WriteBits(CustomerNotes.Size(), 10); + } + data.WriteBits(Customer.HasValue(), 1); + data.WriteBits(NpcCustomer.HasValue(), 1); + data.WriteBits(OutputItem.HasValue(), 1); + } + if (changesMask[24]) + { + data.WriteBits(OutputItemData.HasValue(), 1); + } + if (changesMask[18]) + { + if (changesMask[20]) { - data.WriteBits(CustomerNotes.GetValue().GetByteCount(), 10); data.WriteString(CustomerNotes); } - data.WriteBits(OutputItem.HasValue(), 1); - data.WriteBits(OutputItemData.HasValue(), 1); - data.FlushBits(); + if (changesMask[21]) + { + if (Customer.HasValue()) + { + Customer.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } if (changesMask[22]) + { + if (NpcCustomer.HasValue()) + { + NpcCustomer.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); + } + } + if (changesMask[23]) { if (OutputItem.HasValue()) { OutputItem.GetValue().WriteUpdate(data, ignoreChangesMask, owner, receiver); } } - - if (changesMask[23]) + } + if (changesMask[24]) + { + if (changesMask[25]) { - if (OutputItemData.HasValue()) { OutputItemData.GetValue().Write(data); @@ -4551,11 +4854,13 @@ namespace Game.Entities ClearChangesMask(TipAmount); ClearChangesMask(ConsortiumCut); ClearChangesMask(Flags); - ClearChangesMask(CustomerGUID); - ClearChangesMask(CustomerAccountGUID); ClearChangesMask(CrafterGUID); ClearChangesMask(PersonalCrafterGUID); + ClearChangesMask(NpcCraftingOrderSetID); + ClearChangesMask(NpcTreasureID); ClearChangesMask(CustomerNotes); + ClearChangesMask(Customer); + ClearChangesMask(NpcCustomer); ClearChangesMask(OutputItem); ClearChangesMask(OutputItemData); _changesMask.ResetAll(); @@ -4703,6 +5008,60 @@ namespace Game.Entities } } + public class NPCCraftingOrderInfo : HasChangesMask + { + public UpdateField Field_0 = new(-1, 0); + public UpdateField Field_8 = new(-1, 1); + public UpdateField Field_C = new(-1, 2); + public UpdateField Field_10 = new(-1, 3); + + public NPCCraftingOrderInfo() : base(4) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteUInt64(Field_0); + data.WriteInt32(Field_8); + data.WriteInt32(Field_C); + data.WriteInt32(Field_10); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteUInt64(Field_0); + } + if (changesMask[1]) + { + data.WriteInt32(Field_8); + } + if (changesMask[2]) + { + data.WriteInt32(Field_C); + } + if (changesMask[3]) + { + data.WriteInt32(Field_10); + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Field_0); + ClearChangesMask(Field_8); + ClearChangesMask(Field_C); + ClearChangesMask(Field_10); + _changesMask.ResetAll(); + } + } + public struct CategoryCooldownMod { public int SpellCategoryID; @@ -4759,7 +5118,7 @@ namespace Game.Entities data.WriteUInt32(DisplayID); data.WriteUInt32(ExperienceLevel); data.WriteUInt8(PetFlags); - data.WriteBits(Name.GetValue().GetByteCount(), 8); + data.WriteBits(Name.Size(), 8); data.WriteString(Name); data.FlushBits(); } @@ -4801,7 +5160,7 @@ namespace Game.Entities } if (changesMask[6]) { - data.WriteBits(Name.GetValue().GetByteCount(), 8); + data.WriteBits(Name.Size(), 8); data.WriteString(Name); } } @@ -4934,6 +5293,144 @@ namespace Game.Entities } } + public class BankTabSettings : HasChangesMask + { + public UpdateFieldString Name = new(-1, 0); + public UpdateFieldString Icon = new(-1, 1); + public UpdateFieldString Description = new(-1, 2); + public UpdateField DepositFlags = new(-1, 3); + + public BankTabSettings() : base(4) { } + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteBits(Name.Size(), 7); + data.WriteBits(Icon.Size(), 9); + data.WriteBits(Description.Size(), 14); + data.WriteInt32(DepositFlags); + data.WriteString(Name); + data.WriteString(Icon); + data.WriteString(Description); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + UpdateMask changesMask = _changesMask; + if (ignoreChangesMask) + changesMask.SetAll(); + + data.WriteBits(changesMask.GetBlock(0), 4); + + data.FlushBits(); + if (changesMask[0]) + { + data.WriteBits(Name.Size(), 7); + } + if (changesMask[1]) + { + data.WriteBits(Icon.Size(), 9); + } + if (changesMask[2]) + { + data.WriteBits(Description.Size(), 14); + } + if (changesMask[3]) + { + data.WriteInt32(DepositFlags); + } + if (changesMask[0]) + { + data.WriteString(Name); + } + if (changesMask[1]) + { + data.WriteString(Icon); + } + if (changesMask[2]) + { + data.WriteString(Description); + } + data.FlushBits(); + } + + public override void ClearChangesMask() + { + ClearChangesMask(Name); + ClearChangesMask(Icon); + ClearChangesMask(Description); + ClearChangesMask(DepositFlags); + _changesMask.ResetAll(); + } + } + + public struct WalkInData + { + public int MapID; + public long Field_8; + public uint Type; + public ObjectGuid Field_18; + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(MapID); + data.WriteInt64(Field_8); + data.WritePackedGuid(Field_18); + data.WriteBits(Type, 1); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.WriteInt32(MapID); + data.WriteInt64(Field_8); + data.WritePackedGuid(Field_18); + data.WriteBits(Type, 1); + data.FlushBits(); + } + } + + public class DelveData + { + public List Owners = new(); + public int Field_0; + public long Field_8; + public int Field_10; + public int SpellID; + public uint Started; // Restricts rewards to players in m_owners if set to true. Intended to prevent rewarwding players that join in-progress delve? + + public void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(Field_0); + data.WriteInt64(Field_8); + data.WriteInt32(Field_10); + data.WriteInt32(SpellID); + data.WriteInt32(Owners.Count); + for (int i = 0; i < Owners.Count; ++i) + { + data.WritePackedGuid(Owners[i]); + } + data.WriteBits(Started, 1); + data.FlushBits(); + } + + public void WriteUpdate(WorldPacket data, bool ignoreChangesMask, Player owner, Player receiver) + { + data.FlushBits(); + data.WriteInt32(Field_0); + data.WriteInt64(Field_8); + data.WriteInt32(Field_10); + data.WriteInt32(SpellID); + data.WriteInt32(Owners.Count); + for (int i = 0; i < Owners.Count; ++i) + { + data.WritePackedGuid(Owners[i]); + } + data.WriteBits(Started, 1); + data.FlushBits(); + } + } + public struct Research { public short ResearchProjectID; @@ -4954,7 +5451,7 @@ namespace Game.Entities public static int QuestCompletedBitsSize; public static int QuestCompletedBitsPerBlock; - static int changeMaskLength = 1454; + static int changeMaskLength = 1476; public UpdateField BackpackAutoSortDisabled = new(0, 1); public UpdateField BackpackSellJunkDisabled = new(0, 2); @@ -4962,146 +5459,154 @@ namespace Game.Entities public UpdateField SortBagsRightToLeft = new(0, 4); public UpdateField InsertItemsLeftToRight = new(0, 5); public UpdateField HasPerksProgramPendingReward = new(0, 6); - public UpdateFieldArray> DataFlags = new(9, 36, 37); - public UpdateFieldArray> ResearchSites = new(1, 38, 39); - public UpdateFieldArray> ResearchSiteProgress = new(1, 40, 41); - public UpdateFieldArray> Research = new(1, 42, 43); + public UpdateFieldArray> ResearchSites = new(1, 40, 41); + public UpdateFieldArray> ResearchSiteProgress = new(1, 42, 43); + public UpdateFieldArray> Research = new(1, 44, 45); public DynamicUpdateField KnownTitles = new(0, 7); - public DynamicUpdateField DailyQuestsCompleted = new(0, 9); - public DynamicUpdateField AvailableQuestLineXQuestIDs = new(0, 10); - public DynamicUpdateField Heirlooms = new(0, 11); - public DynamicUpdateField HeirloomFlags = new(0, 12); - public DynamicUpdateField Toys = new(0, 13); - public DynamicUpdateField ToyFlags = new(0, 14); - public DynamicUpdateField Transmog = new(0, 15); - public DynamicUpdateField ConditionalTransmog = new(0, 16); - public DynamicUpdateField SelfResSpells = new(0, 17); - public DynamicUpdateField RuneforgePowers = new(0, 18); - public DynamicUpdateField TransmogIllusions = new(0, 19); - public DynamicUpdateField SpellPctModByLabel = new(0, 21); - public DynamicUpdateField SpellFlatModByLabel = new(0, 22); - public DynamicUpdateField MawPowers = new(0, 23); - public DynamicUpdateField MultiFloorExploration = new(0, 24); - public DynamicUpdateField RecipeProgression = new(0, 25); - public DynamicUpdateField ReplayedQuests = new(0, 26); - public DynamicUpdateField TaskQuests = new(0, 27); - public DynamicUpdateField DisabledSpells = new(0, 28); - public DynamicUpdateField PersonalCraftingOrderCounts = new(0, 31); - public DynamicUpdateField CategoryCooldownMods = new(32, 33); - public DynamicUpdateField WeeklySpellUses = new(32, 34); - public DynamicUpdateField TrackedCollectableSources = new(32, 35); - public DynamicUpdateField PvpInfo = new(0, 8); - public DynamicUpdateField CharacterRestrictions = new(0, 20); - public DynamicUpdateField TraitConfigs = new(0, 29); - public DynamicUpdateField CraftingOrders = new(0, 30); - public UpdateField FarsightObject = new(32, 44); - public UpdateField SummonedBattlePetGUID = new(32, 45); - public UpdateField Coinage = new(32, 46); - public UpdateField XP = new(32, 47); - public UpdateField NextLevelXP = new(32, 48); - public UpdateField TrialXP = new(32, 49); - public UpdateField Skill = new(32, 50); - public UpdateField CharacterPoints = new(32, 51); - public UpdateField MaxTalentTiers = new(32, 52); - public UpdateField TrackCreatureMask = new(32, 53); - public UpdateField MainhandExpertise = new(32, 54); - public UpdateField OffhandExpertise = new(32, 55); - public UpdateField RangedExpertise = new(32, 56); - public UpdateField CombatRatingExpertise = new(32, 57); - public UpdateField BlockPercentage = new(32, 58); - public UpdateField DodgePercentage = new(32, 59); - public UpdateField DodgePercentageFromAttribute = new(32, 60); - public UpdateField ParryPercentage = new(32, 61); - public UpdateField ParryPercentageFromAttribute = new(32, 62); - public UpdateField CritPercentage = new(32, 63); - public UpdateField RangedCritPercentage = new(32, 64); - public UpdateField OffhandCritPercentage = new(32, 65); - public UpdateField SpellCritPercentage = new(32, 66); - public UpdateField ShieldBlock = new(32, 67); - public UpdateField ShieldBlockCritPercentage = new(32, 68); - public UpdateField Mastery = new(32, 69); - public UpdateField Speed = new(32, 70); - public UpdateField Avoidance = new(32, 71); - public UpdateField Sturdiness = new(72, 73); - public UpdateField Versatility = new(72, 74); - public UpdateField VersatilityBonus = new(72, 75); - public UpdateField PvpPowerDamage = new(72, 76); - public UpdateField PvpPowerHealing = new(72, 77); - public UpdateField ModHealingDonePos = new(72, 78); - public UpdateField ModHealingPercent = new(72, 79); - public UpdateField ModPeriodicHealingDonePercent = new(72, 80); - public UpdateField ModSpellPowerPercent = new(72, 81); - public UpdateField ModResiliencePercent = new(72, 82); - public UpdateField OverrideSpellPowerByAPPercent = new(72, 83); - public UpdateField OverrideAPBySpellPowerPercent = new(72, 84); - public UpdateField ModTargetResistance = new(72, 85); - public UpdateField ModTargetPhysicalResistance = new(72, 86); - public UpdateField LocalFlags = new(72, 87); - public UpdateField GrantableLevels = new(72, 88); - public UpdateField MultiActionBars = new(72, 89); - public UpdateField LifetimeMaxRank = new(72, 90); - public UpdateField NumRespecs = new(72, 91); - public UpdateField PvpMedals = new(72, 92); - public UpdateField TodayHonorableKills = new(72, 93); - public UpdateField YesterdayHonorableKills = new(72, 94); - public UpdateField LifetimeHonorableKills = new(72, 95); - public UpdateField WatchedFactionIndex = new(72, 96); - public UpdateField MaxLevel = new(72, 97); - public UpdateField ScalingPlayerLevelDelta = new(72, 98); - public UpdateField MaxCreatureScalingLevel = new(72, 99); - public UpdateField PetSpellPower = new(72, 100); - public UpdateField UiHitModifier = new(72, 101); - public UpdateField UiSpellHitModifier = new(72, 102); - public UpdateField HomeRealmTimeOffset = new(72, 103); - public UpdateField ModPetHaste = new(104, 105); - public UpdateField JailersTowerLevelMax = new(104, 106); - public UpdateField JailersTowerLevel = new(104, 107); - public UpdateField LocalRegenFlags = new(104, 108); - public UpdateField AuraVision = new(104, 109); - public UpdateField NumBackpackSlots = new(104, 110); - public UpdateField OverrideSpellsID = new(104, 111); - public UpdateField LootSpecID = new(104, 112); - public UpdateField OverrideZonePVPType = new(104, 113); - public UpdateField Honor = new(104, 114); - public UpdateField HonorNextLevel = new(104, 115); - public UpdateField PerksProgramCurrency = new(104, 116); - public UpdateField NumBankSlots = new(104, 117); - public UpdateField ResearchHistory = new(104, 118); - public UpdateField FrozenPerksVendorItem = new(104, 119); - public UpdateField Field_1410 = new(104, 121); - public OptionalUpdateField QuestSession = new(104, 120); - public UpdateField UiChromieTimeExpansionID = new(104, 122); - public UpdateField TimerunningSeasonID = new(104, 123); - public UpdateField TransportServerTime = new(104, 124); - public UpdateField WeeklyRewardsPeriodSinceOrigin = new(104, 125); // week count since Cfg_RegionsEntry::ChallengeOrigin - public UpdateField DEBUGSoulbindConduitRank = new(104, 126); - public UpdateField DungeonScore = new(104, 127); - public UpdateField ActiveCombatTraitConfigID = new(104, 128); - public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(104, 129); - public UpdateField ItemUpgradeHighFingerItemID = new(104, 130); - public UpdateField ItemUpgradeHighFingerWatermark = new(104, 131); - public UpdateField ItemUpgradeHighTrinketItemID = new(104, 132); - public UpdateField ItemUpgradeHighTrinketWatermark = new(104, 133); - public UpdateField LootHistoryInstanceID = new(104, 134); - public OptionalUpdateField PetStable = new(104, 135); - public UpdateField RequiredMountCapabilityFlags = new(136, 137); - public UpdateFieldArray InvSlots = new(227, 138, 139); - public UpdateFieldArray RestInfo = new(2, 366, 367); - public UpdateFieldArray ModDamageDonePos = new(7, 369, 370); - public UpdateFieldArray ModDamageDoneNeg = new(7, 369, 377); - public UpdateFieldArray ModDamageDonePercent = new(7, 369, 384); - public UpdateFieldArray ModHealingDonePercent = new(7, 369, 391); - public UpdateFieldArray WeaponDmgMultipliers = new(3, 398, 399); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 398, 402); - public UpdateFieldArray BuybackPrice = new(12, 405, 406); - public UpdateFieldArray BuybackTimestamp = new(12, 405, 418); - public UpdateFieldArray CombatRatings = new(32, 430, 431); - public UpdateFieldArray NoReagentCostMask = new(4, 463, 464); - public UpdateFieldArray ProfessionSkillLine = new(2, 468, 469); - public UpdateFieldArray BagSlotFlags = new(5, 471, 472); - public UpdateFieldArray BankBagSlotFlags = new(7, 477, 478); - public UpdateFieldArray QuestCompleted = new(950, 485, 486); - public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 1436, 1437); + 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 SpellPctModByLabel = new(0, 23); + public DynamicUpdateField SpellFlatModByLabel = new(0, 24); + public DynamicUpdateField MawPowers = new(0, 25); + public DynamicUpdateField MultiFloorExploration = new(0, 26); + public DynamicUpdateField RecipeProgression = new(0, 27); + public DynamicUpdateField ReplayedQuests = new(0, 28); + public DynamicUpdateField TaskQuests = new(0, 29); + public DynamicUpdateField DisabledSpells = new(0, 30); + public DynamicUpdateField PersonalCraftingOrderCounts = new(32, 34); + public DynamicUpdateField NpcCraftingOrders = new(32, 35); + public DynamicUpdateField CategoryCooldownMods = new(32, 36); + public DynamicUpdateField WeeklySpellUses = new(32, 37); + public DynamicUpdateField TrackedCollectableSources = new(32, 38); + public DynamicUpdateField CharacterDataElements = new(0, 8); + public DynamicUpdateField AccountDataElements = new(0, 9); + public DynamicUpdateField PvpInfo = new(0, 10); + public DynamicUpdateField CharacterRestrictions = new(0, 22); + public DynamicUpdateField TraitConfigs = new(0, 31); + public DynamicUpdateField CraftingOrders = new(32, 33); + public DynamicUpdateField AccountBankTabSettings = new(32, 39); + public UpdateField FarsightObject = new(32, 46); + public UpdateField SummonedBattlePetGUID = new(32, 47); + public UpdateField Coinage = new(32, 48); + public UpdateField AccountBankCoinage = new(32, 49); + public UpdateField XP = new(32, 50); + public UpdateField NextLevelXP = new(32, 51); + public UpdateField TrialXP = new(32, 52); + public UpdateField Skill = new(32, 53); + public UpdateField CharacterPoints = new(32, 54); + public UpdateField MaxTalentTiers = new(32, 55); + public UpdateField TrackCreatureMask = new(32, 56); + public UpdateField MainhandExpertise = new(32, 57); + public UpdateField OffhandExpertise = new(32, 58); + public UpdateField RangedExpertise = new(32, 59); + public UpdateField CombatRatingExpertise = new(32, 60); + public UpdateField BlockPercentage = new(32, 61); + public UpdateField DodgePercentage = new(32, 62); + public UpdateField DodgePercentageFromAttribute = new(32, 63); + public UpdateField ParryPercentage = new(32, 64); + public UpdateField ParryPercentageFromAttribute = new(32, 65); + public UpdateField CritPercentage = new(32, 66); + public UpdateField RangedCritPercentage = new(32, 67); + public UpdateField OffhandCritPercentage = new(32, 68); + public UpdateField SpellCritPercentage = new(32, 69); + public UpdateField ShieldBlock = new(70, 71); + public UpdateField ShieldBlockCritPercentage = new(70, 72); + public UpdateField Mastery = new(70, 73); + public UpdateField Speed = new(70, 74); + public UpdateField Avoidance = new(70, 75); + public UpdateField Sturdiness = new(70, 76); + public UpdateField Versatility = new(70, 77); + public UpdateField VersatilityBonus = new(70, 78); + public UpdateField PvpPowerDamage = new(70, 79); + public UpdateField PvpPowerHealing = new(70, 80); + public UpdateField BitVectors = new(70, 81); + public UpdateField ModHealingDonePos = new(70, 82); + public UpdateField ModHealingPercent = new(70, 83); + public UpdateField ModPeriodicHealingDonePercent = new(70, 84); + public UpdateField ModSpellPowerPercent = new(70, 85); + public UpdateField ModResiliencePercent = new(70, 86); + public UpdateField OverrideSpellPowerByAPPercent = new(70, 87); + public UpdateField OverrideAPBySpellPowerPercent = new(70, 88); + public UpdateField ModTargetResistance = new(70, 89); + public UpdateField ModTargetPhysicalResistance = new(70, 90); + public UpdateField LocalFlags = new(70, 91); + public UpdateField GrantableLevels = new(70, 92); + public UpdateField MultiActionBars = new(70, 93); + public UpdateField LifetimeMaxRank = new(70, 94); + public UpdateField NumRespecs = new(70, 95); + public UpdateField PvpMedals = new(70, 96); + public UpdateField TodayHonorableKills = new(70, 97); + public UpdateField YesterdayHonorableKills = new(70, 98); + public UpdateField LifetimeHonorableKills = new(70, 99); + public UpdateField WatchedFactionIndex = new(70, 100); + public UpdateField MaxLevel = new(70, 101); + public UpdateField ScalingPlayerLevelDelta = new(102, 103); + public UpdateField MaxCreatureScalingLevel = new(102, 104); + public UpdateField PetSpellPower = new(102, 105); + public UpdateField UiHitModifier = new(102, 106); + public UpdateField UiSpellHitModifier = new(102, 107); + public UpdateField HomeRealmTimeOffset = new(102, 108); + public UpdateField ModPetHaste = new(102, 109); + public UpdateField JailersTowerLevelMax = new(102, 110); + public UpdateField JailersTowerLevel = new(102, 111); + public UpdateField LocalRegenFlags = new(102, 112); + public UpdateField AuraVision = new(102, 113); + public UpdateField NumBackpackSlots = new(102, 114); + public UpdateField OverrideSpellsID = new(102, 115); + public UpdateField LootSpecID = new(102, 116); + public UpdateField OverrideZonePVPType = new(102, 117); + public UpdateField Honor = new(102, 118); + public UpdateField HonorNextLevel = new(102, 119); + public UpdateField PerksProgramCurrency = new(102, 120); + public UpdateField NumBankSlots = new(102, 121); + public UpdateField NumAccountBankTabs = new(102, 122); + public UpdateField ResearchHistory = new(102, 123); + public UpdateField FrozenPerksVendorItem = new(102, 124); + public UpdateField Field_1410 = new(102, 126); + public OptionalUpdateField QuestSession = new(102, 125); + public UpdateField UiChromieTimeExpansionID = new(102, 127); + public UpdateField TimerunningSeasonID = new(102, 128); + public UpdateField TransportServerTime = new(102, 129); + public UpdateField WeeklyRewardsPeriodSinceOrigin = new(102, 130); // week count since Cfg_RegionsEntry::ChallengeOrigin + public UpdateField DEBUGSoulbindConduitRank = new(102, 131); + public UpdateField DungeonScore = new(102, 132); + public UpdateField ActiveCombatTraitConfigID = new(102, 133); + public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(134, 135); + public UpdateField ItemUpgradeHighFingerItemID = new(134, 136); + public UpdateField ItemUpgradeHighFingerWatermark = new(134, 137); + public UpdateField ItemUpgradeHighTrinketItemID = new(134, 138); + public UpdateField ItemUpgradeHighTrinketWatermark = new(134, 139); + public UpdateField LootHistoryInstanceID = new(134, 140); + public OptionalUpdateField PetStable = new(134, 141); + public UpdateField RequiredMountCapabilityFlags = new(134, 142); + public OptionalUpdateField WalkInData = new(134, 143); + public OptionalUpdateField DelveData = new(134, 144); + public UpdateFieldArray InvSlots = new(232, 145, 146); + public UpdateFieldArray RestInfo = new(2, 378, 379); + public UpdateFieldArray ModDamageDonePos = new(7, 381, 382); + public UpdateFieldArray ModDamageDoneNeg = new(7, 381, 389); + public UpdateFieldArray ModDamageDonePercent = new(7, 381, 396); + public UpdateFieldArray ModHealingDonePercent = new(7, 381, 403); + public UpdateFieldArray WeaponDmgMultipliers = new(3, 410, 411); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 410, 414); + public UpdateFieldArray BuybackPrice = new(12, 417, 418); + public UpdateFieldArray BuybackTimestamp = new(12, 417, 430); + public UpdateFieldArray CombatRatings = new(32, 442, 443); + public UpdateFieldArray NoReagentCostMask = new(4, 475, 476); + public UpdateFieldArray ProfessionSkillLine = new(2, 480, 481); + public UpdateFieldArray BagSlotFlags = new(5, 483, 484); + public UpdateFieldArray BankBagSlotFlags = new(7, 489, 490); + public UpdateFieldArray QuestCompleted = new(960, 497, 498); + public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 1458, 1459); public ActivePlayerData() : base(0, TypeId.ActivePlayer, changeMaskLength) { @@ -5111,7 +5616,7 @@ namespace Game.Entities public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { - for (int i = 0; i < 227; ++i) + for (int i = 0; i < 232; ++i) { data.WritePackedGuid(InvSlots[i]); } @@ -5119,6 +5624,7 @@ namespace Game.Entities data.WritePackedGuid(SummonedBattlePetGUID); data.WriteInt32(KnownTitles.Size()); data.WriteUInt64(Coinage); + data.WriteUInt64(AccountBankCoinage); data.WriteUInt32(XP); data.WriteUInt32(NextLevelXP); data.WriteInt32(TrialXP); @@ -5149,14 +5655,9 @@ namespace Game.Entities data.WriteFloat(VersatilityBonus); data.WriteFloat(PvpPowerDamage); data.WriteFloat(PvpPowerHealing); - for (int i = 0; i < 9; ++i) - { - data.WriteInt32(DataFlags[i].Size()); - for (int j = 0; j < DataFlags[i].Size(); ++j) - { - data.WriteUInt64(DataFlags[i][j]); - } - } + BitVectors.GetValue().WriteCreate(data, owner, receiver); + data.WriteInt32(CharacterDataElements.Size()); + data.WriteInt32(AccountDataElements.Size()); for (int i = 0; i < 2; ++i) { RestInfo[i].WriteCreate(data, owner, receiver); @@ -5234,7 +5735,7 @@ namespace Game.Entities { data.WriteUInt32(BankBagSlotFlags[i]); } - for (int i = 0; i < 950; ++i) + for (int i = 0; i < 960; ++i) { data.WriteUInt64(QuestCompleted[i]); } @@ -5242,6 +5743,7 @@ namespace Game.Entities data.WriteUInt32(HonorNextLevel); data.WriteInt32(PerksProgramCurrency); data.WriteUInt8(NumBankSlots); + data.WriteUInt8(NumAccountBankTabs); for (int i = 0; i < 1; ++i) { data.WriteInt32(ResearchSites[i].Size()); @@ -5289,6 +5791,7 @@ namespace Game.Entities data.WriteUInt32(ActiveCombatTraitConfigID); data.WriteInt32(CraftingOrders.Size()); data.WriteInt32(PersonalCraftingOrderCounts.Size()); + data.WriteInt32(NpcCraftingOrders.Size()); data.WriteInt32(CategoryCooldownMods.Size()); data.WriteInt32(WeeklySpellUses.Size()); for (int i = 0; i < 17; ++i) @@ -5387,6 +5890,10 @@ namespace Game.Entities { PersonalCraftingOrderCounts[i].WriteCreate(data, owner, receiver); } + for (int i = 0; i < NpcCraftingOrders.Size(); ++i) + { + NpcCraftingOrders[i].WriteCreate(data, owner, receiver); + } for (int i = 0; i < CategoryCooldownMods.Size(); ++i) { CategoryCooldownMods[i].WriteCreate(data, owner, receiver); @@ -5408,6 +5915,9 @@ namespace Game.Entities data.WriteBit(HasPerksProgramPendingReward); data.WriteBits(QuestSession.HasValue(), 1); data.WriteBits(PetStable.HasValue(), 1); + data.WriteBits(AccountBankTabSettings.Size(), 3); + data.WriteBits(WalkInData.HasValue(), 1); + data.WriteBits(DelveData.HasValue(), 1); data.FlushBits(); ResearchHistory.GetValue().WriteCreate(data, owner, receiver); if (QuestSession.HasValue()) @@ -5417,6 +5927,14 @@ namespace Game.Entities FrozenPerksVendorItem.GetValue().Write(data); Field_1410.GetValue().WriteCreate(data, owner, receiver); DungeonScore.GetValue().Write(data); + for (int i = 0; i < CharacterDataElements.Size(); ++i) + { + CharacterDataElements[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < AccountDataElements.Size(); ++i) + { + AccountDataElements[i].WriteCreate(data, owner, receiver); + } for (int i = 0; i < PvpInfo.Size(); ++i) { PvpInfo[i].WriteCreate(data, owner, receiver); @@ -5437,6 +5955,18 @@ namespace Game.Entities { PetStable.GetValue().WriteCreate(data, owner, receiver); } + for (int i = 0; i < AccountBankTabSettings.Size(); ++i) + { + AccountBankTabSettings[i].WriteCreate(data, owner, receiver); + } + if (WalkInData.HasValue()) + { + WalkInData.GetValue().WriteCreate(data, owner, receiver); + } + if (DelveData.HasValue()) + { + DelveData.GetValue().WriteCreate(data, owner, receiver); + } data.FlushBits(); } @@ -5449,8 +5979,8 @@ namespace Game.Entities { for (uint i = 0; i < 1; ++i) data.WriteUInt32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 14); - for (uint i = 0; i < 46; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 15); + for (uint i = 0; i < 47; ++i) if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); @@ -5487,39 +6017,21 @@ namespace Game.Entities else WriteCompleteDynamicFieldUpdateMask(KnownTitles.Size(), data); } - } - if (changesMask[36]) - { - for (int i = 0; i < 9; ++i) - { - if (changesMask[37]) - { - if (!ignoreNestedChangesMask) - DataFlags[i].WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(DataFlags[i].Size(), data); - } - } - } - if (changesMask[36]) - { - for (int i = 0; i < 9; ++i) - { - if (changesMask[37]) - { - for (int j = 0; j < DataFlags[i].Size(); ++j) - { - if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask) - { - data.WriteUInt64(DataFlags[i][j]); - } - } - } - } - } - if (changesMask[0]) - { if (changesMask[8]) + { + if (!ignoreNestedChangesMask) + CharacterDataElements.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CharacterDataElements.Size(), data); + } + if (changesMask[9]) + { + if (!ignoreNestedChangesMask) + AccountDataElements.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(AccountDataElements.Size(), data); + } + if (changesMask[10]) { if (!ignoreNestedChangesMask) PvpInfo.WriteUpdateMask(data); @@ -5527,19 +6039,6 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(PvpInfo.Size(), data); } } - if (changesMask[38]) - { - for (int i = 0; i < 1; ++i) - { - if (changesMask[39]) - { - if (!ignoreNestedChangesMask) - ResearchSites[i].WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(ResearchSites[i].Size(), data); - } - } - } if (changesMask[40]) { for (int i = 0; i < 1; ++i) @@ -5547,9 +6046,9 @@ namespace Game.Entities if (changesMask[41]) { if (!ignoreNestedChangesMask) - ResearchSiteProgress[i].WriteUpdateMask(data); + ResearchSites[i].WriteUpdateMask(data); else - WriteCompleteDynamicFieldUpdateMask(ResearchSiteProgress[i].Size(), data); + WriteCompleteDynamicFieldUpdateMask(ResearchSites[i].Size(), data); } } } @@ -5558,6 +6057,19 @@ namespace Game.Entities for (int i = 0; i < 1; ++i) { if (changesMask[43]) + { + if (!ignoreNestedChangesMask) + ResearchSiteProgress[i].WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(ResearchSiteProgress[i].Size(), data); + } + } + } + if (changesMask[44]) + { + for (int i = 0; i < 1; ++i) + { + if (changesMask[45]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -5566,11 +6078,11 @@ namespace Game.Entities } } } - if (changesMask[38]) + if (changesMask[40]) { for (int i = 0; i < 1; ++i) { - if (changesMask[39]) + if (changesMask[41]) { for (int j = 0; j < ResearchSites[i].Size(); ++j) { @@ -5582,11 +6094,11 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[42]) { for (int i = 0; i < 1; ++i) { - if (changesMask[41]) + if (changesMask[43]) { for (int j = 0; j < ResearchSiteProgress[i].Size(); ++j) { @@ -5598,11 +6110,11 @@ namespace Game.Entities } } } - if (changesMask[42]) + if (changesMask[44]) { for (int i = 0; i < 1; ++i) { - if (changesMask[43]) + if (changesMask[45]) { for (int j = 0; j < Research[i].Size(); ++j) { @@ -5617,185 +6129,192 @@ namespace Game.Entities data.FlushBits(); if (changesMask[0]) { - if (changesMask[9]) + if (changesMask[11]) { if (!ignoreNestedChangesMask) DailyQuestsCompleted.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DailyQuestsCompleted.Size(), data); } - if (changesMask[10]) + if (changesMask[12]) { if (!ignoreNestedChangesMask) AvailableQuestLineXQuestIDs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(AvailableQuestLineXQuestIDs.Size(), data); } - if (changesMask[11]) + if (changesMask[13]) { if (!ignoreNestedChangesMask) Heirlooms.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Heirlooms.Size(), data); } - if (changesMask[12]) + if (changesMask[14]) { if (!ignoreNestedChangesMask) HeirloomFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(HeirloomFlags.Size(), data); } - if (changesMask[13]) + if (changesMask[15]) { if (!ignoreNestedChangesMask) Toys.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Toys.Size(), data); } - if (changesMask[14]) + if (changesMask[16]) { if (!ignoreNestedChangesMask) ToyFlags.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ToyFlags.Size(), data); } - if (changesMask[15]) + if (changesMask[17]) { if (!ignoreNestedChangesMask) Transmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(Transmog.Size(), data); } - if (changesMask[16]) + if (changesMask[18]) { if (!ignoreNestedChangesMask) ConditionalTransmog.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ConditionalTransmog.Size(), data); } - if (changesMask[17]) + if (changesMask[19]) { if (!ignoreNestedChangesMask) SelfResSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SelfResSpells.Size(), data); } - if (changesMask[18]) + if (changesMask[20]) { if (!ignoreNestedChangesMask) RuneforgePowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RuneforgePowers.Size(), data); } - if (changesMask[19]) + if (changesMask[21]) { if (!ignoreNestedChangesMask) TransmogIllusions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TransmogIllusions.Size(), data); } - if (changesMask[20]) + if (changesMask[22]) { if (!ignoreNestedChangesMask) CharacterRestrictions.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CharacterRestrictions.Size(), data); } - if (changesMask[21]) + if (changesMask[23]) { if (!ignoreNestedChangesMask) SpellPctModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellPctModByLabel.Size(), data); } - if (changesMask[22]) + if (changesMask[24]) { if (!ignoreNestedChangesMask) SpellFlatModByLabel.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(SpellFlatModByLabel.Size(), data); } - if (changesMask[23]) + if (changesMask[25]) { if (!ignoreNestedChangesMask) MawPowers.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MawPowers.Size(), data); } - if (changesMask[24]) + if (changesMask[26]) { if (!ignoreNestedChangesMask) MultiFloorExploration.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(MultiFloorExploration.Size(), data); } - if (changesMask[25]) + if (changesMask[27]) { if (!ignoreNestedChangesMask) RecipeProgression.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(RecipeProgression.Size(), data); } - if (changesMask[26]) + if (changesMask[28]) { if (!ignoreNestedChangesMask) ReplayedQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(ReplayedQuests.Size(), data); } - if (changesMask[27]) + if (changesMask[29]) { if (!ignoreNestedChangesMask) TaskQuests.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TaskQuests.Size(), data); } - if (changesMask[28]) + if (changesMask[30]) { if (!ignoreNestedChangesMask) DisabledSpells.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(DisabledSpells.Size(), data); } - if (changesMask[29]) + if (changesMask[31]) { if (!ignoreNestedChangesMask) TraitConfigs.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(TraitConfigs.Size(), data); } - if (changesMask[30]) - { - if (!ignoreNestedChangesMask) - CraftingOrders.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(CraftingOrders.Size(), data); - } - if (changesMask[31]) - { - if (!ignoreNestedChangesMask) - PersonalCraftingOrderCounts.WriteUpdateMask(data); - else - WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.Size(), data); - } } if (changesMask[32]) { if (changesMask[33]) + { + if (!ignoreNestedChangesMask) + CraftingOrders.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(CraftingOrders.Size(), data); + } + if (changesMask[34]) + { + if (!ignoreNestedChangesMask) + PersonalCraftingOrderCounts.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(PersonalCraftingOrderCounts.Size(), data); + } + if (changesMask[35]) + { + if (!ignoreNestedChangesMask) + NpcCraftingOrders.WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(NpcCraftingOrders.Size(), data); + } + if (changesMask[36]) { if (!ignoreNestedChangesMask) CategoryCooldownMods.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(CategoryCooldownMods.Size(), data); } - if (changesMask[34]) + if (changesMask[37]) { if (!ignoreNestedChangesMask) WeeklySpellUses.WriteUpdateMask(data); else WriteCompleteDynamicFieldUpdateMask(WeeklySpellUses.Size(), data); } - if (changesMask[35]) + if (changesMask[38]) { if (!ignoreNestedChangesMask) TrackedCollectableSources.WriteUpdateMask(data); @@ -5816,7 +6335,7 @@ namespace Game.Entities } } } - if (changesMask[9]) + if (changesMask[11]) { for (int i = 0; i < DailyQuestsCompleted.Size(); ++i) { @@ -5826,7 +6345,7 @@ namespace Game.Entities } } } - if (changesMask[10]) + if (changesMask[12]) { for (int i = 0; i < AvailableQuestLineXQuestIDs.Size(); ++i) { @@ -5836,7 +6355,7 @@ namespace Game.Entities } } } - if (changesMask[11]) + if (changesMask[13]) { for (int i = 0; i < Heirlooms.Size(); ++i) { @@ -5846,7 +6365,7 @@ namespace Game.Entities } } } - if (changesMask[12]) + if (changesMask[14]) { for (int i = 0; i < HeirloomFlags.Size(); ++i) { @@ -5856,7 +6375,7 @@ namespace Game.Entities } } } - if (changesMask[13]) + if (changesMask[15]) { for (int i = 0; i < Toys.Size(); ++i) { @@ -5866,7 +6385,7 @@ namespace Game.Entities } } } - if (changesMask[14]) + if (changesMask[16]) { for (int i = 0; i < ToyFlags.Size(); ++i) { @@ -5876,7 +6395,7 @@ namespace Game.Entities } } } - if (changesMask[15]) + if (changesMask[17]) { for (int i = 0; i < Transmog.Size(); ++i) { @@ -5886,7 +6405,7 @@ namespace Game.Entities } } } - if (changesMask[16]) + if (changesMask[18]) { for (int i = 0; i < ConditionalTransmog.Size(); ++i) { @@ -5896,7 +6415,7 @@ namespace Game.Entities } } } - if (changesMask[17]) + if (changesMask[19]) { for (int i = 0; i < SelfResSpells.Size(); ++i) { @@ -5906,7 +6425,7 @@ namespace Game.Entities } } } - if (changesMask[18]) + if (changesMask[20]) { for (int i = 0; i < RuneforgePowers.Size(); ++i) { @@ -5916,7 +6435,7 @@ namespace Game.Entities } } } - if (changesMask[19]) + if (changesMask[21]) { for (int i = 0; i < TransmogIllusions.Size(); ++i) { @@ -5926,7 +6445,7 @@ namespace Game.Entities } } } - if (changesMask[21]) + if (changesMask[23]) { for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { @@ -5936,7 +6455,7 @@ namespace Game.Entities } } } - if (changesMask[22]) + if (changesMask[24]) { for (int i = 0; i < SpellFlatModByLabel.Size(); ++i) { @@ -5946,7 +6465,7 @@ namespace Game.Entities } } } - if (changesMask[23]) + if (changesMask[25]) { for (int i = 0; i < MawPowers.Size(); ++i) { @@ -5956,7 +6475,7 @@ namespace Game.Entities } } } - if (changesMask[24]) + if (changesMask[26]) { for (int i = 0; i < MultiFloorExploration.Size(); ++i) { @@ -5966,7 +6485,7 @@ namespace Game.Entities } } } - if (changesMask[25]) + if (changesMask[27]) { for (int i = 0; i < RecipeProgression.Size(); ++i) { @@ -5976,7 +6495,7 @@ namespace Game.Entities } } } - if (changesMask[26]) + if (changesMask[28]) { for (int i = 0; i < ReplayedQuests.Size(); ++i) { @@ -5986,7 +6505,7 @@ namespace Game.Entities } } } - if (changesMask[27]) + if (changesMask[29]) { for (int i = 0; i < TaskQuests.Size(); ++i) { @@ -5996,7 +6515,7 @@ namespace Game.Entities } } } - if (changesMask[28]) + if (changesMask[30]) { for (int i = 0; i < DisabledSpells.Size(); ++i) { @@ -6006,7 +6525,10 @@ namespace Game.Entities } } } - if (changesMask[31]) + } + if (changesMask[32]) + { + if (changesMask[34]) { for (int i = 0; i < PersonalCraftingOrderCounts.Size(); ++i) { @@ -6016,10 +6538,17 @@ namespace Game.Entities } } } - } - if (changesMask[32]) - { - if (changesMask[33]) + if (changesMask[35]) + { + for (int i = 0; i < NpcCraftingOrders.Size(); ++i) + { + if (NpcCraftingOrders.HasChanged(i) || ignoreNestedChangesMask) + { + NpcCraftingOrders[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[36]) { for (int i = 0; i < CategoryCooldownMods.Size(); ++i) { @@ -6029,7 +6558,7 @@ namespace Game.Entities } } } - if (changesMask[34]) + if (changesMask[37]) { for (int i = 0; i < WeeklySpellUses.Size(); ++i) { @@ -6039,7 +6568,7 @@ namespace Game.Entities } } } - if (changesMask[35]) + if (changesMask[38]) { for (int i = 0; i < TrackedCollectableSources.Size(); ++i) { @@ -6049,10 +6578,37 @@ namespace Game.Entities } } } + if (changesMask[39]) + { + if (!ignoreNestedChangesMask) + AccountBankTabSettings.WriteUpdateMask(data, 3); + else + WriteCompleteDynamicFieldUpdateMask(AccountBankTabSettings.Size(), data, 3); + } } if (changesMask[0]) { if (changesMask[8]) + { + for (int i = 0; i < CharacterDataElements.Size(); ++i) + { + if (CharacterDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + CharacterDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[9]) + { + for (int i = 0; i < AccountDataElements.Size(); ++i) + { + if (AccountDataElements.HasChanged(i) || ignoreNestedChangesMask) + { + AccountDataElements[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[10]) { for (int i = 0; i < PvpInfo.Size(); ++i) { @@ -6062,7 +6618,7 @@ namespace Game.Entities } } } - if (changesMask[20]) + if (changesMask[22]) { for (int i = 0; i < CharacterRestrictions.Size(); ++i) { @@ -6072,7 +6628,7 @@ namespace Game.Entities } } } - if (changesMask[29]) + if (changesMask[31]) { for (int i = 0; i < TraitConfigs.Size(); ++i) { @@ -6082,7 +6638,10 @@ namespace Game.Entities } } } - if (changesMask[30]) + } + if (changesMask[32]) + { + if (changesMask[33]) { for (int i = 0; i < CraftingOrders.Size(); ++i) { @@ -6092,533 +6651,574 @@ namespace Game.Entities } } } - } - if (changesMask[32]) - { - if (changesMask[44]) + if (changesMask[39]) { - data.WritePackedGuid(FarsightObject); - } - if (changesMask[45]) - { - data.WritePackedGuid(SummonedBattlePetGUID); + for (int i = 0; i < AccountBankTabSettings.Size(); ++i) + { + if (AccountBankTabSettings.HasChanged(i) || ignoreNestedChangesMask) + { + AccountBankTabSettings[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } } if (changesMask[46]) { - data.WriteUInt64(Coinage); + data.WritePackedGuid(FarsightObject); } if (changesMask[47]) { - data.WriteUInt32(XP); + data.WritePackedGuid(SummonedBattlePetGUID); } if (changesMask[48]) { - data.WriteUInt32(NextLevelXP); + data.WriteUInt64(Coinage); } if (changesMask[49]) { - data.WriteInt32(TrialXP); + data.WriteUInt64(AccountBankCoinage); } if (changesMask[50]) { - Skill.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteUInt32(XP); } if (changesMask[51]) { - data.WriteUInt32(CharacterPoints); + data.WriteUInt32(NextLevelXP); } if (changesMask[52]) { - data.WriteUInt32(MaxTalentTiers); + data.WriteInt32(TrialXP); } if (changesMask[53]) { - data.WriteUInt32(TrackCreatureMask); + Skill.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[54]) { - data.WriteFloat(MainhandExpertise); + data.WriteUInt32(CharacterPoints); } if (changesMask[55]) { - data.WriteFloat(OffhandExpertise); + data.WriteUInt32(MaxTalentTiers); } if (changesMask[56]) { - data.WriteFloat(RangedExpertise); + data.WriteUInt32(TrackCreatureMask); } if (changesMask[57]) { - data.WriteFloat(CombatRatingExpertise); + data.WriteFloat(MainhandExpertise); } if (changesMask[58]) { - data.WriteFloat(BlockPercentage); + data.WriteFloat(OffhandExpertise); } if (changesMask[59]) { - data.WriteFloat(DodgePercentage); + data.WriteFloat(RangedExpertise); } if (changesMask[60]) { - data.WriteFloat(DodgePercentageFromAttribute); + data.WriteFloat(CombatRatingExpertise); } if (changesMask[61]) { - data.WriteFloat(ParryPercentage); + data.WriteFloat(BlockPercentage); } if (changesMask[62]) { - data.WriteFloat(ParryPercentageFromAttribute); + data.WriteFloat(DodgePercentage); } if (changesMask[63]) { - data.WriteFloat(CritPercentage); + data.WriteFloat(DodgePercentageFromAttribute); } if (changesMask[64]) { - data.WriteFloat(RangedCritPercentage); + data.WriteFloat(ParryPercentage); } if (changesMask[65]) { - data.WriteFloat(OffhandCritPercentage); + data.WriteFloat(ParryPercentageFromAttribute); } if (changesMask[66]) { - data.WriteFloat(SpellCritPercentage); + data.WriteFloat(CritPercentage); } if (changesMask[67]) { - data.WriteUInt32(ShieldBlock); + data.WriteFloat(RangedCritPercentage); } if (changesMask[68]) { - data.WriteFloat(ShieldBlockCritPercentage); + data.WriteFloat(OffhandCritPercentage); } if (changesMask[69]) { - data.WriteFloat(Mastery); - } - if (changesMask[70]) - { - data.WriteFloat(Speed); - } - if (changesMask[71]) - { - data.WriteFloat(Avoidance); + data.WriteFloat(SpellCritPercentage); } } - if (changesMask[72]) + if (changesMask[70]) { + if (changesMask[71]) + { + data.WriteUInt32(ShieldBlock); + } + if (changesMask[72]) + { + data.WriteFloat(ShieldBlockCritPercentage); + } if (changesMask[73]) { - data.WriteFloat(Sturdiness); + data.WriteFloat(Mastery); } if (changesMask[74]) { - data.WriteInt32(Versatility); + data.WriteFloat(Speed); } if (changesMask[75]) { - data.WriteFloat(VersatilityBonus); + data.WriteFloat(Avoidance); } if (changesMask[76]) { - data.WriteFloat(PvpPowerDamage); + data.WriteFloat(Sturdiness); } if (changesMask[77]) { - data.WriteFloat(PvpPowerHealing); + data.WriteInt32(Versatility); } if (changesMask[78]) { - data.WriteInt32(ModHealingDonePos); + data.WriteFloat(VersatilityBonus); } if (changesMask[79]) { - data.WriteFloat(ModHealingPercent); + data.WriteFloat(PvpPowerDamage); } if (changesMask[80]) { - data.WriteFloat(ModPeriodicHealingDonePercent); + data.WriteFloat(PvpPowerHealing); } if (changesMask[81]) { - data.WriteFloat(ModSpellPowerPercent); + BitVectors.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (changesMask[82]) { - data.WriteFloat(ModResiliencePercent); + data.WriteInt32(ModHealingDonePos); } if (changesMask[83]) { - data.WriteFloat(OverrideSpellPowerByAPPercent); + data.WriteFloat(ModHealingPercent); } if (changesMask[84]) { - data.WriteFloat(OverrideAPBySpellPowerPercent); + data.WriteFloat(ModPeriodicHealingDonePercent); } if (changesMask[85]) { - data.WriteInt32(ModTargetResistance); + data.WriteFloat(ModSpellPowerPercent); } if (changesMask[86]) { - data.WriteInt32(ModTargetPhysicalResistance); + data.WriteFloat(ModResiliencePercent); } if (changesMask[87]) { - data.WriteUInt32(LocalFlags); + data.WriteFloat(OverrideSpellPowerByAPPercent); } if (changesMask[88]) { - data.WriteUInt8(GrantableLevels); + data.WriteFloat(OverrideAPBySpellPowerPercent); } if (changesMask[89]) { - data.WriteUInt8(MultiActionBars); + data.WriteInt32(ModTargetResistance); } if (changesMask[90]) { - data.WriteUInt8(LifetimeMaxRank); + data.WriteInt32(ModTargetPhysicalResistance); } if (changesMask[91]) { - data.WriteUInt8(NumRespecs); + data.WriteUInt32(LocalFlags); } if (changesMask[92]) { - data.WriteUInt32(PvpMedals); + data.WriteUInt8(GrantableLevels); } if (changesMask[93]) { - data.WriteUInt16(TodayHonorableKills); + data.WriteUInt8(MultiActionBars); } if (changesMask[94]) { - data.WriteUInt16(YesterdayHonorableKills); + data.WriteUInt8(LifetimeMaxRank); } if (changesMask[95]) { - data.WriteUInt32(LifetimeHonorableKills); + data.WriteUInt8(NumRespecs); } if (changesMask[96]) { - data.WriteUInt32(WatchedFactionIndex); + data.WriteUInt32(PvpMedals); } if (changesMask[97]) { - data.WriteInt32(MaxLevel); + data.WriteUInt16(TodayHonorableKills); } if (changesMask[98]) { - data.WriteInt32(ScalingPlayerLevelDelta); + data.WriteUInt16(YesterdayHonorableKills); } if (changesMask[99]) { - data.WriteInt32(MaxCreatureScalingLevel); + data.WriteUInt32(LifetimeHonorableKills); } if (changesMask[100]) { - data.WriteUInt32(PetSpellPower); + data.WriteUInt32(WatchedFactionIndex); } if (changesMask[101]) { - data.WriteFloat(UiHitModifier); - } - if (changesMask[102]) - { - data.WriteFloat(UiSpellHitModifier); - } - if (changesMask[103]) - { - data.WriteInt32(HomeRealmTimeOffset); + data.WriteInt32(MaxLevel); } } - if (changesMask[104]) + if (changesMask[102]) { + if (changesMask[103]) + { + data.WriteInt32(ScalingPlayerLevelDelta); + } + if (changesMask[104]) + { + data.WriteInt32(MaxCreatureScalingLevel); + } if (changesMask[105]) { - data.WriteFloat(ModPetHaste); + data.WriteUInt32(PetSpellPower); } if (changesMask[106]) { - data.WriteInt8(JailersTowerLevelMax); + data.WriteFloat(UiHitModifier); } if (changesMask[107]) { - data.WriteInt8(JailersTowerLevel); + data.WriteFloat(UiSpellHitModifier); } if (changesMask[108]) { - data.WriteUInt8(LocalRegenFlags); + data.WriteInt32(HomeRealmTimeOffset); } if (changesMask[109]) { - data.WriteUInt8(AuraVision); + data.WriteFloat(ModPetHaste); } if (changesMask[110]) { - data.WriteUInt8(NumBackpackSlots); + data.WriteInt8(JailersTowerLevelMax); } if (changesMask[111]) { - data.WriteUInt32(OverrideSpellsID); + data.WriteInt8(JailersTowerLevel); } if (changesMask[112]) { - data.WriteUInt16(LootSpecID); + data.WriteUInt8(LocalRegenFlags); } if (changesMask[113]) { - data.WriteUInt32(OverrideZonePVPType); + data.WriteUInt8(AuraVision); } if (changesMask[114]) { - data.WriteUInt32(Honor); + data.WriteUInt8(NumBackpackSlots); } if (changesMask[115]) { - data.WriteUInt32(HonorNextLevel); + data.WriteUInt32(OverrideSpellsID); } if (changesMask[116]) { - data.WriteInt32(PerksProgramCurrency); + data.WriteUInt16(LootSpecID); } if (changesMask[117]) + { + data.WriteUInt32(OverrideZonePVPType); + } + if (changesMask[118]) + { + data.WriteUInt32(Honor); + } + if (changesMask[119]) + { + data.WriteUInt32(HonorNextLevel); + } + if (changesMask[120]) + { + data.WriteInt32(PerksProgramCurrency); + } + if (changesMask[121]) { data.WriteUInt8(NumBankSlots); } if (changesMask[122]) + { + data.WriteUInt8(NumAccountBankTabs); + } + if (changesMask[127]) { data.WriteInt32(UiChromieTimeExpansionID); } - if (changesMask[123]) - { - data.WriteInt32(TimerunningSeasonID); - } - if (changesMask[124]) - { - data.WriteInt32(TransportServerTime); - } - if (changesMask[125]) - { - data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); - } - if (changesMask[126]) - { - data.WriteInt16(DEBUGSoulbindConduitRank); - } if (changesMask[128]) { - data.WriteUInt32(ActiveCombatTraitConfigID); + data.WriteInt32(TimerunningSeasonID); } if (changesMask[129]) { - data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); + data.WriteInt32(TransportServerTime); } if (changesMask[130]) { - data.WriteInt32(ItemUpgradeHighFingerItemID); + data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); } if (changesMask[131]) { - data.WriteFloat(ItemUpgradeHighFingerWatermark); - } - if (changesMask[132]) - { - data.WriteInt32(ItemUpgradeHighTrinketItemID); + data.WriteInt16(DEBUGSoulbindConduitRank); } if (changesMask[133]) + { + data.WriteUInt32(ActiveCombatTraitConfigID); + } + } + if (changesMask[134]) + { + if (changesMask[135]) + { + data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); + } + if (changesMask[136]) + { + data.WriteInt32(ItemUpgradeHighFingerItemID); + } + if (changesMask[137]) + { + data.WriteFloat(ItemUpgradeHighFingerWatermark); + } + if (changesMask[138]) + { + data.WriteInt32(ItemUpgradeHighTrinketItemID); + } + if (changesMask[139]) { data.WriteFloat(ItemUpgradeHighTrinketWatermark); } - if (changesMask[134]) + if (changesMask[140]) { data.WriteUInt64(LootHistoryInstanceID); } - } - if (changesMask[136]) - { - if (changesMask[137]) + if (changesMask[142]) { data.WriteUInt8(RequiredMountCapabilityFlags); } } - if (changesMask[104]) + if (changesMask[102]) { data.WriteBits(QuestSession.HasValue(), 1); + } + if (changesMask[134]) + { data.WriteBits(PetStable.HasValue(), 1); + data.WriteBits(WalkInData.HasValue(), 1); + data.WriteBits(DelveData.HasValue(), 1); } data.FlushBits(); - if (changesMask[104]) + if (changesMask[102]) { - if (changesMask[118]) + if (changesMask[123]) { ResearchHistory.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[120]) + if (changesMask[125]) { if (QuestSession.HasValue()) { QuestSession.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[119]) + if (changesMask[124]) { FrozenPerksVendorItem.GetValue().Write(data); } - if (changesMask[121]) + if (changesMask[126]) { Field_1410.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[127]) + if (changesMask[132]) { DungeonScore.GetValue().Write(data); } - if (changesMask[135]) + } + if (changesMask[134]) + { + if (changesMask[141]) { if (PetStable.HasValue()) { PetStable.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - } - if (changesMask[138]) - { - for (int i = 0; i < 227; ++i) + if (changesMask[143]) { - if (changesMask[139 + i]) + if (WalkInData.HasValue()) + { + WalkInData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + if (changesMask[144]) + { + if (DelveData.HasValue()) + { + DelveData.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } + } + } + if (changesMask[145]) + { + for (int i = 0; i < 232; ++i) + { + if (changesMask[146 + i]) { data.WritePackedGuid(InvSlots[i]); } } } - if (changesMask[366]) + if (changesMask[378]) { for (int i = 0; i < 2; ++i) { - if (changesMask[367 + i]) + if (changesMask[379 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[369]) + if (changesMask[381]) { for (int i = 0; i < 7; ++i) { - if (changesMask[370 + i]) + if (changesMask[382 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (changesMask[377 + i]) + if (changesMask[389 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (changesMask[384 + i]) + if (changesMask[396 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } - if (changesMask[391 + i]) + if (changesMask[403 + i]) { data.WriteFloat(ModHealingDonePercent[i]); } } } - if (changesMask[398]) + if (changesMask[410]) { for (int i = 0; i < 3; ++i) { - if (changesMask[399 + i]) + if (changesMask[411 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (changesMask[402 + i]) + if (changesMask[414 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[405]) + if (changesMask[417]) { for (int i = 0; i < 12; ++i) { - if (changesMask[406 + i]) + if (changesMask[418 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (changesMask[418 + i]) + if (changesMask[430 + i]) { data.WriteInt64(BuybackTimestamp[i]); } } } - if (changesMask[430]) + if (changesMask[442]) { for (int i = 0; i < 32; ++i) { - if (changesMask[431 + i]) + if (changesMask[443 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (changesMask[463]) + if (changesMask[475]) { for (int i = 0; i < 4; ++i) { - if (changesMask[464 + i]) + if (changesMask[476 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (changesMask[468]) + if (changesMask[480]) { for (int i = 0; i < 2; ++i) { - if (changesMask[469 + i]) + if (changesMask[481 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (changesMask[471]) + if (changesMask[483]) { for (int i = 0; i < 5; ++i) { - if (changesMask[472 + i]) + if (changesMask[484 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (changesMask[477]) + if (changesMask[489]) { for (int i = 0; i < 7; ++i) { - if (changesMask[478 + i]) + if (changesMask[490 + i]) { data.WriteUInt32(BankBagSlotFlags[i]); } } } - if (changesMask[485]) + if (changesMask[497]) { - for (int i = 0; i < 950; ++i) + for (int i = 0; i < 960; ++i) { - if (changesMask[486 + i]) + if (changesMask[498 + i]) { data.WriteUInt64(QuestCompleted[i]); } } } - if (changesMask[1436]) + if (changesMask[1458]) { for (int i = 0; i < 17; ++i) { - if (changesMask[1437 + i]) + if (changesMask[1459 + i]) { data.WriteFloat(ItemUpgradeHighWatermark[i]); } @@ -6635,7 +7235,6 @@ namespace Game.Entities ClearChangesMask(SortBagsRightToLeft); ClearChangesMask(InsertItemsLeftToRight); ClearChangesMask(HasPerksProgramPendingReward); - ClearChangesMask(DataFlags); ClearChangesMask(ResearchSites); ClearChangesMask(ResearchSiteProgress); ClearChangesMask(Research); @@ -6660,16 +7259,21 @@ namespace Game.Entities ClearChangesMask(TaskQuests); ClearChangesMask(DisabledSpells); ClearChangesMask(PersonalCraftingOrderCounts); + ClearChangesMask(NpcCraftingOrders); ClearChangesMask(CategoryCooldownMods); ClearChangesMask(WeeklySpellUses); ClearChangesMask(TrackedCollectableSources); + ClearChangesMask(CharacterDataElements); + ClearChangesMask(AccountDataElements); ClearChangesMask(PvpInfo); ClearChangesMask(CharacterRestrictions); ClearChangesMask(TraitConfigs); ClearChangesMask(CraftingOrders); + ClearChangesMask(AccountBankTabSettings); ClearChangesMask(FarsightObject); ClearChangesMask(SummonedBattlePetGUID); ClearChangesMask(Coinage); + ClearChangesMask(AccountBankCoinage); ClearChangesMask(XP); ClearChangesMask(NextLevelXP); ClearChangesMask(TrialXP); @@ -6700,6 +7304,7 @@ namespace Game.Entities ClearChangesMask(VersatilityBonus); ClearChangesMask(PvpPowerDamage); ClearChangesMask(PvpPowerHealing); + ClearChangesMask(BitVectors); ClearChangesMask(ModHealingDonePos); ClearChangesMask(ModHealingPercent); ClearChangesMask(ModPeriodicHealingDonePercent); @@ -6739,6 +7344,7 @@ namespace Game.Entities ClearChangesMask(HonorNextLevel); ClearChangesMask(PerksProgramCurrency); ClearChangesMask(NumBankSlots); + ClearChangesMask(NumAccountBankTabs); ClearChangesMask(ResearchHistory); ClearChangesMask(FrozenPerksVendorItem); ClearChangesMask(Field_1410); @@ -6758,6 +7364,8 @@ namespace Game.Entities ClearChangesMask(LootHistoryInstanceID); ClearChangesMask(PetStable); ClearChangesMask(RequiredMountCapabilityFlags); + ClearChangesMask(WalkInData); + ClearChangesMask(DelveData); ClearChangesMask(InvSlots); ClearChangesMask(RestInfo); ClearChangesMask(ModDamageDonePos); diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index 529b9b338..ea09e676f 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -654,7 +654,7 @@ namespace Game.Entities // *data << int32(Players[i].Pets[j].Power); // *data << int32(Players[i].Pets[j].Speed); // *data << int32(Players[i].Pets[j].NpcTeamMemberID); - // *data << uint16(Players[i].Pets[j].BreedQuality); + // *data << uint8(Players[i].Pets[j].BreedQuality); // *data << uint16(Players[i].Pets[j].StatusFlags); // *data << int8(Players[i].Pets[j].Slot); diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 007dd7924..99ad0f699 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -3779,8 +3779,8 @@ namespace Game.Entities stmt.AddValue(index++, GetLootSpecId()); ss.Clear(); - for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) - ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); + for (int i = 0; i < m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) + ss.Append($"{(uint)(m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); stmt.AddValue(index++, ss.ToString()); @@ -3931,8 +3931,8 @@ namespace Game.Entities stmt.AddValue(index++, GetLootSpecId()); ss.Clear(); - for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) - ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); + for (int i = 0; i < m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) + ss.Append($"{(uint)(m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); stmt.AddValue(index++, ss.ToString()); diff --git a/Source/Game/Entities/Player/Player.Fields.cs b/Source/Game/Entities/Player/Player.Fields.cs index fa36f8c95..66f51efde 100644 --- a/Source/Game/Entities/Player/Player.Fields.cs +++ b/Source/Game/Entities/Player/Player.Fields.cs @@ -85,6 +85,7 @@ namespace Game.Entities float m_lastFallZ; TeleportLocation teleportDest; TeleportToOptions m_teleport_options; + int m_newWorldCounter; bool mSemaphoreTeleport_Near; bool mSemaphoreTeleport_Far; PlayerDelayedOperations m_DelayedOperations; diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs index a6bf956bf..fa30b908d 100644 --- a/Source/Game/Entities/Player/Player.Items.cs +++ b/Source/Game/Entities/Player/Player.Items.cs @@ -2447,9 +2447,14 @@ namespace Game.Entities packet.QuestLogItemID = item.GetTemplate().QuestLogItemId; packet.Quantity = quantity; packet.QuantityInInventory = GetItemCount(item.GetEntry()); + + QuestObjective questObjective = GetQuestObjectiveForItem(item.GetEntry(), false); + if (questObjective != null) + packet.QuantityInQuestLog = GetQuestObjectiveData(questObjective); + packet.BattlePetSpeciesID = (int)item.GetModifier(ItemModifier.BattlePetSpeciesId); packet.BattlePetBreedID = (int)item.GetModifier(ItemModifier.BattlePetBreedData) & 0xFFFFFF; - packet.BattlePetBreedQuality = (item.GetModifier(ItemModifier.BattlePetBreedData) >> 24) & 0xFF; + packet.BattlePetBreedQuality = (byte)((item.GetModifier(ItemModifier.BattlePetBreedData) >> 24) & 0xFF); packet.BattlePetLevel = (int)item.GetModifier(ItemModifier.BattlePetLevel); packet.ItemGUID = item.GetGUID(); diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs index aa73d86bd..ebbf19d77 100644 --- a/Source/Game/Entities/Player/Player.Quest.cs +++ b/Source/Game/Entities/Player/Player.Quest.cs @@ -2095,20 +2095,28 @@ namespace Game.Entities case QuestStatus.Complete: if (quest.IsImportant()) result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.ImportantQuestRewardCompleteNoPOI : QuestGiverStatus.ImportantQuestRewardCompletePOI; + else if (quest.IsMeta()) + result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.MetaQuestRewardCompleteNoPOI : QuestGiverStatus.MetaQuestRewardCompletePOI; else if (quest.GetQuestTag() == QuestTagType.CovenantCalling) result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.CovenantCallingRewardCompleteNoPOI : QuestGiverStatus.CovenantCallingRewardCompletePOI; else if (quest.HasFlagEx(QuestFlagsEx.Legendary)) result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.LegendaryRewardCompleteNoPOI : QuestGiverStatus.LegendaryRewardCompletePOI; + else if (quest.IsDailyOrWeekly()) + result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RepeatableRewardCompleteNoPOI : QuestGiverStatus.RepeatableRewardCompletePOI; else result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RewardCompleteNoPOI : QuestGiverStatus.RewardCompletePOI; break; case QuestStatus.Incomplete: if (quest.IsImportant()) result |= QuestGiverStatus.ImportantReward; + else if (quest.IsMeta()) + result |= QuestGiverStatus.MetaReward; else if (quest.GetQuestTag() == QuestTagType.CovenantCalling) result |= QuestGiverStatus.CovenantCallingReward; else if (quest.HasFlagEx(QuestFlagsEx.Legendary)) result |= QuestGiverStatus.LegendaryReward; + else if (quest.IsDailyOrWeekly()) + result |= QuestGiverStatus.RepeatableReward; else result |= QuestGiverStatus.Reward; break; @@ -2116,12 +2124,16 @@ namespace Game.Entities break; } - if (quest.IsTurnIn() && CanTakeQuest(quest, false) && quest.IsRepeatable() && !quest.IsDailyOrWeekly() && !quest.IsMonthly()) + if (quest.IsTurnIn() && CanTakeQuest(quest, false)) { - if (GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff))) - result |= QuestGiverStatus.RepeatableTurnin; - else - result |= QuestGiverStatus.TrivialRepeatableTurnin; + if (quest.IsRepeatable()) + { + if (GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff))) + result |= QuestGiverStatus.RepeatableTurnin; + else + result |= QuestGiverStatus.TrivialRepeatableTurnin; + } + result |= quest.HasFlag(QuestFlags.HideRewardPoi) ? QuestGiverStatus.RewardCompleteNoPOI : QuestGiverStatus.RewardCompletePOI; } } @@ -2143,12 +2155,14 @@ namespace Game.Entities bool isTrivial = GetLevel() > (GetQuestLevel(quest) + WorldConfig.GetIntValue(WorldCfg.QuestLowLevelHideDiff)); if (quest.IsImportant()) result |= isTrivial ? QuestGiverStatus.TrivialImportantQuest : QuestGiverStatus.ImportantQuest; + else if (quest.IsMeta()) + result |= isTrivial ? QuestGiverStatus.TrivialMetaQuest : QuestGiverStatus.MetaQuest; else if (quest.GetQuestTag() == QuestTagType.CovenantCalling) result |= QuestGiverStatus.CovenantCallingQuest; else if (quest.HasFlagEx(QuestFlagsEx.Legendary)) result |= isTrivial ? QuestGiverStatus.TrivialLegendaryQuest : QuestGiverStatus.LegendaryQuest; - else if (quest.IsDaily()) - result |= isTrivial ? QuestGiverStatus.TrivialDailyQuest : QuestGiverStatus.DailyQuest; + else if (quest.IsDailyOrWeekly()) + result |= isTrivial ? QuestGiverStatus.TrivialRepeatableQuest : QuestGiverStatus.RepeatableQuest; else result |= isTrivial ? QuestGiverStatus.Trivial : QuestGiverStatus.Quest; } @@ -3373,9 +3387,11 @@ namespace Game.Entities { ObjectFieldData objMask = new(); UnitData unitMask = new(); - for (int i = 0; i < creature.m_unitData.NpcFlags.GetSize(); ++i) - if (creature.m_unitData.NpcFlags[i] != 0) - unitMask.MarkChanged(creature.m_unitData.NpcFlags, i); + + if (creature.m_unitData.NpcFlags != 0) + unitMask.MarkChanged(m_unitData.NpcFlags); + if (creature.m_unitData.NpcFlags2 != 0) + unitMask.MarkChanged(m_unitData.NpcFlags2); if (objMask.GetUpdateMask().IsAnySet() || unitMask.GetUpdateMask().IsAnySet()) creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this); @@ -3396,7 +3412,7 @@ namespace Game.Entities { ObjectFieldData objMask = new(); UnitData unitMask = new(); - unitMask.MarkChanged(m_unitData.NpcFlags, 0); // NpcFlags[0] has UNIT_NPC_FLAG_SPELLCLICK + unitMask.MarkChanged(m_unitData.NpcFlags); // NpcFlags has UNIT_NPC_FLAG_SPELLCLICK creature.BuildValuesUpdateForPlayerWithMask(udata, objMask.GetUpdateMask(), unitMask.GetUpdateMask(), this); break; } diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index df35ac63b..6271ab435 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -2200,6 +2200,8 @@ namespace Game.Entities if (!GetSession().PlayerLogout()) { + ++m_newWorldCounter; + SuspendToken suspendToken = new(); suspendToken.SequenceIndex = m_movementCounter; // not incrementing suspendToken.Reason = options.HasAnyFlag(TeleportToOptions.Seamless) ? 2 : 1u; @@ -2946,7 +2948,8 @@ namespace Game.Entities PlayerInteractionType.Renown, PlayerInteractionType.BlackMarketAuctioneer, PlayerInteractionType.PerksProgramVendor, PlayerInteractionType.ProfessionsCraftingOrder, PlayerInteractionType.Professions, PlayerInteractionType.ProfessionsCustomerOrder, PlayerInteractionType.TraitSystem, PlayerInteractionType.BarbersChoice, PlayerInteractionType.MajorFactionRenown, - PlayerInteractionType.PersonalTabardVendor + PlayerInteractionType.PersonalTabardVendor, PlayerInteractionType.ForgeMaster, PlayerInteractionType.CharacterBanker, + PlayerInteractionType.AccountBanker }; PlayerInteractionType interactionType = GossipOptionNpcToInteractionType[(int)gossipOptionNpc]; @@ -6469,8 +6472,8 @@ namespace Game.Entities int offset = (areaEntry.AreaBit / PlayerConst.ExploredZonesBits); ulong val = 1ul << (areaEntry.AreaBit % PlayerConst.ExploredZonesBits); - if (offset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size() - || (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][offset] & val) == 0) + if (offset >= m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size() + || (m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][offset] & val) == 0) { AddExploredZones(offset, val); @@ -6521,12 +6524,14 @@ namespace Game.Entities public void AddExploredZones(int pos, ulong mask) { - SetUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); + BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors); + SetUpdateFieldFlagValue(bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); } public void RemoveExploredZones(int pos, ulong mask) { - RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); + BitVectors bitVectors = m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.BitVectors); + RemoveUpdateFieldFlagValue(bitVectors.ModifyValue(bitVectors.Values, (int)PlayerDataFlag.ExploredZonesIndex, pos), mask); } public bool HasExploredZone(uint areaId) @@ -6539,11 +6544,11 @@ namespace Game.Entities return false; int playerIndexOffset = area.AreaBit / PlayerConst.ExploredZonesBits; - if (playerIndexOffset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size()) + if (playerIndexOffset >= m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex].Size()) return false; ulong mask = 1ul << (area.AreaBit % PlayerConst.ExploredZonesBits); - return (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][playerIndexOffset] & mask) != 0; + return (m_activePlayerData.BitVectors.GetValue().Values[(int)PlayerDataFlag.ExploredZonesIndex][playerIndexOffset] & mask) != 0; } void SendExplorationExperience(uint Area, uint Experience) @@ -7354,6 +7359,8 @@ namespace Game.Entities public void SetSemaphoreTeleportNear(bool semphsetting) { mSemaphoreTeleport_Near = semphsetting; } public void SetSemaphoreTeleportFar(bool semphsetting) { mSemaphoreTeleport_Far = semphsetting; } + public int GetNewWorldCounter() { return m_newWorldCounter; } + public bool IsReagentBankUnlocked() { return HasPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); } public void UnlockReagentBank() { SetPlayerFlagEx(PlayerFlagsEx.ReagentBankUnlocked); } diff --git a/Source/Game/Entities/Unit/Unit.Combat.cs b/Source/Game/Entities/Unit/Unit.Combat.cs index 351477e99..fb0b04bfb 100644 --- a/Source/Game/Entities/Unit/Unit.Combat.cs +++ b/Source/Game/Entities/Unit/Unit.Combat.cs @@ -1714,12 +1714,12 @@ namespace Game.Entities public virtual void UpdateNearbyPlayersInteractions() { - for (int i = 0; i < m_unitData.NpcFlags.GetSize(); ++i) - if (m_unitData.NpcFlags[i] != 0) - { - m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, i); - ForceUpdateFieldChange(); - } + if (m_unitData.NpcFlags != 0) + m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags); + if (m_unitData.NpcFlags2 != 0) + m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2); + + ForceUpdateFieldChange(); } } } diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index a8117ef25..31ba75948 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -345,6 +345,36 @@ namespace Game.Entities return true; } + bool SetEnableFullSpeedTurning(bool enable) + { + if (!IsPlayer()) + return false; + + if (enable == HasUnitMovementFlag2(MovementFlag2.FullSpeedTurning)) + return false; + + if (enable) + AddUnitMovementFlag2(MovementFlag2.FullSpeedTurning); + else + RemoveUnitMovementFlag2(MovementFlag2.FullSpeedTurning); + + ServerOpcodes[] fullSpeedTurningOpcodeTable = [ServerOpcodes.MoveDisableFullSpeedTurning, ServerOpcodes.MoveEnableFullSpeedTurning]; + Player playerMover = GetUnitBeingMoved()?.ToPlayer(); + if (playerMover != null) + { + MoveSetFlag packet = new(fullSpeedTurningOpcodeTable[enable ? 1 : 0]); + packet.MoverGUID = GetGUID(); + packet.SequenceIndex = m_movementCounter++; + playerMover.SendPacket(packet); + + MoveUpdate moveUpdate = new(); + moveUpdate.Status = m_movementInfo; + SendMessageToSet(moveUpdate, playerMover); + } + + return true; + } + public bool SetCanTransitionBetweenSwimAndFly(bool enable) { if (!IsTypeId(TypeId.Player)) diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index 1484d5cba..14c307abb 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -867,17 +867,17 @@ namespace Game.Entities m_areaTrigger.Last()?.Remove(); } - public NPCFlags GetNpcFlags() { return (NPCFlags)m_unitData.NpcFlags[0]; } - public bool HasNpcFlag(NPCFlags flags) { return (m_unitData.NpcFlags[0] & (uint)flags) != 0; } - public void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); } - public void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); } - public void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 0), (uint)flags); } + public NPCFlags GetNpcFlags() { return (NPCFlags)m_unitData.NpcFlags.GetValue(); } + public bool HasNpcFlag(NPCFlags flags) { return (m_unitData.NpcFlags & (uint)flags) != 0; } + public void SetNpcFlag(NPCFlags flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); } + public void RemoveNpcFlag(NPCFlags flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); } + public void ReplaceAllNpcFlags(NPCFlags flags) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags), (uint)flags); } - public NPCFlags2 GetNpcFlags2() { return (NPCFlags2)m_unitData.NpcFlags[1]; } - public bool HasNpcFlag2(NPCFlags2 flags) { return (m_unitData.NpcFlags[1] & (uint)flags) != 0; } - public void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); } - public void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); } - public void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(ref m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags, 1), (uint)flags); } + public NPCFlags2 GetNpcFlags2() { return (NPCFlags2)m_unitData.NpcFlags2.GetValue(); } + public bool HasNpcFlag2(NPCFlags2 flags) { return (m_unitData.NpcFlags2 & (uint)flags) != 0; } + public void SetNpcFlag2(NPCFlags2 flags) { SetUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); } + public void RemoveNpcFlag2(NPCFlags2 flags) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); } + public void ReplaceAllNpcFlags2(NPCFlags2 flags) { SetUpdateFieldValue(m_values.ModifyValue(m_unitData).ModifyValue(m_unitData.NpcFlags2), (uint)flags); } public bool IsVendor() { return HasNpcFlag(NPCFlags.Vendor); } public bool IsTrainer() { return HasNpcFlag(NPCFlags.Trainer); } diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 55c965747..85f61ceb0 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -657,8 +657,8 @@ namespace Game _gossipMenuAddonStorage.Clear(); - // 0 1 - SQLResult result = DB.World.Query("SELECT MenuID, FriendshipFactionID FROM gossip_menu_addon"); + // 0 1 2 + SQLResult result = DB.World.Query("SELECT MenuID, FriendshipFactionID, LfgDungeonsID FROM gossip_menu_addon"); if (result.IsEmpty()) { Log.outInfo(LogFilter.ServerLoading, "Loaded 0 gossip_menu_addon IDs. DB table `gossip_menu_addon` is empty!"); @@ -670,20 +670,30 @@ namespace Game uint menuID = result.Read(0); GossipMenuAddon addon = new(); addon.FriendshipFactionID = result.Read(1); + addon.LfgDungeonsID = result.Read(2); - var faction = CliDB.FactionStorage.LookupByKey(addon.FriendshipFactionID); - if (faction != null) + if (addon.FriendshipFactionID != 0) { - if (!CliDB.FriendshipReputationStorage.ContainsKey(faction.FriendshipRepID)) + var faction = CliDB.FactionStorage.LookupByKey(addon.FriendshipFactionID); + if (faction != null) { - Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using FriendshipFactionID {addon.FriendshipFactionID} referencing non-existing FriendshipRepID {faction.FriendshipRepID}"); + if (!CliDB.FriendshipReputationStorage.ContainsKey(faction.FriendshipRepID)) + { + Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using FriendshipFactionID {addon.FriendshipFactionID} referencing non-existing FriendshipRepID {faction.FriendshipRepID}"); + addon.FriendshipFactionID = 0; + } + } + else + { + Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing FriendshipFactionID {addon.FriendshipFactionID}"); addon.FriendshipFactionID = 0; } } - else + + if (addon.LfgDungeonsID != 0 && !CliDB.LFGDungeonsStorage.ContainsKey(addon.LfgDungeonsID)) { - Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing FriendshipFactionID {addon.FriendshipFactionID}"); - addon.FriendshipFactionID = 0; + Log.outError(LogFilter.Sql, $"Table gossip_menu_addon: ID {menuID} is using non-existing LfgDungeonsID {addon.LfgDungeonsID}"); + addon.LfgDungeonsID = 0; } _gossipMenuAddonStorage[menuID] = addon; @@ -3257,7 +3267,7 @@ namespace Game } foreach (var unusedSpells in spellsByTrainer) - Log.outError(LogFilter.Sql, $"Table `trainer_spell` references non-existing trainer (TrainerId: {unusedSpells.Key}) for SpellId {unusedSpells.Value.SpellId}, ignoring"); + Log.outError(LogFilter.Sql, $"Table `trainer_spell` references non-existing trainer (TrainerId: {unusedSpells.Key}) for SpellId {unusedSpells.Value.SpellId}, ignoring"); SQLResult trainerLocalesResult = DB.World.Query("SELECT Id, locale, Greeting_lang FROM trainer_locale"); if (!trainerLocalesResult.IsEmpty()) @@ -7055,7 +7065,7 @@ namespace Game //90 91 92 93 94 95 96 97 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " + //98 99 100 101 102 103 104 105 106 - "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " + + "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, ResetByScheduler, Expansion, ManagedWorldStateID, QuestSessionBonus, " + //107 108 109 110 111 112 113 114 115 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog " + " FROM quest_template"); @@ -7078,7 +7088,6 @@ namespace Game } while (result.NextRow()); - // Load `quest_reward_choice_items` // 0 1 2 3 4 5 6 result = DB.World.Query("SELECT QuestID, Type1, Type2, Type3, Type4, Type5, Type6 FROM quest_reward_choice_items"); @@ -7255,6 +7264,107 @@ namespace Game } while (result.NextRow()); } + // Load `quest_description_conditional` + // 0 1 2 3 4 + result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_description_conditional` ORDER BY OrderIndex"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty."); + } + else + { + do + { + uint questId = result.Read(0); + var quest = _questTemplates.LookupByKey(questId); + if (quest != null) + quest.LoadConditionalConditionalQuestDescription(result.GetFields()); + else + Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId); + } while (result.NextRow()); + } + + + // Load `quest_request_items_conditional` + // 0 1 2 3 4 + result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_request_items_conditional` ORDER BY OrderIndex"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty."); + } + else + { + do + { + uint questId = result.Read(0); + var quest = _questTemplates.LookupByKey(questId); + if (quest != null) + quest.LoadConditionalConditionalRequestItemsText(result.GetFields()); + else + Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId); + } while (result.NextRow()); + } + + + // Load `quest_offer_reward_conditional` + // 0 1 2 3 4 + result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_offer_reward_conditional` ORDER BY OrderIndex"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty."); + } + else + { + do + { + uint questId = result.Read(0); + var quest = _questTemplates.LookupByKey(questId); + if (quest != null) + quest.LoadConditionalConditionalOfferRewardText(result.GetFields()); + else + Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId); + } while (result.NextRow()); + } + + // Load `quest_completion_log_conditional` + // 0 1 2 3 4 + result = DB.World.Query("SELECT QuestId, PlayerConditionId, QuestgiverCreatureId, Text, locale FROM `quest_completion_log_conditional` ORDER BY OrderIndex"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty."); + } + else + { + do + { + uint questId = result.Read(0); + var quest = _questTemplates.LookupByKey(questId); + if (quest != null) + quest.LoadConditionalConditionalQuestCompletionLog(result.GetFields()); + else + Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId); + } while (result.NextRow()); + } + + // Load `quest_treasure_pickers` + result = DB.World.Query("SELECT QuestID, TreasurePickerID FROM `quest_treasure_pickers` ORDER BY OrderIndex"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, "Loaded 0 quest objectives. DB table `quest_objectives` is empty."); + } + else + { + do + { + uint questId = result.Read(0); + var quest = _questTemplates.LookupByKey(questId); + if (quest != null) + quest.LoadTreasurePickers(result.GetFields()); + else + Log.outError(LogFilter.Sql, "Table `quest_objectives` has objective for quest {0} but such quest does not exist", questId); + } while (result.NextRow()); + } + // Load `quest_visual_effect` join table with quest_objectives because visual effects are based on objective ID (core stores objectives by their index in quest) // 0 1 2 3 4 result = DB.World.Query("SELECT v.ID, o.ID, o.QuestID, v.Index, v.VisualEffect FROM quest_visual_effect AS v LEFT JOIN quest_objectives AS o ON v.ID = o.ID ORDER BY v.Index DESC"); diff --git a/Source/Game/Groups/Group.cs b/Source/Game/Groups/Group.cs index 24fb8fc14..07c701501 100644 --- a/Source/Game/Groups/Group.cs +++ b/Source/Game/Groups/Group.cs @@ -146,6 +146,7 @@ namespace Game.Groups stmt.AddValue(index++, (byte)m_raidDifficulty); stmt.AddValue(index++, (byte)m_legacyRaidDifficulty); stmt.AddValue(index++, m_masterLooterGuid.GetCounter()); + stmt.AddValue(index++, (sbyte)m_pingRestriction); DB.Characters.Execute(stmt); @@ -191,6 +192,8 @@ namespace Game.Groups m_masterLooterGuid = ObjectGuid.Create(HighGuid.Player, field.Read(16)); + m_pingRestriction = (RestrictPingsTo)field.Read(18); + if (m_groupFlags.HasAnyFlag(GroupFlags.Lfg)) Global.LFGMgr._LoadFromDB(field, GetGUID()); } @@ -819,6 +822,8 @@ namespace Game.Groups partyUpdate.SequenceNum = player.NextGroupUpdateSequenceNumber(m_groupCategory); + partyUpdate.PingRestriction = m_pingRestriction; + partyUpdate.MyIndex = -1; byte index = 0; for (var i = 0; i < m_memberSlots.Count; ++i, ++index) @@ -1883,23 +1888,20 @@ namespace Game.Groups SendUpdate(); } - public bool IsRestrictPingsToAssistants() + public RestrictPingsTo GetRestrictPings() { - return m_groupFlags.HasFlag(GroupFlags.RestrictPings); + return m_pingRestriction; } - public void SetRestrictPingsToAssistants(bool restrictPingsToAssistants) + public void SetRestrictPingsTo(RestrictPingsTo restrictTo) { - if (restrictPingsToAssistants) - m_groupFlags |= GroupFlags.RestrictPings; - else - m_groupFlags &= ~GroupFlags.RestrictPings; + m_pingRestriction = restrictTo; if (!IsBGGroup() && !IsBFGroup()) { - PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_TYPE); + PreparedStatement stmt = CharacterDatabase.GetPreparedStatement(CharStatements.UPD_GROUP_PING_RESTRICTION); - stmt.AddValue(0, (ushort)m_groupFlags); + stmt.AddValue(0, (sbyte)m_pingRestriction); stmt.AddValue(1, m_dbStoreId); DB.Characters.Execute(stmt); @@ -1982,6 +1984,8 @@ namespace Game.Groups uint m_activeMarkers; CountdownInfo[] _countdowns = new CountdownInfo[3]; + + RestrictPingsTo m_pingRestriction; } public class MemberSlot diff --git a/Source/Game/Groups/GroupManager.cs b/Source/Game/Groups/GroupManager.cs index e2e0cdbd6..ac20067f0 100644 --- a/Source/Game/Groups/GroupManager.cs +++ b/Source/Game/Groups/GroupManager.cs @@ -107,8 +107,8 @@ namespace Game.Groups // 0 1 2 3 4 5 6 7 8 9 SQLResult result = DB.Characters.Query("SELECT g.leaderGuid, g.lootMethod, g.looterGuid, g.lootThreshold, g.icon1, g.icon2, g.icon3, g.icon4, g.icon5, g.icon6" + - // 10 11 12 13 14 15 16 17 18 19 - ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); + // 10 11 12 13 14 15 16 17 18 19 20 + ", g.icon7, g.icon8, g.groupType, g.difficulty, g.raiddifficulty, g.legacyRaidDifficulty, g.masterLooterGuid, g.guid, g.pingRestriction, lfg.dungeon, lfg.state FROM `groups` g LEFT JOIN lfg_data lfg ON lfg.guid = g.guid ORDER BY g.guid ASC"); if (result.IsEmpty()) { Log.outInfo(LogFilter.ServerLoading, "Loaded 0 group definitions. DB table `groups` is empty!"); diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index 873a79930..ac203d6fd 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -1239,7 +1239,6 @@ namespace Game.Guilds eventPacket.Name = player.GetName(); eventPacket.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress(); eventPacket.LoggedOn = loggedOn; - eventPacket.Mobile = false; if (broadcast) BroadcastPacket(eventPacket); diff --git a/Source/Game/Handlers/AuctionHandler.cs b/Source/Game/Handlers/AuctionHandler.cs index 74b236b4d..d1ea250c3 100644 --- a/Source/Game/Handlers/AuctionHandler.cs +++ b/Source/Game/Handlers/AuctionHandler.cs @@ -982,7 +982,7 @@ namespace Game SendPacket(commodityQuoteResult); } - public void SendAuctionHello(ObjectGuid guid, Creature unit) + public void SendAuctionHello(ObjectGuid guid, Unit unit) { if (GetPlayer().GetLevel() < WorldConfig.GetIntValue(WorldCfg.AuctionLevelReq)) { diff --git a/Source/Game/Handlers/BankHandler.cs b/Source/Game/Handlers/BankHandler.cs index f402784f1..e53bf43d1 100644 --- a/Source/Game/Handlers/BankHandler.cs +++ b/Source/Game/Handlers/BankHandler.cs @@ -21,6 +21,9 @@ namespace Game return; } + if (packet.BankType != BankType.Character) + return; + Item item = GetPlayer().GetItemByPos(packet.Bag, packet.Slot); if (item == null) return; @@ -45,19 +48,40 @@ namespace Game } [WorldPacketHandler(ClientOpcodes.BankerActivate, Processing = PacketProcessing.Inplace)] - void HandleBankerActivate(Hello packet) + void HandleBankerActivate(BankerActivate bankerActivate) { - Creature unit = GetPlayer().GetNPCIfCanInteractWith(packet.Unit, NPCFlags.Banker, NPCFlags2.None); + if (bankerActivate.InteractionType != PlayerInteractionType.Banker) + return; + + Creature unit = GetPlayer().GetNPCIfCanInteractWith(bankerActivate.Banker, NPCFlags.AccountBanker | NPCFlags.Banker, NPCFlags2.None); if (unit == null) { - Log.outError(LogFilter.Network, "HandleBankerActivate: {0} not found or you can not interact with him.", packet.Unit.ToString()); + Log.outError(LogFilter.Network, $"HandleBankerActivate: {bankerActivate.Banker} not found or you can not interact with him."); return; } + switch (bankerActivate.InteractionType) + { + case PlayerInteractionType.Banker: + if (!unit.HasNpcFlag(NPCFlags.AccountBanker) || !unit.HasNpcFlag(NPCFlags.Banker)) + return; + break; + case PlayerInteractionType.CharacterBanker: + if (!unit.HasNpcFlag(NPCFlags.Banker)) + return; + break; + case PlayerInteractionType.AccountBanker: + if (!unit.HasNpcFlag(NPCFlags.AccountBanker)) + return; + break; + default: + break; + } + if (GetPlayer().HasUnitState(UnitState.Died)) GetPlayer().RemoveAurasByType(AuraType.FeignDeath); - SendShowBank(packet.Unit); + SendShowBank(bankerActivate.Banker, bankerActivate.InteractionType); } [WorldPacketHandler(ClientOpcodes.AutostoreBankItem, Processing = PacketProcessing.Inplace)] @@ -281,13 +305,13 @@ namespace Game } } - public void SendShowBank(ObjectGuid guid) + public void SendShowBank(ObjectGuid guid, PlayerInteractionType interactionType) { _player.PlayerTalkClass.GetInteractionData().Reset(); _player.PlayerTalkClass.GetInteractionData().SourceGuid = guid; NPCInteractionOpenResult npcInteraction = new(); npcInteraction.Npc = guid; - npcInteraction.InteractionType = PlayerInteractionType.Banker; + npcInteraction.InteractionType = interactionType; npcInteraction.Success = true; SendPacket(npcInteraction); } diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 5f4d9bf25..87ede03fa 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -70,7 +70,7 @@ namespace Game { do { - EnumCharactersResult.CharacterInfo charInfo = new(result.GetFields()); + EnumCharactersResult.CharacterInfoBasic charInfo = new(result.GetFields()); var customizationsForChar = customizations.LookupByKey(charInfo.Guid.GetCounter()); if (!customizationsForChar.Empty()) @@ -149,7 +149,7 @@ namespace Game { do { - EnumCharactersResult.CharacterInfo charInfo = new(result.GetFields()); + EnumCharactersResult.CharacterInfoBasic charInfo = new(result.GetFields()); Log.outInfo(LogFilter.Network, "Loading undeleted char guid {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId()); diff --git a/Source/Game/Handlers/GroupHandler.cs b/Source/Game/Handlers/GroupHandler.cs index 15181eeab..fb8c99320 100644 --- a/Source/Game/Handlers/GroupHandler.cs +++ b/Source/Game/Handlers/GroupHandler.cs @@ -646,8 +646,24 @@ namespace Game if (group == null) return false; - if (group.IsRestrictPingsToAssistants() && !group.IsLeader(player.GetGUID()) && !group.IsAssistant(player.GetGUID())) - return false; + if (group.IsLeader(player.GetGUID())) + return true; + + switch (group.GetRestrictPings()) + { + case RestrictPingsTo.None: + return true; + case RestrictPingsTo.Lead: + return false; + case RestrictPingsTo.Assist: + if (!group.IsAssistant(player.GetGUID())) + return false; + break; + case RestrictPingsTo.TankHealer: + if (!group.GetLfgRoles(player.GetGUID()).HasAnyFlag(LfgRoles.Tank | LfgRoles.Healer)) + return false; + break; + } return true; } @@ -662,7 +678,7 @@ namespace Game if (!group.IsLeader(GetPlayer().GetGUID())) return; - group.SetRestrictPingsToAssistants(setRestrictPingsToAssistants.RestrictPingsToAssistants); + group.SetRestrictPingsTo(setRestrictPingsToAssistants.RestrictTo); } [WorldPacketHandler(ClientOpcodes.SendPingUnit)] @@ -709,6 +725,7 @@ namespace Game broadcastPingWorldPoint.Point = pingWorldPoint.Point; broadcastPingWorldPoint.Type = pingWorldPoint.Type; broadcastPingWorldPoint.PinFrameID = pingWorldPoint.PinFrameID; + broadcastPingWorldPoint.Transport = pingWorldPoint.Transport; broadcastPingWorldPoint.Write(); for (GroupReference itr = group.GetFirstMember(); itr != null; itr = itr.Next()) diff --git a/Source/Game/Handlers/ItemHandler.cs b/Source/Game/Handlers/ItemHandler.cs index 1d1ee42af..110f5b890 100644 --- a/Source/Game/Handlers/ItemHandler.cs +++ b/Source/Game/Handlers/ItemHandler.cs @@ -1062,6 +1062,13 @@ namespace Game GetPlayer().DestroyItem(item.GetBagSlot(), item.GetSlot(), true); } + void HandleSortAccountBankBags(SortAccountBankBags sortAccountBankBags) + { + // TODO: Implement sorting + // Placeholder to prevent completely locking out bags clientside + SendPacket(new BagCleanupFinished()); + } + [WorldPacketHandler(ClientOpcodes.SortBags, Processing = PacketProcessing.Inplace)] void HandleSortBags(SortBags sortBags) { diff --git a/Source/Game/Handlers/MovementHandler.cs b/Source/Game/Handlers/MovementHandler.cs index 848a9d284..d46f1d107 100644 --- a/Source/Game/Handlers/MovementHandler.cs +++ b/Source/Game/Handlers/MovementHandler.cs @@ -462,6 +462,7 @@ namespace Game packet.MapID = loc.Location.GetMapId(); packet.Loc.Pos = loc.Location; packet.Reason = (uint)(!_player.IsBeingTeleportedSeamlessly() ? NewWorldReason.Normal : NewWorldReason.Seamless); + packet.Counter = _player.GetNewWorldCounter(); SendPacket(packet); if (_player.IsBeingTeleportedSeamlessly()) diff --git a/Source/Game/Networking/Packets/AreaTriggerPackets.cs b/Source/Game/Networking/Packets/AreaTriggerPackets.cs index d5765c5e8..263c3e3da 100644 --- a/Source/Game/Networking/Packets/AreaTriggerPackets.cs +++ b/Source/Game/Networking/Packets/AreaTriggerPackets.cs @@ -54,6 +54,7 @@ namespace Game.Networking.Packets public override void Write() { _worldPacket.WritePackedGuid(TriggerGUID); + _worldPacket.WritePackedGuid(Unused_1100); _worldPacket.WriteBit(AreaTriggerSpline != null); _worldPacket.WriteBit(AreaTriggerOrbit != null); @@ -74,6 +75,7 @@ namespace Game.Networking.Packets public AreaTriggerOrbitInfo AreaTriggerOrbit; public AreaTriggerMovementScriptInfo? AreaTriggerMovementScript; public ObjectGuid TriggerGUID; + public ObjectGuid Unused_1100; } class AreaTriggerPlaySpellVisual : ServerPacket diff --git a/Source/Game/Networking/Packets/AuctionHousePackets.cs b/Source/Game/Networking/Packets/AuctionHousePackets.cs index 8ab685def..fecd1d532 100644 --- a/Source/Game/Networking/Packets/AuctionHousePackets.cs +++ b/Source/Game/Networking/Packets/AuctionHousePackets.cs @@ -55,15 +55,15 @@ namespace Game.Networking.Packets uint itemClassFilterCount = _worldPacket.ReadBits(3); uint sortSize = _worldPacket.ReadBits(2); - for (var i = 0; i < sortSize; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); - if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); Name = _worldPacket.ReadString(nameLength); - for (var i = 0; i < itemClassFilterCount; ++i)// AuctionListFilterClass filterClass in ItemClassFilters) + for (var i = 0; i < itemClassFilterCount; ++i) ItemClassFilters[i] = new AuctionListFilterClass(_worldPacket); + + for (var i = 0; i < sortSize; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } @@ -141,14 +141,14 @@ namespace Game.Networking.Packets uint auctionIDCount = _worldPacket.ReadBits(7); uint sortCount = _worldPacket.ReadBits(2); - for (var i = 0; i < sortCount; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); - if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); for (var i = 0; i < auctionIDCount; ++i) AuctionItemIDs[i] = _worldPacket.ReadUInt32(); + + for (var i = 0; i < sortCount; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } @@ -170,14 +170,14 @@ namespace Game.Networking.Packets uint bucketKeysCount = _worldPacket.ReadBits(7); uint sortCount = _worldPacket.ReadBits(2); - for (var i = 0; i < sortCount; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); - if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); for (var i = 0; i < bucketKeysCount; ++i) BucketKeys[i] = new AuctionBucketKey(_worldPacket); + + for (var i = 0; i < sortCount; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } @@ -201,13 +201,14 @@ namespace Game.Networking.Packets TaintedBy = new(); uint sortCount = _worldPacket.ReadBits(2); - for (var i = 0; i < sortCount; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); BucketKey = new AuctionBucketKey(_worldPacket); if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); + + for (var i = 0; i < sortCount; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } @@ -234,11 +235,11 @@ namespace Game.Networking.Packets uint sortCount = _worldPacket.ReadBits(2); - for (var i = 0; i < sortCount; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); - if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); + + for (var i = 0; i < sortCount; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } @@ -260,11 +261,11 @@ namespace Game.Networking.Packets uint sortCount = _worldPacket.ReadBits(2); - for (var i = 0; i < sortCount; ++i) - Sorts[i] = new AuctionSortDef(_worldPacket); - if (TaintedBy.HasValue) TaintedBy.Value.Read(_worldPacket); + + for (var i = 0; i < sortCount; ++i) + Sorts[i] = new AuctionSortDef(_worldPacket); } } diff --git a/Source/Game/Networking/Packets/AuthenticationPackets.cs b/Source/Game/Networking/Packets/AuthenticationPackets.cs index 65b8e3174..fe5065b66 100644 --- a/Source/Game/Networking/Packets/AuthenticationPackets.cs +++ b/Source/Game/Networking/Packets/AuthenticationPackets.cs @@ -357,12 +357,12 @@ namespace Game.Networking.Packets public override void Read() { - Serial = (ConnectToSerial)_worldPacket.ReadUInt32(); Con = _worldPacket.ReadUInt8(); + Serial = (ConnectToSerial)_worldPacket.ReadUInt32(); } public ConnectToSerial Serial; - byte Con; + public byte Con; } class EnterEncryptedMode : ServerPacket diff --git a/Source/Game/Networking/Packets/AzeritePackets.cs b/Source/Game/Networking/Packets/AzeritePackets.cs index 8dcafd9ff..afe62e36e 100644 --- a/Source/Game/Networking/Packets/AzeritePackets.cs +++ b/Source/Game/Networking/Packets/AzeritePackets.cs @@ -84,13 +84,13 @@ namespace Game.Networking.Packets public override void Read() { - Tier = _worldPacket.ReadInt32(); - AzeritePowerID = _worldPacket.ReadInt32(); ContainerSlot = _worldPacket.ReadUInt8(); Slot = _worldPacket.ReadUInt8(); + Tier = _worldPacket.ReadUInt8(); + AzeritePowerID = _worldPacket.ReadInt32(); } - public int Tier; + public byte Tier; public int AzeritePowerID; public byte ContainerSlot; public byte Slot; diff --git a/Source/Game/Networking/Packets/BankPackets.cs b/Source/Game/Networking/Packets/BankPackets.cs index f989bc103..aeb8f354b 100644 --- a/Source/Game/Networking/Packets/BankPackets.cs +++ b/Source/Game/Networking/Packets/BankPackets.cs @@ -2,12 +2,14 @@ // Licensed under the GNU GENERAL PUBLIC LICENSE. See LICENSE file in the project root for full license information. using Game.Entities; +using Framework.Constants; namespace Game.Networking.Packets { public class AutoBankItem : ClientPacket { public InvUpdate Inv; + public BankType BankType; public byte Bag; public byte Slot; @@ -16,6 +18,7 @@ namespace Game.Networking.Packets public override void Read() { Inv = new InvUpdate(_worldPacket); + BankType = (BankType)_worldPacket.ReadInt8(); Bag = _worldPacket.ReadUInt8(); Slot = _worldPacket.ReadUInt8(); } @@ -94,4 +97,18 @@ namespace Game.Networking.Packets public ObjectGuid Banker; } + + class BankerActivate : ClientPacket + { + public ObjectGuid Banker; + public PlayerInteractionType InteractionType; + + public BankerActivate(WorldPacket packet) : base(packet) { } + + public override void Read() + { + Banker = _worldPacket.ReadPackedGuid(); + InteractionType = (PlayerInteractionType)_worldPacket.ReadInt32(); + } + } } diff --git a/Source/Game/Networking/Packets/CalendarPackets.cs b/Source/Game/Networking/Packets/CalendarPackets.cs index d6ebc16cd..71242f7d6 100644 --- a/Source/Game/Networking/Packets/CalendarPackets.cs +++ b/Source/Game/Networking/Packets/CalendarPackets.cs @@ -177,7 +177,7 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt64(EventID); _worldPacket.WriteUInt8((byte)GetEventType); _worldPacket.WriteInt32(TextureID); - _worldPacket.WriteUInt32((uint)Flags); + _worldPacket.WriteUInt16((ushort)Flags); Date.Write(_worldPacket); LockDate.Write(_worldPacket); _worldPacket.WriteUInt64(EventGuildID); @@ -216,7 +216,7 @@ namespace Game.Networking.Packets { _worldPacket.WriteUInt64(EventID); Date.Write(_worldPacket); - _worldPacket.WriteUInt32((uint)Flags); + _worldPacket.WriteUInt16((ushort)Flags); _worldPacket.WriteUInt8((byte)EventType); _worldPacket.WriteInt32(TextureID); _worldPacket.WriteUInt64(EventClubID); @@ -229,6 +229,7 @@ namespace Game.Networking.Packets _worldPacket.WritePackedGuid(OwnerGuid); _worldPacket.WriteBits(EventName.GetByteCount(), 8); + _worldPacket.WriteBit(Unknown_1100); _worldPacket.FlushBits(); _worldPacket.WriteString(EventName); } @@ -245,6 +246,7 @@ namespace Game.Networking.Packets public CalendarEventType EventType; public CalendarModerationRank ModeratorStatus; public string EventName; + public bool Unknown_1100; } class CalendarInvitePkt : ClientPacket @@ -390,7 +392,7 @@ namespace Game.Networking.Packets OriginalDate.Write(_worldPacket); Date.Write(_worldPacket); LockDate.Write(_worldPacket); - _worldPacket.WriteUInt32((uint)Flags); + _worldPacket.WriteUInt16((ushort)Flags); _worldPacket.WriteInt32(TextureID); _worldPacket.WriteUInt8((byte)EventType); @@ -794,7 +796,7 @@ namespace Game.Networking.Packets TextureID = data.ReadUInt32(); Time = new(); Time.Read(data); - Flags = data.ReadUInt32(); + Flags = data.ReadUInt16(); byte titleLen = data.ReadBits(8); ushort descLen = data.ReadBits(11); @@ -811,7 +813,7 @@ namespace Game.Networking.Packets public byte EventType; public uint TextureID; public WowTime Time; - public uint Flags; + public ushort Flags; } struct CalendarSendCalendarInviteInfo @@ -859,7 +861,7 @@ namespace Game.Networking.Packets data.WriteUInt64(EventID); data.WriteUInt8((byte)EventType); Date.Write(data); - data.WriteUInt32((uint)Flags); + data.WriteUInt16((ushort)Flags); data.WriteInt32(TextureID); data.WriteUInt64(EventClubID); data.WritePackedGuid(OwnerGuid); diff --git a/Source/Game/Networking/Packets/CharacterPackets.cs b/Source/Game/Networking/Packets/CharacterPackets.cs index e6972f7e5..007aab636 100644 --- a/Source/Game/Networking/Packets/CharacterPackets.cs +++ b/Source/Game/Networking/Packets/CharacterPackets.cs @@ -27,17 +27,21 @@ namespace Game.Networking.Packets public override void Write() { _worldPacket.WriteBit(Success); + _worldPacket.WriteBit(Realmless); _worldPacket.WriteBit(IsDeletedCharacters); _worldPacket.WriteBit(IsNewPlayerRestrictionSkipped); _worldPacket.WriteBit(IsNewPlayerRestricted); _worldPacket.WriteBit(IsNewPlayer); _worldPacket.WriteBit(IsTrialAccountRestricted); _worldPacket.WriteBit(DisabledClassesMask.HasValue); + _worldPacket.WriteBit(DontCreateCharacterDisplays); _worldPacket.WriteInt32(Characters.Count); + _worldPacket.WriteInt32(RegionwideCharacters.Count); _worldPacket.WriteInt32(MaxCharacterLevel); _worldPacket.WriteInt32(RaceUnlockData.Count); _worldPacket.WriteInt32(UnlockedConditionalAppearances.Count); _worldPacket.WriteInt32(RaceLimitDisables.Count); + _worldPacket.WriteInt32(WarbandGroups.Count); if (DisabledClassesMask.HasValue) _worldPacket.WriteUInt32(DisabledClassesMask.Value); @@ -48,7 +52,13 @@ namespace Game.Networking.Packets foreach (RaceLimitDisableInfo raceLimitDisableInfo in RaceLimitDisables) raceLimitDisableInfo.Write(_worldPacket); - foreach (CharacterInfo charInfo in Characters) + foreach (WarbandGroup warbandGroup in WarbandGroups) + warbandGroup.Write(_worldPacket); + + foreach (CharacterInfoBasic charInfo in Characters) + charInfo.Write(_worldPacket); + + foreach (RegionwideCharacterListEntry charInfo in RegionwideCharacters) charInfo.Write(_worldPacket); foreach (RaceUnlock raceUnlock in RaceUnlockData) @@ -56,25 +66,30 @@ namespace Game.Networking.Packets } public bool Success; + public bool Realmless; public bool IsDeletedCharacters; // used for character undelete list public bool IsNewPlayerRestrictionSkipped; // allows client to skip new player restrictions public bool IsNewPlayerRestricted; // forbids using level boost and class trials public bool IsNewPlayer; // forbids hero classes and allied races public bool IsTrialAccountRestricted; + public bool DontCreateCharacterDisplays; public int MaxCharacterLevel = 1; public uint? DisabledClassesMask = new(); - public List Characters = new(); // all characters on the list - public List RaceUnlockData = new(); // + public List Characters = new(); // all characters on the list + public List RegionwideCharacters = new(); + public List RaceUnlockData = new(); public List UnlockedConditionalAppearances = new(); public List RaceLimitDisables = new(); + public List WarbandGroups = new(); - public class CharacterInfo + public class CharacterInfoBasic { - public CharacterInfo(SQLFields fields) + public CharacterInfoBasic(SQLFields fields) { Guid = ObjectGuid.Create(HighGuid.Player, fields.Read(0)); + VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress(); Name = fields.Read(1); RaceId = fields.Read(2); ClassId = (Class)fields.Read(3); @@ -116,8 +131,6 @@ namespace Game.Networking.Packets else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace)) Flags2 = CharacterCustomizeFlags.Race; - Flags3 = 0; - Flags4 = 0; FirstLogin = atLoginFlags.HasAnyFlag(AtLoginFlags.FirstLogin); // show pet at selection character in character list only for non-ghost character @@ -132,7 +145,6 @@ namespace Game.Networking.Packets } } - BoostInProgress = false; ProfessionIds[0] = 0; ProfessionIds[1] = 0; @@ -168,41 +180,42 @@ namespace Game.Networking.Packets public void Write(WorldPacket data) { data.WritePackedGuid(Guid); - data.WriteUInt64(GuildClubMemberID); + data.WriteUInt32(VirtualRealmAddress); data.WriteUInt8(ListPosition); data.WriteUInt8(RaceId); - data.WriteUInt8((byte)ClassId); data.WriteUInt8(SexId); + data.WriteUInt8((byte)ClassId); + data.WriteInt16(SpecID); data.WriteInt32(Customizations.Count); data.WriteUInt8(ExperienceLevel); - data.WriteUInt32(ZoneId); data.WriteUInt32(MapId); + data.WriteUInt32(ZoneId); data.WriteVector3(PreloadPos); + data.WriteUInt64(GuildClubMemberID); data.WritePackedGuid(GuildGuid); data.WriteUInt32((uint)Flags); data.WriteUInt32((uint)Flags2); data.WriteUInt32(Flags3); + data.WriteUInt8(unkWod61x); + data.WriteUInt32(PetCreatureDisplayId); data.WriteUInt32(PetExperienceLevel); data.WriteUInt32(PetCreatureFamilyId); - data.WriteUInt32(ProfessionIds[0]); - data.WriteUInt32(ProfessionIds[1]); - foreach (var visualItem in VisualItems) visualItem.Write(data); - data.WriteInt64(LastPlayedTime); - data.WriteInt16(SpecID); data.WriteInt32(Unknown703); + data.WriteInt64(LastPlayedTime); data.WriteInt32(LastLoginVersion); - data.WriteUInt32(Flags4); - data.WriteInt32(MailSenders.Count); - data.WriteInt32(MailSenderTypes.Count); - data.WriteUInt32(OverrideSelectScreenFileDataID); PersonalTabard.Write(data); + + data.WriteUInt32(ProfessionIds[0]); + data.WriteUInt32(ProfessionIds[1]); + data.WriteInt32(TimerunningSeasonID); + data.WriteUInt32(OverrideSelectScreenFileDataID); foreach (ChrCustomizationChoice customization in Customizations) { @@ -210,29 +223,15 @@ namespace Game.Networking.Packets data.WriteUInt32(customization.ChrCustomizationChoiceID); } - foreach (var mailSenderType in MailSenderTypes) - data.WriteUInt32(mailSenderType); - data.WriteBits(Name.GetByteCount(), 6); data.WriteBit(FirstLogin); - data.WriteBit(BoostInProgress); - data.WriteBits(unkWod61x, 5); - data.WriteBit(RpeResetAvailable); - data.WriteBit(RpeResetQuestClearAvailable); - - foreach (string str in MailSenders) - data.WriteBits(str.GetByteCount() + 1, 6); - data.FlushBits(); - foreach (string str in MailSenders) - if (!str.IsEmpty()) - data.WriteCString(str); - data.WriteString(Name); } public ObjectGuid Guid; + public uint VirtualRealmAddress; public ulong GuildClubMemberID; // same as bgs.protocol.club.v1.MemberId.unique_id, guessed basing on SMSG_QUERY_PLAYER_NAME_RESPONSE (that one is known) public string Name; public byte ListPosition; // Order of the characters in list @@ -248,7 +247,6 @@ namespace Game.Networking.Packets public CharacterFlags Flags; // Character flag @see enum CharacterFlags public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags public uint Flags3; // Character flags 3 @todo research - public uint Flags4; public bool FirstLogin; public byte unkWod61x; public long LastPlayedTime; @@ -260,24 +258,20 @@ namespace Game.Networking.Packets public uint PetCreatureDisplayId; public uint PetExperienceLevel; public uint PetCreatureFamilyId; - public bool BoostInProgress; // @todo public uint[] ProfessionIds = new uint[2]; // @todo public VisualItemInfo[] VisualItems = new VisualItemInfo[19]; - public List MailSenders = new(); - public List MailSenderTypes = new(); - public bool RpeResetAvailable = false; - public bool RpeResetQuestClearAvailable = false; - public CustomTabardInfo PersonalTabard = new(); + public CustomTabardInfo PersonalTabard; public struct VisualItemInfo { public void Write(WorldPacket data) { data.WriteUInt32(DisplayId); - data.WriteUInt32(DisplayEnchantId); - data.WriteUInt32(SecondaryItemModifiedAppearanceID); data.WriteUInt8(InvType); + data.WriteUInt32(DisplayEnchantId); data.WriteUInt8(Subclass); + data.WriteUInt32(SecondaryItemModifiedAppearanceID); + data.WriteUInt32(ItemID); } public uint DisplayId; @@ -285,6 +279,7 @@ namespace Game.Networking.Packets public uint SecondaryItemModifiedAppearanceID; // also -1 is some special value public byte InvType; public byte Subclass; + public uint ItemID; } public struct PetInfo @@ -295,6 +290,85 @@ namespace Game.Networking.Packets } } + public class CharacterRestrictionAndMailData + { + public bool BoostInProgress; ///< @todo + public uint Flags4; + public List MailSenders = new(); + public List MailSenderTypes = new(); + public bool RpeResetAvailable; + public bool RpeResetQuestClearAvailable; + + public void Write(WorldPacket data) + { + Cypher.Assert(MailSenders.Count == MailSenderTypes.Count); + + data.WriteBit(BoostInProgress); + data.WriteBit(RpeResetAvailable); + data.WriteBit(RpeResetQuestClearAvailable); + data.FlushBits(); + + data.WriteUInt32(Flags4); + data.WriteInt32(MailSenders.Count); + data.WriteInt32(MailSenderTypes.Count); + + if (!MailSenderTypes.Empty()) + foreach (var type in MailSenderTypes) + data.WriteUInt32(type); + + foreach (string str in MailSenders) + data.WriteBits(str.GetByteCount() + 1, 6); + + data.FlushBits(); + + foreach (string str in MailSenders) + if (!str.IsEmpty()) + data.WriteCString(str); + } + } + + public struct CharacterInfo + { + public CharacterInfoBasic Basic; + public CharacterRestrictionAndMailData RestrictionsAndMails; + + public CharacterInfo(SQLFields fields) + { + Basic = new(fields); + } + + public void Write(WorldPacket data) + { + Basic.Write(data); + RestrictionsAndMails.Write(data); + } + } + + public struct RegionwideCharacterListEntry + { + public CharacterInfoBasic Basic; + public ulong Money; + public float CurrentSeasonMythicPlusOverallScore; + public uint CurrentSeasonBestPvpRating; + public sbyte PvpRatingBracket; + public short PvpRatingAssociatedSpecID; + + public RegionwideCharacterListEntry(SQLFields fields) + { + Basic = new(fields); + } + + public void Write(WorldPacket data) + { + Basic.Write(data); + data.WriteUInt64(Money); + data.WriteFloat(CurrentSeasonMythicPlusOverallScore); + data.WriteUInt32(CurrentSeasonBestPvpRating); + data.WriteInt8(PvpRatingBracket); + data.WriteInt16(PvpRatingAssociatedSpecID); + } + } + public struct RaceUnlock { public void Write(WorldPacket data) @@ -883,6 +957,7 @@ namespace Game.Networking.Packets NewSex = _worldPacket.ReadUInt8(); CustomizedRace = _worldPacket.ReadInt32(); CustomizedChrModelID = _worldPacket.ReadInt32(); + UnalteredVisualRaceID = _worldPacket.ReadInt32(); for (var i = 0; i < customizationCount; ++i) { @@ -900,6 +975,7 @@ namespace Game.Networking.Packets public Array Customizations = new(250); public int CustomizedRace; public int CustomizedChrModelID; + public int UnalteredVisualRaceID; } public class BarberShopResult : ServerPacket @@ -1211,4 +1287,38 @@ namespace Game.Networking.Packets BackgroundColor = data.ReadInt32(); } } + + public struct WarbandGroupMember + { + public int WarbandScenePlacementID; + public int Type; + public ObjectGuid Guid; + + public void Write(WorldPacket data) + { + data.WriteInt32(WarbandScenePlacementID); + data.WriteInt32(Type); + if (Type == 0) + data.WritePackedGuid(Guid); + } + } + + public class WarbandGroup + { + public ulong GroupID; + public byte Unknown_1100; + public int Flags; ///< enum WarbandGroupFlags { Collapsed = 1 } + public List Members = new(); + + public void Write(WorldPacket data) + { + data.WriteUInt64(GroupID); + data.WriteUInt8(Unknown_1100); + data.WriteInt32(Flags); + data.WriteInt32(Members.Count); + + foreach (WarbandGroupMember member in Members) + member.Write(data); + } + } } diff --git a/Source/Game/Networking/Packets/CombatLogPackets.cs b/Source/Game/Networking/Packets/CombatLogPackets.cs index 0a8aaa963..07b2d9bf4 100644 --- a/Source/Game/Networking/Packets/CombatLogPackets.cs +++ b/Source/Game/Networking/Packets/CombatLogPackets.cs @@ -152,7 +152,7 @@ namespace Game.Networking.Packets { _worldPacket.WritePackedGuid(powerDrainTarget.Victim); _worldPacket.WriteUInt32(powerDrainTarget.Points); - _worldPacket.WriteUInt32(powerDrainTarget.PowerType); + _worldPacket.WriteInt8((sbyte)powerDrainTarget.PowerType); _worldPacket.WriteFloat(powerDrainTarget.Amplitude); } @@ -663,7 +663,7 @@ namespace Game.Networking.Packets { public ObjectGuid Victim; public uint Points; - public uint PowerType; + public PowerType PowerType; public float Amplitude; } diff --git a/Source/Game/Networking/Packets/CombatPackets.cs b/Source/Game/Networking/Packets/CombatPackets.cs index 6b1bf330f..436392cba 100644 --- a/Source/Game/Networking/Packets/CombatPackets.cs +++ b/Source/Game/Networking/Packets/CombatPackets.cs @@ -169,8 +169,8 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(Powers.Count); foreach (var power in Powers) { - _worldPacket.WriteInt32(power.Power); _worldPacket.WriteUInt8(power.PowerType); + _worldPacket.WriteInt32(power.Power); } } @@ -180,16 +180,16 @@ namespace Game.Networking.Packets class InterruptPowerRegen : ServerPacket { - public int PowerType; + public sbyte PowerType; public InterruptPowerRegen(PowerType powerType) : base(ServerOpcodes.InterruptPowerRegen, ConnectionType.Instance) { - PowerType = (int)powerType; + PowerType = (sbyte)powerType; } public override void Write() { - _worldPacket.WriteInt32(PowerType); + _worldPacket.WriteInt8(PowerType); } } diff --git a/Source/Game/Networking/Packets/CraftingPackets.cs b/Source/Game/Networking/Packets/CraftingPackets.cs index 93fb39b4f..eaf467a2b 100644 --- a/Source/Game/Networking/Packets/CraftingPackets.cs +++ b/Source/Game/Networking/Packets/CraftingPackets.cs @@ -41,6 +41,11 @@ namespace Game.Networking.Packets public ItemInstance OldItem = new(); public ItemInstance NewItem = new(); public int EnchantID; + public int ConcentrationCurrencyID; + public int ConcentrationSpent; + public int IngenuityRefund; + public bool HasIngenuityProc; + public bool ApplyConcentration; public void Write(WorldPacket data) { @@ -59,6 +64,9 @@ namespace Game.Networking.Packets data.WritePackedGuid(ItemGUID); data.WriteInt32(Quantity); data.WriteInt32(EnchantID); + data.WriteInt32(ConcentrationCurrencyID); + data.WriteInt32(ConcentrationSpent); + data.WriteInt32(IngenuityRefund); foreach (SpellReducedReagent spellReducedReagent in ResourcesReturned) spellReducedReagent.Write(data); @@ -67,6 +75,8 @@ namespace Game.Networking.Packets data.WriteBit(field_29); data.WriteBit(field_2A); data.WriteBit(BonusCraft); + data.WriteBit(HasIngenuityProc); + data.WriteBit(ApplyConcentration); data.FlushBits(); OldItem.Write(data); diff --git a/Source/Game/Networking/Packets/EquipmentPackets.cs b/Source/Game/Networking/Packets/EquipmentPackets.cs index 078e170b4..b0f0b6c05 100644 --- a/Source/Game/Networking/Packets/EquipmentPackets.cs +++ b/Source/Game/Networking/Packets/EquipmentPackets.cs @@ -14,9 +14,9 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteUInt64(GUID); _worldPacket.WriteInt32(Type); _worldPacket.WriteUInt32(SetID); + _worldPacket.WriteUInt64(GUID); } public ulong GUID; // Set Identifier @@ -159,11 +159,11 @@ namespace Game.Networking.Packets public override void Write() { + _worldPacket.WriteInt32(Reason); _worldPacket.WriteUInt64(GUID); - _worldPacket.WriteUInt8(Reason); } public ulong GUID; //Set Identifier - public byte Reason; + public int Reason; } } diff --git a/Source/Game/Networking/Packets/GarrisonPackets.cs b/Source/Game/Networking/Packets/GarrisonPackets.cs index fe8c054ab..01fc9e09c 100644 --- a/Source/Game/Networking/Packets/GarrisonPackets.cs +++ b/Source/Game/Networking/Packets/GarrisonPackets.cs @@ -35,7 +35,7 @@ namespace Game.Networking.Packets } public GarrisonError Result; - public uint GarrSiteID; + public uint GarrSiteID; } class GetGarrisonInfo : ClientPacket @@ -103,7 +103,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); _worldPacket.WriteUInt32((uint)Result); BuildingInfo.Write(_worldPacket); _worldPacket.WriteBit(PlayActivationCinematic); @@ -136,7 +136,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); _worldPacket.WriteUInt32((uint)Result); _worldPacket.WriteUInt32(GarrPlotInstanceID); _worldPacket.WriteUInt32(GarrBuildingID); @@ -154,7 +154,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); _worldPacket.WriteUInt32((uint)Result); _worldPacket.WriteUInt32(BuildingID); } @@ -170,14 +170,14 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); _worldPacket.WriteUInt32((uint)Result); _worldPacket.WriteUInt32(BuildingID); } public GarrisonType GarrTypeID; - public uint BuildingID; public GarrisonError Result; + public uint BuildingID; } class GarrisonRequestBlueprintAndSpecializationData : ClientPacket @@ -193,7 +193,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteUInt32((uint)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); _worldPacket.WriteInt32(BlueprintsKnown != null ? BlueprintsKnown.Count : 0); _worldPacket.WriteInt32(SpecializationsKnown != null ? SpecializationsKnown.Count : 0); if (BlueprintsKnown != null) @@ -206,8 +206,8 @@ namespace Game.Networking.Packets } public GarrisonType GarrTypeID; - public List SpecializationsKnown = null; public List BlueprintsKnown = null; + public List SpecializationsKnown = null; } class GarrisonGetMapData : ClientPacket @@ -237,7 +237,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); + _worldPacket.WriteUInt8((byte)GarrTypeID); PlotInfo.Write(_worldPacket); } @@ -263,8 +263,8 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32((int)GarrTypeID); - _worldPacket .WriteUInt32((uint)Result); + _worldPacket.WriteUInt8((byte)GarrTypeID); + _worldPacket.WriteUInt32((uint)Result); Follower.Write(_worldPacket); } @@ -279,15 +279,15 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteUInt64(FollowerDBID); - _worldPacket.WriteInt32(GarrTypeID); + _worldPacket.WriteUInt8(GarrTypeID); _worldPacket.WriteUInt32(Result); + _worldPacket.WriteUInt64(FollowerDBID); _worldPacket.WriteUInt32(Destroyed); } - public ulong FollowerDBID; - public int GarrTypeID; + public byte GarrTypeID; public uint Result; + public ulong FollowerDBID; public uint Destroyed; } @@ -302,7 +302,7 @@ namespace Game.Networking.Packets public uint GarrPlotInstanceID; } - + //Structs public struct GarrisonPlotInfo { @@ -310,12 +310,12 @@ namespace Game.Networking.Packets { data.WriteUInt32(GarrPlotInstanceID); data.WriteXYZO(PlotPos); - data.WriteUInt32(PlotType); + data.WriteUInt8(PlotType); } public uint GarrPlotInstanceID; public Position PlotPos; - public uint PlotType; + public byte PlotType; } public class GarrisonBuildingInfo @@ -600,7 +600,7 @@ namespace Game.Networking.Packets { public void Write(WorldPacket data) { - data.WriteUInt32((uint)GarrTypeID); + data.WriteUInt8((byte)GarrTypeID); data.WriteUInt32(GarrSiteID); data.WriteUInt32(GarrSiteLevelID); data.WriteInt32(Buildings.Count); @@ -700,11 +700,11 @@ namespace Game.Networking.Packets { public void Write(WorldPacket data) { - data.WriteInt32(GarrFollowerTypeID); + data.WriteUInt8(GarrFollowerTypeID); data.WriteUInt32(Count); } - public int GarrFollowerTypeID; + public byte GarrFollowerTypeID; public uint Count; } diff --git a/Source/Game/Networking/Packets/GuildPackets.cs b/Source/Game/Networking/Packets/GuildPackets.cs index 25ada44df..fb936e70a 100644 --- a/Source/Game/Networking/Packets/GuildPackets.cs +++ b/Source/Game/Networking/Packets/GuildPackets.cs @@ -183,9 +183,14 @@ namespace Game.Networking.Packets public class AcceptGuildInvite : ClientPacket { + public ObjectGuid GuildGuid; + public AcceptGuildInvite(WorldPacket packet) : base(packet) { } - public override void Read() { } + public override void Read() + { + GuildGuid = _worldPacket.ReadPackedGuid(); + } } public class GuildDeclineInvitation : ClientPacket @@ -297,7 +302,6 @@ namespace Game.Networking.Packets _worldPacket.WriteBits(Name.GetByteCount(), 6); _worldPacket.WriteBit(LoggedOn); - _worldPacket.WriteBit(Mobile); _worldPacket.WriteString(Name); } @@ -305,7 +309,6 @@ namespace Game.Networking.Packets public ObjectGuid Guid; public uint VirtualRealmAddress; public string Name; - public bool Mobile; public bool LoggedOn; } diff --git a/Source/Game/Networking/Packets/InstancePackets.cs b/Source/Game/Networking/Packets/InstancePackets.cs index 7c42209e4..7fc2a6624 100644 --- a/Source/Game/Networking/Packets/InstancePackets.cs +++ b/Source/Game/Networking/Packets/InstancePackets.cs @@ -139,9 +139,11 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteUInt8((byte)Type); + _worldPacket.WriteInt32((int)Type); _worldPacket.WriteUInt32(MapID); _worldPacket.WriteUInt32((uint)DifficultyID); + _worldPacket.WriteInt32(TimeLeft); + _worldPacket.WriteBits(WarningMessage, 8); _worldPacket.WriteBit(Locked); _worldPacket.WriteBit(Extended); _worldPacket.FlushBits(); @@ -150,6 +152,8 @@ namespace Game.Networking.Packets public InstanceResetWarningType Type; public uint MapID; public Difficulty DifficultyID; + public int TimeLeft; + public string WarningMessage; // GlobalStrings tag public bool Locked; public bool Extended; } diff --git a/Source/Game/Networking/Packets/ItemPackets.cs b/Source/Game/Networking/Packets/ItemPackets.cs index 2984541d8..79f27363d 100644 --- a/Source/Game/Networking/Packets/ItemPackets.cs +++ b/Source/Game/Networking/Packets/ItemPackets.cs @@ -411,10 +411,11 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(QuestLogItemID); _worldPacket.WriteUInt32(Quantity); _worldPacket.WriteUInt32(QuantityInInventory); + _worldPacket.WriteInt32(QuantityInQuestLog); _worldPacket.WriteInt32(DungeonEncounterID); _worldPacket.WriteInt32(BattlePetSpeciesID); _worldPacket.WriteInt32(BattlePetBreedID); - _worldPacket.WriteUInt32(BattlePetBreedQuality); + _worldPacket.WriteUInt8(BattlePetBreedQuality); _worldPacket.WriteInt32(BattlePetLevel); _worldPacket.WritePackedGuid(ItemGUID); _worldPacket.WriteInt32(Toasts.Count); @@ -448,10 +449,11 @@ namespace Game.Networking.Packets // only set if different than real ID (similar to CreatureTemplate.KillCredit) public uint Quantity; public uint QuantityInInventory; + public int QuantityInQuestLog; public int DungeonEncounterID; public int BattlePetSpeciesID; public int BattlePetBreedID; - public uint BattlePetBreedQuality; + public byte BattlePetBreedQuality; public int BattlePetLevel; public ObjectGuid ItemGUID; public List Toasts = new(); @@ -634,6 +636,13 @@ namespace Game.Networking.Packets public ObjectGuid Item; } + class SortAccountBankBags : ClientPacket + { + public SortAccountBankBags(WorldPacket packet) : base(packet) { } + + public override void Read() { } + } + class SortBags : ClientPacket { public SortBags(WorldPacket packet) : base(packet) { } @@ -683,7 +692,7 @@ namespace Game.Networking.Packets class ChangeBagSlotFlag : ClientPacket { - public int BagIndex; + public byte BagIndex; public BagSlotFlags FlagToChange; public bool On; @@ -691,7 +700,7 @@ namespace Game.Networking.Packets public override void Read() { - BagIndex = _worldPacket.ReadInt32(); + BagIndex = _worldPacket.ReadUInt8(); FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32(); On = _worldPacket.HasBit(); } @@ -699,7 +708,7 @@ namespace Game.Networking.Packets class ChangeBankBagSlotFlag : ClientPacket { - public int BagIndex; + public byte BagIndex; public BagSlotFlags FlagToChange; public bool On; @@ -707,7 +716,7 @@ namespace Game.Networking.Packets public override void Read() { - BagIndex = _worldPacket.ReadInt32(); + BagIndex = _worldPacket.ReadUInt8(); FlagToChange = (BagSlotFlags)_worldPacket.ReadUInt32(); On = _worldPacket.HasBit(); } @@ -870,14 +879,14 @@ namespace Game.Networking.Packets public void Read(WorldPacket data) { - Value = data.ReadUInt32(); Type = (ItemModifier)data.ReadUInt8(); + Value = data.ReadUInt32(); } public void Write(WorldPacket data) - { - data.WriteUInt32(Value); + { data.WriteUInt8((byte)Type); + data.WriteUInt32(Value); } public override int GetHashCode() diff --git a/Source/Game/Networking/Packets/MovementPackets.cs b/Source/Game/Networking/Packets/MovementPackets.cs index 383f16aac..28601f5f9 100644 --- a/Source/Game/Networking/Packets/MovementPackets.cs +++ b/Source/Game/Networking/Packets/MovementPackets.cs @@ -621,12 +621,14 @@ namespace Game.Networking.Packets Loc.Write(_worldPacket); _worldPacket.WriteUInt32(Reason); _worldPacket.WriteXYZ(MovementOffset); + _worldPacket.WriteInt32(Counter); } public uint MapID; public uint Reason; public TeleportLocation Loc = new(); public Position MovementOffset; // Adjusts all pending movement events by this offset + public int Counter; } public class WorldPortResponse : ClientPacket diff --git a/Source/Game/Networking/Packets/NPCPackets.cs b/Source/Game/Networking/Packets/NPCPackets.cs index 134e963ce..796fbdfea 100644 --- a/Source/Game/Networking/Packets/NPCPackets.cs +++ b/Source/Game/Networking/Packets/NPCPackets.cs @@ -54,6 +54,7 @@ namespace Game.Networking.Packets { _worldPacket.WritePackedGuid(GossipGUID); _worldPacket.WriteUInt32(GossipID); + _worldPacket.WriteUInt32(LfgDungeonsID); _worldPacket.WriteInt32(FriendshipFactionID); _worldPacket.WriteInt32(GossipOptions.Count); _worldPacket.WriteInt32(GossipText.Count); @@ -81,6 +82,7 @@ namespace Game.Networking.Packets public int? TextID; // in classic variants this still holds npc_text id public int? BroadcastTextID; public uint GossipID; + public uint LfgDungeonsID; } public class GossipSelectOption : ClientPacket @@ -346,6 +348,7 @@ namespace Game.Networking.Packets public TreasureLootList Treasure = new(); public int? SpellID; public int? OverrideIconID; + public string FailureDescription; public void Write(WorldPacket data) { @@ -361,6 +364,7 @@ namespace Game.Networking.Packets data.WriteBits((byte)Status, 2); data.WriteBit(SpellID.HasValue); data.WriteBit(OverrideIconID.HasValue); + data.WriteBits(FailureDescription.GetByteCount() + 1, 8); data.FlushBits(); Treasure.Write(data); @@ -373,6 +377,9 @@ namespace Game.Networking.Packets if (OverrideIconID.HasValue) data.WriteInt32(OverrideIconID.Value); + + if (!FailureDescription.IsEmpty()) + data.WriteCString(FailureDescription); } } @@ -382,10 +389,13 @@ namespace Game.Networking.Packets public uint ContentTuningID; public int QuestType; public bool Repeatable; + public bool ResetByScheduler; public bool Important; + public bool Meta; public string QuestTitle; public uint QuestFlags; public uint QuestFlagsEx; + public uint QuestFlagsEx2; public void Write(WorldPacket data) { @@ -394,9 +404,12 @@ namespace Game.Networking.Packets data.WriteInt32(QuestType); data.WriteUInt32(QuestFlags); data.WriteUInt32(QuestFlagsEx); + data.WriteUInt32(QuestFlagsEx2); data.WriteBit(Repeatable); + data.WriteBit(ResetByScheduler); data.WriteBit(Important); + data.WriteBit(Meta); data.WriteBits(QuestTitle.GetByteCount(), 9); data.FlushBits(); diff --git a/Source/Game/Networking/Packets/PartyPackets.cs b/Source/Game/Networking/Packets/PartyPackets.cs index 8489c2f20..a7376c34b 100644 --- a/Source/Game/Networking/Packets/PartyPackets.cs +++ b/Source/Game/Networking/Packets/PartyPackets.cs @@ -769,6 +769,7 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(SequenceNum); _worldPacket.WritePackedGuid(LeaderGUID); _worldPacket.WriteUInt8(LeaderFactionGroup); + _worldPacket.WriteInt32((int)PingRestriction); _worldPacket.WriteInt32(PlayerList.Count); _worldPacket.WriteBit(LfgInfos.HasValue); _worldPacket.WriteBit(LootSettings.HasValue); @@ -799,6 +800,8 @@ namespace Game.Networking.Packets public int MyIndex; public int SequenceNum; + public RestrictPingsTo PingRestriction; + public List PlayerList = new(); public PartyLFGInfo? LfgInfos; @@ -939,14 +942,14 @@ namespace Game.Networking.Packets class SetRestrictPingsToAssistants : ClientPacket { public byte? PartyIndex; - public bool RestrictPingsToAssistants; + public RestrictPingsTo RestrictTo; public SetRestrictPingsToAssistants(WorldPacket packet) : base(packet) { } public override void Read() { bool hasPartyIndex = _worldPacket.HasBit(); - RestrictPingsToAssistants = _worldPacket.HasBit(); + RestrictTo = (RestrictPingsTo)_worldPacket.ReadInt32(); if (hasPartyIndex) PartyIndex = _worldPacket.ReadUInt8(); } @@ -995,6 +998,7 @@ namespace Game.Networking.Packets public Vector3 Point; public PingSubjectType Type = PingSubjectType.Max; public uint PinFrameID; + public ObjectGuid Transport; public SendPingWorldPoint(WorldPacket packet) : base(packet) { } @@ -1003,8 +1007,9 @@ namespace Game.Networking.Packets SenderGUID = _worldPacket.ReadPackedGuid(); MapID = _worldPacket.ReadUInt32(); Point = _worldPacket.ReadVector3(); - Type = (PingSubjectType)_worldPacket.ReadUInt8(); + Type = (PingSubjectType)_worldPacket.ReadUInt32(); PinFrameID = _worldPacket.ReadUInt32(); + Transport = _worldPacket.ReadPackedGuid(); } } @@ -1015,6 +1020,7 @@ namespace Game.Networking.Packets public Vector3 Point; public PingSubjectType Type = PingSubjectType.Max; public uint PinFrameID; + public ObjectGuid Transport; public ReceivePingWorldPoint() : base(ServerOpcodes.ReceivePingWorldPoint) { } @@ -1025,6 +1031,7 @@ namespace Game.Networking.Packets _worldPacket.WriteVector3(Point); _worldPacket.WriteUInt8((byte)Type); _worldPacket.WriteUInt32(PinFrameID); + _worldPacket.WritePackedGuid(Transport); } } diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs index a2dc87a9f..597015e40 100644 --- a/Source/Game/Networking/Packets/QueryPackets.cs +++ b/Source/Game/Networking/Packets/QueryPackets.cs @@ -319,9 +319,9 @@ namespace Game.Networking.Packets _worldPacket.WritePackedGuid(Player); _worldPacket.WriteInt32(ActualMapID); - _worldPacket.WriteVector3(Position); _worldPacket.WriteInt32(MapID); _worldPacket.WritePackedGuid(Transport); + _worldPacket.WriteVector3(Position); } public ObjectGuid Player; diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs index 8a0499308..6c887fb56 100644 --- a/Source/Game/Networking/Packets/QuestPackets.cs +++ b/Source/Game/Networking/Packets/QuestPackets.cs @@ -195,7 +195,7 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(Info.Objectives.Count); _worldPacket.WriteUInt64(Info.AllowableRaces.RawValue); - _worldPacket.WriteInt32(Info.TreasurePickerID); + _worldPacket.WriteInt32(Info.TreasurePickerID.Count); _worldPacket.WriteInt32(Info.Expansion); _worldPacket.WriteInt32(Info.ManagedWorldStateID); _worldPacket.WriteInt32(Info.QuestSessionBonus); @@ -207,6 +207,10 @@ namespace Game.Networking.Packets foreach (QuestCompleteDisplaySpell rewardDisplaySpell in Info.RewardDisplaySpell) rewardDisplaySpell.Write(_worldPacket); + if (!Info.TreasurePickerID.Empty()) + foreach (var id in Info.TreasurePickerID) + _worldPacket.WriteInt32(id); + _worldPacket.WriteBits(Info.LogTitle.GetByteCount(), 9); _worldPacket.WriteBits(Info.LogDescription.GetByteCount(), 12); _worldPacket.WriteBits(Info.QuestDescription.GetByteCount(), 12); @@ -217,12 +221,13 @@ namespace Game.Networking.Packets _worldPacket.WriteBits(Info.PortraitTurnInName.GetByteCount(), 8); _worldPacket.WriteBits(Info.QuestCompletionLog.GetByteCount(), 11); _worldPacket.WriteBit(Info.ReadyForTranslation); + _worldPacket.WriteBit(Info.ResetByScheduler); _worldPacket.FlushBits(); foreach (QuestObjective questObjective in Info.Objectives) { _worldPacket.WriteUInt32(questObjective.Id); - _worldPacket.WriteUInt8((byte)questObjective.Type); + _worldPacket.WriteInt32((int)questObjective.Type); _worldPacket.WriteInt8(questObjective.StorageIndex); _worldPacket.WriteInt32(questObjective.ObjectID); _worldPacket.WriteInt32(questObjective.Amount); @@ -463,6 +468,7 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(DescEmotes.Count); _worldPacket.WriteInt32(Objectives.Count); _worldPacket.WriteInt32(QuestStartItemID); + _worldPacket.WriteInt32(QuestInfoID); _worldPacket.WriteInt32(QuestSessionBonus); _worldPacket.WriteInt32(QuestGiverCreatureID); _worldPacket.WriteInt32(ConditionalDescriptionText.Count); @@ -479,9 +485,9 @@ namespace Game.Networking.Packets foreach (QuestObjectiveSimple obj in Objectives) { _worldPacket.WriteUInt32(obj.Id); + _worldPacket.WriteUInt8(obj.Type); _worldPacket.WriteInt32(obj.ObjectID); _worldPacket.WriteInt32(obj.Amount); - _worldPacket.WriteUInt8(obj.Type); } _worldPacket.WriteBits(QuestTitle.GetByteCount(), 9); @@ -527,6 +533,7 @@ namespace Game.Networking.Packets public uint PortraitGiverMount; public int PortraitGiverModelSceneID; public int QuestStartItemID; + public int QuestInfoID; public int QuestSessionBonus; public int QuestGiverCreatureID; public string PortraitGiverText = ""; @@ -562,6 +569,7 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(Collect.Count); _worldPacket.WriteInt32(Currency.Count); _worldPacket.WriteInt32(StatusFlags); + _worldPacket.WriteInt32(QuestInfoID); foreach (QuestObjectiveCollect obj in Collect) { @@ -603,6 +611,7 @@ namespace Game.Networking.Packets public List Collect = new(); public List Currency = new(); public int StatusFlags; + public int QuestInfoID; public uint[] QuestFlags = new uint[3]; public string QuestTitle = ""; public string CompletionText = ""; @@ -1078,7 +1087,7 @@ namespace Game.Networking.Packets public uint CompleteSoundKitID; public uint AreaGroupID; public long TimeAllowed; - public int TreasurePickerID; + public List TreasurePickerID = new(); public int Expansion; public int ManagedWorldStateID; public int QuestSessionBonus; @@ -1098,6 +1107,24 @@ namespace Game.Networking.Packets public uint[] RewardCurrencyID = new uint[SharedConst.QuestRewardCurrencyCount]; public uint[] RewardCurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount]; public bool ReadyForTranslation; + public bool ResetByScheduler; + } + + public struct QuestRewardItem + { + public uint ItemID; + public uint ItemQty; + public QuestRewardContextFlags? ContextFlags; + + public void Write(WorldPacket data) + { + data.WriteUInt32(ItemID); + data.WriteUInt32(ItemQty); + data.WriteBit(ContextFlags.HasValue); + data.FlushBits(); + if (ContextFlags.HasValue) + data.WriteInt32((int)ContextFlags); + } } public struct QuestChoiceItem @@ -1105,21 +1132,47 @@ namespace Game.Networking.Packets public LootItemType LootItemType; public ItemInstance Item; public uint Quantity; + public QuestRewardContextFlags? ContextFlags; public void Read(WorldPacket data) { data.ResetBitPos(); LootItemType = (LootItemType)data.ReadBits(2); + bool hasContextFlags = data.HasBit(); Item = new ItemInstance(); Item.Read(data); Quantity = data.ReadUInt32(); + if (hasContextFlags) + ContextFlags = (QuestRewardContextFlags)data.ReadInt32(); } public void Write(WorldPacket data) { data.WriteBits((byte)LootItemType, 2); + data.WriteBit(ContextFlags.HasValue); Item.Write(data); data.WriteUInt32(Quantity); + if (ContextFlags.HasValue) + data.WriteInt32((int)ContextFlags.Value); + } + } + + public struct QuestRewardCurrency + { + public uint CurrencyID; + public uint CurrencyQty; + public int BonusQty; + public QuestRewardContextFlags? ContextFlags; + + public void Write(WorldPacket data) + { + data.WriteUInt32(CurrencyID); + data.WriteUInt32(CurrencyQty); + data.WriteInt32(BonusQty); + data.WriteBit(ContextFlags.HasValue); + data.FlushBits(); + if (ContextFlags.HasValue) + data.WriteInt32((int)ContextFlags); } } @@ -1138,29 +1191,23 @@ namespace Game.Networking.Packets public uint SpellCompletionID; public uint SkillLineID; public uint NumSkillUps; - public uint TreasurePickerID; + public List TreasurePickerID = new(); public QuestChoiceItem[] ChoiceItems = new QuestChoiceItem[SharedConst.QuestRewardChoicesCount]; - public uint[] ItemID = new uint[SharedConst.QuestRewardItemCount]; - public uint[] ItemQty = new uint[SharedConst.QuestRewardItemCount]; + public QuestRewardItem[] Items = new QuestRewardItem[SharedConst.QuestRewardItemCount]; public uint[] FactionID = new uint[SharedConst.QuestRewardReputationsCount]; public int[] FactionValue = new int[SharedConst.QuestRewardReputationsCount]; public int[] FactionOverride = new int[SharedConst.QuestRewardReputationsCount]; public int[] FactionCapIn = new int[SharedConst.QuestRewardReputationsCount]; - public uint[] CurrencyID = new uint[SharedConst.QuestRewardCurrencyCount]; - public uint[] CurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount]; + public QuestRewardCurrency[] Currencies = new QuestRewardCurrency[SharedConst.QuestRewardCurrencyCount]; public bool IsBoostSpell; public void Write(WorldPacket data) { + foreach (QuestRewardItem item in Items) + item.Write(data); + data.WriteUInt32(ChoiceItemCount); data.WriteUInt32(ItemCount); - - for (int i = 0; i < SharedConst.QuestRewardItemCount; ++i) - { - data.WriteUInt32(ItemID[i]); - data.WriteUInt32(ItemQty[i]); - } - data.WriteUInt32(Money); data.WriteUInt32(XP); data.WriteUInt64(ArtifactXP); @@ -1181,22 +1228,21 @@ namespace Game.Networking.Packets data.WriteInt32(id); data.WriteUInt32(SpellCompletionID); - - for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i) - { - data.WriteUInt32(CurrencyID[i]); - data.WriteUInt32(CurrencyQty[i]); - } - data.WriteUInt32(SkillLineID); data.WriteUInt32(NumSkillUps); - data.WriteUInt32(TreasurePickerID); + data.WriteInt32(TreasurePickerID.Count); + if (!TreasurePickerID.Empty()) + foreach (var id in TreasurePickerID) + data.WriteInt32(id); - foreach (var choice in ChoiceItems) - choice.Write(data); + foreach (QuestRewardCurrency currency in Currencies) + currency.Write(data); data.WriteBit(IsBoostSpell); data.FlushBits(); + + foreach (QuestChoiceItem choiceItem in ChoiceItems) + choiceItem.Write(data); } } @@ -1223,8 +1269,9 @@ namespace Game.Networking.Packets data.WriteUInt32(QuestFlags[1]); // FlagsEx data.WriteUInt32(QuestFlags[2]); // FlagsEx2 data.WriteUInt32(SuggestedPartyMembers); - + data.WriteInt32(QuestInfoID); data.WriteInt32(Emotes.Count); + foreach (QuestDescEmote emote in Emotes) { data.WriteInt32(emote.Type); @@ -1246,14 +1293,15 @@ namespace Game.Networking.Packets public QuestRewards Rewards = new(); public List Emotes = new(); public uint[] QuestFlags = new uint[3]; // Flags and FlagsEx + public int QuestInfoID; } public struct QuestObjectiveSimple { public uint Id; + public byte Type; public int ObjectID; public int Amount; - public byte Type; } public struct QuestObjectiveCollect diff --git a/Source/Game/Networking/Packets/ReputationPackets.cs b/Source/Game/Networking/Packets/ReputationPackets.cs index bc66f163e..be19d63f7 100644 --- a/Source/Game/Networking/Packets/ReputationPackets.cs +++ b/Source/Game/Networking/Packets/ReputationPackets.cs @@ -8,27 +8,22 @@ namespace Game.Networking.Packets { public class InitializeFactions : ServerPacket { - const ushort FactionCount = 1000; - public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { } public override void Write() { - for (ushort i = 0; i < FactionCount; ++i) - { - _worldPacket.WriteUInt16((ushort)((ushort)FactionFlags[i] & 0xFF)); - _worldPacket.WriteInt32(FactionStandings[i]); - } + _worldPacket.WriteInt32(Factions.Count); + _worldPacket.WriteInt32(Bonuses.Count); - for (ushort i = 0; i < FactionCount; ++i) - _worldPacket.WriteBit(FactionHasBonus[i]); + foreach (FactionData faction in Factions) + faction.Write(_worldPacket); - _worldPacket.FlushBits(); + foreach (FactionBonusData bonus in Bonuses) + bonus.Write(_worldPacket); } - public int[] FactionStandings = new int[FactionCount]; - public bool[] FactionHasBonus = new bool[FactionCount]; //@todo: implement faction bonus - public ReputationFlags[] FactionFlags = new ReputationFlags[FactionCount]; + public List Factions = new(); + public List Bonuses = new(); } class RequestForcedReactions : ClientPacket @@ -73,6 +68,33 @@ namespace Game.Networking.Packets public bool ShowVisual; } + public struct FactionData + { + public uint FactionID; + public ushort Flags; + public int Standing; + + public void Write(WorldPacket data) + { + data.WriteUInt32(FactionID); + data.WriteUInt16(Flags); + data.WriteInt32(Standing); + } + } + + public struct FactionBonusData + { + public uint FactionID; + public bool FactionHasBonus; + + public void Write(WorldPacket data) + { + data.WriteUInt32(FactionID); + data.WriteBit(FactionHasBonus); + data.FlushBits(); + } + } + struct ForcedReaction { public void Write(WorldPacket data) diff --git a/Source/Game/Networking/Packets/ScenePackets.cs b/Source/Game/Networking/Packets/ScenePackets.cs index 559535159..61231d13e 100644 --- a/Source/Game/Networking/Packets/ScenePackets.cs +++ b/Source/Game/Networking/Packets/ScenePackets.cs @@ -18,6 +18,7 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt32(SceneScriptPackageID); _worldPacket.WritePackedGuid(TransportGUID); _worldPacket.WriteXYZO(Location); + _worldPacket.WriteInt32(MovieID); _worldPacket.WriteBit(Encrypted); _worldPacket.FlushBits(); } @@ -26,6 +27,7 @@ namespace Game.Networking.Packets public uint PlaybackFlags; public uint SceneInstanceID; public uint SceneScriptPackageID; + public int MovieID; public ObjectGuid TransportGUID; public Position Location; public bool Encrypted; diff --git a/Source/Game/Networking/Packets/SocialPackets.cs b/Source/Game/Networking/Packets/SocialPackets.cs index 2d3d15127..5f661af9a 100644 --- a/Source/Game/Networking/Packets/SocialPackets.cs +++ b/Source/Game/Networking/Packets/SocialPackets.cs @@ -69,7 +69,6 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt32(Level); _worldPacket.WriteUInt32((uint)ClassID); _worldPacket.WriteBits(Notes.GetByteCount(), 10); - _worldPacket.WriteBit(Mobile); _worldPacket.FlushBits(); _worldPacket.WriteString(Notes); } @@ -83,7 +82,6 @@ namespace Game.Networking.Packets public uint Level; public uint AreaID; public FriendsResult FriendResult; - public bool Mobile; } public class AddFriend : ClientPacket @@ -204,7 +202,6 @@ namespace Game.Networking.Packets data.WriteUInt32(Level); data.WriteUInt32((uint)ClassID); data.WriteBits(Notes.GetByteCount(), 10); - data.WriteBit(Mobile); data.FlushBits(); data.WriteString(Notes); } @@ -219,7 +216,6 @@ namespace Game.Networking.Packets uint AreaID; uint Level; Class ClassID; - bool Mobile; } public struct QualifiedGUID diff --git a/Source/Game/Networking/Packets/SpellPackets.cs b/Source/Game/Networking/Packets/SpellPackets.cs index 2314649af..7fb395ea4 100644 --- a/Source/Game/Networking/Packets/SpellPackets.cs +++ b/Source/Game/Networking/Packets/SpellPackets.cs @@ -668,6 +668,7 @@ namespace Game.Networking.Packets _worldPacket.WriteVector3(SourceRotation); _worldPacket.WriteVector3(TargetLocation); _worldPacket.WritePackedGuid(Target); + _worldPacket.WritePackedGuid(TargetTransport); _worldPacket.WriteUInt32(SpellVisualID); _worldPacket.WriteFloat(TravelSpeed); _worldPacket.WriteFloat(LaunchDelay); @@ -677,6 +678,7 @@ namespace Game.Networking.Packets } public ObjectGuid Target; // Exclusive with TargetLocation + public ObjectGuid TargetTransport; public Position SourceLocation; public uint SpellVisualID; public bool SpeedAsTime; @@ -1294,14 +1296,14 @@ namespace Game.Networking.Packets //Structs public struct SpellLogPowerData { - public SpellLogPowerData(int powerType, int amount, int cost) + public SpellLogPowerData(sbyte powerType, int amount, int cost) { PowerType = powerType; Amount = amount; Cost = cost; } - public int PowerType; + public sbyte PowerType; public int Amount; public int Cost; } @@ -1314,7 +1316,7 @@ namespace Game.Networking.Packets AttackPower = (int)unit.GetTotalAttackPowerValue(unit.GetClass() == Class.Hunter ? WeaponAttackType.RangedAttack : WeaponAttackType.BaseAttack); SpellPower = unit.SpellBaseDamageBonusDone(SpellSchoolMask.Spell); Armor = unit.GetArmor(); - PowerData.Add(new SpellLogPowerData((int)unit.GetPowerType(), unit.GetPower(unit.GetPowerType()), 0)); + PowerData.Add(new SpellLogPowerData((sbyte)unit.GetPowerType(), unit.GetPower(unit.GetPowerType()), 0)); } public void Initialize(Spell spell) @@ -1330,13 +1332,13 @@ namespace Game.Networking.Packets bool primaryPowerAdded = false; foreach (SpellPowerCost cost in spell.GetPowerCost()) { - PowerData.Add(new SpellLogPowerData((int)cost.Power, unitCaster.GetPower(cost.Power), (int)cost.Amount)); + PowerData.Add(new SpellLogPowerData((sbyte)cost.Power, unitCaster.GetPower(cost.Power), (int)cost.Amount)); if (cost.Power == primaryPowerType) primaryPowerAdded = true; } if (!primaryPowerAdded) - PowerData.Insert(0, new SpellLogPowerData((int)primaryPowerType, unitCaster.GetPower(primaryPowerType), 0)); + PowerData.Insert(0, new SpellLogPowerData((sbyte)primaryPowerType, unitCaster.GetPower(primaryPowerType), 0)); } } @@ -1351,7 +1353,7 @@ namespace Game.Networking.Packets foreach (SpellLogPowerData powerData in PowerData) { - data.WriteInt32(powerData.PowerType); + data.WriteInt8(powerData.PowerType); data.WriteInt32(powerData.Amount); data.WriteInt32(powerData.Cost); } @@ -1812,6 +1814,7 @@ namespace Game.Networking.Packets public Array RemovedModifications = new(6); public Array OptionalCurrencies = new(5 /*MAX_ITEM_EXT_COST_CURRENCIES*/); public ulong? CraftingOrderID; + public byte CraftingFlags; // 1 = ApplyConcentration public ObjectGuid CraftingNPC; public uint[] Misc = new uint[2]; @@ -1830,6 +1833,7 @@ namespace Game.Networking.Packets var optionalCurrenciesCount = data.ReadUInt32(); var optionalReagentsCount = data.ReadUInt32(); var removedModificationsCount = data.ReadUInt32(); + CraftingFlags = data.ReadUInt8(); for (var i = 0; i < optionalCurrenciesCount; ++i) OptionalCurrencies[i].Read(data); @@ -1906,8 +1910,8 @@ namespace Game.Networking.Packets public void Write(WorldPacket data) { - data.WriteInt32(Cost); data.WriteInt8((sbyte)Type); + data.WriteInt32(Cost); } } diff --git a/Source/Game/Networking/Packets/SystemPackets.cs b/Source/Game/Networking/Packets/SystemPackets.cs index 3f1d14e42..9ee94ce6c 100644 --- a/Source/Game/Networking/Packets/SystemPackets.cs +++ b/Source/Game/Networking/Packets/SystemPackets.cs @@ -35,6 +35,8 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(ActiveSeason); _worldPacket.WriteInt32(GameRuleValues.Count); + _worldPacket.WriteInt32(ActiveTimerunningSeasonID); + _worldPacket.WriteInt32(RemainingTimerunningSeasonSeconds); _worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); _worldPacket.WriteInt16(PlayerNameQueryTelemetryInterval); @@ -87,19 +89,25 @@ namespace Game.Networking.Packets _worldPacket.WriteBit(ChatDisabledByPlayer); _worldPacket.WriteBit(LFGListCustomRequiresAuthenticator); _worldPacket.WriteBit(AddonsDisabled); + _worldPacket.WriteBit(TimerunningEnabled); _worldPacket.WriteBit(WarGamesEnabled); _worldPacket.WriteBit(ContentTrackingEnabled); _worldPacket.WriteBit(IsSellAllJunkEnabled); - _worldPacket.WriteBit(IsGroupFinderEnabled); + _worldPacket.WriteBit(IsGroupFinderEnabled); _worldPacket.WriteBit(IsLFDEnabled); _worldPacket.WriteBit(IsLFREnabled); _worldPacket.WriteBit(IsPremadeGroupEnabled); _worldPacket.WriteBit(CanShowSetRoleButton); _worldPacket.WriteBit(false); // unused 10.2.7 - _worldPacket.WriteBit(false); // unused 10.2.7 + _worldPacket.WriteBit(GuildEventsEditsEnabled); + _worldPacket.WriteBit(GuildTradeSkillsEnabled); _worldPacket.WriteBits(Unknown1027.GetByteCount(), 7); + _worldPacket.WriteBit(BNSendWhisperUseV2Services); + + _worldPacket.WriteBit(BNSendGameDataUseV2Services); + _worldPacket.WriteBit(IsAccountCurrencyTransferEnabled); _worldPacket.FlushBits(); @@ -194,6 +202,7 @@ namespace Game.Networking.Packets public bool ChatDisabledByPlayer; public bool LFGListCustomRequiresAuthenticator; public bool AddonsDisabled; + public bool TimerunningEnabled; public bool WarGamesEnabled; // classic only public bool ContentTrackingEnabled; public bool IsSellAllJunkEnabled; @@ -202,11 +211,18 @@ namespace Game.Networking.Packets public bool IsLFREnabled = true; // classic only public bool IsPremadeGroupEnabled = true; // classic only public bool CanShowSetRoleButton = true; + public bool GuildEventsEditsEnabled = true; + public bool GuildTradeSkillsEnabled = true; + 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 IsAccountCurrencyTransferEnabled; public SocialQueueConfig QuickJoinConfig; public SquelchInfo Squelch; public RafSystemFeatureInfo RAFSystem; public List GameRuleValues = new(); + public int ActiveTimerunningSeasonID; + public int RemainingTimerunningSeasonSeconds; public string Unknown1027; // related to movement lua functions used by keybinds public AddonChatThrottleParams AddonChatThrottle; @@ -290,10 +306,11 @@ namespace Game.Networking.Packets _worldPacket.WriteBit(IsBoostEnabled); _worldPacket.WriteBit(TrialBoostEnabled); _worldPacket.WriteBit(TokenBalanceEnabled); + _worldPacket.WriteBit(PaidCharacterTransfersBetweenBnetAccountsEnabled); _worldPacket.WriteBit(LiveRegionCharacterListEnabled); _worldPacket.WriteBit(LiveRegionCharacterCopyEnabled); - _worldPacket.WriteBit(LiveRegionAccountCopyEnabled); + _worldPacket.WriteBit(LiveRegionAccountCopyEnabled); _worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled); _worldPacket.WriteBit(Unknown901CheckoutRelated); _worldPacket.WriteBit(false); // unused, 10.0.2 @@ -301,13 +318,18 @@ namespace Game.Networking.Packets _worldPacket.WriteBit(IsNameReservationEnabled); _worldPacket.WriteBit(LaunchETA.HasValue); _worldPacket.WriteBit(TimerunningEnabled); - _worldPacket.WriteBit(AddonsDisabled); + _worldPacket.WriteBit(AddonsDisabled); _worldPacket.WriteBit(Unused1000); _worldPacket.WriteBit(AccountSaveDataExportEnabled); _worldPacket.WriteBit(AccountLockedByExport); _worldPacket.WriteBits(RealmHiddenAlert.GetByteCount() + 1, 11); + _worldPacket.WriteBit(BNSendWhisperUseV2Services); + + _worldPacket.WriteBit(BNSendGameDataUseV2Services); + _worldPacket.WriteBit(CharacterSelectListModeRealmless); + _worldPacket.FlushBits(); if (EuropaTicketSystemStatus.HasValue) @@ -363,6 +385,7 @@ namespace Game.Networking.Packets public bool IsBoostEnabled; // classic only public bool TrialBoostEnabled; // NYI public bool TokenBalanceEnabled; // NYI + public bool PaidCharacterTransfersBetweenBnetAccountsEnabled; public bool LiveRegionCharacterListEnabled; // NYI public bool LiveRegionCharacterCopyEnabled; // NYI public bool LiveRegionAccountCopyEnabled; // NYI @@ -374,6 +397,9 @@ namespace Game.Networking.Packets public bool Unused1000; public bool AccountSaveDataExportEnabled; public bool AccountLockedByExport; + 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 EuropaTicketConfig? EuropaTicketSystemStatus; public List LiveRegionCharacterCopySourceRegions = new(); public uint TokenPollTimeSeconds; // NYI diff --git a/Source/Game/Networking/Packets/TraitPackets.cs b/Source/Game/Networking/Packets/TraitPackets.cs index 65ddaa980..a13354cec 100644 --- a/Source/Game/Networking/Packets/TraitPackets.cs +++ b/Source/Game/Networking/Packets/TraitPackets.cs @@ -148,6 +148,51 @@ namespace Game.Networking.Packets } } + public class TraitSubTreeCache + { + public int TraitSubTreeID; + public List Entries = new(); + public bool Active; + + public TraitSubTreeCache() { } + public TraitSubTreeCache(TraitSubTreeCache ufSubTreeCache) + { + TraitSubTreeID = ufSubTreeCache.TraitSubTreeID; + foreach (var ufEntry in ufSubTreeCache.Entries) + Entries.Add(ufEntry); + Active = ufSubTreeCache.Active; + } + + public void Read(WorldPacket data) + { + TraitSubTreeID = data.ReadInt32(); + uint entriesSize = data.ReadUInt32(); + //if (entriesSize > 100) + //throw new Exception(entriesSize, 100); + + for (var i = 0; i < entriesSize; ++i) + { + var entry = new TraitEntryPacket(); + entry.Read(data); + Entries.Add(entry); + } + + Active = data.HasBit(); + } + + public void Write(WorldPacket data) + { + data.WriteInt32(TraitSubTreeID); + data.WriteInt32(Entries.Count); + + foreach (var traitEntry in Entries) + traitEntry.Write(data); + + data.WriteBit(Active); + data.FlushBits(); + } + } + public class TraitConfigPacket { public int ID; @@ -158,9 +203,11 @@ namespace Game.Networking.Packets public uint SkillLineID; public int TraitSystemID; public List Entries = new(); + public List SubTrees = new(); public string Name = ""; public TraitConfigPacket() { } + public TraitConfigPacket(TraitConfig ufConfig) { ID = ufConfig.ID; @@ -174,12 +221,14 @@ namespace Game.Networking.Packets Entries.Add(new TraitEntryPacket(ufEntry)); Name = ufConfig.Name; } - + public void Read(WorldPacket data) { ID = data.ReadInt32(); Type = (TraitConfigType)data.ReadInt32(); - var entriesCount = data.ReadInt32(); + int entriesCount = data.ReadInt32(); + int subtreesSize = data.ReadInt32(); + switch (Type) { case TraitConfigType.Combat: @@ -205,6 +254,14 @@ namespace Game.Networking.Packets } uint nameLength = data.ReadBits(9); + + for (var i = 0; i < subtreesSize; ++i) + { + TraitSubTreeCache subtrees = new(); + subtrees.Read(data); + SubTrees.Add(subtrees); + } + Name = data.ReadString(nameLength); } @@ -213,6 +270,8 @@ namespace Game.Networking.Packets data.WriteInt32(ID); data.WriteInt32((int)Type); data.WriteInt32(Entries.Count); + data.WriteInt32(SubTrees.Count); + switch (Type) { case TraitConfigType.Combat: @@ -234,6 +293,10 @@ namespace Game.Networking.Packets traitEntry.Write(data); data.WriteBits(Name.GetByteCount(), 9); + + foreach (TraitSubTreeCache traitSubTreeCache in SubTrees) + traitSubTreeCache.Write(data); + data.FlushBits(); data.WriteString(Name); diff --git a/Source/Game/Quest/Quest.cs b/Source/Game/Quest/Quest.cs index 4326e7e83..4f798f721 100644 --- a/Source/Game/Quest/Quest.cs +++ b/Source/Game/Quest/Quest.cs @@ -103,7 +103,7 @@ namespace Game AreaGroupID = fields.Read(100); LimitTime = fields.Read(101); AllowableRaces = new(fields.Read(102)); - TreasurePickerID = fields.Read(103); + ResetByScheduler = fields.Read(103); Expansion = fields.Read(104); ManagedWorldStateID = fields.Read(105); QuestSessionBonus = fields.Read(106); @@ -301,7 +301,7 @@ namespace Game } } - void LoadConditionalConditionalQuestDescription(SQLFields fields) + public void LoadConditionalConditionalQuestDescription(SQLFields fields) { Locale locale = fields.Read(4).ToEnum(); if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale) @@ -325,7 +325,7 @@ namespace Game ObjectManager.AddLocaleString(fields.Read(3), locale, text.Text); } - void LoadConditionalConditionalRequestItemsText(SQLFields fields) + public void LoadConditionalConditionalRequestItemsText(SQLFields fields) { Locale locale = fields.Read(4).ToEnum(); if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale) @@ -350,7 +350,7 @@ namespace Game ObjectManager.AddLocaleString(fields.Read(3), locale, text.Text); } - void LoadConditionalConditionalOfferRewardText(SQLFields fields) + public void LoadConditionalConditionalOfferRewardText(SQLFields fields) { Locale locale = fields.Read(4).ToEnum(); if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale) @@ -375,7 +375,7 @@ namespace Game ObjectManager.AddLocaleString(fields.Read(3), locale, text.Text); } - void LoadConditionalConditionalQuestCompletionLog(SQLFields fields) + public void LoadConditionalConditionalQuestCompletionLog(SQLFields fields) { Locale locale = fields.Read(4).ToEnum(); if (!WorldConfig.GetBoolValue(WorldCfg.LoadLocales) && locale != SharedConst.DefaultLocale) @@ -400,6 +400,11 @@ namespace Game ObjectManager.AddLocaleString(fields.Read(3), locale, text.Text); } + public void LoadTreasurePickers(SQLFields fields) + { + TreasurePickerID.Add(fields.Read(1)); + } + public uint XPValue(Player player) { return XPValue(player, ContentTuningId, RewardXPDifficulty, RewardXPMultiplier, Expansion); @@ -497,6 +502,17 @@ namespace Game return false; } + public bool IsMeta() + { + var questInfo = CliDB.QuestInfoStorage.LookupByKey(QuestInfoID); + if (questInfo != null) + return (questInfo.Modifiers & 0x800) != 0; + + return false; + } + + public bool IsResetByScheduler() { return ResetByScheduler; } + public void BuildQuestRewards(QuestRewards rewards, Player player) { rewards.ChoiceItemCount = GetRewChoiceItemsCount(); @@ -521,7 +537,7 @@ namespace Game rewards.SpellCompletionID = RewardSpell; rewards.SkillLineID = RewardSkillId; rewards.NumSkillUps = RewardSkillPoints; - rewards.TreasurePickerID = (uint)TreasurePickerID; + rewards.TreasurePickerID = TreasurePickerID; for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i) { @@ -533,8 +549,8 @@ namespace Game for (int i = 0; i < SharedConst.QuestRewardItemCount; ++i) { - rewards.ItemID[i] = RewardItemId[i]; - rewards.ItemQty[i] = RewardItemCount[i]; + rewards.Items[i].ItemID = RewardItemId[i]; + rewards.Items[i].ItemQty = RewardItemCount[i]; } for (int i = 0; i < SharedConst.QuestRewardReputationsCount; ++i) @@ -547,8 +563,8 @@ namespace Game for (int i = 0; i < SharedConst.QuestRewardCurrencyCount; ++i) { - rewards.CurrencyID[i] = RewardCurrencyId[i]; - rewards.CurrencyQty[i] = RewardCurrencyCount[i]; + rewards.Currencies[i].CurrencyID = RewardCurrencyId[i]; + rewards.Currencies[i].CurrencyQty = RewardCurrencyCount[i]; } } @@ -783,6 +799,7 @@ namespace Game response.Info.CompleteSoundKitID = SoundTurnIn; response.Info.AreaGroupID = AreaGroupID; response.Info.TimeAllowed = LimitTime; + response.Info.ResetByScheduler = IsResetByScheduler(); response.Write(); return response; @@ -894,7 +911,7 @@ namespace Game public uint AreaGroupID; public long LimitTime; public RaceMask AllowableRaces { get; set; } - public int TreasurePickerID; + public List TreasurePickerID = new(); public int Expansion; public int ManagedWorldStateID; public int QuestSessionBonus; @@ -908,6 +925,7 @@ namespace Game public string PortraitTurnInText = ""; public string PortraitTurnInName = ""; public string QuestCompletionLog = ""; + public bool ResetByScheduler; // quest_description_conditional public List ConditionalQuestDescription = new(); diff --git a/Source/Game/Reputation/ReputationManager.cs b/Source/Game/Reputation/ReputationManager.cs index 3f89e91e9..2ebe3d339 100644 --- a/Source/Game/Reputation/ReputationManager.cs +++ b/Source/Game/Reputation/ReputationManager.cs @@ -321,12 +321,20 @@ namespace Game { InitializeFactions initFactions = new(); - foreach (var pair in _factions) + foreach (var (_, factionState) in _factions) { - initFactions.FactionFlags[pair.Key] = pair.Value.Flags; - initFactions.FactionStandings[pair.Key] = pair.Value.Standing; + FactionData factionData = new(); + factionData.FactionID = factionState.Id; + factionData.Flags = (ushort)factionState.Flags; + factionData.Standing = factionState.Standing; + initFactions.Factions.Add(factionData); + // @todo faction bonus - pair.Value.needSend = false; + FactionBonusData bonus = new(); + bonus.FactionID = factionState.Id; + bonus.FactionHasBonus = false; + factionState.needSend = false; + initFactions.Bonuses.Add(bonus); } _player.SendPacket(initFactions); diff --git a/Source/Game/Spells/Spell.cs b/Source/Game/Spells/Spell.cs index d2fbb5409..f3cbc3671 100644 --- a/Source/Game/Spells/Spell.cs +++ b/Source/Game/Spells/Spell.cs @@ -4356,7 +4356,7 @@ namespace Game.Spells spellLogEffectPowerDrainParams.Victim = target.GetGUID(); spellLogEffectPowerDrainParams.Points = points; - spellLogEffectPowerDrainParams.PowerType = (uint)powerType; + spellLogEffectPowerDrainParams.PowerType = powerType; spellLogEffectPowerDrainParams.Amplitude = amplitude; GetExecuteLogEffect(effect).PowerDrainTargets.Add(spellLogEffectPowerDrainParams); diff --git a/Source/Game/Spells/SpellManager.cs b/Source/Game/Spells/SpellManager.cs index 8de55bda2..ddc336146 100644 --- a/Source/Game/Spells/SpellManager.cs +++ b/Source/Game/Spells/SpellManager.cs @@ -4358,6 +4358,10 @@ namespace Game.Entities // ENDOF STORMSONG VALLEY SPELLS + // + // THE WANDERING ISLE SPELLS + // + // Summon Master Li Fei ApplySpellFix(new[] { 102445 }, spellInfo => { @@ -4367,6 +4371,18 @@ namespace Game.Entities }); }); + // Summon Living Air + ApplySpellFix([102207], spellInfo => + { + ApplySpellEffectFix(spellInfo, 0, spellEffectInfo => + { + spellEffectInfo.TargetA = new SpellImplicitTargetInfo(Targets.DestTargetRandom); + }); + }); + + // END OF THE WANDERING ISLE SPELLS + // + // Earthquake ApplySpellFix(new[] { 61882 }, spellInfo => {