From 0bbabbd66741100b99b7d2d87594f5b43b6b7209 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 9 May 2022 23:14:38 -0400 Subject: [PATCH] Core/PacketIO: Updated packet structures to 9.2.0 Port From (https://github.com/TrinityCore/TrinityCore/commit/9f30afe3528441571f89cb2e1775c756774fa0cd) --- Source/Framework/Constants/AccountConst.cs | 7 +- .../Framework/Constants/AreaTriggerConst.cs | 3 +- .../Constants/Movement/MovementFlags.cs | 7 + Source/Framework/Constants/Network/Opcodes.cs | 1719 +++++++++-------- Source/Framework/Constants/SharedConst.cs | 2 +- Source/Game/DungeonFinding/LFGScripts.cs | 11 +- .../Game/Entities/AreaTrigger/AreaTrigger.cs | 15 + .../AreaTrigger/AreaTriggerTemplate.cs | 22 +- Source/Game/Entities/Creature/Gossip.cs | 3 + .../Entities/Object/Update/UpdateFields.cs | 147 +- Source/Game/Entities/Object/WorldObject.cs | 43 +- Source/Game/Entities/Pet.cs | 4 +- Source/Game/Entities/Unit/Unit.Movement.cs | 6 + Source/Game/Entities/Unit/Unit.cs | 4 +- Source/Game/Globals/ObjectManager.cs | 56 +- Source/Game/Guilds/Guild.cs | 13 +- Source/Game/Handlers/CharacterHandler.cs | 4 +- Source/Game/Handlers/ChatHandler.cs | 2 +- Source/Game/Handlers/GuildHandler.cs | 8 +- Source/Game/Handlers/MiscHandler.cs | 1 + Source/Game/Handlers/QueryHandler.cs | 33 +- .../Networking/Packets/BattleGroundPackets.cs | 20 +- Source/Game/Networking/Packets/ChatPackets.cs | 6 +- .../Networking/Packets/GameObjectPackets.cs | 2 + .../Game/Networking/Packets/GuildPackets.cs | 2 - Source/Game/Networking/Packets/MiscPackets.cs | 4 + .../Networking/Packets/MovementPackets.cs | 48 +- .../Packets/MythicPlusPacketsCommon.cs | 12 +- Source/Game/Networking/Packets/NPCPackets.cs | 10 +- .../Game/Networking/Packets/QueryPackets.cs | 65 +- .../Game/Networking/Packets/QuestPackets.cs | 22 +- .../Game/Networking/Packets/SystemPackets.cs | 31 + 32 files changed, 1309 insertions(+), 1023 deletions(-) diff --git a/Source/Framework/Constants/AccountConst.cs b/Source/Framework/Constants/AccountConst.cs index fe20643fd..a59677a3f 100644 --- a/Source/Framework/Constants/AccountConst.cs +++ b/Source/Framework/Constants/AccountConst.cs @@ -31,12 +31,13 @@ namespace Framework.Constants PerCharacterTtsCache = 9, GlobalFlaggedCache = 10, PerCharacterFlaggedCache = 11, + PerCharacterClickBindingsCache = 12, - Max = 12, + Max = 13, - AllAccountDataCacheMask = 0xFFF, + AllAccountDataCacheMask = 0x1FFF, GlobalCacheMask = 0x515, - PerCharacterCacheMask = 0xAEA + PerCharacterCacheMask = 0x1AEA } public enum TutorialAction diff --git a/Source/Framework/Constants/AreaTriggerConst.cs b/Source/Framework/Constants/AreaTriggerConst.cs index 1c69a1012..1d8ff6437 100644 --- a/Source/Framework/Constants/AreaTriggerConst.cs +++ b/Source/Framework/Constants/AreaTriggerConst.cs @@ -40,7 +40,8 @@ namespace Framework.Constants Unk = 2, Polygon = 3, Cylinder = 4, - Max = 5 + Disk = 5, + Max } public enum AreaTriggerActionTypes diff --git a/Source/Framework/Constants/Movement/MovementFlags.cs b/Source/Framework/Constants/Movement/MovementFlags.cs index 3759e2ef9..72e9f5360 100644 --- a/Source/Framework/Constants/Movement/MovementFlags.cs +++ b/Source/Framework/Constants/Movement/MovementFlags.cs @@ -93,4 +93,11 @@ namespace Framework.Constants InterpolatedTurning = 0x40000, InterpolatedPitching = 0x80000 } + + [Flags] + public enum MovementFlags3 + { + None = 0x00, + DisableInertia = 0x01, + } } diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index 3cc6306d1..d020ed38b 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -19,31 +19,31 @@ namespace Framework.Constants { public enum ClientOpcodes : uint { - AbandonNpeResponse = 0x33f0, + AbandonNpeResponse = 0x33f2, AcceptGuildInvite = 0x35fc, AcceptTrade = 0x315a, AcceptWargameInvite = 0x35e0, AccountNotificationAcknowledged = 0x3732, - ActivateSoulbind = 0x33df, + ActivateSoulbind = 0x33e1, ActivateTaxi = 0x34b1, AddonList = 0x35d8, - AddAccountCosmetic = 0x32aa, + AddAccountCosmetic = 0x32a9, AddBattlenetFriend = 0x365a, AddFriend = 0x36cd, AddIgnore = 0x36d1, - AddToy = 0x32a9, - AdventureJournalOpenQuest = 0x3206, - AdventureJournalUpdateSuggestions = 0x33e2, - AdventureMapStartQuest = 0x335f, + AddToy = 0x32a8, + AdventureJournalOpenQuest = 0x3205, + AdventureJournalUpdateSuggestions = 0x33e4, + AdventureMapStartQuest = 0x3360, AlterAppearance = 0x3503, AreaSpiritHealerQuery = 0x34b6, AreaSpiritHealerQueue = 0x34b7, - AreaTrigger = 0x31d9, + AreaTrigger = 0x31d8, ArtifactAddPower = 0x31ab, ArtifactSetAppearance = 0x31ad, - AssignEquipmentSetSpec = 0x3212, - AttackStop = 0x3261, - AttackSwing = 0x3260, + AssignEquipmentSetSpec = 0x3211, + AttackStop = 0x3260, + AttackSwing = 0x325f, AuctionableTokenSell = 0x36e3, AuctionableTokenSellAtMarketPrice = 0x36e4, AuctionBrowseQuery = 0x34d6, @@ -73,15 +73,15 @@ namespace Framework.Constants AutoGuildBankItem = 0x34bd, AutoStoreBagItem = 0x399b, AutoStoreGuildBankItem = 0x34c6, - AzeriteEmpoweredItemSelectPower = 0x3387, - AzeriteEmpoweredItemViewed = 0x336a, - AzeriteEssenceActivateEssence = 0x3389, - AzeriteEssenceUnlockMilestone = 0x3388, + AzeriteEmpoweredItemSelectPower = 0x3388, + AzeriteEmpoweredItemViewed = 0x336b, + AzeriteEssenceActivateEssence = 0x338a, + AzeriteEssenceUnlockMilestone = 0x3389, BankerActivate = 0x34b9, BattlefieldLeave = 0x3173, BattlefieldList = 0x317f, BattlefieldPort = 0x3537, - BattlemasterHello = 0x32c4, + BattlemasterHello = 0x32c5, BattlemasterJoin = 0x3530, BattlemasterJoinArena = 0x3531, BattlemasterJoinBrawl = 0x3535, @@ -107,21 +107,21 @@ namespace Framework.Constants BattlePetSetBattleSlot = 0x362d, BattlePetSetFlags = 0x3630, BattlePetSummon = 0x3629, - BattlePetUpdateDisplayNotify = 0x31e3, - BattlePetUpdateNotify = 0x31e2, + BattlePetUpdateDisplayNotify = 0x31e2, + BattlePetUpdateNotify = 0x31e1, BeginTrade = 0x3157, BinderActivate = 0x34b8, BlackMarketBidOnItem = 0x353f, BlackMarketOpen = 0x353d, BlackMarketRequestItems = 0x353e, - BonusRoll = 0x338a, + BonusRoll = 0x338b, BugReport = 0x3685, BusyTrade = 0x3158, BuyBackItem = 0x34aa, BuyBankSlot = 0x34ba, BuyItem = 0x34a9, BuyReagentBank = 0x34bb, - CageBattlePet = 0x31f5, + CageBattlePet = 0x31f4, CalendarAddEvent = 0x367d, CalendarCommunityInvite = 0x3671, CalendarComplain = 0x3679, @@ -139,22 +139,22 @@ namespace Framework.Constants CalendarUpdateEvent = 0x367e, CancelAura = 0x31af, CancelAutoRepeatSpell = 0x34f5, - CancelCast = 0x32b0, - CancelChannelling = 0x3279, - CancelGrowthAura = 0x327e, - CancelMasterLootRoll = 0x321a, + CancelCast = 0x32af, + CancelChannelling = 0x3278, + CancelGrowthAura = 0x327d, + CancelMasterLootRoll = 0x3219, CancelModSpeedNoControlAuras = 0x31ae, - CancelMountAura = 0x3291, + CancelMountAura = 0x3290, CancelQueuedSpell = 0x3180, CancelTempEnchantment = 0x3500, CancelTrade = 0x315c, CanDuel = 0x3662, CanRedeemTokenForBalance = 0x3704, - CastSpell = 0x32ad, + CastSpell = 0x32ac, ChallengeModeRequestLeaders = 0x3090, - ChangeBagSlotFlag = 0x3344, - ChangeBankBagSlotFlag = 0x3345, - ChangeMonumentAppearance = 0x3325, + ChangeBagSlotFlag = 0x3345, + ChangeBankBagSlotFlag = 0x3346, + ChangeMonumentAppearance = 0x3326, ChangeRealmTicket = 0x36f7, ChangeSubGroup = 0x364c, CharacterCheckUpgrade = 0x36c3, @@ -201,17 +201,17 @@ namespace Framework.Constants ChatReportIgnored = 0x37cb, ChatUnregisterAllAddonPrefixes = 0x37ce, CheckCharacterNameAvailability = 0x3645, - CheckIsAdventureMapPoiValid = 0x3252, + CheckIsAdventureMapPoiValid = 0x3251, ChoiceResponse = 0x32b4, - ChromieTimeSelectExpansion = 0x33de, - ClaimWeeklyReward = 0x33bb, + ChromieTimeSelectExpansion = 0x33e0, + ClaimWeeklyReward = 0x33bc, ClearNewAppearance = 0x312f, ClearRaidMarker = 0x31a7, ClearTradeItem = 0x315e, ClientPortGraveyard = 0x3539, CloseInteraction = 0x3499, CloseQuestChoice = 0x32b5, - CloseRuneforgeInteraction = 0x33e6, + CloseRuneforgeInteraction = 0x33e8, ClubFinderApplicationResponse = 0x371b, ClubFinderGetApplicantsList = 0x3719, ClubFinderPost = 0x3716, @@ -229,6 +229,7 @@ namespace Framework.Constants CommentatorGetMapInfo = 0x35f1, CommentatorGetPlayerCooldowns = 0x35f3, CommentatorGetPlayerInfo = 0x35f2, + CommentatorSpectate = 0x3737, CommentatorStartWargame = 0x35ef, CommerceTokenGetCount = 0x36e1, CommerceTokenGetLog = 0x36eb, @@ -237,29 +238,29 @@ namespace Framework.Constants CompleteCinematic = 0x3557, CompleteMovie = 0x34eb, ConfirmArtifactRespec = 0x31ac, - ConfirmRespecWipe = 0x3214, + ConfirmRespecWipe = 0x3213, ConnectToFailed = 0x35d4, ConsumableTokenBuy = 0x36e6, ConsumableTokenBuyAtMarketPrice = 0x36e7, ConsumableTokenCanVeteranBuy = 0x36e5, ConsumableTokenRedeem = 0x36e9, ConsumableTokenRedeemConfirmation = 0x36ea, - ContributionContribute = 0x356a, - ContributionLastUpdateRequest = 0x356b, + ContributionContribute = 0x356b, + ContributionLastUpdateRequest = 0x356c, ConversationCinematicReady = 0x3559, ConversationLineStarted = 0x3558, ConvertRaid = 0x364e, - CovenantRenownRequestCatchupState = 0x357e, + CovenantRenownRequestCatchupState = 0x357f, CreateCharacter = 0x3644, - CreateShipment = 0x3311, + CreateShipment = 0x3312, DbQueryBulk = 0x35e4, DeclineGuildInvites = 0x352d, DeclinePetition = 0x3546, DeleteEquipmentSet = 0x3519, DelFriend = 0x36ce, DelIgnore = 0x36d2, - DepositReagentBank = 0x334d, - DestroyItem = 0x32a3, + DepositReagentBank = 0x334e, + DestroyItem = 0x32a2, DfBootPlayerVote = 0x3616, DfConfirmExpandSearch = 0x3608, DfGetJoinStatus = 0x3614, @@ -270,13 +271,13 @@ namespace Framework.Constants DfReadyCheckResponse = 0x3619, DfSetRoles = 0x3615, DfTeleport = 0x3617, - DiscardedTimeSyncAcks = 0x3a3e, + DiscardedTimeSyncAcks = 0x3a42, DismissCritter = 0x3507, DoCountdown = 0x3715, - DoMasterLootRoll = 0x3219, + DoMasterLootRoll = 0x3218, DoReadyCheck = 0x3634, DuelResponse = 0x34f0, - EjectPassenger = 0x3247, + EjectPassenger = 0x3246, Emote = 0x3553, EnableNagle = 0x376b, EnableTaxiNode = 0x34af, @@ -289,51 +290,51 @@ namespace Framework.Constants GameEventDebugEnable = 0x31b2, GameObjReportUse = 0x34fd, GameObjUse = 0x34fc, - GarrisonAddFollowerHealth = 0x330c, - GarrisonAssignFollowerToBuilding = 0x32f2, - GarrisonCancelConstruction = 0x32df, - GarrisonCheckUpgradeable = 0x3340, - GarrisonCompleteMission = 0x3332, - GarrisonFullyHealAllFollowers = 0x330d, - GarrisonGenerateRecruits = 0x32f5, - GarrisonGetClassSpecCategoryInfo = 0x3304, - GarrisonGetMapData = 0x330b, - GarrisonGetMissionReward = 0x3363, - GarrisonLearnTalent = 0x3300, - GarrisonMissionBonusRoll = 0x3334, - GarrisonPurchaseBuilding = 0x32db, - GarrisonRecruitFollower = 0x32f7, - GarrisonRemoveFollower = 0x3329, - GarrisonRemoveFollowerFromBuilding = 0x32f3, - GarrisonRenameFollower = 0x32f4, - GarrisonRequestBlueprintAndSpecializationData = 0x32da, - GarrisonRequestShipmentInfo = 0x330f, - GarrisonResearchTalent = 0x32f8, - GarrisonSetBuildingActive = 0x32dc, - GarrisonSetFollowerFavorite = 0x32f0, - GarrisonSetFollowerInactive = 0x32e8, - GarrisonSetRecruitmentPreferences = 0x32f6, - GarrisonSocketTalent = 0x33f3, - GarrisonStartMission = 0x3331, - GarrisonSwapBuildings = 0x32e0, + GarrisonAddFollowerHealth = 0x330d, + GarrisonAssignFollowerToBuilding = 0x32f3, + GarrisonCancelConstruction = 0x32e0, + GarrisonCheckUpgradeable = 0x3341, + GarrisonCompleteMission = 0x3333, + GarrisonFullyHealAllFollowers = 0x330e, + GarrisonGenerateRecruits = 0x32f6, + GarrisonGetClassSpecCategoryInfo = 0x3305, + GarrisonGetMapData = 0x330c, + GarrisonGetMissionReward = 0x3364, + GarrisonLearnTalent = 0x3301, + GarrisonMissionBonusRoll = 0x3335, + GarrisonPurchaseBuilding = 0x32dc, + GarrisonRecruitFollower = 0x32f8, + GarrisonRemoveFollower = 0x332a, + GarrisonRemoveFollowerFromBuilding = 0x32f4, + GarrisonRenameFollower = 0x32f5, + GarrisonRequestBlueprintAndSpecializationData = 0x32db, + GarrisonRequestShipmentInfo = 0x3310, + GarrisonResearchTalent = 0x32f9, + GarrisonSetBuildingActive = 0x32dd, + GarrisonSetFollowerFavorite = 0x32f1, + GarrisonSetFollowerInactive = 0x32e9, + GarrisonSetRecruitmentPreferences = 0x32f7, + GarrisonSocketTalent = 0x33f5, + GarrisonStartMission = 0x3332, + GarrisonSwapBuildings = 0x32e1, GenerateRandomCharacterName = 0x35e7, GetAccountCharacterList = 0x36b3, GetAccountNotifications = 0x3731, - GetGarrisonInfo = 0x32d5, + GetGarrisonInfo = 0x32d6, GetItemPurchaseData = 0x3541, - GetLandingPageShipments = 0x3310, - GetMirrorImageData = 0x32a7, + GetLandingPageShipments = 0x3311, + GetMirrorImageData = 0x32a6, GetPvpOptionsEnabled = 0x35ee, GetRafAccountInfo = 0x371f, GetRemainingGameTime = 0x36e8, - GetTrophyList = 0x3322, + GetTrophyList = 0x3323, GetUndeleteCharacterCooldownStatus = 0x36dc, GetVasAccountCharacterList = 0x36ed, GetVasTransferTargetRealmList = 0x36ee, GmTicketAcknowledgeSurvey = 0x3690, GmTicketGetCaseStatus = 0x368f, GmTicketGetSystemStatus = 0x368e, - GossipRefreshOptions = 0x357d, + GossipRefreshOptions = 0x357e, GossipSelectOption = 0x349a, GuildAddBattlenetFriend = 0x308e, GuildAddRank = 0x3065, @@ -386,56 +387,56 @@ namespace Framework.Constants InitiateTrade = 0x3156, Inspect = 0x353b, InstanceLockResponse = 0x351a, - IslandQueue = 0x33b7, + IslandQueue = 0x33b8, ItemPurchaseRefund = 0x3542, - ItemTextQuery = 0x3341, - JoinPetBattleQueue = 0x31e0, + ItemTextQuery = 0x3342, + JoinPetBattleQueue = 0x31df, JoinRatedBattleground = 0x3179, KeepAlive = 0x367f, - KeyboundOverride = 0x322c, - LatencyReport = 0x3772, - LearnPvpTalents = 0x3569, - LearnTalents = 0x3567, + KeyboundOverride = 0x322b, + LatencyReport = 0x3771, + LearnPvpTalents = 0x356a, + LearnTalents = 0x3568, LeaveGroup = 0x3649, - LeavePetBattleQueue = 0x31e1, + LeavePetBattleQueue = 0x31e0, LfgListApplyToGroup = 0x360d, LfgListCancelApplication = 0x360e, LfgListDeclineApplicant = 0x360f, LfgListGetStatus = 0x360b, LfgListInviteApplicant = 0x3610, LfgListInviteResponse = 0x3611, - LfgListJoin = 0x3385, + LfgListJoin = 0x3386, LfgListLeave = 0x360a, LfgListSearch = 0x360c, - LfgListUpdateRequest = 0x3386, + LfgListUpdateRequest = 0x3387, ListInventory = 0x34a7, LiveRegionAccountRestore = 0x36b6, LiveRegionCharacterCopy = 0x36b5, LiveRegionGetAccountCharacterList = 0x36b4, LiveRegionKeyBindingsCopy = 0x36b7, LoadingScreenNotify = 0x35f8, - LoadSelectedTrophy = 0x3323, + LoadSelectedTrophy = 0x3324, LogoutCancel = 0x34e6, LogoutInstant = 0x34e7, LogoutRequest = 0x34e4, LogDisconnect = 0x3769, LogStreamingError = 0x376d, - LootItem = 0x3217, - LootMoney = 0x3216, - LootRelease = 0x321b, - LootRoll = 0x321c, - LootUnit = 0x3215, + LootItem = 0x3216, + LootMoney = 0x3215, + LootRelease = 0x321a, + LootRoll = 0x321b, + LootUnit = 0x3214, LowLevelRaid1 = 0x369f, LowLevelRaid2 = 0x3521, MailCreateTextItem = 0x354d, - MailDelete = 0x322e, + MailDelete = 0x322d, MailGetList = 0x3548, MailMarkAsRead = 0x354c, MailReturnToSender = 0x3655, MailTakeItem = 0x354a, MailTakeMoney = 0x3549, - MakeContitionalAppearancePermanent = 0x3230, - MasterLootItem = 0x3218, + MakeContitionalAppearancePermanent = 0x322f, + MasterLootItem = 0x3217, MergeGuildBankItemWithGuildBankItem = 0x34c7, MergeGuildBankItemWithItem = 0x34c4, MergeItemWithGuildBankItem = 0x34c2, @@ -443,110 +444,115 @@ namespace Framework.Constants MissileTrajectoryCollision = 0x318b, MountClearFanfare = 0x312d, MountSetFavorite = 0x3632, - MountSpecialAnim = 0x3292, - MoveApplyMovementForceAck = 0x3a14, - MoveChangeTransport = 0x3a2e, - MoveChangeVehicleSeats = 0x3a33, - MoveCollisionDisableAck = 0x3a36, - MoveCollisionEnableAck = 0x3a37, - MoveDismissVehicle = 0x3a32, + MountSpecialAnim = 0x3291, + MoveApplyInertiaAck = 0x3a4f, + MoveApplyMovementForceAck = 0x3a16, + MoveChangeTransport = 0x3a30, + MoveChangeVehicleSeats = 0x3a35, + MoveCollisionDisableAck = 0x3a3a, + MoveCollisionEnableAck = 0x3a3b, + MoveDismissVehicle = 0x3a34, MoveDoubleJump = 0x39eb, - MoveEnableDoubleJumpAck = 0x3a1d, - MoveEnableSwimToFlyTransAck = 0x3a23, - MoveFallLand = 0x39fa, - MoveFallReset = 0x3a18, - MoveFeatherFallAck = 0x3a1b, - MoveForceFlightBackSpeedChangeAck = 0x3a2d, - MoveForceFlightSpeedChangeAck = 0x3a2c, - MoveForcePitchRateChangeAck = 0x3a31, - MoveForceRootAck = 0x3a0d, - MoveForceRunBackSpeedChangeAck = 0x3a0b, - MoveForceRunSpeedChangeAck = 0x3a0a, - MoveForceSwimBackSpeedChangeAck = 0x3a21, - MoveForceSwimSpeedChangeAck = 0x3a0c, - MoveForceTurnRateChangeAck = 0x3a22, - MoveForceUnrootAck = 0x3a0e, - MoveForceWalkSpeedChangeAck = 0x3a20, - MoveGravityDisableAck = 0x3a34, - MoveGravityEnableAck = 0x3a35, + MoveEnableDoubleJumpAck = 0x3a1f, + MoveEnableSwimToFlyTransAck = 0x3a25, + MoveFallLand = 0x39fb, + MoveFallReset = 0x3a1a, + MoveFeatherFallAck = 0x3a1d, + MoveForceFlightBackSpeedChangeAck = 0x3a2f, + MoveForceFlightSpeedChangeAck = 0x3a2e, + MoveForcePitchRateChangeAck = 0x3a33, + MoveForceRootAck = 0x3a0f, + MoveForceRunBackSpeedChangeAck = 0x3a0d, + MoveForceRunSpeedChangeAck = 0x3a0c, + MoveForceSwimBackSpeedChangeAck = 0x3a23, + MoveForceSwimSpeedChangeAck = 0x3a0e, + MoveForceTurnRateChangeAck = 0x3a24, + MoveForceUnrootAck = 0x3a10, + MoveForceWalkSpeedChangeAck = 0x3a22, + MoveGravityDisableAck = 0x3a36, + MoveGravityEnableAck = 0x3a37, MoveGuildBankItem = 0x34c1, - MoveHeartbeat = 0x3a0f, - MoveHoverAck = 0x3a12, - MoveInitActiveMoverComplete = 0x3a43, + MoveHeartbeat = 0x3a11, + MoveHoverAck = 0x3a14, + MoveInertiaDisableAck = 0x3a38, + MoveInertiaEnableAck = 0x3a39, + MoveInitActiveMoverComplete = 0x3a47, MoveJump = 0x39ea, - MoveKnockBackAck = 0x3a11, - MoveRemoveMovementForces = 0x3a16, - MoveRemoveMovementForceAck = 0x3a15, - MoveSeamlessTransferComplete = 0x3a41, - MoveSetCanFlyAck = 0x3a26, - MoveSetCanTurnWhileFallingAck = 0x3a24, - MoveSetCollisionHeightAck = 0x3a38, - MoveSetFacing = 0x3a08, - MoveSetFly = 0x3a27, - MoveSetIgnoreMovementForcesAck = 0x3a25, - MoveSetModMovementForceMagnitudeAck = 0x3a3f, - MoveSetPitch = 0x3a09, + MoveKnockBackAck = 0x3a13, + MoveRemoveInertiaAck = 0x3a50, + MoveRemoveMovementForces = 0x3a18, + MoveRemoveMovementForceAck = 0x3a17, + MoveSeamlessTransferComplete = 0x3a45, + MoveSetCanFlyAck = 0x3a28, + MoveSetCanTurnWhileFallingAck = 0x3a26, + MoveSetCollisionHeightAck = 0x3a3c, + MoveSetFacing = 0x3a09, + MoveSetFacingHeartbeat = 0x3a0a, + MoveSetFly = 0x3a29, + MoveSetIgnoreMovementForcesAck = 0x3a27, + MoveSetModMovementForceMagnitudeAck = 0x3a43, + MoveSetPitch = 0x3a0b, MoveSetRunMode = 0x39f2, - MoveSetTurnRateCheat = 0x3a05, - MoveSetVehicleRecIdAck = 0x3a13, + MoveSetTurnRateCheat = 0x3a06, + MoveSetVehicleRecIdAck = 0x3a15, MoveSetWalkMode = 0x39f3, - MoveSplineDone = 0x3a17, - MoveStartAscend = 0x3a28, + MoveSplineDone = 0x3a19, + MoveStartAscend = 0x3a2a, MoveStartBackward = 0x39e5, - MoveStartDescend = 0x3a2f, + MoveStartDescend = 0x3a31, MoveStartForward = 0x39e4, MoveStartPitchDown = 0x39f0, MoveStartPitchUp = 0x39ef, MoveStartStrafeLeft = 0x39e7, MoveStartStrafeRight = 0x39e8, - MoveStartSwim = 0x39fb, + MoveStartSwim = 0x39fc, MoveStartTurnLeft = 0x39ec, MoveStartTurnRight = 0x39ed, MoveStop = 0x39e6, - MoveStopAscend = 0x3a29, + MoveStopAscend = 0x3a2b, MoveStopPitch = 0x39f1, MoveStopStrafe = 0x39e9, - MoveStopSwim = 0x39fc, + MoveStopSwim = 0x39fd, MoveStopTurn = 0x39ee, - MoveTeleportAck = 0x39f9, - MoveTimeSkipped = 0x3a1a, - MoveUpdateFallSpeed = 0x3a19, - MoveWaterWalkAck = 0x3a1c, + MoveTeleportAck = 0x39fa, + MoveTimeSkipped = 0x3a1c, + MoveUpdateFallSpeed = 0x3a1b, + MoveWaterWalkAck = 0x3a1e, MythicPlusRequestMapStats = 0x308f, - NeutralPlayerSelectFaction = 0x31d6, + NeutralPlayerSelectFaction = 0x31d5, NextCinematicCamera = 0x3556, ObjectUpdateFailed = 0x3181, ObjectUpdateRescued = 0x3182, - OfferPetition = 0x33dd, + OfferPetition = 0x33df, OpeningCinematic = 0x3555, - OpenItem = 0x3342, - OpenMissionNpc = 0x3306, - OpenShipmentNpc = 0x330e, - OpenTradeskillNpc = 0x3319, + OpenItem = 0x3343, + OpenMissionNpc = 0x3307, + OpenShipmentNpc = 0x330f, + OpenTradeskillNpc = 0x331a, OptOutOfLoot = 0x3504, OverrideScreenFlash = 0x352e, PartyInvite = 0x3602, PartyInviteResponse = 0x3604, PartyUninvite = 0x3647, - PerformItemInteraction = 0x3238, + PerformItemInteraction = 0x3237, PetitionBuy = 0x34cf, PetitionRenameGuild = 0x36c6, PetitionShowList = 0x34ce, PetitionShowSignatures = 0x34d0, PetAbandon = 0x3493, PetAction = 0x3491, - PetBattleFinalNotify = 0x31e5, + PetBattleFinalNotify = 0x31e4, PetBattleInput = 0x3641, - PetBattleQueueProposeMatchResult = 0x322d, - PetBattleQuitNotify = 0x31e4, + PetBattleQueueProposeMatchResult = 0x322c, + PetBattleQuitNotify = 0x31e3, PetBattleReplaceFrontPet = 0x3642, - PetBattleRequestPvp = 0x31de, - PetBattleRequestUpdate = 0x31df, - PetBattleRequestWild = 0x31dc, - PetBattleScriptErrorNotify = 0x31e6, - PetBattleWildLocationFail = 0x31dd, + PetBattleRequestPvp = 0x31dd, + PetBattleRequestUpdate = 0x31de, + PetBattleRequestWild = 0x31db, + PetBattleScriptErrorNotify = 0x31e5, + PetBattleWildLocationFail = 0x31dc, PetCancelAura = 0x3494, - PetCastSpell = 0x32ac, + PetCastSpell = 0x32ab, PetRename = 0x3684, PetSetAction = 0x3490, PetSpellAutocast = 0x3495, @@ -555,29 +561,29 @@ namespace Framework.Constants PlayerLogin = 0x35ea, PushQuestToParty = 0x34a5, PvpLogData = 0x317c, - QueryBattlePetName = 0x3285, + QueryBattlePetName = 0x3284, QueryCorpseLocationFromClient = 0x3660, QueryCorpseTransport = 0x3661, QueryCountdownTimer = 0x31aa, - QueryCreature = 0x327f, - QueryGameObject = 0x3280, - QueryGarrisonPetName = 0x3286, + QueryCreature = 0x327e, + QueryGameObject = 0x327f, + QueryGarrisonPetName = 0x3285, QueryGuildInfo = 0x368a, QueryInspectAchievements = 0x350e, QueryNextMailTime = 0x354b, - QueryNpcText = 0x3281, - QueryPageText = 0x3283, - QueryPetition = 0x3287, - QueryPetName = 0x3284, - QueryPlayerName = 0x376f, - QueryPlayerNamesForCommunity = 0x3771, - QueryPlayerNameByCommunityId = 0x3770, + QueryNpcText = 0x3280, + QueryPageText = 0x3282, + QueryPetition = 0x3286, + QueryPetName = 0x3283, + QueryPlayerName = 0x3772, + QueryPlayerNamesForCommunity = 0x3770, + QueryPlayerNameByCommunityId = 0x376f, QueryQuestCompletionNpcs = 0x3175, - QueryQuestInfo = 0x3282, + QueryQuestInfo = 0x3281, QueryRealmName = 0x3689, QueryScenarioPoi = 0x3656, QueryTime = 0x34e3, - QueryTreasurePicker = 0x3366, + QueryTreasurePicker = 0x3367, QueryVoidStorage = 0x31a3, QuestConfirmAccept = 0x34a4, QuestGiverAcceptQuest = 0x349e, @@ -592,8 +598,8 @@ namespace Framework.Constants QuestLogRemoveQuest = 0x3540, QuestPoiQuery = 0x36ad, QuestPushResult = 0x34a6, - QuestSessionBeginResponse = 0x33ce, - QuestSessionRequestStart = 0x33cd, + QuestSessionBeginResponse = 0x33d0, + QuestSessionRequestStart = 0x33cf, QuestSessionRequestStop = 0x372a, QueuedMessagesEnd = 0x376c, QuickJoinAutoAcceptRequests = 0x3703, @@ -607,41 +613,41 @@ namespace Framework.Constants RafUpdateRecruitmentInfo = 0x3721, RandomRoll = 0x3654, ReadyCheckResponse = 0x3635, - ReadItem = 0x3343, + ReadItem = 0x3344, ReclaimCorpse = 0x34e9, - RemoveNewItem = 0x3369, + RemoveNewItem = 0x336a, RemoveRafRecruit = 0x3723, ReorderCharacters = 0x35e9, RepairItem = 0x34fa, - ReplaceTrophy = 0x3324, + ReplaceTrophy = 0x3325, RepopRequest = 0x3538, ReportClientVariables = 0x36fd, ReportEnabledAddons = 0x36fc, ReportKeybindingExecutionCounts = 0x36fe, ReportPvpPlayerAfk = 0x3502, - ReportServerLag = 0x33c6, - ReportStuckInCombat = 0x33c7, + ReportServerLag = 0x33c8, + ReportStuckInCombat = 0x33c9, RequestAccountData = 0x3694, - RequestAreaPoiUpdate = 0x3368, + RequestAreaPoiUpdate = 0x3369, RequestBattlefieldStatus = 0x35dc, RequestCategoryCooldowns = 0x317e, RequestCemeteryList = 0x3177, RequestCharacterGuildFollowInfo = 0x368b, - RequestConquestFormulaConstants = 0x32c7, - RequestCovenantCallings = 0x33b9, + RequestConquestFormulaConstants = 0x32c8, + RequestCovenantCallings = 0x33ba, RequestCrowdControlSpell = 0x353c, - RequestForcedReactions = 0x3210, - RequestGarrisonTalentWorldQuestUnlocks = 0x33f2, + RequestForcedReactions = 0x320f, + RequestGarrisonTalentWorldQuestUnlocks = 0x33f4, RequestGuildPartyState = 0x31a9, RequestGuildRewardsList = 0x31a8, - RequestLatestSplashScreen = 0x33c8, + RequestLatestSplashScreen = 0x33ca, RequestLfgListBlacklist = 0x32b7, - RequestMythicPlusAffixes = 0x320a, - RequestMythicPlusSeasonData = 0x320b, + RequestMythicPlusAffixes = 0x3209, + RequestMythicPlusSeasonData = 0x320a, RequestPartyJoinUpdates = 0x35f7, RequestPartyMemberStats = 0x3653, RequestPetInfo = 0x3496, - RequestPlayedTime = 0x328a, + RequestPlayedTime = 0x3289, RequestPvpRewards = 0x3196, RequestRaidInfo = 0x36c7, RequestRatedPvpInfo = 0x35e3, @@ -649,24 +655,24 @@ namespace Framework.Constants RequestResearchHistory = 0x3167, RequestScheduledPvpInfo = 0x3197, RequestStabledPets = 0x3497, - RequestVehicleExit = 0x3242, - RequestVehicleNextSeat = 0x3244, - RequestVehiclePrevSeat = 0x3243, - RequestVehicleSwitchSeat = 0x3245, - RequestWeeklyRewards = 0x33bc, - RequestWorldQuestUpdate = 0x3367, - ResetChallengeMode = 0x3208, - ResetChallengeModeCheat = 0x3209, + RequestVehicleExit = 0x3241, + RequestVehicleNextSeat = 0x3243, + RequestVehiclePrevSeat = 0x3242, + RequestVehicleSwitchSeat = 0x3244, + RequestWeeklyRewards = 0x33bd, + RequestWorldQuestUpdate = 0x3368, + ResetChallengeMode = 0x3207, + ResetChallengeModeCheat = 0x3208, ResetInstances = 0x3668, ResurrectResponse = 0x3683, - RevertMonumentAppearance = 0x3326, - RideVehicleInteract = 0x3246, + RevertMonumentAppearance = 0x3327, + RideVehicleInteract = 0x3245, SaveCufProfiles = 0x318c, SaveEquipmentSet = 0x3518, SaveGuildEmblem = 0x32bb, - ScenePlaybackCanceled = 0x3229, - ScenePlaybackComplete = 0x3228, - SceneTriggerEvent = 0x322a, + ScenePlaybackCanceled = 0x3228, + ScenePlaybackComplete = 0x3227, + SceneTriggerEvent = 0x3229, SelfRes = 0x3543, SellItem = 0x34a8, SendCharacterClubInvitation = 0x36f6, @@ -674,25 +680,25 @@ namespace Framework.Constants SendMail = 0x35fa, SendTextEmote = 0x348e, ServerTimeOffsetRequest = 0x369a, - SetAchievementsHidden = 0x322f, + SetAchievementsHidden = 0x322e, SetActionBarToggles = 0x3544, SetActionButton = 0x3636, - SetActiveMover = 0x3a39, - SetAdvancedCombatLogging = 0x32c8, + SetActiveMover = 0x3a3d, + SetAdvancedCombatLogging = 0x32c9, SetAssistantLeader = 0x364f, - SetBackpackAutosortDisabled = 0x3346, - SetBankAutosortDisabled = 0x3347, + SetBackpackAutosortDisabled = 0x3347, + SetBankAutosortDisabled = 0x3348, SetChatDisabled = 0x3735, SetContactNotes = 0x36cf, SetCurrencyFlags = 0x3169, - SetDifficultyId = 0x322b, + SetDifficultyId = 0x322a, SetDungeonDifficulty = 0x3682, SetEveryoneIsAssistant = 0x3618, SetFactionAtWar = 0x34ec, SetFactionInactive = 0x34ee, SetFactionNotAtWar = 0x34ed, SetGameEventDebugViewState = 0x31ba, - SetInsertItemsLeftToRight = 0x3349, + SetInsertItemsLeftToRight = 0x334a, SetLootMethod = 0x3648, SetLootSpecialization = 0x3551, SetPartyAssignment = 0x3651, @@ -706,22 +712,22 @@ namespace Framework.Constants SetSavedInstanceExtend = 0x3686, SetSelection = 0x353a, SetSheathed = 0x348f, - SetSortBagsRightToLeft = 0x3348, + SetSortBagsRightToLeft = 0x3349, SetTaxiBenchmarkMode = 0x3501, - SetTitle = 0x3290, + SetTitle = 0x328f, SetTradeCurrency = 0x3160, SetTradeGold = 0x315f, SetTradeItem = 0x315d, - SetUsingPartyGarrison = 0x3308, + SetUsingPartyGarrison = 0x3309, SetWarMode = 0x32c0, SetWatchedFaction = 0x34ef, ShowTradeSkill = 0x36bf, SignPetition = 0x3545, SilencePartyTalker = 0x3652, SocketGems = 0x34f9, - SortBags = 0x334a, - SortBankBags = 0x334b, - SortReagentBankBags = 0x334c, + SortBags = 0x334b, + SortBankBags = 0x334c, + SortReagentBankBags = 0x334d, SpellClick = 0x349b, SpiritHealerActivate = 0x34b5, SplitGuildBankItem = 0x34c8, @@ -734,7 +740,7 @@ namespace Framework.Constants StartWarGame = 0x35de, StoreGuildBankItem = 0x34be, SubmitUserFeedback = 0x3693, - SubscriptionInterstitialResponse = 0x33e7, + SubscriptionInterstitialResponse = 0x33e9, SummonResponse = 0x366a, SupportTicketSubmitComplaint = 0x3646, SurrenderArena = 0x3174, @@ -751,15 +757,15 @@ namespace Framework.Constants TaxiNodeStatusQuery = 0x34ae, TaxiQueryAvailableNodes = 0x34b0, TaxiRequestEarlyLanding = 0x34b2, - TimeAdjustmentResponse = 0x3a3d, - TimeSyncResponse = 0x3a3a, - TimeSyncResponseDropped = 0x3a3c, - TimeSyncResponseFailed = 0x3a3b, + TimeAdjustmentResponse = 0x3a41, + TimeSyncResponse = 0x3a3e, + TimeSyncResponseDropped = 0x3a40, + TimeSyncResponseFailed = 0x3a3f, ToggleDifficulty = 0x3657, TogglePvp = 0x32be, TotemDestroyed = 0x3506, ToyClearFanfare = 0x312e, - TradeSkillSetFavorite = 0x3365, + TradeSkillSetFavorite = 0x3366, TrainerBuySpell = 0x34b4, TrainerList = 0x34b3, TransmogrifyItems = 0x3198, @@ -768,26 +774,27 @@ namespace Framework.Constants TwitterCheckStatus = 0x312a, TwitterConnect = 0x3127, TwitterDisconnect = 0x312b, - UiMapQuestLinesRequest = 0x33b8, + UiMapQuestLinesRequest = 0x33b9, UnacceptTrade = 0x315b, UndeleteCharacter = 0x36db, UnlearnSkill = 0x34f3, UnlearnSpecialization = 0x31a6, UnlockVoidStorage = 0x31a2, UpdateAccountData = 0x3695, - UpdateAreaTriggerVisual = 0x32af, + UpdateAreaTriggerVisual = 0x32ae, UpdateClientSettings = 0x3664, - UpdateMissileTrajectory = 0x3a40, + UpdateMissileTrajectory = 0x3a44, UpdateRaidTarget = 0x3650, - UpdateSpellVisual = 0x32ae, + UpdateSpellVisual = 0x32ad, UpdateVasPurchaseStates = 0x36f0, - UpgradeGarrison = 0x32d0, - UpgradeRuneforgeLegendary = 0x33e5, + UpgradeGarrison = 0x32d1, + UpgradeRuneforgeLegendary = 0x33e7, UsedFollow = 0x3187, - UseCritterItem = 0x324c, + UseCritterItem = 0x324b, UseEquipmentSet = 0x3995, - UseItem = 0x32a8, - UseToy = 0x32ab, + UseItem = 0x32a7, + UseToy = 0x32aa, + VasAssignDistribution = 0x3736, VasCheckTransferOk = 0x3708, VasGetQueueMinutes = 0x3707, VasGetServiceStatus = 0x3706, @@ -809,204 +816,205 @@ namespace Framework.Constants public enum ServerOpcodes : uint { AbortNewWorld = 0x259a, - AccountCosmeticAdded = 0x2884, - AccountCriteriaUpdate = 0x286a, - AccountDataTimes = 0x26fb, + AccountCosmeticAdded = 0x2885, + AccountCriteriaUpdate = 0x286b, + AccountDataTimes = 0x26fd, AccountMountUpdate = 0x25ac, - AccountNotificationsResponse = 0x2883, + AccountNotificationsResponse = 0x2884, AccountToyUpdate = 0x25ad, AccountTransmogSetFavoritesUpdate = 0x25b0, AccountTransmogUpdate = 0x25af, - AchievementDeleted = 0x26da, - AchievementEarned = 0x2639, - ActivateEssenceFailed = 0x3016, - ActivateSoulbindFailed = 0x3018, - ActivateTaxiReply = 0x2672, + AchievementDeleted = 0x26dc, + AchievementEarned = 0x263a, + ActivateEssenceFailed = 0x3015, + ActivateSoulbindFailed = 0x3017, + ActivateTaxiReply = 0x2674, ActiveGlyphs = 0x2c54, - AddonListRequest = 0x2638, - AddBattlenetFriendResponse = 0x2633, + AddonListRequest = 0x2639, + AddBattlenetFriendResponse = 0x2634, AddItemPassive = 0x25a8, - AddLossOfControl = 0x2666, - AddRunePower = 0x26ac, - AdjustSplineDuration = 0x25cb, - AdvancedCombatLog = 0x2880, - AdventureJournalDataResponse = 0x287a, - AdventureMapOpenNpc = 0x27e3, - AeLootTargets = 0x260e, - AeLootTargetAck = 0x260f, - AiReaction = 0x26a9, - AlliedRaceDetails = 0x27e9, + AddLossOfControl = 0x2668, + AddRunePower = 0x26ae, + AdjustSplineDuration = 0x25cc, + AdvancedCombatLog = 0x2881, + AdventureJournalDataResponse = 0x287b, + AdventureMapOpenNpc = 0x27e4, + AeLootTargets = 0x260f, + AeLootTargetAck = 0x2610, + AiReaction = 0x26ab, + AlliedRaceDetails = 0x27ea, AllAccountCriteria = 0x2571, AllAchievementData = 0x2570, AllGuildAchievements = 0x29b8, - ApplyMountEquipmentResult = 0x2857, + ApplyMountEquipmentResult = 0x2858, ArchaeologySurveryCast = 0x2588, - AreaPoiUpdateResponse = 0x3011, - AreaSpiritHealerTime = 0x2730, + AreaPoiUpdateResponse = 0x3010, + AreaSpiritHealerTime = 0x2732, AreaTriggerDenied = 0x2902, AreaTriggerForceSetPositionAndFacing = 0x28ff, - AreaTriggerNoCorpse = 0x2707, + AreaTriggerNoCorpse = 0x2709, AreaTriggerPlaySpellVisual = 0x28fe, AreaTriggerRePath = 0x28fd, AreaTriggerReShape = 0x2901, AreaTriggerUnattach = 0x2900, - ArenaCrowdControlSpellResult = 0x2628, - ArenaPrepOpponentSpecializations = 0x263e, - ArtifactEndgamePowersRefunded = 0x2793, - ArtifactForgeError = 0x2791, - ArtifactRespecPrompt = 0x2792, - ArtifactXpGain = 0x27db, - AttackerStateUpdate = 0x294c, - AttackStart = 0x2937, - AttackStop = 0x2938, - AttackSwingError = 0x2946, - AttackSwingLandedLog = 0x2947, - AuctionableTokenAuctionSold = 0x27c4, - AuctionableTokenSellAtMarketPriceResponse = 0x27c3, - AuctionableTokenSellConfirmRequired = 0x27c2, - AuctionClosedNotification = 0x26e4, - AuctionCommandResult = 0x26e1, - AuctionFavoriteList = 0x2871, - AuctionGetCommodityQuoteResult = 0x2868, - AuctionHelloResponse = 0x26df, - AuctionListBiddedItemsResult = 0x2867, - AuctionListBucketsResult = 0x2864, - AuctionListItemsResult = 0x2865, - AuctionListOwnedItemsResult = 0x2866, - AuctionOutbidNotification = 0x26e3, - AuctionOwnerBidNotification = 0x26e5, - AuctionReplicateResponse = 0x26e0, - AuctionWonNotification = 0x26e2, + ArenaCrowdControlSpellResult = 0x2629, + ArenaPrepOpponentSpecializations = 0x263f, + ArtifactEndgamePowersRefunded = 0x2795, + ArtifactForgeError = 0x2793, + ArtifactRespecPrompt = 0x2794, + ArtifactXpGain = 0x27dd, + AttackerStateUpdate = 0x294d, + AttackStart = 0x2938, + AttackStop = 0x2939, + AttackSwingError = 0x2947, + AttackSwingLandedLog = 0x2948, + AuctionableTokenAuctionSold = 0x27c6, + AuctionableTokenSellAtMarketPriceResponse = 0x27c5, + AuctionableTokenSellConfirmRequired = 0x27c4, + AuctionClosedNotification = 0x26e6, + AuctionCommandResult = 0x26e3, + AuctionFavoriteList = 0x2872, + AuctionGetCommodityQuoteResult = 0x2869, + AuctionHelloResponse = 0x26e1, + AuctionListBiddedItemsResult = 0x2868, + AuctionListBucketsResult = 0x2865, + AuctionListItemsResult = 0x2866, + AuctionListOwnedItemsResult = 0x2867, + AuctionOutbidNotification = 0x26e5, + AuctionOwnerBidNotification = 0x26e7, + AuctionReplicateResponse = 0x26e2, + AuctionWonNotification = 0x26e4, AuraPointsDepleted = 0x2c23, AuraUpdate = 0x2c22, AuthChallenge = 0x3048, AuthFailed = 0x256c, AuthResponse = 0x256d, AvailableHotfixes = 0x290f, - AzeriteRespecNpc = 0x27e6, + AzeriteRespecNpc = 0x27e7, BagCleanupFinished = 0x2da7, - BarberShopResult = 0x26b1, - BatchPresenceSubscription = 0x2848, + BarberShopResult = 0x26b3, + BatchPresenceSubscription = 0x2849, BattlefieldList = 0x2927, BattlefieldPortDenied = 0x292d, BattlefieldStatusActive = 0x2923, BattlefieldStatusFailed = 0x2926, + BattlefieldStatusGroupProposalFailed = 0x2930, BattlefieldStatusNeedConfirmation = 0x2922, BattlefieldStatusNone = 0x2925, BattlefieldStatusQueued = 0x2924, BattlefieldStatusWaitForGroups = 0x292f, BattlegroundInfoThrottled = 0x292e, - BattlegroundInit = 0x2949, + BattlegroundInit = 0x294a, BattlegroundPlayerJoined = 0x292b, BattlegroundPlayerLeft = 0x292c, BattlegroundPlayerPositions = 0x2928, - BattlegroundPoints = 0x2948, - BattlenetChallengeAbort = 0x277a, - BattlenetChallengeStart = 0x2779, - BattlenetNotification = 0x27f4, - BattlenetResponse = 0x27f3, - BattleNetConnectionStatus = 0x27f5, - BattlePayAckFailed = 0x2774, - BattlePayBattlePetDelivered = 0x2769, - BattlePayCollectionItemDelivered = 0x276a, - BattlePayConfirmPurchase = 0x2773, - BattlePayDeliveryEnded = 0x2767, - BattlePayDeliveryStarted = 0x2766, - BattlePayDistributionUnrevoked = 0x2764, - BattlePayDistributionUpdate = 0x2765, - BattlePayGetDistributionListResponse = 0x2763, - BattlePayGetProductListResponse = 0x2761, - BattlePayGetPurchaseListResponse = 0x2762, - BattlePayMountDelivered = 0x2768, - BattlePayPurchaseUpdate = 0x2772, - BattlePayStartCheckout = 0x2810, - BattlePayStartDistributionAssignToTargetResponse = 0x2770, - BattlePayStartPurchaseResponse = 0x276f, - BattlePayValidatePurchaseResponse = 0x2804, - BattlePetsHealed = 0x25eb, - BattlePetCageDateError = 0x266d, - BattlePetDeleted = 0x25e8, - BattlePetError = 0x262e, - BattlePetJournal = 0x25e7, - BattlePetJournalLockAcquired = 0x25e5, - BattlePetJournalLockDenied = 0x25e6, - BattlePetLicenseChanged = 0x25ec, - BattlePetRestored = 0x25ea, - BattlePetRevoked = 0x25e9, - BattlePetTrapLevel = 0x25e3, - BattlePetUpdates = 0x25e2, - BinderConfirm = 0x26ee, + BattlegroundPoints = 0x2949, + BattlenetChallengeAbort = 0x277c, + BattlenetChallengeStart = 0x277b, + BattlenetNotification = 0x27f5, + BattlenetResponse = 0x27f4, + BattleNetConnectionStatus = 0x27f6, + BattlePayAckFailed = 0x2776, + BattlePayBattlePetDelivered = 0x276b, + BattlePayCollectionItemDelivered = 0x276c, + BattlePayConfirmPurchase = 0x2775, + BattlePayDeliveryEnded = 0x2769, + BattlePayDeliveryStarted = 0x2768, + BattlePayDistributionUnrevoked = 0x2766, + BattlePayDistributionUpdate = 0x2767, + BattlePayGetDistributionListResponse = 0x2765, + BattlePayGetProductListResponse = 0x2763, + BattlePayGetPurchaseListResponse = 0x2764, + BattlePayMountDelivered = 0x276a, + BattlePayPurchaseUpdate = 0x2774, + BattlePayStartCheckout = 0x2811, + BattlePayStartDistributionAssignToTargetResponse = 0x2772, + BattlePayStartPurchaseResponse = 0x2771, + BattlePayValidatePurchaseResponse = 0x2805, + BattlePetsHealed = 0x25ec, + BattlePetCageDateError = 0x266f, + BattlePetDeleted = 0x25e9, + BattlePetError = 0x262f, + BattlePetJournal = 0x25e8, + BattlePetJournalLockAcquired = 0x25e6, + BattlePetJournalLockDenied = 0x25e7, + BattlePetLicenseChanged = 0x25ed, + BattlePetRestored = 0x25eb, + BattlePetRevoked = 0x25ea, + BattlePetTrapLevel = 0x25e4, + BattlePetUpdates = 0x25e3, + BinderConfirm = 0x26f0, BindPointUpdate = 0x257d, - BlackMarketBidOnItemResult = 0x261e, - BlackMarketOpenResult = 0x261c, - BlackMarketOutbid = 0x261f, - BlackMarketRequestItemsResult = 0x261d, - BlackMarketWon = 0x2620, - BonusRollEmpty = 0x263b, - BossKill = 0x294b, - BreakTarget = 0x2936, + BlackMarketBidOnItemResult = 0x261f, + BlackMarketOpenResult = 0x261d, + BlackMarketOutbid = 0x2620, + BlackMarketRequestItemsResult = 0x261e, + BlackMarketWon = 0x2621, + BonusRollEmpty = 0x263c, + BossKill = 0x294c, + BreakTarget = 0x2937, BroadcastAchievement = 0x2bbc, - BroadcastSummonCast = 0x284a, - BroadcastSummonResponse = 0x284b, - BuyFailed = 0x26ba, - BuySucceeded = 0x26b9, + BroadcastSummonCast = 0x284b, + BroadcastSummonResponse = 0x284c, + BuyFailed = 0x26bc, + BuySucceeded = 0x26bb, CacheInfo = 0x291d, CacheVersion = 0x291c, - CalendarClearPendingAction = 0x2692, - CalendarCommandResult = 0x2693, - CalendarCommunityInvite = 0x2682, - CalendarEventRemovedAlert = 0x268a, - CalendarEventUpdatedAlert = 0x268b, - CalendarInviteAdded = 0x2683, - CalendarInviteAlert = 0x2687, - CalendarInviteNotes = 0x268c, - CalendarInviteNotesAlert = 0x268d, - CalendarInviteRemoved = 0x2684, - CalendarInviteRemovedAlert = 0x2689, - CalendarInviteStatus = 0x2685, - CalendarInviteStatusAlert = 0x2688, - CalendarModeratorStatus = 0x2686, - CalendarRaidLockoutAdded = 0x268e, - CalendarRaidLockoutRemoved = 0x268f, - CalendarRaidLockoutUpdated = 0x2690, - CalendarSendCalendar = 0x2680, - CalendarSendEvent = 0x2681, - CalendarSendNumPending = 0x2691, - CameraEffect = 0x2716, - CancelAutoRepeat = 0x26d0, - CancelCombat = 0x2945, + CalendarClearPendingAction = 0x2694, + CalendarCommandResult = 0x2695, + CalendarCommunityInvite = 0x2684, + CalendarEventRemovedAlert = 0x268c, + CalendarEventUpdatedAlert = 0x268d, + CalendarInviteAdded = 0x2685, + CalendarInviteAlert = 0x2689, + CalendarInviteNotes = 0x268e, + CalendarInviteNotesAlert = 0x268f, + CalendarInviteRemoved = 0x2686, + CalendarInviteRemovedAlert = 0x268b, + CalendarInviteStatus = 0x2687, + CalendarInviteStatusAlert = 0x268a, + CalendarModeratorStatus = 0x2688, + CalendarRaidLockoutAdded = 0x2690, + CalendarRaidLockoutRemoved = 0x2691, + CalendarRaidLockoutUpdated = 0x2692, + CalendarSendCalendar = 0x2682, + CalendarSendEvent = 0x2683, + CalendarSendNumPending = 0x2693, + CameraEffect = 0x2718, + CancelAutoRepeat = 0x26d2, + CancelCombat = 0x2946, CancelOrphanSpellVisual = 0x2c46, - CancelScene = 0x262d, + CancelScene = 0x262e, CancelSpellVisual = 0x2c44, CancelSpellVisualKit = 0x2c48, - CanDuelResult = 0x2941, - CanRedeemTokenForBalanceResponse = 0x2803, + CanDuelResult = 0x2942, + CanRedeemTokenForBalanceResponse = 0x2804, CapturePointRemoved = 0x292a, CastFailed = 0x2c57, CategoryCooldown = 0x2c16, - ChainMissileBounce = 0x25c3, - ChallengeModeComplete = 0x2602, - ChallengeModeRequestLeadersResult = 0x2606, - ChallengeModeReset = 0x2601, - ChallengeModeStart = 0x25ff, - ChallengeModeUpdateDeathCount = 0x2600, - ChangePlayerDifficultyResult = 0x3005, - ChangeRealmTicketResponse = 0x27f6, + ChainMissileBounce = 0x25c4, + ChallengeModeComplete = 0x2603, + ChallengeModeRequestLeadersResult = 0x2607, + ChallengeModeReset = 0x2602, + ChallengeModeStart = 0x2600, + ChallengeModeUpdateDeathCount = 0x2601, + ChangePlayerDifficultyResult = 0x3004, + ChangeRealmTicketResponse = 0x27f7, ChannelList = 0x2bc3, ChannelNotify = 0x2bc0, ChannelNotifyJoined = 0x2bc1, ChannelNotifyLeft = 0x2bc2, - CharacterCheckUpgradeResult = 0x27ad, - CharacterLoginFailed = 0x26f6, - CharacterObjectTestResponse = 0x2778, - CharacterRenameResult = 0x2753, - CharacterUpgradeAborted = 0x27ac, - CharacterUpgradeComplete = 0x27ab, - CharacterUpgradeManualUnrevokeResult = 0x27ae, - CharacterUpgradeStarted = 0x27aa, - CharCustomizeFailure = 0x26d4, - CharCustomizeSuccess = 0x26d5, - CharFactionChangeResult = 0x2797, + CharacterCheckUpgradeResult = 0x27af, + CharacterLoginFailed = 0x26f8, + CharacterObjectTestResponse = 0x277a, + CharacterRenameResult = 0x2755, + CharacterUpgradeAborted = 0x27ae, + CharacterUpgradeComplete = 0x27ad, + CharacterUpgradeManualUnrevokeResult = 0x27b0, + CharacterUpgradeStarted = 0x27ac, + CharCustomizeFailure = 0x26d6, + CharCustomizeSuccess = 0x26d7, + CharFactionChangeResult = 0x2799, Chat = 0x2bad, ChatAutoResponded = 0x2bb8, ChatDown = 0x2bbd, @@ -1020,141 +1028,141 @@ namespace Framework.Constants ChatRestricted = 0x2bb3, ChatServerMessage = 0x2bc4, CheatIgnoreDimishingReturns = 0x2c12, - CheckAbandonNpe = 0x3019, + CheckAbandonNpe = 0x3018, CheckCharacterNameAvailabilityResult = 0x2584, CheckWargameEntry = 0x2592, - ChromieTimeOpenNpc = 0x27eb, - ChromieTimeSelectExpansionSuccess = 0x2874, - ClaimRafRewardResponse = 0x285b, + ChromieTimeOpenNpc = 0x27ec, + ChromieTimeSelectExpansionSuccess = 0x2875, + ClaimRafRewardResponse = 0x285c, ClearAllSpellCharges = 0x2c27, + ClearArenaUnit = 0x2640, ClearBossEmotes = 0x25b7, - ClearCooldown = 0x26ae, + ClearCooldown = 0x26b0, ClearCooldowns = 0x2c26, ClearResurrect = 0x257f, ClearSpellCharges = 0x2c28, - ClearTarget = 0x2942, + ClearTarget = 0x2943, ClearTreasurePickerCache = 0x2aa1, - CloseArtifactForge = 0x2790, - CloseHeartForge = 0x2816, - CloseItemForge = 0x278e, - ClubFinderErrorMessage = 0x2853, - ClubFinderGetClubPostingIdsResponse = 0x2856, - ClubFinderLookupClubPostingsList = 0x2854, - ClubFinderResponseCharacterApplicationList = 0x2851, - ClubFinderResponsePostRecruitmentMessage = 0x2855, - ClubFinderUpdateApplications = 0x2852, - CoinRemoved = 0x260d, - CombatEventFailed = 0x2939, - CommentatorMapInfo = 0x26f8, - CommentatorPlayerInfo = 0x26f9, - CommentatorStateChanged = 0x26f7, - CommerceTokenGetCountResponse = 0x27bf, - CommerceTokenGetLogResponse = 0x27cb, - CommerceTokenGetMarketPriceResponse = 0x27c1, - CommerceTokenUpdate = 0x27c0, - ComplaintResult = 0x26a0, - CompleteShipmentResponse = 0x2789, - ConfirmPartyInvite = 0x2802, + CloseArtifactForge = 0x2792, + CloseHeartForge = 0x2817, + CloseItemForge = 0x2790, + ClubFinderErrorMessage = 0x2854, + ClubFinderGetClubPostingIdsResponse = 0x2857, + ClubFinderLookupClubPostingsList = 0x2855, + ClubFinderResponseCharacterApplicationList = 0x2852, + ClubFinderResponsePostRecruitmentMessage = 0x2856, + ClubFinderUpdateApplications = 0x2853, + CoinRemoved = 0x260e, + CombatEventFailed = 0x293a, + CommentatorMapInfo = 0x26fa, + CommentatorPlayerInfo = 0x26fb, + CommentatorStateChanged = 0x26f9, + CommerceTokenGetCountResponse = 0x27c1, + CommerceTokenGetLogResponse = 0x27cd, + CommerceTokenGetMarketPriceResponse = 0x27c3, + CommerceTokenUpdate = 0x27c2, + ComplaintResult = 0x26a2, + CompleteShipmentResponse = 0x278b, + ConfirmPartyInvite = 0x2803, ConnectTo = 0x304d, - ConquestFormulaConstants = 0x2775, - ConsoleWrite = 0x262b, - ConsumableTokenBuyAtMarketPriceResponse = 0x27c7, - ConsumableTokenBuyChoiceRequired = 0x27c6, - ConsumableTokenCanVeteranBuyResponse = 0x27c5, - ConsumableTokenRedeemConfirmRequired = 0x27c9, - ConsumableTokenRedeemResponse = 0x27ca, - ContactList = 0x2776, - ContributionLastUpdateResponse = 0x2809, - ControlUpdate = 0x263d, - ConvertItemsToCurrencyValue = 0x287d, - CooldownCheat = 0x2729, - CooldownEvent = 0x26ad, - CorpseLocation = 0x2644, - CorpseReclaimDelay = 0x273a, - CorpseTransportQuery = 0x2703, + ConquestFormulaConstants = 0x2777, + ConsoleWrite = 0x262c, + ConsumableTokenBuyAtMarketPriceResponse = 0x27c9, + ConsumableTokenBuyChoiceRequired = 0x27c8, + ConsumableTokenCanVeteranBuyResponse = 0x27c7, + ConsumableTokenRedeemConfirmRequired = 0x27cb, + ConsumableTokenRedeemResponse = 0x27cc, + ContactList = 0x2778, + ContributionLastUpdateResponse = 0x280a, + ControlUpdate = 0x263e, + ConvertItemsToCurrencyValue = 0x287e, + CooldownCheat = 0x272b, + CooldownEvent = 0x26af, + CorpseLocation = 0x2646, + CorpseReclaimDelay = 0x273c, + CorpseTransportQuery = 0x2705, CovenantCallingsAvailabilityResponse = 0x2aa3, - CovenantPreviewOpenNpc = 0x27ec, - CovenantRenownOpenNpc = 0x287c, - CovenantRenownSendCatchupState = 0x287e, - CreateChar = 0x26f2, - CreateShipmentResponse = 0x2788, - CriteriaDeleted = 0x26d9, - CriteriaUpdate = 0x26d3, - CrossedInebriationThreshold = 0x26b5, - CustomLoadScreen = 0x25c6, + CovenantPreviewOpenNpc = 0x27ed, + CovenantRenownOpenNpc = 0x287d, + CovenantRenownSendCatchupState = 0x287f, + CreateChar = 0x26f4, + CreateShipmentResponse = 0x278a, + CriteriaDeleted = 0x26db, + CriteriaUpdate = 0x26d5, + CrossedInebriationThreshold = 0x26b7, + CustomLoadScreen = 0x25c7, DailyQuestsReset = 0x2a80, - DamageCalcLog = 0x27b4, + DamageCalcLog = 0x27b6, DbReply = 0x290e, - DeathReleaseLoc = 0x26c6, - DebugMenuManagerFullUpdate = 0x264a, + DeathReleaseLoc = 0x26c8, + DebugMenuManagerFullUpdate = 0x264c, DefenseMessage = 0x2bb6, - DeleteChar = 0x26f3, + DeleteChar = 0x26f5, DeleteExpiredMissionsResult = 0x2980, - DestroyArenaUnit = 0x2732, - DestructibleBuildingDamage = 0x26ea, + DestroyArenaUnit = 0x2734, + DestructibleBuildingDamage = 0x26ec, DifferentInstanceFromParty = 0x258c, - DisconnectReason = 0x27dd, DisenchantCredit = 0x25a5, DismountResult = 0x257c, DispelFailed = 0x2c30, DisplayGameError = 0x259f, DisplayPlayerChoice = 0x2ffc, - DisplayPromotion = 0x2641, + DisplayPromotion = 0x2643, DisplayQuestPopup = 0x2a9e, - DisplaySoulbindUpdateMessage = 0x2882, - DisplayToast = 0x261a, - DisplayWorldText = 0x27dc, - DontAutoPushSpellsToActionBar = 0x25d9, + DisplaySoulbindUpdateMessage = 0x2883, + DisplayToast = 0x261b, + DisplayWorldText = 0x27de, + DontAutoPushSpellsToActionBar = 0x25da, DropNewConnection = 0x304c, - DuelArranged = 0x293b, - DuelComplete = 0x293f, - DuelCountdown = 0x293e, - DuelInBounds = 0x293d, - DuelOutOfBounds = 0x293c, - DuelRequested = 0x293a, - DuelWinner = 0x2940, - DurabilityDamageDeath = 0x2736, - Emote = 0x27b5, - EnableBarberShop = 0x26b0, - EnchantmentLog = 0x2704, - EncounterEnd = 0x276e, - EncounterStart = 0x276d, - EndLightningStorm = 0x269d, + DuelArranged = 0x293c, + DuelComplete = 0x2940, + DuelCountdown = 0x293f, + DuelInBounds = 0x293e, + DuelOutOfBounds = 0x293d, + DuelRequested = 0x293b, + DuelWinner = 0x2941, + DurabilityDamageDeath = 0x2738, + Emote = 0x27b7, + EnableBarberShop = 0x26b2, + EnchantmentLog = 0x2706, + EncounterEnd = 0x2770, + EncounterStart = 0x276f, + EndLightningStorm = 0x269f, EnterEncryptedMode = 0x3049, EnumCharactersResult = 0x2583, - EnumVasPurchaseStatesResponse = 0x27e2, + EnumVasPurchaseStatesResponse = 0x27e3, EnvironmentalDamageLog = 0x2c21, - EquipmentSetId = 0x26a6, + EquipmentSetId = 0x26a8, ExpectedSpamRecords = 0x2bb1, - ExplorationExperience = 0x274f, - ExternalTransactionIdGenerated = 0x287b, - FactionBonusInfo = 0x2715, + ExplorationExperience = 0x2751, + ExternalTransactionIdGenerated = 0x287c, + FactionBonusInfo = 0x2717, FailedPlayerCondition = 0x2ffa, - FailedQuestTurnIn = 0x27ff, + FailedQuestTurnIn = 0x2800, FeatureSystemStatus = 0x25bb, FeatureSystemStatusGlueScreen = 0x25bc, - FeignDeathResisted = 0x2735, - FishEscaped = 0x26c3, - FishNotHooked = 0x26c2, - FlightSplineSync = 0x2e29, - ForcedDeathUpdate = 0x26c7, - ForceAnim = 0x2741, - ForceAnimations = 0x2742, - ForceObjectRelink = 0x2640, - FriendStatus = 0x2777, - GainMawPower = 0x27d0, - GameObjectActivateAnimKit = 0x25be, - GameObjectBase = 0x2817, - GameObjectCustomAnim = 0x25bf, - GameObjectDespawn = 0x25c0, + FeignDeathResisted = 0x2737, + FishEscaped = 0x26c5, + FishNotHooked = 0x26c4, + FlightSplineSync = 0x2e2b, + ForcedDeathUpdate = 0x26c9, + ForceAnim = 0x2743, + ForceAnimations = 0x2744, + ForceObjectRelink = 0x2642, + FriendStatus = 0x2779, + GainMawPower = 0x27d2, + GameObjectActivateAnimKit = 0x25bf, + GameObjectBase = 0x2818, + GameObjectCustomAnim = 0x25c0, + GameObjectDespawn = 0x25c1, GameObjectPlaySpellVisual = 0x2c4b, GameObjectPlaySpellVisualKit = 0x2c4a, - GameObjectResetState = 0x270f, - GameObjectSetStateLocal = 0x27f2, - GameObjectUiLink = 0x270b, - GameSpeedSet = 0x2676, - GameTimeSet = 0x26fd, - GameTimeUpdate = 0x26fc, + GameObjectResetState = 0x2711, + GameObjectSetStateLocal = 0x27f3, + GameObjectUiLink = 0x270d, + GameSpeedSet = 0x2678, + GameTimeSet = 0x26ff, + GameTimeUpdate = 0x26fe, GarrisonActivateMissionBonusAbility = 0x2982, GarrisonAddEvent = 0x29a5, GarrisonAddFollowerResult = 0x2974, @@ -1229,33 +1237,33 @@ namespace Framework.Constants GarrisonUpgradeResult = 0x296b, GarrisonUseRecallPortalResult = 0x297d, GenerateRandomCharacterNameResult = 0x2585, - GenerateSsoTokenResponse = 0x280a, - GetAccountCharacterListResult = 0x2751, + GenerateSsoTokenResponse = 0x280b, + GetAccountCharacterListResult = 0x2753, GetGarrisonInfoResult = 0x295e, - GetLandingPageShipmentsResponse = 0x278b, - GetRemainingGameTimeResponse = 0x27c8, - GetSelectedTrophyIdResponse = 0x27b2, - GetShipmentsOfTypeResponse = 0x278a, - GetShipmentInfoResponse = 0x2786, - GetTrophyListResponse = 0x27b1, - GetVasAccountCharacterListResult = 0x27de, - GetVasTransferTargetRealmListResult = 0x27df, - GmPlayerInfo = 0x3006, + GetLandingPageShipmentsResponse = 0x278d, + GetRemainingGameTimeResponse = 0x27ca, + GetSelectedTrophyIdResponse = 0x27b4, + GetShipmentsOfTypeResponse = 0x278c, + GetShipmentInfoResponse = 0x2788, + GetTrophyListResponse = 0x27b3, + GetVasAccountCharacterListResult = 0x27df, + GetVasTransferTargetRealmListResult = 0x27e0, + GmPlayerInfo = 0x3005, GmRequestPlayerInfo = 0x2ffb, - GmTicketCaseStatus = 0x2698, - GmTicketSystemStatus = 0x2697, - GodMode = 0x26ed, + GmTicketCaseStatus = 0x269a, + GmTicketSystemStatus = 0x2699, + GodMode = 0x26ef, GossipComplete = 0x2a97, GossipMessage = 0x2a98, - GossipPoi = 0x2783, + GossipPoi = 0x2785, GossipQuestUpdate = 0x2a99, GossipRefreshOptions = 0x2aa6, GroupActionThrottled = 0x2590, - GroupAutoKick = 0x2781, - GroupDecline = 0x277e, - GroupDestroyed = 0x2780, - GroupNewLeader = 0x2623, - GroupUninvite = 0x277f, + GroupAutoKick = 0x2783, + GroupDecline = 0x2780, + GroupDestroyed = 0x2782, + GroupNewLeader = 0x2624, + GroupUninvite = 0x2781, GuildAchievementDeleted = 0x29c5, GuildAchievementEarned = 0x29c4, GuildAchievementMembers = 0x29c7, @@ -1309,60 +1317,61 @@ namespace Framework.Constants GuildRoster = 0x29bb, GuildRosterUpdate = 0x29bc, GuildSendRankChange = 0x29b9, - HealthUpdate = 0x26c4, - HighestThreatUpdate = 0x26cc, + HealthUpdate = 0x26c6, + HighestThreatUpdate = 0x26ce, HotfixConnect = 0x2911, HotfixMessage = 0x2910, - InitializeFactions = 0x2714, + InitializeFactions = 0x2716, InitialSetup = 0x2580, - InitWorldStates = 0x2737, - InspectResult = 0x2627, - InstanceEncounterChangePriority = 0x279d, - InstanceEncounterDisengageUnit = 0x279c, - InstanceEncounterEnd = 0x27a5, - InstanceEncounterEngageUnit = 0x279b, - InstanceEncounterGainCombatResurrectionCharge = 0x27a7, - InstanceEncounterInCombatResurrection = 0x27a6, - InstanceEncounterObjectiveComplete = 0x27a0, - InstanceEncounterObjectiveStart = 0x279f, - InstanceEncounterObjectiveUpdate = 0x27a4, - InstanceEncounterPhaseShiftChanged = 0x27a8, - InstanceEncounterStart = 0x27a1, - InstanceEncounterTimerStart = 0x279e, - InstanceEncounterUpdateAllowReleaseInProgress = 0x27a3, - InstanceEncounterUpdateSuppressRelease = 0x27a2, - InstanceGroupSizeChanged = 0x26eb, - InstanceInfo = 0x262a, - InstanceReset = 0x267b, - InstanceResetFailed = 0x267c, - InstanceSaveCreated = 0x276c, + InitWorldStates = 0x2739, + InspectResult = 0x2628, + InstanceEncounterChangePriority = 0x279f, + InstanceEncounterDisengageUnit = 0x279e, + InstanceEncounterEnd = 0x27a7, + InstanceEncounterEngageUnit = 0x279d, + InstanceEncounterGainCombatResurrectionCharge = 0x27a9, + InstanceEncounterInCombatResurrection = 0x27a8, + InstanceEncounterObjectiveComplete = 0x27a2, + InstanceEncounterObjectiveStart = 0x27a1, + InstanceEncounterObjectiveUpdate = 0x27a6, + InstanceEncounterPhaseShiftChanged = 0x27aa, + InstanceEncounterStart = 0x27a3, + InstanceEncounterTimerStart = 0x27a0, + InstanceEncounterUpdateAllowReleaseInProgress = 0x27a5, + InstanceEncounterUpdateSuppressRelease = 0x27a4, + InstanceGroupSizeChanged = 0x26ed, + InstanceInfo = 0x262b, + InstanceReset = 0x267d, + InstanceResetFailed = 0x267e, + InstanceSaveCreated = 0x276e, InterruptPowerRegen = 0x2c59, InvalidatePageText = 0x2918, InvalidatePlayer = 0x2fff, - InvalidPromotionCode = 0x2743, + InvalidPromotionCode = 0x2745, InventoryChangeFailure = 0x2da5, - InventoryFixupComplete = 0x2801, - InventoryFullOverflow = 0x2812, - IslandsMissionNpc = 0x27e8, - IslandAzeriteGain = 0x274c, - IslandComplete = 0x274d, + InventoryFixupComplete = 0x2802, + InventoryFullOverflow = 0x2813, + IslandsMissionNpc = 0x27e9, + IslandAzeriteGain = 0x274e, + IslandComplete = 0x274f, IsQuestCompleteResponse = 0x2a84, - ItemChanged = 0x26dc, - ItemCooldown = 0x27b3, - ItemEnchantTimeUpdate = 0x2745, + ItemChanged = 0x26de, + ItemCooldown = 0x27b5, + ItemEnchantTimeUpdate = 0x2747, ItemExpirePurchaseRefund = 0x259e, - ItemInteractionComplete = 0x2873, + ItemInteractionChargeInfoUpdated = 0x288b, + ItemInteractionComplete = 0x2874, ItemPurchaseRefundResult = 0x259c, - ItemPushResult = 0x2619, - ItemTimeUpdate = 0x2744, - KickReason = 0x267e, - LatencyReportPing = 0x2885, + ItemPushResult = 0x261a, + ItemTimeUpdate = 0x2746, + KickReason = 0x2680, + LatencyReportPing = 0x2886, LearnedSpells = 0x2c4d, - LearnPvpTalentFailed = 0x25cd, - LearnTalentFailed = 0x25cc, - LegacyLootRules = 0x2818, - LevelLinkingResult = 0x2859, - LevelUpInfo = 0x26db, + LearnPvpTalentFailed = 0x25ce, + LearnTalentFailed = 0x25cd, + LegacyLootRules = 0x2819, + LevelLinkingResult = 0x285a, + LevelUpInfo = 0x26dd, LfgBootPlayer = 0x2a35, LfgDisabled = 0x2a33, LfgExpandSearchPrompt = 0x2a3b, @@ -1390,61 +1399,65 @@ namespace Framework.Constants LfgSlotInvalid = 0x2a30, LfgTeleportDenied = 0x2a32, LfgUpdateStatus = 0x2a24, - LiveRegionAccountRestoreResult = 0x275e, - LiveRegionCharacterCopyResult = 0x275d, - LiveRegionGetAccountCharacterListResult = 0x2752, - LiveRegionKeyBindingsCopyResult = 0x275f, + LiveRegionAccountRestoreResult = 0x2760, + LiveRegionCharacterCopyResult = 0x275f, + LiveRegionGetAccountCharacterListResult = 0x2754, + LiveRegionKeyBindingsCopyResult = 0x2761, LoadCufProfiles = 0x25b8, - LoadEquipmentSet = 0x26ff, - LoginSetTimeSpeed = 0x26fe, + LoadEquipmentSet = 0x2701, + LoginSetTimeSpeed = 0x2700, LoginVerifyWorld = 0x2599, - LogoutCancelAck = 0x267a, - LogoutComplete = 0x2679, - LogoutResponse = 0x2678, - LogXpGain = 0x26d7, - LootAllPassed = 0x2617, - LootList = 0x2731, - LootMoneyNotify = 0x2612, - LootRelease = 0x2611, - LootReleaseAll = 0x2610, - LootRemoved = 0x260c, - LootResponse = 0x260b, - LootRoll = 0x2614, - LootRollsComplete = 0x2616, - LootRollWon = 0x2618, - LossOfControlAuraUpdate = 0x2665, - MailCommandResult = 0x2631, - MailListResult = 0x2746, - MailQueryNextTimeResult = 0x2747, - MapObjectivesInit = 0x294a, - MapObjEvents = 0x25c1, - MasterLootCandidateList = 0x2615, + LogoutCancelAck = 0x267c, + LogoutComplete = 0x267b, + LogoutResponse = 0x267a, + LogXpGain = 0x26d9, + LootAllPassed = 0x2618, + LootList = 0x2733, + LootMoneyNotify = 0x2613, + LootRelease = 0x2612, + LootReleaseAll = 0x2611, + LootRemoved = 0x260d, + LootResponse = 0x260c, + LootRoll = 0x2615, + LootRollsComplete = 0x2617, + LootRollWon = 0x2619, + LossOfControlAuraUpdate = 0x2667, + MailCommandResult = 0x2632, + MailListResult = 0x2748, + MailQueryNextTimeResult = 0x2749, + MapObjectivesInit = 0x294b, + MapObjEvents = 0x25c2, + MasterLootCandidateList = 0x2616, MessageBox = 0x2576, - MinimapPing = 0x26c1, + MinimapPing = 0x26c3, MirrorImageComponentedData = 0x2c14, MirrorImageCreatureData = 0x2c13, - MissileCancel = 0x25c2, - ModifyCooldown = 0x2754, + MissileCancel = 0x25c3, + ModifyCooldown = 0x2756, Motd = 0x2baf, MountResult = 0x257b, - MovementEnforcementAlert = 0x2849, - MoveApplyMovementForce = 0x2e13, - MoveDisableCollision = 0x2e0f, + MovementEnforcementAlert = 0x284a, + MoveApplyInertia = 0x2e2e, + MoveApplyMovementForce = 0x2e15, + MoveDisableCollision = 0x2e11, MoveDisableDoubleJump = 0x2dfd, MoveDisableGravity = 0x2e0d, + MoveDisableInertia = 0x2e0f, MoveDisableTransitionBetweenSwimAndFly = 0x2e0c, - MoveEnableCollision = 0x2e10, + MoveEnableCollision = 0x2e12, MoveEnableDoubleJump = 0x2dfc, MoveEnableGravity = 0x2e0e, + MoveEnableInertia = 0x2e10, MoveEnableTransitionBetweenSwimAndFly = 0x2e0b, MoveKnockBack = 0x2e03, - MoveRemoveMovementForce = 0x2e14, + MoveRemoveInertia = 0x2e2f, + MoveRemoveMovementForce = 0x2e16, MoveRoot = 0x2df9, MoveSetActiveMover = 0x2dd5, MoveSetCanFly = 0x2e05, MoveSetCanTurnWhileFalling = 0x2e07, - MoveSetCollisionHeight = 0x2e11, - MoveSetCompoundState = 0x2e15, + MoveSetCollisionHeight = 0x2e13, + MoveSetCompoundState = 0x2e17, MoveSetFeatherFall = 0x2dff, MoveSetFlightBackSpeed = 0x2df5, MoveSetFlightSpeed = 0x2df4, @@ -1459,37 +1472,37 @@ namespace Framework.Constants MoveSetSwimBackSpeed = 0x2df3, MoveSetSwimSpeed = 0x2df2, MoveSetTurnRate = 0x2df7, - MoveSetVehicleRecId = 0x2e12, + MoveSetVehicleRecId = 0x2e14, MoveSetWalkSpeed = 0x2df6, MoveSetWaterWalk = 0x2dfb, - MoveSkipTime = 0x2e16, - MoveSplineDisableCollision = 0x2e1b, - MoveSplineDisableGravity = 0x2e19, - MoveSplineEnableCollision = 0x2e1c, - MoveSplineEnableGravity = 0x2e1a, - MoveSplineRoot = 0x2e17, - MoveSplineSetFeatherFall = 0x2e1d, + MoveSkipTime = 0x2e18, + MoveSplineDisableCollision = 0x2e1d, + MoveSplineDisableGravity = 0x2e1b, + MoveSplineEnableCollision = 0x2e1e, + MoveSplineEnableGravity = 0x2e1c, + MoveSplineRoot = 0x2e19, + MoveSplineSetFeatherFall = 0x2e1f, MoveSplineSetFlightBackSpeed = 0x2dec, MoveSplineSetFlightSpeed = 0x2deb, - MoveSplineSetFlying = 0x2e27, - MoveSplineSetHover = 0x2e1f, - MoveSplineSetLandWalk = 0x2e22, - MoveSplineSetNormalFall = 0x2e1e, + MoveSplineSetFlying = 0x2e29, + MoveSplineSetHover = 0x2e21, + MoveSplineSetLandWalk = 0x2e24, + MoveSplineSetNormalFall = 0x2e20, MoveSplineSetPitchRate = 0x2def, MoveSplineSetRunBackSpeed = 0x2de8, - MoveSplineSetRunMode = 0x2e25, + MoveSplineSetRunMode = 0x2e27, MoveSplineSetRunSpeed = 0x2de7, MoveSplineSetSwimBackSpeed = 0x2dea, MoveSplineSetSwimSpeed = 0x2de9, MoveSplineSetTurnRate = 0x2dee, - MoveSplineSetWalkMode = 0x2e26, + MoveSplineSetWalkMode = 0x2e28, MoveSplineSetWalkSpeed = 0x2ded, - MoveSplineSetWaterWalk = 0x2e21, - MoveSplineStartSwim = 0x2e23, - MoveSplineStopSwim = 0x2e24, - MoveSplineUnroot = 0x2e18, - MoveSplineUnsetFlying = 0x2e28, - MoveSplineUnsetHover = 0x2e20, + MoveSplineSetWaterWalk = 0x2e23, + MoveSplineStartSwim = 0x2e25, + MoveSplineStopSwim = 0x2e26, + MoveSplineUnroot = 0x2e1a, + MoveSplineUnsetFlying = 0x2e2a, + MoveSplineUnsetHover = 0x2e22, MoveTeleport = 0x2e04, MoveUnroot = 0x2dfa, MoveUnsetCanFly = 0x2e06, @@ -1497,6 +1510,7 @@ namespace Framework.Constants MoveUnsetHovering = 0x2e02, MoveUnsetIgnoreMovementForces = 0x2e0a, MoveUpdate = 0x2de0, + MoveUpdateApplyInertia = 0x2e30, MoveUpdateApplyMovementForce = 0x2de4, MoveUpdateCollisionHeight = 0x2ddf, MoveUpdateFlightBackSpeed = 0x2ddc, @@ -1504,6 +1518,7 @@ namespace Framework.Constants MoveUpdateKnockBack = 0x2de2, MoveUpdateModMovementForceMagnitude = 0x2de3, MoveUpdatePitchRate = 0x2dde, + MoveUpdateRemoveInertia = 0x2e31, MoveUpdateRemoveMovementForce = 0x2de5, MoveUpdateRunBackSpeed = 0x2dd7, MoveUpdateRunSpeed = 0x2dd6, @@ -1512,121 +1527,122 @@ namespace Framework.Constants MoveUpdateTeleport = 0x2de1, MoveUpdateTurnRate = 0x2ddd, MoveUpdateWalkSpeed = 0x2dd8, - MultiFloorLeaveFloor = 0x27cd, - MultiFloorNewFloor = 0x27cc, - MythicPlusAllMapStats = 0x2603, - MythicPlusCurrentAffixes = 0x2605, - MythicPlusNewWeekRecord = 0x2608, - MythicPlusSeasonData = 0x2604, - NeutralPlayerFactionSelectResult = 0x25d4, - NewTaxiPath = 0x2673, + MultiFloorLeaveFloor = 0x27cf, + MultiFloorNewFloor = 0x27ce, + MythicPlusAllMapStats = 0x2604, + MythicPlusCurrentAffixes = 0x2606, + MythicPlusNewWeekRecord = 0x2609, + MythicPlusSeasonData = 0x2605, + NeutralPlayerFactionSelectResult = 0x25d5, + NewTaxiPath = 0x2675, NewWorld = 0x2598, NotifyDestLocSpellCast = 0x2c43, - NotifyMissileTrajectoryCollision = 0x269f, + NotifyMissileTrajectoryCollision = 0x26a1, NotifyMoney = 0x259b, - NotifyReceivedMail = 0x2632, - OfferPetitionError = 0x26aa, - OnCancelExpectedRideVehicleAura = 0x26d8, + NotifyReceivedMail = 0x2633, + OfferPetitionError = 0x26ac, + OnCancelExpectedRideVehicleAura = 0x26da, OnMonsterMove = 0x2dd4, - OpenAnimaDiversionUi = 0x270c, - OpenArtifactForge = 0x278f, + OpenAnimaDiversionUi = 0x270e, + OpenArtifactForge = 0x2791, OpenContainer = 0x2da6, - OpenHeartForge = 0x2815, - OpenItemForge = 0x278d, + OpenHeartForge = 0x2816, + OpenItemForge = 0x278f, OpenLfgDungeonFinder = 0x2a31, - OpenShipmentNpcFromGossip = 0x2785, - OpenShipmentNpcResult = 0x2787, - OverrideLight = 0x26af, - PageText = 0x270a, - PartyCommandResult = 0x2782, + OpenShipmentNpcFromGossip = 0x2787, + OpenShipmentNpcResult = 0x2789, + OverrideLight = 0x26b1, + PageText = 0x270c, + PartyCommandResult = 0x2784, PartyInvite = 0x25b9, - PartyKillLog = 0x274a, - PartyMemberFullState = 0x2749, - PartyMemberPartialState = 0x2748, - PartyNotifyLfgLeaderChange = 0x2879, - PartyUpdate = 0x25ed, - PauseMirrorTimer = 0x2701, - PendingRaidLock = 0x26e9, + PartyKillLog = 0x274c, + PartyMemberFullState = 0x274b, + PartyMemberPartialState = 0x274a, + PartyNotifyLfgLeaderChange = 0x287a, + PartyUpdate = 0x25ee, + PassedTimeEvents = 0x25be, + PauseMirrorTimer = 0x2703, + PendingRaidLock = 0x26eb, PetitionAlreadySigned = 0x25a1, PetitionRenameGuildResponse = 0x29fa, - PetitionShowList = 0x26b2, - PetitionShowSignatures = 0x26b3, - PetitionSignResults = 0x273c, - PetActionFeedback = 0x2739, - PetActionSound = 0x2695, + PetitionShowList = 0x26b4, + PetitionShowSignatures = 0x26b5, + PetitionSignResults = 0x273e, + PetActionFeedback = 0x273b, + PetActionSound = 0x2697, PetAdded = 0x2595, - PetBattleChatRestricted = 0x25fa, - PetBattleDebugQueueDumpResponse = 0x266a, - PetBattleFinalizeLocation = 0x25f3, - PetBattleFinalRound = 0x25f8, - PetBattleFinished = 0x25f9, - PetBattleFirstRound = 0x25f5, - PetBattleInitialUpdate = 0x25f4, - PetBattleMaxGameLengthWarning = 0x25fb, - PetBattlePvpChallenge = 0x25f2, - PetBattleQueueProposeMatch = 0x262f, - PetBattleQueueStatus = 0x2630, - PetBattleReplacementsMade = 0x25f7, - PetBattleRequestFailed = 0x25f1, - PetBattleRoundResult = 0x25f6, - PetBattleSlotUpdates = 0x25e4, + PetBattleChatRestricted = 0x25fb, + PetBattleDebugQueueDumpResponse = 0x266c, + PetBattleFinalizeLocation = 0x25f4, + PetBattleFinalRound = 0x25f9, + PetBattleFinished = 0x25fa, + PetBattleFirstRound = 0x25f6, + PetBattleInitialUpdate = 0x25f5, + PetBattleMaxGameLengthWarning = 0x25fc, + PetBattlePvpChallenge = 0x25f3, + PetBattleQueueProposeMatch = 0x2630, + PetBattleQueueStatus = 0x2631, + PetBattleReplacementsMade = 0x25f8, + PetBattleRequestFailed = 0x25f2, + PetBattleRoundResult = 0x25f7, + PetBattleSlotUpdates = 0x25e5, PetCastFailed = 0x2c58, PetClearSpells = 0x2c24, - PetDismissSound = 0x2696, - PetGodMode = 0x2670, - PetGuids = 0x26f5, + PetDismissSound = 0x2698, + PetGodMode = 0x2672, + PetGuids = 0x26f7, PetLearnedSpells = 0x2c4f, PetMode = 0x258b, - PetNameInvalid = 0x26b7, + PetNameInvalid = 0x26b9, PetNewlyTamed = 0x2589, PetSlotUpdated = 0x258a, PetSpellsMessage = 0x2c25, PetStableList = 0x2596, PetStableResult = 0x2597, - PetTameFailure = 0x26a7, + PetTameFailure = 0x26a9, PetUnlearnedSpells = 0x2c50, PhaseShiftChange = 0x2578, - PlayedTime = 0x26c8, - PlayerAzeriteItemEquippedStatusChanged = 0x3015, - PlayerAzeriteItemGains = 0x3014, - PlayerBonusRollFailed = 0x3017, + PlayedTime = 0x26ca, + PlayerAzeriteItemEquippedStatusChanged = 0x3014, + PlayerAzeriteItemGains = 0x3013, + PlayerBonusRollFailed = 0x3016, PlayerBound = 0x2ff8, PlayerChoiceClear = 0x2ffe, PlayerChoiceDisplayError = 0x2ffd, - PlayerConditionResult = 0x300b, - PlayerIsAdventureMapPoiValid = 0x300a, - PlayerOpenSubscriptionInterstitial = 0x300f, + PlayerConditionResult = 0x300a, + PlayerIsAdventureMapPoiValid = 0x3009, + PlayerOpenSubscriptionInterstitial = 0x300e, PlayerSaveGuildEmblem = 0x29f9, - PlayerShowUiEventToast = 0x301a, - PlayerSkinned = 0x3007, - PlayerTabardVendorActivate = 0x3008, - PlayerTutorialHighlightSpell = 0x300e, - PlayerTutorialUnhighlightSpell = 0x300d, - PlayMusic = 0x2759, - PlayObjectSound = 0x275a, - PlayOneShotAnimKit = 0x2721, + PlayerShowUiEventToast = 0x3019, + PlayerSkinned = 0x3006, + PlayerTabardVendorActivate = 0x3007, + PlayerTutorialHighlightSpell = 0x300d, + PlayerTutorialUnhighlightSpell = 0x300c, + PlayMusic = 0x275b, + PlayObjectSound = 0x275c, + PlayOneShotAnimKit = 0x2723, PlayOrphanSpellVisual = 0x2c47, - PlayScene = 0x262c, - PlaySound = 0x2758, - PlaySpeakerbotSound = 0x275b, + PlayScene = 0x262d, + PlaySound = 0x275a, + PlaySpeakerbotSound = 0x275d, PlaySpellVisual = 0x2c45, PlaySpellVisualKit = 0x2c49, - PlayTimeWarning = 0x26ef, + PlayTimeWarning = 0x26f1, Pong = 0x304e, - PowerUpdate = 0x26c5, + PowerUpdate = 0x26c7, PreloadChildMap = 0x2579, - PrepopulateNameCache = 0x284c, - PreRessurect = 0x2757, - PrintNotification = 0x25c5, - ProcResist = 0x274b, + PrepopulateNameCache = 0x284d, + PreRessurect = 0x2759, + PrintNotification = 0x25c6, + ProcResist = 0x274d, PushSpellToActionBar = 0x2c51, - PvpCredit = 0x2944, - PvpMatchComplete = 0x294e, - PvpMatchInitialize = 0x294f, - PvpMatchStart = 0x294d, - PvpMatchStatistics = 0x2931, - PvpOptionsEnabled = 0x2933, - PvpTierRecord = 0x2886, + PvpCredit = 0x2945, + PvpMatchComplete = 0x294f, + PvpMatchInitialize = 0x2950, + PvpMatchStart = 0x294e, + PvpMatchStatistics = 0x2932, + PvpOptionsEnabled = 0x2934, + PvpTierRecord = 0x2887, QueryBattlePetNameResponse = 0x291a, QueryCreatureResponse = 0x2914, QueryGameObjectResponse = 0x2915, @@ -1638,11 +1654,11 @@ namespace Framework.Constants QueryPageTextResponse = 0x2917, QueryPetitionResponse = 0x291b, QueryPetNameResponse = 0x2919, - QueryPlayerNameByCommunityIdResponse = 0x3003, - QueryPlayerNameResponse = 0x3002, + QueryPlayerNameByCommunityIdResponse = 0x3002, + QueryPlayerNameResponse = 0x301b, QueryQuestInfoResponse = 0x2a96, QueryRealmGuildMasterInfoResponse = 0x29e6, - QueryTimeResponse = 0x26d6, + QueryTimeResponse = 0x26d8, QuestCompletionNpcResponse = 0x2a81, QuestConfirmAccept = 0x2a8f, QuestForceRemoved = 0x2a9c, @@ -1660,50 +1676,50 @@ namespace Framework.Constants QuestPoiQueryResponse = 0x2a9d, QuestPoiUpdateResponse = 0x2a9f, QuestPushResult = 0x2a90, - QuestSessionInfoResponse = 0x286f, - QuestSessionReadyCheck = 0x285d, - QuestSessionReadyCheckResponse = 0x285e, - QuestSessionResult = 0x285c, + QuestSessionInfoResponse = 0x2870, + QuestSessionReadyCheck = 0x285e, + QuestSessionReadyCheckResponse = 0x285f, + QuestSessionResult = 0x285d, QuestUpdateAddCredit = 0x2a8c, QuestUpdateAddCreditSimple = 0x2a8d, QuestUpdateAddPvpCredit = 0x2a8e, QuestUpdateComplete = 0x2a89, QuestUpdateFailed = 0x2a8a, QuestUpdateFailedTimer = 0x2a8b, - QueueSummaryUpdate = 0x2800, - RafAccountInfo = 0x285a, - RafActivityStateChanged = 0x286b, - RaidDifficultySet = 0x2798, - RaidGroupOnly = 0x279a, + QueueSummaryUpdate = 0x2801, + RafAccountInfo = 0x285b, + RafActivityStateChanged = 0x286c, + RaidDifficultySet = 0x279a, + RaidGroupOnly = 0x279c, RaidInstanceMessage = 0x2bb4, RaidMarkersChanged = 0x25a2, - RandomRoll = 0x2626, - RatedPvpInfo = 0x2930, - ReadyCheckCompleted = 0x25f0, - ReadyCheckResponse = 0x25ef, - ReadyCheckStarted = 0x25ee, - ReadItemResultFailed = 0x2794, - ReadItemResultOk = 0x278c, - RealmLookupInfo = 0x27b8, + RandomRoll = 0x2627, + RatedPvpInfo = 0x2931, + ReadyCheckCompleted = 0x25f1, + ReadyCheckResponse = 0x25f0, + ReadyCheckStarted = 0x25ef, + ReadItemResultFailed = 0x2796, + ReadItemResultOk = 0x278e, + RealmLookupInfo = 0x27ba, RealmQueryResponse = 0x2913, - ReattachResurrect = 0x273b, - RecruitAFriendFailure = 0x26b4, - RefreshComponent = 0x2646, + ReattachResurrect = 0x273d, + RecruitAFriendFailure = 0x26b6, + RefreshComponent = 0x2648, RefreshSpellHistory = 0x2c2c, RemoveItemPassive = 0x25a9, RemoveSpellFromActionBar = 0x2c52, - ReplaceTrophyResponse = 0x27b0, + ReplaceTrophyResponse = 0x27b2, ReportPvpPlayerAfkResult = 0x3001, RequestCemeteryListResponse = 0x2591, - RequestPvpRewardsResponse = 0x2934, - RequestScheduledPvpInfoResponse = 0x2935, + RequestPvpRewardsResponse = 0x2935, + RequestScheduledPvpInfoResponse = 0x2936, ResearchComplete = 0x2587, ResetCompressionContext = 0x304f, - ResetFailedNotify = 0x26ab, + ResetFailedNotify = 0x26ad, ResetQuestPoi = 0x2aa0, - ResetRangedCombatTimer = 0x2943, + ResetRangedCombatTimer = 0x2944, ResetWeeklyCurrency = 0x2575, - RespecWipeConfirm = 0x2609, + RespecWipeConfirm = 0x260a, RespondInspectAchievements = 0x2572, RestartGlobalCooldown = 0x2c60, RestrictedAccountWarning = 0x25b5, @@ -1713,82 +1729,82 @@ namespace Framework.Constants ResumeToken = 0x25a7, ResurrectRequest = 0x257e, ResyncRunes = 0x2c5f, - ReturnApplicantList = 0x2850, - ReturnRecruitingClubs = 0x284f, + ReturnApplicantList = 0x2851, + ReturnRecruitingClubs = 0x2850, RoleChangedInform = 0x258d, RoleChosen = 0x2a39, RolePollInform = 0x258e, - RuneforgeLegendaryCraftingOpenNpc = 0x27ed, + RuneforgeLegendaryCraftingOpenNpc = 0x27ee, RuneRegenDebug = 0x25b2, - ScenarioCompleted = 0x27da, - ScenarioPois = 0x2629, - ScenarioProgressUpdate = 0x2622, - ScenarioShowCriteria = 0x27f0, - ScenarioState = 0x2621, - ScenarioUiUpdate = 0x27ef, - ScenarioVacate = 0x2795, - SceneObjectEvent = 0x25da, - SceneObjectPetBattleFinalRound = 0x25df, - SceneObjectPetBattleFinished = 0x25e0, - SceneObjectPetBattleFirstRound = 0x25dc, - SceneObjectPetBattleInitialUpdate = 0x25db, - SceneObjectPetBattleReplacementsMade = 0x25de, - SceneObjectPetBattleRoundResult = 0x25dd, + ScenarioCompleted = 0x27dc, + ScenarioPois = 0x262a, + ScenarioProgressUpdate = 0x2623, + ScenarioShowCriteria = 0x27f1, + ScenarioState = 0x2622, + ScenarioUiUpdate = 0x27f0, + ScenarioVacate = 0x2797, + SceneObjectEvent = 0x25db, + SceneObjectPetBattleFinalRound = 0x25e0, + SceneObjectPetBattleFinished = 0x25e1, + SceneObjectPetBattleFirstRound = 0x25dd, + SceneObjectPetBattleInitialUpdate = 0x25dc, + SceneObjectPetBattleReplacementsMade = 0x25df, + SceneObjectPetBattleRoundResult = 0x25de, ScriptCast = 0x2c56, SeasonInfo = 0x25bd, - SellResponse = 0x26b8, + SellResponse = 0x26ba, SendItemPassives = 0x25aa, SendKnownSpells = 0x2c2a, - SendRaidTargetUpdateAll = 0x2624, - SendRaidTargetUpdateSingle = 0x2625, + SendRaidTargetUpdateAll = 0x2625, + SendRaidTargetUpdateSingle = 0x2626, SendSpellCharges = 0x2c2d, SendSpellHistory = 0x2c2b, SendUnlearnSpells = 0x2c2e, - ServerFirstAchievements = 0x2643, - ServerTime = 0x2677, - ServerTimeOffset = 0x2705, + ServerFirstAchievements = 0x2645, + ServerTime = 0x2679, + ServerTimeOffset = 0x2707, SetupCurrency = 0x2573, SetupResearchHistory = 0x2586, - SetAiAnimKit = 0x2720, - SetAllTaskProgress = 0x277c, - SetAnimTier = 0x2724, - SetChrUpgradeTier = 0x25d7, + SetAiAnimKit = 0x2722, + SetAllTaskProgress = 0x277e, + SetAnimTier = 0x2726, + SetChrUpgradeTier = 0x25d8, SetCurrency = 0x2574, SetDfFastLaunchResult = 0x2a2e, - SetDungeonDifficulty = 0x2699, - SetFactionAtWar = 0x26f1, - SetFactionNotVisible = 0x271b, - SetFactionStanding = 0x271c, - SetFactionVisible = 0x271a, + SetDungeonDifficulty = 0x269b, + SetFactionAtWar = 0x26f3, + SetFactionNotVisible = 0x271d, + SetFactionStanding = 0x271e, + SetFactionVisible = 0x271c, SetFlatSpellModifier = 0x2c36, - SetForcedReactions = 0x270e, + SetForcedReactions = 0x2710, SetItemPurchaseData = 0x259d, - SetLootMethodFailed = 0x27be, + SetLootMethodFailed = 0x27c0, SetMaxWeeklyQuantity = 0x25a0, - SetMeleeAnimKit = 0x2723, - SetMovementAnimKit = 0x2722, + SetMeleeAnimKit = 0x2725, + SetMovementAnimKit = 0x2724, SetPctSpellModifier = 0x2c37, - SetPetSpecialization = 0x261b, - SetPlayerDeclinedNamesResult = 0x3004, + SetPetSpecialization = 0x261c, + SetPlayerDeclinedNamesResult = 0x3003, SetPlayHoverAnim = 0x25b6, - SetProficiency = 0x2725, - SetQuestReplayCooldownOverride = 0x2863, + SetProficiency = 0x2727, + SetQuestReplayCooldownOverride = 0x2864, SetShipmentReadyResponse = 0x2997, SetSpellCharges = 0x2c29, - SetTaskComplete = 0x277d, - SetTimeZoneInformation = 0x266c, - SetVehicleRecId = 0x26e8, + SetTaskComplete = 0x277f, + SetTimeZoneInformation = 0x266e, + SetVehicleRecId = 0x26ea, ShipmentFactionUpdateResult = 0x2998, - ShowBank = 0x2674, - ShowMailbox = 0x2796, - ShowNeutralPlayerFactionSelectUi = 0x25d3, + ShowBank = 0x2676, + ShowMailbox = 0x2798, + ShowNeutralPlayerFactionSelectUi = 0x25d4, ShowQuestCompletionText = 0x2a95, - ShowTaxiNodes = 0x26c0, - ShowTradeSkillResponse = 0x2760, - SocketGemsFailure = 0x2718, - SocketGemsSuccess = 0x2717, - SpecialMountAnim = 0x2694, - SpecInvoluntarilyChanged = 0x2709, + ShowTaxiNodes = 0x26c2, + ShowTradeSkillResponse = 0x2762, + SocketGemsFailure = 0x271a, + SocketGemsSuccess = 0x2719, + SpecialMountAnim = 0x2696, + SpecInvoluntarilyChanged = 0x270b, SpellAbsorbLog = 0x2c1f, SpellCategoryCooldown = 0x2c17, SpellChannelStart = 0x2c34, @@ -1813,94 +1829,95 @@ namespace Framework.Constants SpellPeriodicAuraLog = 0x2c1b, SpellPrepare = 0x2c38, SpellStart = 0x2c3a, - SpellVisualLoadScreen = 0x25c7, - SpiritHealerConfirm = 0x2706, - SplashScreenShowLatest = 0x2875, - StandStateUpdate = 0x270d, - StartElapsedTimer = 0x25fc, - StartElapsedTimers = 0x25fe, - StartLightningStorm = 0x269c, - StartLootRoll = 0x2613, - StartMirrorTimer = 0x2700, + SpellVisualLoadScreen = 0x25c8, + SpiritHealerConfirm = 0x2708, + SplashScreenShowLatest = 0x2876, + StandStateUpdate = 0x270f, + StartElapsedTimer = 0x25fd, + StartElapsedTimers = 0x25ff, + StartLightningStorm = 0x269e, + StartLootRoll = 0x2614, + StartMirrorTimer = 0x2702, StartTimer = 0x25a4, - StopElapsedTimer = 0x25fd, - StopMirrorTimer = 0x2702, - StopSpeakerbotSound = 0x275c, + StopElapsedTimer = 0x25fe, + StopMirrorTimer = 0x2704, + StopSpeakerbotSound = 0x275e, StreamingMovies = 0x25a3, - SummonCancel = 0x26a5, + SummonCancel = 0x26a7, SummonRaidMemberValidateFailed = 0x258f, - SummonRequest = 0x2712, + SummonRequest = 0x2714, SupercededSpells = 0x2c4c, SuspendComms = 0x304a, SuspendToken = 0x25a6, - SyncWowEntitlements = 0x286d, - TalentsInvoluntarilyReset = 0x2708, - TaxiNodeStatus = 0x2671, - TextEmote = 0x266f, - ThreatClear = 0x26cf, - ThreatRemove = 0x26ce, - ThreatUpdate = 0x26cd, + SyncWowEntitlements = 0x286e, + TalentsInvoluntarilyReset = 0x270a, + TaxiNodeStatus = 0x2673, + TextEmote = 0x2671, + ThreatClear = 0x26d1, + ThreatRemove = 0x26d0, + ThreatUpdate = 0x26cf, TimeAdjustment = 0x2dd3, TimeSyncRequest = 0x2dd2, - TitleEarned = 0x26ca, - TitleLost = 0x26cb, - TotemCreated = 0x26bb, - TotemDurationChanged = 0x26bc, - TotemMoved = 0x26bd, + TitleEarned = 0x26cc, + TitleLost = 0x26cd, + TotemCreated = 0x26bd, + TotemDurationChanged = 0x26be, + TotemMoved = 0x26bf, TradeStatus = 0x2582, TradeUpdated = 0x2581, - TrainerBuyFailed = 0x26d2, - TrainerList = 0x26d1, - TransferAborted = 0x26f4, - TransferPending = 0x25c8, - TransmogrifyNpc = 0x27e5, + TrainerBuyFailed = 0x26d4, + TrainerList = 0x26d3, + TransferAborted = 0x26f6, + TransferPending = 0x25c9, + TransmogrifyNpc = 0x27e6, TreasurePickerResponse = 0x291f, - TriggerCinematic = 0x27b6, - TriggerMovie = 0x26be, - TurnInPetitionResult = 0x273e, - TutorialFlags = 0x27a9, + TriggerCinematic = 0x27b8, + TriggerMovie = 0x26c0, + TurnInPetitionResult = 0x2740, + TutorialFlags = 0x27ab, TwitterStatus = 0x3043, - UiHealingRangeModified = 0x2734, - UiItemInteractionNpc = 0x27e7, + UiHealingRangeModified = 0x2736, + UiItemInteractionNpc = 0x27e8, UiMapQuestLinesResponse = 0x2aa2, - UndeleteCharacterResponse = 0x27b9, - UndeleteCooldownStatusResponse = 0x27ba, + UndeleteCharacterResponse = 0x27bb, + UndeleteCooldownStatusResponse = 0x27bc, UnlearnedSpells = 0x2c4e, UnloadChildMap = 0x257a, - UpdateAadcStatusResponse = 0x2887, - UpdateAccountData = 0x26fa, - UpdateActionButtons = 0x25d8, - UpdateBnetSessionKey = 0x2811, + UpdateAadcStatusResponse = 0x2888, + UpdateAccountData = 0x26fc, + UpdateActionButtons = 0x25d9, + UpdateBnetSessionKey = 0x2812, UpdateCapturePoint = 0x2929, - UpdateCelestialBody = 0x280d, - UpdateCharacterFlags = 0x27af, - UpdateChargeCategoryCooldown = 0x2756, - UpdateCooldown = 0x2755, + UpdateCelestialBody = 0x280e, + UpdateCharacterFlags = 0x27b1, + UpdateChargeCategoryCooldown = 0x2758, + UpdateCooldown = 0x2757, UpdateDailyMissionCounter = 0x297f, - UpdateExpansionLevel = 0x263c, - UpdateGameTimeState = 0x2814, - UpdateInstanceOwnership = 0x269e, - UpdateLastInstance = 0x267d, - UpdateObject = 0x27b7, - UpdatePrimarySpec = 0x25d0, - UpdateTalentData = 0x25cf, - UpdateTaskProgress = 0x277b, + UpdateExpansionLevel = 0x263d, + UpdateGameTimeState = 0x2815, + UpdateInstanceOwnership = 0x26a0, + UpdateLastInstance = 0x267f, + UpdateObject = 0x27b9, + UpdatePrimarySpec = 0x25d1, + UpdateTalentData = 0x25d0, + UpdateTaskProgress = 0x277d, UpdateWeeklySpellUsage = 0x2c19, - UpdateWorldState = 0x2738, + UpdateWorldState = 0x273a, UserlistAdd = 0x2bb9, UserlistRemove = 0x2bba, UserlistUpdate = 0x2bbb, - UseEquipmentSetResult = 0x273f, - VasCheckTransferOkResponse = 0x2808, - VasGetQueueMinutesResponse = 0x2806, - VasGetServiceStatusResponse = 0x2805, - VasPurchaseComplete = 0x27e1, - VasPurchaseStateUpdate = 0x27e0, + UseEquipmentSetResult = 0x2741, + VasAssignDistributionResponse = 0x288a, + VasCheckTransferOkResponse = 0x2809, + VasGetQueueMinutesResponse = 0x2807, + VasGetServiceStatusResponse = 0x2806, + VasPurchaseComplete = 0x27e2, + VasPurchaseStateUpdate = 0x27e1, VendorInventory = 0x25b4, - VignetteUpdate = 0x3009, - VoiceChannelInfoResponse = 0x280c, - VoiceChannelSttTokenResponse = 0x2881, - VoiceLoginResponse = 0x280b, + VignetteUpdate = 0x3008, + VoiceChannelInfoResponse = 0x280d, + VoiceChannelSttTokenResponse = 0x2882, + VoiceLoginResponse = 0x280c, VoidItemSwapResponse = 0x2da4, VoidStorageContents = 0x2da1, VoidStorageFailed = 0x2da0, @@ -1909,24 +1926,24 @@ namespace Framework.Constants WaitQueueFinish = 0x256f, WaitQueueUpdate = 0x256e, Warden3Data = 0x2577, - Warden3Disabled = 0x280f, - Warden3Enabled = 0x280e, - WarfrontComplete = 0x274e, - WargameRequestSuccessfullySentToOpponent = 0x2932, - Weather = 0x269b, - WeeklyRewardsProgressResult = 0x2878, - WeeklyRewardsResult = 0x2876, - WeeklyRewardClaimResult = 0x2877, + Warden3Disabled = 0x2810, + Warden3Enabled = 0x280f, + WarfrontComplete = 0x2750, + WargameRequestSuccessfullySentToOpponent = 0x2933, + Weather = 0x269d, + WeeklyRewardsProgressResult = 0x2879, + WeeklyRewardsResult = 0x2877, + WeeklyRewardClaimResult = 0x2878, WeeklySpellUsage = 0x2c18, Who = 0x2bae, - WhoIs = 0x269a, - WillBeKickedForAddedSubscriptionTime = 0x2813, - WorldMapOpenNpc = 0x27e4, - WorldQuestUpdateResponse = 0x3010, + WhoIs = 0x269c, + WillBeKickedForAddedSubscriptionTime = 0x2814, + WorldMapOpenNpc = 0x27e5, + WorldQuestUpdateResponse = 0x300f, WorldServerInfo = 0x25ab, - WowEntitlementNotification = 0x286e, - XpGainAborted = 0x25c4, - XpGainEnabled = 0x2799, + WowEntitlementNotification = 0x286f, + XpGainAborted = 0x25c5, + XpGainEnabled = 0x279b, ZoneUnderAttack = 0x2bb5, // Opcodes That Are Not Generated Automatically diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index e917c0172..9fbe4ed71 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -213,7 +213,7 @@ namespace Framework.Constants /// /// AreaTrigger Const /// - public const int MaxAreatriggerEntityData = 6; + public const int MaxAreatriggerEntityData = 8; public const int MaxAreatriggerScale = 7; /// diff --git a/Source/Game/DungeonFinding/LFGScripts.cs b/Source/Game/DungeonFinding/LFGScripts.cs index e74652d11..94f6a3246 100644 --- a/Source/Game/DungeonFinding/LFGScripts.cs +++ b/Source/Game/DungeonFinding/LFGScripts.cs @@ -19,6 +19,7 @@ using Framework.Constants; using Game.Entities; using Game.Groups; using Game.Maps; +using Game.Networking.Packets; using Game.Scripting; namespace Game.DungeonFinding @@ -84,12 +85,14 @@ namespace Game.DungeonFinding return; } - for (GroupReference refe = group.GetFirstMember(); refe != null; refe = refe.Next()) + QueryPlayerNameResponse response = new(); + foreach (MemberSlot memberSlot in group.GetMemberSlots()) { - Player member = refe.GetSource(); - if (member) - player.GetSession().SendNameQuery(member.GetGUID()); + player.GetSession().BuildNameQueryData(memberSlot.guid, out NameCacheLookupResult nameCacheLookupResult); + response.Players.Add(nameCacheLookupResult); } + + player.SendPacket(response); if (Global.LFGMgr.SelectedRandomLfgDungeon(player.GetGUID())) player.CastSpell(player, SharedConst.LFGSpellLuckOfTheDraw, true); diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index 7ff6a6926..556af2c2b 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -370,6 +370,9 @@ namespace Game.Entities case AreaTriggerTypes.Cylinder: SearchUnitInCylinder(targetList); break; + case AreaTriggerTypes.Disk: + SearchUnitInDisk(targetList); + break; default: break; } @@ -452,6 +455,18 @@ namespace Game.Entities targetList.RemoveAll(unit => unit.GetPositionZ() < minZ || unit.GetPositionZ() > maxZ); } + void SearchUnitInDisk(List targetList) + { + SearchUnits(targetList, GetMaxSearchRadius(), false); + + float innerRadius = _shape.DiskDatas.InnerRadius; + float height = _shape.DiskDatas.Height; + float minZ = GetPositionZ() - height; + float maxZ = GetPositionZ() + height; + + targetList.RemoveAll(unit => unit.IsInDist2d(this, innerRadius) || unit.GetPositionZ() < minZ || unit.GetPositionZ() > maxZ); + } + void HandleUnitEnterExit(List newTargetList) { List exitUnits = _insideUnits; diff --git a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs index ec1dd39cd..a5323bb06 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs @@ -44,6 +44,9 @@ namespace Game.Entities [FieldOffset(0)] public cylinderdatas CylinderDatas; + [FieldOffset(0)] + public diskDatas DiskDatas; + public struct defaultdatas { public fixed float Data[SharedConst.MaxAreatriggerEntityData]; @@ -80,6 +83,18 @@ namespace Game.Entities public float LocationZOffset; public float LocationZOffsetTarget; } + // AREATRIGGER_TYPE_DISK + public struct diskDatas + { + public float InnerRadius; + public float InnerRadiusTarget; + public float OuterRadius; + public float OuterRadiusTarget; + public float Height; + public float HeightTarget; + public float LocationZOffset; + public float LocationZOffsetTarget; + } } /// @@ -183,7 +198,7 @@ namespace Game.Entities } public class AreaTriggerShapeInfo : AreaTriggerData - { + { public AreaTriggerTypes TriggerType; public AreaTriggerShapeInfo() @@ -200,7 +215,9 @@ namespace Game.Entities case AreaTriggerTypes.Box: return MathF.Sqrt(BoxDatas.Extents[0] * BoxDatas.Extents[0] / 4 + BoxDatas.Extents[1] * BoxDatas.Extents[1] / 4); case AreaTriggerTypes.Cylinder: - return CylinderDatas.Radius; + return Math.Max(CylinderDatas.Radius, CylinderDatas.RadiusTarget); + case AreaTriggerTypes.Disk: + return Math.Max(DiskDatas.OuterRadius, DiskDatas.OuterRadiusTarget); } return 0.0f; @@ -210,6 +227,7 @@ namespace Game.Entities public bool IsBox() { return TriggerType == AreaTriggerTypes.Box; } public bool IsPolygon() { return TriggerType == AreaTriggerTypes.Polygon; } public bool IsCylinder() { return TriggerType == AreaTriggerTypes.Cylinder; } + public bool IsDisk() { return TriggerType == AreaTriggerTypes.Disk; } } public class AreaTriggerOrbitInfo diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index ff2a21fab..1d53f19c6 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -260,6 +260,7 @@ namespace Game.Misc opt.OptionNPC = item.MenuItemIcon; opt.OptionFlags = (byte)(item.IsCoded ? 1 : 0); // makes pop up box password opt.OptionCost = (int)item.BoxMoney; // money required to open menu, 2.0.3 + opt.OptionLanguage = item.Language; opt.Text = item.Message; // text for gossip item opt.Confirm = item.BoxMessage; // accept text (related to money) pop up box, 2.0.3 opt.Status = GossipOptionStatus.Available; @@ -701,6 +702,7 @@ namespace Game.Misc public uint OptionType; public string BoxMessage; public uint BoxMoney; + public uint Language; } public class GossipMenuItemData @@ -734,6 +736,7 @@ namespace Game.Misc public uint OptionBroadcastTextId; public GossipOption OptionType; public NPCFlags OptionNpcFlag; + public uint Language; public uint ActionMenuId; public uint ActionPoiId; public bool BoxCoded; diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index 90481b440..5851dd66f 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -1219,24 +1219,23 @@ namespace Game.Entities public UpdateField LookAtControllerID = new(96, 115); public UpdateField TaxiNodesID = new(96, 116); public UpdateField GuildGUID = new(96, 117); - public UpdateField SkinningOwnerGUID = new(96, 118); - public UpdateField SilencedSchoolMask = new(96, 119); - public UpdateField NameplateAttachToGUID = new(96, 120); // When set, nameplate of this unit will instead appear on that object - public UpdateFieldArray NpcFlags = new(2, 121, 122); - public UpdateFieldArray Power = new(7, 124, 125); - public UpdateFieldArray MaxPower = new(7, 124, 132); - public UpdateFieldArray PowerRegenFlatModifier = new(7, 124, 139); - public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(7, 124, 146); - public UpdateFieldArray VirtualItems = new(3, 153, 154); - public UpdateFieldArray AttackRoundBaseTime = new(2, 157, 158); - public UpdateFieldArray Stats = new(4, 160, 161); - public UpdateFieldArray StatPosBuff = new(4, 160, 165); - public UpdateFieldArray StatNegBuff = new(4, 160, 169); - public UpdateFieldArray Resistances = new(7, 173, 174); - public UpdateFieldArray BonusResistanceMods = new(7, 173, 181); - public UpdateFieldArray ManaCostModifier = new(7, 173, 188); + public UpdateField SilencedSchoolMask = new(96, 118); + public UpdateField NameplateAttachToGUID = new(96, 119); // When set, nameplate of this unit will instead appear on that object + public UpdateFieldArray NpcFlags = new(2, 120, 121); + public UpdateFieldArray Power = new(7, 123, 124); + public UpdateFieldArray MaxPower = new(7, 123, 131); + public UpdateFieldArray PowerRegenFlatModifier = new(7, 123, 138); + public UpdateFieldArray PowerRegenInterruptedFlatModifier = new(7, 123, 145); + public UpdateFieldArray VirtualItems = new(3, 152, 153); + public UpdateFieldArray AttackRoundBaseTime = new(2, 156, 157); + public UpdateFieldArray Stats = new(4, 159, 160); + public UpdateFieldArray StatPosBuff = new(4, 159, 164); + public UpdateFieldArray StatNegBuff = new(4, 159, 168); + public UpdateFieldArray Resistances = new(7, 172, 173); + public UpdateFieldArray BonusResistanceMods = new(7, 172, 180); + public UpdateFieldArray ManaCostModifier = new(7, 172, 187); - public UnitData() : base(0, TypeId.Unit, 195) { } + public UnitData() : base(0, TypeId.Unit, 194) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { @@ -1415,7 +1414,6 @@ namespace Game.Entities data.WriteInt32(PassiveSpells.Size()); data.WriteInt32(WorldEffects.Size()); data.WriteInt32(ChannelObjects.Size()); - data.WritePackedGuid(SkinningOwnerGUID); data.WriteUInt32(SilencedSchoolMask); data.WritePackedGuid(NameplateAttachToGUID); @@ -1431,7 +1429,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) { - UpdateMask allowedMaskForTarget = new(195, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u }); + UpdateMask allowedMaskForTarget = new(195, new uint[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x7F0003FFu, 0x00000000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, false, owner, receiver); } @@ -1439,16 +1437,16 @@ namespace Game.Entities public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) - allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x1000007Eu, 0x01FFF800u, 0xFFFFFFFFu, 0x00000007u })); + allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00002000u, 0x1E008000u, 0xFFE10000u, 0x0800007Eu, 0x80FFFC00u, 0xFFFFFFFFu, 0x00000003u })); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.UnitAll)) - allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x10000000u, 0x01FFF800u, 0x00000000u, 0x00000000u })); + allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x00000000u, 0x00000000u, 0x08000000u, 0x00FFFC00u, 0x00000000u, 0x00000000u })); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Empath)) - allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x001FE000u, 0x00000000u })); + allowedMaskForTarget.OR(new UpdateMask(195, new uint[] { 0x00000000u, 0x1E000000u, 0x00000000u, 0x00000000u, 0x00000000u, 0x000FF000u, 0x00000000u })); } public void FilterDisallowedFieldsMaskForFlag(UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags) { - UpdateMask allowedMaskForTarget = new(195, new[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0xFE0007FFu, 0x00000000u, 0x00000000u }); + UpdateMask allowedMaskForTarget = new(195, new[] { 0xFFFFDFFFu, 0xE1FF7FFFu, 0x001EFFFFu, 0xFFFFFF81u, 0x7F0003FFu, 0x00000000u, 0x00000000u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); changesMask.AND(allowedMaskForTarget); } @@ -1979,101 +1977,97 @@ namespace Game.Entities data.WritePackedGuid(GuildGUID); } if (changesMask[118]) - { - data.WritePackedGuid(SkinningOwnerGUID); - } - if (changesMask[119]) { data.WriteUInt32(SilencedSchoolMask); } - if (changesMask[120]) + if (changesMask[119]) { data.WritePackedGuid(NameplateAttachToGUID); } } - if (changesMask[121]) + if (changesMask[120]) { for (int i = 0; i < 2; ++i) { - if (changesMask[122 + i]) + if (changesMask[121 + i]) { data.WriteUInt32(GetViewerDependentNpcFlags(this, i, owner, receiver)); } } } - if (changesMask[124]) + if (changesMask[123]) { for (int i = 0; i < 7; ++i) { - if (changesMask[125 + i]) + if (changesMask[124 + i]) { data.WriteInt32(Power[i]); } - if (changesMask[132 + i]) + if (changesMask[131 + i]) { data.WriteUInt32(MaxPower[i]); } - if (changesMask[139 + i]) + if (changesMask[138 + i]) { data.WriteFloat(PowerRegenFlatModifier[i]); } - if (changesMask[146 + i]) + if (changesMask[145 + i]) { data.WriteFloat(PowerRegenInterruptedFlatModifier[i]); } } } - if (changesMask[153]) + if (changesMask[152]) { for (int i = 0; i < 3; ++i) { - if (changesMask[154 + i]) + if (changesMask[153 + i]) { VirtualItems[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[157]) + if (changesMask[156]) { for (int i = 0; i < 2; ++i) { - if (changesMask[158 + i]) + if (changesMask[157 + i]) { data.WriteUInt32(AttackRoundBaseTime[i]); } } } - if (changesMask[160]) + if (changesMask[159]) { for (int i = 0; i < 4; ++i) { - if (changesMask[161 + i]) + if (changesMask[160 + i]) { data.WriteInt32(Stats[i]); } - if (changesMask[165 + i]) + if (changesMask[164 + i]) { data.WriteInt32(StatPosBuff[i]); } - if (changesMask[169 + i]) + if (changesMask[168 + i]) { data.WriteInt32(StatNegBuff[i]); } } } - if (changesMask[173]) + if (changesMask[172]) { for (int i = 0; i < 7; ++i) { - if (changesMask[174 + i]) + if (changesMask[173 + i]) { data.WriteInt32(Resistances[i]); } - if (changesMask[181 + i]) + if (changesMask[180 + i]) { data.WriteInt32(BonusResistanceMods[i]); } - if (changesMask[188 + i]) + if (changesMask[187 + i]) { data.WriteInt32(ManaCostModifier[i]); } @@ -2197,7 +2191,6 @@ namespace Game.Entities ClearChangesMask(LookAtControllerID); ClearChangesMask(TaxiNodesID); ClearChangesMask(GuildGUID); - ClearChangesMask(SkinningOwnerGUID); ClearChangesMask(SilencedSchoolMask); ClearChangesMask(NameplateAttachToGUID); ClearChangesMask(NpcFlags); @@ -5140,22 +5133,22 @@ namespace Game.Entities public class DynamicObjectData : BaseUpdateData { public UpdateField Caster = new(0, 1); - public UpdateField SpellVisual = new(0, 2); - public UpdateField SpellID = new(0, 3); - public UpdateField Radius = new(0, 4); - public UpdateField CastTime = new(0, 5); - public UpdateField Type = new(0, 6); + public UpdateField Type = new(0, 2); + public UpdateField SpellVisual = new(0, 3); + public UpdateField SpellID = new(0, 4); + public UpdateField Radius = new(0, 5); + public UpdateField CastTime = new(0, 6); public DynamicObjectData() : base(0, TypeId.DynamicObject, 7) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, DynamicObject owner, Player receiver) { data.WritePackedGuid(Caster); + data.WriteUInt8(Type); ((SpellCastVisualField)SpellVisual).WriteCreate(data, owner, receiver); data.WriteUInt32(SpellID); data.WriteFloat(Radius); data.WriteUInt32(CastTime); - data.WriteUInt8(Type); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, DynamicObject owner, Player receiver) @@ -5176,23 +5169,23 @@ namespace Game.Entities } if (_changesMask[2]) { - ((SpellCastVisualField)SpellVisual).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + data.WriteUInt8(Type); } if (_changesMask[3]) { - data.WriteUInt32(SpellID); + ((SpellCastVisualField)SpellVisual).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } if (_changesMask[4]) { - data.WriteFloat(Radius); + data.WriteUInt32(SpellID); } if (_changesMask[5]) { - data.WriteUInt32(CastTime); + data.WriteFloat(Radius); } if (_changesMask[6]) { - data.WriteUInt8(Type); + data.WriteUInt32(CastTime); } } } @@ -5200,11 +5193,11 @@ namespace Game.Entities public override void ClearChangesMask() { ClearChangesMask(Caster); + ClearChangesMask(Type); ClearChangesMask(SpellVisual); ClearChangesMask(SpellID); ClearChangesMask(Radius); ClearChangesMask(CastTime); - ClearChangesMask(Type); _changesMask.ResetAll(); } } @@ -5511,10 +5504,12 @@ namespace Game.Entities public UpdateField BoundsRadius2D = new(0, 11); public UpdateField DecalPropertiesID = new(0, 12); public UpdateField CreatingEffectGUID = new(0, 13); - public UpdateField Field_80 = new(0, 14); - public UpdateField VisualAnim = new(0, 15); + public UpdateField Field_80 = new(0, 14); + public UpdateField Field_84 = new(0, 15); + public UpdateField Field_88 = new(0, 16); + public UpdateField VisualAnim = new(0, 17); - public AreaTriggerFieldData() : base(0, TypeId.AreaTrigger, 16) { } + public AreaTriggerFieldData() : base(0, TypeId.AreaTrigger, 18) { } public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) { @@ -5532,7 +5527,11 @@ namespace Game.Entities data.WriteFloat(BoundsRadius2D); data.WriteUInt32(DecalPropertiesID); data.WritePackedGuid(CreatingEffectGUID); + data.WriteUInt32(Field_80); + data.WriteUInt32(Field_84); + data.WritePackedGuid(Field_88); ((ScaleCurve)ExtraScaleCurve).WriteCreate(data, owner, receiver); + ((VisualAnim)VisualAnim).WriteCreate(data, owner, receiver); } public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) @@ -5542,7 +5541,7 @@ namespace Game.Entities public void WriteUpdate(WorldPacket data, UpdateMask changesMask, bool ignoreNestedChangesMask, AreaTrigger owner, Player receiver) { - data.WriteBits(_changesMask.GetBlock(0), 14); + data.WriteBits(_changesMask.GetBlock(0), 18); data.FlushBits(); if (_changesMask[0]) @@ -5595,10 +5594,26 @@ namespace Game.Entities { data.WritePackedGuid(CreatingEffectGUID); } + if (changesMask[14]) + { + data.WriteUInt32(Field_80); + } + if (changesMask[15]) + { + data.WriteUInt32(Field_84); + } + if (changesMask[16]) + { + data.WritePackedGuid(Field_88); + } if (_changesMask[2]) { ((ScaleCurve)ExtraScaleCurve).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } + if (changesMask[17]) + { + ((VisualAnim)VisualAnim).WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); + } } } @@ -5617,6 +5632,10 @@ namespace Game.Entities ClearChangesMask(BoundsRadius2D); ClearChangesMask(DecalPropertiesID); ClearChangesMask(CreatingEffectGUID); + ClearChangesMask(Field_80); + ClearChangesMask(Field_84); + ClearChangesMask(Field_88); + ClearChangesMask(VisualAnim); _changesMask.ResetAll(); } } diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index a69d4fb52..6ac0ba5af 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -281,9 +281,14 @@ namespace Game.Entities bool HasFallDirection = unit.HasUnitMovementFlag(MovementFlag.Falling); bool HasFall = HasFallDirection || unit.m_movementInfo.jump.fallTime != 0; bool HasSpline = unit.IsSplineEnabled(); + bool HasInertia = unit.m_movementInfo.inertia.HasValue; data.WritePackedGuid(GetGUID()); // MoverGUID + data.WriteUInt32((uint)unit.GetUnitMovementFlags()); + data.WriteUInt32((uint)unit.GetUnitMovementFlags2()); + data.WriteUInt32((uint)unit.GetExtraUnitMovementFlags2()); + data.WriteUInt32(unit.m_movementInfo.Time); // MoveTime data.WriteFloat(unit.GetPositionX()); data.WriteFloat(unit.GetPositionY()); @@ -299,17 +304,23 @@ namespace Game.Entities //for (public uint i = 0; i < RemoveForcesIDs.Count; ++i) // *data << ObjectGuid(RemoveForcesIDs); - data.WriteBits((uint)unit.GetUnitMovementFlags(), 30); - data.WriteBits((uint)unit.GetUnitMovementFlags2(), 18); data.WriteBit(!unit.m_movementInfo.transport.guid.IsEmpty()); // HasTransport data.WriteBit(HasFall); // HasFall data.WriteBit(HasSpline); // HasSpline - marks that the unit uses spline movement data.WriteBit(false); // HeightChangeFailed data.WriteBit(false); // RemoteTimeValid + data.WriteBit(HasInertia); // HasInertia if (!unit.m_movementInfo.transport.guid.IsEmpty()) MovementExtensions.WriteTransportInfo(data, unit.m_movementInfo.transport); + if (HasInertia) + { + data.WritePackedGuid(unit.m_movementInfo.inertia.Value.guid); + data.WriteXYZ(unit.m_movementInfo.inertia.Value.force); + data.WriteUInt32(unit.m_movementInfo.inertia.Value.lifetime); + } + if (HasFall) { data.WriteUInt32(unit.m_movementInfo.jump.fallTime); // Time @@ -440,6 +451,7 @@ namespace Game.Entities bool hasAreaTriggerBox = shape.IsBox(); bool hasAreaTriggerPolygon = createProperties != null && shape.IsPolygon(); bool hasAreaTriggerCylinder = shape.IsCylinder(); + bool hasDisk = shape.IsDisk(); bool hasAreaTriggerSpline = areaTrigger.HasSplines(); bool hasOrbit = areaTrigger.HasOrbit(); bool hasMovementScript = false; @@ -459,6 +471,7 @@ namespace Game.Entities data.WriteBit(hasAreaTriggerBox); data.WriteBit(hasAreaTriggerPolygon); data.WriteBit(hasAreaTriggerCylinder); + data.WriteBit(hasDisk); data.WriteBit(hasAreaTriggerSpline); data.WriteBit(hasOrbit); data.WriteBit(hasMovementScript); @@ -532,6 +545,18 @@ namespace Game.Entities data.WriteFloat(shape.CylinderDatas.LocationZOffsetTarget); } + if (hasDisk) + { + data.WriteFloat(shape.DiskDatas.InnerRadius); + data.WriteFloat(shape.DiskDatas.InnerRadiusTarget); + data.WriteFloat(shape.DiskDatas.OuterRadius); + data.WriteFloat(shape.DiskDatas.OuterRadiusTarget); + data.WriteFloat(shape.DiskDatas.Height); + data.WriteFloat(shape.DiskDatas.HeightTarget); + data.WriteFloat(shape.DiskDatas.LocationZOffset); + data.WriteFloat(shape.DiskDatas.LocationZOffsetTarget); + } + //if (hasMovementScript) // *data << *areaTrigger.GetMovementScript(); // AreaTriggerMovementScriptInfo @@ -3667,10 +3692,12 @@ namespace Game.Entities public ObjectGuid Guid { get; set; } MovementFlag flags; MovementFlag2 flags2; + MovementFlags3 flags3; public Position Pos { get; set; } public uint Time { get; set; } public TransportInfo transport; public float Pitch { get; set; } + public Inertia? inertia; public JumpInfo jump; public float SplineElevation { get; set; } @@ -3699,6 +3726,12 @@ namespace Game.Entities public void RemoveMovementFlag2(MovementFlag2 f) { flags2 &= ~f; } public bool HasMovementFlag2(MovementFlag2 f) { return (flags2 & f) != 0; } + public MovementFlags3 GetExtraMovementFlags2() { return flags3; } + public void SetExtraMovementFlags2(MovementFlags3 flag) { flags3 = flag; } + public void AddExtraMovementFlag2(MovementFlags3 flag) { flags3 |= flag; } + public void RemoveExtraMovementFlag2(MovementFlags3 flag) { flags3 &= ~flag; } + public bool HasExtraMovementFlag2(MovementFlags3 flag) { return (flags3 & flag) != 0; } + public void SetFallTime(uint time) { jump.fallTime = time; } public void ResetTransport() @@ -3730,6 +3763,12 @@ namespace Game.Entities public uint prevTime; public uint vehicleId; } + public struct Inertia + { + public ObjectGuid guid; + public Position force; + public uint lifetime; + } public struct JumpInfo { public void Reset() diff --git a/Source/Game/Entities/Pet.cs b/Source/Game/Entities/Pet.cs index 5e39c4a37..dd4f4c4e2 100644 --- a/Source/Game/Entities/Pet.cs +++ b/Source/Game/Entities/Pet.cs @@ -299,9 +299,11 @@ namespace Game.Entities { var activePetIndex = Array.FindIndex(petStable.ActivePets, pet => pet?.PetNumber == petnumber); - Cypher.Assert(petStable.CurrentPetIndex == 0); Cypher.Assert(activePetIndex != -1); + // Check that we either have no pet (unsummoned by player) or it matches temporarily unsummoned pet by server (for example on flying mount) + Cypher.Assert(petStable.CurrentPetIndex == 0 || petStable.CurrentPetIndex == activePetIndex); + petStable.SetCurrentActivePetIndex((uint)activePetIndex); } diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs index 3c9e3277d..2bbb3698a 100644 --- a/Source/Game/Entities/Unit/Unit.Movement.cs +++ b/Source/Game/Entities/Unit/Unit.Movement.cs @@ -1714,6 +1714,12 @@ namespace Game.Entities m_movementInfo.SetMovementFlags2(f); } + public void AddExtraUnitMovementFlag2(MovementFlags3 f) { m_movementInfo.AddExtraMovementFlag2(f); } + public void RemoveExtraUnitMovementFlag2(MovementFlags3 f) { m_movementInfo.RemoveExtraMovementFlag2(f); } + public bool HasExtraUnitMovementFlag2(MovementFlags3 f) { return m_movementInfo.HasExtraMovementFlag2(f); } + public MovementFlags3 GetExtraUnitMovementFlags2() { return m_movementInfo.GetExtraMovementFlags2(); } + public void SetExtraUnitMovementFlags2(MovementFlags3 f) { m_movementInfo.SetExtraMovementFlags2(f); } + //Spline public bool IsSplineEnabled() { diff --git a/Source/Game/Entities/Unit/Unit.cs b/Source/Game/Entities/Unit/Unit.cs index b7bc6d984..392ae346a 100644 --- a/Source/Game/Entities/Unit/Unit.cs +++ b/Source/Game/Entities/Unit/Unit.cs @@ -242,7 +242,7 @@ namespace Game.Entities _spellHistory.Update(); } - public void HandleEmoteCommand(Emote emoteId, Player target = null, uint[] spellVisualKitIds = null) + public void HandleEmoteCommand(Emote emoteId, Player target = null, uint[] spellVisualKitIds = null, int sequenceVariation = 0) { EmoteMessage packet = new(); packet.Guid = GetGUID(); @@ -253,6 +253,8 @@ namespace Game.Entities if (emotesEntry.AnimId == (uint)Anim.MountSpecial || emotesEntry.AnimId == (uint)Anim.MountSelfSpecial) packet.SpellVisualKitIDs.AddRange(spellVisualKitIds); + packet.SequenceVariation = sequenceVariation; + if (target != null) target.SendPacket(packet); else diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index 907d22289..7276006a2 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -596,15 +596,10 @@ namespace Game uint oldMSTime = Time.GetMSTime(); gossipMenuItemsStorage.Clear(); - - // 0 1 2 3 4 5 6 - SQLResult result = DB.World.Query("SELECT o.MenuId, o.OptionIndex, o.OptionIcon, o.OptionText, o.OptionBroadcastTextId, o.OptionType, o.OptionNpcFlag, " + - // 7 8 9 10 11 12 - "oa.ActionMenuId, oa.ActionPoiId, ob.BoxCoded, ob.BoxMoney, ob.BoxText, ob.BoxBroadcastTextId " + - "FROM gossip_menu_option o " + - "LEFT JOIN gossip_menu_option_action oa ON o.MenuId = oa.MenuId AND o.OptionIndex = oa.OptionIndex " + - "LEFT JOIN gossip_menu_option_box ob ON o.MenuId = ob.MenuId AND o.OptionIndex = ob.OptionIndex " + - "ORDER BY o.MenuId, o.OptionIndex"); + + // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 + SQLResult result = DB.World.Query("SELECT MenuID, OptionID, OptionIcon, OptionText, OptionBroadcastTextID, OptionType, OptionNpcFlag, Language, ActionMenuID, ActionPoiID, BoxCoded, BoxMoney, BoxText, BoxBroadcastTextID " + + "FROM gossip_menu_option ORDER BY MenuID, OptionID"); if (result.IsEmpty()) { @@ -623,12 +618,13 @@ namespace Game gMenuItem.OptionBroadcastTextId = result.Read(4); gMenuItem.OptionType = (GossipOption)result.Read(5); gMenuItem.OptionNpcFlag = (NPCFlags)result.Read(6); - gMenuItem.ActionMenuId = result.Read(7); - gMenuItem.ActionPoiId = result.Read(8); - gMenuItem.BoxCoded = result.Read(9); - gMenuItem.BoxMoney = result.Read(10); - gMenuItem.BoxText = result.Read(11); - gMenuItem.BoxBroadcastTextId = result.Read(12); + gMenuItem.Language = result.Read(7); + gMenuItem.ActionMenuId = result.Read(8); + gMenuItem.ActionPoiId = result.Read(9); + gMenuItem.BoxCoded = result.Read(10); + gMenuItem.BoxMoney = result.Read(11); + gMenuItem.BoxText = result.Read(12); + gMenuItem.BoxBroadcastTextId = result.Read(13); if (gMenuItem.OptionIcon >= GossipOptionIcon.Max) { @@ -648,6 +644,12 @@ namespace Game if (gMenuItem.OptionType >= GossipOption.Max) Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionId} has unknown option id {gMenuItem.OptionType}. Option will not be used"); + if (gMenuItem.Language != 0 && !CliDB.LanguagesStorage.ContainsKey(gMenuItem.Language)) + { + Log.outError(LogFilter.Sql, $"Table `gossip_menu_option` for menu {gMenuItem.MenuId}, id {gMenuItem.OptionId} use non-existing Language {gMenuItem.Language}, ignoring"); + gMenuItem.Language = 0; + } + if (gMenuItem.ActionPoiId != 0 && GetPointOfInterest(gMenuItem.ActionPoiId) == null) { Log.outError(LogFilter.Sql, $"Table gossip_menu_option for MenuId {gMenuItem.MenuId}, OptionIndex {gMenuItem.OptionId} use non-existing actionpoiid {gMenuItem.ActionPoiId}, ignoring"); @@ -9550,7 +9552,7 @@ namespace Game uint oldMSTime = Time.GetMSTime(); _playerChoices.Clear(); - SQLResult choiceResult = DB.World.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, Question, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice"); + SQLResult choiceResult = DB.World.Query("SELECT ChoiceId, UiTextureKitId, SoundKitId, CloseSoundKitId, Duration, Question, PendingChoiceText, HideWarboardHeader, KeepOpenAfterChoice FROM playerchoice"); if (choiceResult.IsEmpty()) { Log.outInfo(LogFilter.ServerLoading, "Loaded 0 player choices. DB table `playerchoice` is empty."); @@ -9571,9 +9573,12 @@ namespace Game choice.ChoiceId = choiceResult.Read(0); choice.UiTextureKitId = choiceResult.Read(1); choice.SoundKitId = choiceResult.Read(2); - choice.Question = choiceResult.Read(3); - choice.HideWarboardHeader = choiceResult.Read(4); - choice.KeepOpenAfterChoice = choiceResult.Read(5); + choice.CloseSoundKitId = choiceResult.Read(3); + choice.Duration = choiceResult.Read(4); + choice.Question = choiceResult.Read(5); + choice.PendingChoiceText = choiceResult.Read(6); + choice.HideWarboardHeader = choiceResult.Read(7); + choice.KeepOpenAfterChoice = choiceResult.Read(8); _playerChoices[choice.ChoiceId] = choice; @@ -9887,8 +9892,10 @@ namespace Game PlayerChoiceResponseMawPower mawPower = new(); mawPower.TypeArtFileID = mawPowersResult.Read(2); - mawPower.Rarity = mawPowersResult.Read(3); - mawPower.RarityColor = mawPowersResult.Read(4); + if (!mawPowersResult.IsNull(3)) + mawPower.Rarity = mawPowersResult.Read(3); + if (!mawPowersResult.IsNull(4)) + mawPower.RarityColor = mawPowersResult.Read(4); mawPower.SpellID = mawPowersResult.Read(5); mawPower.MaxStacks = mawPowersResult.Read(6); response.MawPower = mawPower; @@ -11805,8 +11812,8 @@ namespace Game public struct PlayerChoiceResponseMawPower { public int TypeArtFileID; - public int Rarity; - public uint RarityColor; + public int? Rarity; + public uint? RarityColor; public int SpellID; public int MaxStacks; } @@ -11843,7 +11850,10 @@ namespace Game public int ChoiceId; public int UiTextureKitId; public uint SoundKitId; + public uint CloseSoundKitId; + public long Duration; public string Question; + public string PendingChoiceText; public List Responses = new(); public bool HideWarboardHeader; public bool KeepOpenAfterChoice; diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs index 4e7303c3e..555dfc725 100644 --- a/Source/Game/Guilds/Guild.cs +++ b/Source/Game/Guilds/Guild.cs @@ -148,7 +148,7 @@ namespace Game.Guilds { SQLTransaction trans = new(); - m_achievementSys.SaveToDB(trans); + GetAchievementMgr().SaveToDB(trans); DB.Characters.CommitTransaction(trans); } @@ -252,11 +252,10 @@ namespace Game.Guilds session.SendPacket(roster); } - public void SendQueryResponse(WorldSession session, ObjectGuid playerGuid) + public void SendQueryResponse(WorldSession session) { QueryGuildInfoResponse response = new(); response.GuildGUID = GetGUID(); - response.PlayerGuid = playerGuid; response.HasGuildInfo = true; response.Info.GuildGuid = GetGUID(); @@ -395,7 +394,7 @@ namespace Game.Guilds SendSaveEmblemResult(session, GuildEmblemError.Success); // "Guild Emblem saved." - SendQueryResponse(session, ObjectGuid.Empty); + SendQueryResponse(session); } } @@ -1145,7 +1144,7 @@ namespace Game.Guilds foreach (var entry in CliDB.GuildPerkSpellsStorage.Values) player.LearnSpell(entry.SpellID, true); - m_achievementSys.SendAllData(player); + GetAchievementMgr().SendAllData(player); // tells the client to request bank withdrawal limit player.SendPacket(new GuildMemberDailyReset()); @@ -2412,12 +2411,12 @@ namespace Game.Guilds bool HasAchieved(uint achievementId) { - return m_achievementSys.HasAchieved(achievementId); + return GetAchievementMgr().HasAchieved(achievementId); } public void UpdateCriteria(CriteriaType type, ulong miscValue1, ulong miscValue2, ulong miscValue3, WorldObject refe, Player player) { - m_achievementSys.UpdateCriteria(type, miscValue1, miscValue2, miscValue3, refe, player); + GetAchievementMgr().UpdateCriteria(type, miscValue1, miscValue2, miscValue3, refe, player); } public void HandleNewsSetSticky(WorldSession session, uint newsId, bool sticky) diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 4f17a4089..64dc6a1f2 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -763,10 +763,10 @@ namespace Game // Send PVPSeason { SeasonInfo seasonInfo = new(); - seasonInfo.PreviousSeason = (WorldConfig.GetIntValue(WorldCfg.ArenaSeasonId) - (WorldConfig.GetBoolValue(WorldCfg.ArenaSeasonInProgress) ? 1 : 0)); + seasonInfo.MythicPlusMilestoneSeasonID = (WorldConfig.GetIntValue(WorldCfg.ArenaSeasonId) - (WorldConfig.GetBoolValue(WorldCfg.ArenaSeasonInProgress) ? 1 : 0)); if (WorldConfig.GetBoolValue(WorldCfg.ArenaSeasonInProgress)) - seasonInfo.CurrentSeason = WorldConfig.GetIntValue(WorldCfg.ArenaSeasonId); + seasonInfo.PreviousArenaSeason = WorldConfig.GetIntValue(WorldCfg.ArenaSeasonId); SendPacket(seasonInfo); } diff --git a/Source/Game/Handlers/ChatHandler.cs b/Source/Game/Handlers/ChatHandler.cs index 441fd7f8a..a56544cec 100644 --- a/Source/Game/Handlers/ChatHandler.cs +++ b/Source/Game/Handlers/ChatHandler.cs @@ -584,7 +584,7 @@ namespace Game // Only allow text-emotes for "dead" entities (feign death included) if (GetPlayer().HasUnitState(UnitState.Died)) break; - GetPlayer().HandleEmoteCommand(emote, null, packet.SpellVisualKitIDs); + GetPlayer().HandleEmoteCommand(emote, null, packet.SpellVisualKitIDs, packet.SequenceVariation); break; } diff --git a/Source/Game/Handlers/GuildHandler.cs b/Source/Game/Handlers/GuildHandler.cs index a1fb5c775..16a793258 100644 --- a/Source/Game/Handlers/GuildHandler.cs +++ b/Source/Game/Handlers/GuildHandler.cs @@ -31,16 +31,12 @@ namespace Game Guild guild = Global.GuildMgr.GetGuildByGuid(query.GuildGuid); if (guild) { - if (guild.IsMember(query.PlayerGuid)) - { - guild.SendQueryResponse(this, query.PlayerGuid); - return; - } + guild.SendQueryResponse(this); + return; } QueryGuildInfoResponse response = new(); response.GuildGUID = query.GuildGuid; - response.PlayerGuid = query.PlayerGuid; SendPacket(response); } diff --git a/Source/Game/Handlers/MiscHandler.cs b/Source/Game/Handlers/MiscHandler.cs index 30c536c3d..690adaee8 100644 --- a/Source/Game/Handlers/MiscHandler.cs +++ b/Source/Game/Handlers/MiscHandler.cs @@ -440,6 +440,7 @@ namespace Game SpecialMountAnim specialMountAnim = new(); specialMountAnim.UnitGUID = _player.GetGUID(); specialMountAnim.SpellVisualKitIDs.AddRange(mountSpecial.SpellVisualKitIDs); + specialMountAnim.SequenceVariation = mountSpecial.SequenceVariation; GetPlayer().SendMessageToSet(specialMountAnim, false); } diff --git a/Source/Game/Handlers/QueryHandler.cs b/Source/Game/Handlers/QueryHandler.cs index 0ef59aedf..8780bbaec 100644 --- a/Source/Game/Handlers/QueryHandler.cs +++ b/Source/Game/Handlers/QueryHandler.cs @@ -33,24 +33,31 @@ namespace Game [WorldPacketHandler(ClientOpcodes.QueryPlayerName, Processing = PacketProcessing.Inplace)] void HandleNameQueryRequest(QueryPlayerName queryPlayerName) { - SendNameQuery(queryPlayerName.Player); - } - - public void SendNameQuery(ObjectGuid guid) - { - Player player = Global.ObjAccessor.FindPlayer(guid); - QueryPlayerNameResponse response = new(); - response.Player = guid; - - if (response.Data.Initialize(guid, player)) - response.Result = ResponseCodes.Success; - else - response.Result = ResponseCodes.Failure; // name unknown + foreach (ObjectGuid guid in queryPlayerName.Players) + { + BuildNameQueryData(guid, out NameCacheLookupResult nameCacheLookupResult); + response.Players.Add(nameCacheLookupResult); + } SendPacket(response); } + public void BuildNameQueryData(ObjectGuid guid, out NameCacheLookupResult lookupData) + { + lookupData = new(); + + Player player = Global.ObjAccessor.FindPlayer(guid); + + lookupData.Player = guid; + + lookupData.Data = new(); + if (lookupData.Data.Initialize(guid, player)) + lookupData.Result = (byte)ResponseCodes.Success; + else + lookupData.Result = (byte)ResponseCodes.Failure; // name unknown + } + [WorldPacketHandler(ClientOpcodes.QueryTime, Processing = PacketProcessing.Inplace)] void HandleQueryTime(QueryTime packet) { diff --git a/Source/Game/Networking/Packets/BattleGroundPackets.cs b/Source/Game/Networking/Packets/BattleGroundPackets.cs index b0be83f59..a2bd8f3f5 100644 --- a/Source/Game/Networking/Packets/BattleGroundPackets.cs +++ b/Source/Game/Networking/Packets/BattleGroundPackets.cs @@ -30,18 +30,20 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteInt32(MythicPlusSeasonID); - _worldPacket.WriteInt32(CurrentSeason); - _worldPacket.WriteInt32(PreviousSeason); + _worldPacket.WriteInt32(MythicPlusDisplaySeasonID); + _worldPacket.WriteInt32(MythicPlusMilestoneSeasonID); + _worldPacket.WriteInt32(CurrentArenaSeason); + _worldPacket.WriteInt32(PreviousArenaSeason); _worldPacket.WriteInt32(ConquestWeeklyProgressCurrencyID); _worldPacket.WriteInt32(PvpSeasonID); _worldPacket.WriteBit(WeeklyRewardChestsEnabled); _worldPacket.FlushBits(); } - public int MythicPlusSeasonID; - public int PreviousSeason; - public int CurrentSeason; + public int MythicPlusDisplaySeasonID; + public int MythicPlusMilestoneSeasonID; + public int PreviousArenaSeason; + public int CurrentArenaSeason; public int PvpSeasonID; public int ConquestWeeklyProgressCurrencyID; public bool WeeklyRewardChestsEnabled; @@ -159,6 +161,7 @@ namespace Game.Networking.Packets Hdr.Write(_worldPacket); _worldPacket.WriteUInt32(AverageWaitTime); _worldPacket.WriteUInt32(WaitTime); + _worldPacket.WriteInt32(Unused920); _worldPacket.WriteBit(AsGroup); _worldPacket.WriteBit(EligibleForMatchmaking); _worldPacket.WriteBit(SuspendedQueue); @@ -171,6 +174,7 @@ namespace Game.Networking.Packets public bool SuspendedQueue; public bool EligibleForMatchmaking; public uint WaitTime; + public int Unused920; } public class BattlefieldStatusFailed : ServerPacket @@ -503,6 +507,7 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt8(Winner); _worldPacket.WriteInt32(Duration); _worldPacket.WriteBit(LogData != null); + _worldPacket.WriteBits(SoloShuffleStatus, 2); _worldPacket.FlushBits(); if (LogData != null) @@ -512,6 +517,7 @@ namespace Game.Networking.Packets public byte Winner; public int Duration; public PVPMatchStatistics LogData; + public uint SoloShuffleStatus; } //Structs @@ -631,6 +637,7 @@ namespace Game.Networking.Packets data.WriteInt32(PlayerClass); data.WriteInt32(CreatureID); data.WriteInt32(HonorLevel); + data.WriteInt32(Role); foreach (var pvpStat in Stats) pvpStat.Write(data); @@ -678,6 +685,7 @@ namespace Game.Networking.Packets public int PlayerClass; public int CreatureID; public int HonorLevel; + public int Role; } public void Write(WorldPacket data) diff --git a/Source/Game/Networking/Packets/ChatPackets.cs b/Source/Game/Networking/Packets/ChatPackets.cs index 2aa32648b..432e6a9f1 100644 --- a/Source/Game/Networking/Packets/ChatPackets.cs +++ b/Source/Game/Networking/Packets/ChatPackets.cs @@ -281,7 +281,8 @@ namespace Game.Networking.Packets _worldPacket.WritePackedGuid(Guid); _worldPacket.WriteUInt32(EmoteID); _worldPacket.WriteInt32(SpellVisualKitIDs.Count); - + _worldPacket.WriteInt32(SequenceVariation); + foreach (var id in SpellVisualKitIDs) _worldPacket.WriteUInt32(id); } @@ -289,6 +290,7 @@ namespace Game.Networking.Packets public ObjectGuid Guid; public uint EmoteID; public List SpellVisualKitIDs = new(); + public int SequenceVariation; } public class CTextEmote : ClientPacket @@ -302,6 +304,7 @@ namespace Game.Networking.Packets SoundIndex = _worldPacket.ReadInt32(); SpellVisualKitIDs = new uint[_worldPacket.ReadUInt32()]; + SequenceVariation = _worldPacket.ReadInt32(); for (var i = 0; i < SpellVisualKitIDs.Length; ++i) SpellVisualKitIDs[i] = _worldPacket.ReadUInt32(); } @@ -310,6 +313,7 @@ namespace Game.Networking.Packets public int EmoteID; public int SoundIndex; public uint[] SpellVisualKitIDs; + public int SequenceVariation; } public class STextEmote : ServerPacket diff --git a/Source/Game/Networking/Packets/GameObjectPackets.cs b/Source/Game/Networking/Packets/GameObjectPackets.cs index e362b196f..5929ad086 100644 --- a/Source/Game/Networking/Packets/GameObjectPackets.cs +++ b/Source/Game/Networking/Packets/GameObjectPackets.cs @@ -144,10 +144,12 @@ namespace Game.Networking.Packets { _worldPacket.WritePackedGuid(ObjectGUID); _worldPacket.WriteInt32(UILink); + _worldPacket.WriteInt32(UIItemInteractionID); } public ObjectGuid ObjectGUID; public int UILink; + public int UIItemInteractionID; } class GameObjectPlaySpellVisual : ServerPacket diff --git a/Source/Game/Networking/Packets/GuildPackets.cs b/Source/Game/Networking/Packets/GuildPackets.cs index a8ce9df42..d4a139311 100644 --- a/Source/Game/Networking/Packets/GuildPackets.cs +++ b/Source/Game/Networking/Packets/GuildPackets.cs @@ -44,7 +44,6 @@ namespace Game.Networking.Packets public override void Write() { _worldPacket.WritePackedGuid(GuildGUID); - _worldPacket.WritePackedGuid(PlayerGuid); _worldPacket.WriteBit(HasGuildInfo); _worldPacket.FlushBits(); @@ -76,7 +75,6 @@ namespace Game.Networking.Packets } public ObjectGuid GuildGUID; - public ObjectGuid PlayerGuid; public GuildInfo Info = new(); public bool HasGuildInfo; diff --git a/Source/Game/Networking/Packets/MiscPackets.cs b/Source/Game/Networking/Packets/MiscPackets.cs index 71be2f97e..ad5942dfe 100644 --- a/Source/Game/Networking/Packets/MiscPackets.cs +++ b/Source/Game/Networking/Packets/MiscPackets.cs @@ -1181,11 +1181,13 @@ namespace Game.Networking.Packets public override void Read() { SpellVisualKitIDs = new int[_worldPacket.ReadUInt32()]; + SequenceVariation = _worldPacket.ReadInt32(); for (var i = 0; i < SpellVisualKitIDs.Length; ++i) SpellVisualKitIDs[i] = _worldPacket.ReadInt32(); } public int[] SpellVisualKitIDs; + public int SequenceVariation; } class SpecialMountAnim : ServerPacket @@ -1196,12 +1198,14 @@ namespace Game.Networking.Packets { _worldPacket.WritePackedGuid(UnitGUID); _worldPacket.WriteInt32(SpellVisualKitIDs.Count); + _worldPacket.WriteInt32(SequenceVariation); foreach (var id in SpellVisualKitIDs) _worldPacket.WriteInt32(id); } public ObjectGuid UnitGUID; public List SpellVisualKitIDs = new(); + public int SequenceVariation; } class CrossedInebriationThreshold : ServerPacket diff --git a/Source/Game/Networking/Packets/MovementPackets.cs b/Source/Game/Networking/Packets/MovementPackets.cs index b503a1f8a..b12831091 100644 --- a/Source/Game/Networking/Packets/MovementPackets.cs +++ b/Source/Game/Networking/Packets/MovementPackets.cs @@ -75,6 +75,9 @@ namespace Game.Networking.Packets { var movementInfo = new MovementInfo(); movementInfo.Guid = data.ReadPackedGuid(); + movementInfo.SetMovementFlags((MovementFlag)data.ReadUInt32()); + movementInfo.SetMovementFlags2((MovementFlag2)data.ReadUInt32()); + movementInfo.SetExtraMovementFlags2((MovementFlags3)data.ReadUInt32()); movementInfo.Time = data.ReadUInt32(); float x = data.ReadFloat(); float y = data.ReadFloat(); @@ -96,19 +99,27 @@ namespace Game.Networking.Packets // ResetBitReader - movementInfo.SetMovementFlags((MovementFlag)data.ReadBits(30)); - movementInfo.SetMovementFlags2((MovementFlag2)data.ReadBits(18)); - bool hasTransport = data.HasBit(); bool hasFall = data.HasBit(); bool hasSpline = data.HasBit(); // todo 6.x read this infos data.ReadBit(); // HeightChangeFailed data.ReadBit(); // RemoteTimeValid + bool hasInertia = data.HasBit(); if (hasTransport) ReadTransportInfo(data, ref movementInfo.transport); + if (hasInertia) + { + MovementInfo.Inertia inertia = new(); + inertia.guid = data.ReadPackedGuid(); + inertia.force = data.ReadPosition(); + inertia.lifetime = data.ReadUInt32(); + + movementInfo.inertia = inertia; + } + if (hasFall) { movementInfo.jump.fallTime = data.ReadUInt32(); @@ -134,8 +145,12 @@ namespace Game.Networking.Packets bool hasFallDirection = movementInfo.HasMovementFlag(MovementFlag.Falling | MovementFlag.FallingFar); bool hasFallData = hasFallDirection || movementInfo.jump.fallTime != 0; bool hasSpline = false; // todo 6.x send this infos + bool hasInertia = movementInfo.inertia.HasValue; data.WritePackedGuid(movementInfo.Guid); + data.WriteUInt32((uint)movementInfo.GetMovementFlags()); + data.WriteUInt32((uint)movementInfo.GetMovementFlags2()); + data.WriteUInt32((uint)movementInfo.GetExtraMovementFlags2()); data.WriteUInt32(movementInfo.Time); data.WriteFloat(movementInfo.Pos.GetPositionX()); data.WriteFloat(movementInfo.Pos.GetPositionY()); @@ -147,27 +162,32 @@ namespace Game.Networking.Packets uint removeMovementForcesCount = 0; data.WriteUInt32(removeMovementForcesCount); - uint int168 = 0; - data.WriteUInt32(int168); + uint moveIndex = 0; + data.WriteUInt32(moveIndex); /*for (public uint i = 0; i < removeMovementForcesCount; ++i) { _worldPacket << ObjectGuid; }*/ - data.WriteBits((uint)movementInfo.GetMovementFlags(), 30); - data.WriteBits((uint)movementInfo.GetMovementFlags2(), 18); - data.WriteBit(hasTransportData); data.WriteBit(hasFallData); data.WriteBit(hasSpline); data.WriteBit(false); // HeightChangeFailed data.WriteBit(false); // RemoteTimeValid + data.WriteBit(hasInertia); data.FlushBits(); if (hasTransportData) WriteTransportInfo(data, movementInfo.transport); + if (hasInertia) + { + data.WritePackedGuid(movementInfo.inertia.Value.guid); + data.WriteXYZ(movementInfo.inertia.Value.force); + data.WriteUInt32(movementInfo.inertia.Value.lifetime); + } + if (hasFallData) { data.WriteUInt32(movementInfo.jump.fallTime); @@ -1168,13 +1188,13 @@ namespace Game.Networking.Packets data.WriteBit(CollisionHeight.HasValue); data.WriteBit(@MovementForce != null); data.WriteBit(MovementForceGUID.HasValue); + data.WriteBit(MovementInertiaGUID.HasValue); + data.WriteBit(MovementInertiaLifetimeMs.HasValue); data.FlushBits(); if (@MovementForce != null) @MovementForce.Write(data); - - if (Speed.HasValue) data.WriteFloat(Speed.Value); @@ -1198,6 +1218,12 @@ namespace Game.Networking.Packets if (MovementForceGUID.HasValue) data.WritePackedGuid(MovementForceGUID.Value); + + if (MovementInertiaGUID.HasValue) + data.WritePackedGuid(MovementInertiaGUID.Value); + + if (MovementInertiaLifetimeMs.HasValue) + data.WriteUInt32(MovementInertiaLifetimeMs.Value); } public ServerOpcodes MessageID; @@ -1208,6 +1234,8 @@ namespace Game.Networking.Packets public CollisionHeightInfo? CollisionHeight; public MovementForce MovementForce; public ObjectGuid? MovementForceGUID; + public ObjectGuid? MovementInertiaGUID; + public uint? MovementInertiaLifetimeMs; } } diff --git a/Source/Game/Networking/Packets/MythicPlusPacketsCommon.cs b/Source/Game/Networking/Packets/MythicPlusPacketsCommon.cs index fc857a607..caa21d65f 100644 --- a/Source/Game/Networking/Packets/MythicPlusPacketsCommon.cs +++ b/Source/Game/Networking/Packets/MythicPlusPacketsCommon.cs @@ -42,11 +42,13 @@ namespace Game.Networking.Packets public class DungeonScoreSummary { public float CurrentSeasonScore; + public float LifetimeBestSeasonScore; public List Runs = new(); public void Write(WorldPacket data) { data.WriteFloat(CurrentSeasonScore); + data.WriteFloat(LifetimeBestSeasonScore); data.WriteInt32(Runs.Count); foreach (var dungeonScoreMapSummary in Runs) dungeonScoreMapSummary.Write(data); @@ -61,7 +63,7 @@ namespace Game.Networking.Packets public ObjectGuid GuildGUID; public uint NativeRealmAddress; public uint VirtualRealmAddress; - public short ChrSpecializationID; + public int ChrSpecializationID; public short RaceID; public int ItemLevel; public int CovenantID; @@ -75,7 +77,7 @@ namespace Game.Networking.Packets data.WritePackedGuid(GuildGUID); data.WriteUInt32(NativeRealmAddress); data.WriteUInt32(VirtualRealmAddress); - data.WriteInt16(ChrSpecializationID); + data.WriteInt32(ChrSpecializationID); data.WriteInt16(RaceID); data.WriteInt32(ItemLevel); data.WriteInt32(CovenantID); @@ -157,7 +159,13 @@ namespace Game.Networking.Packets { data.WriteInt32(Season); data.WriteInt32(Maps.Count); + data.WriteUInt32(0); data.WriteFloat(SeasonScore); + data.WriteFloat(0); + + foreach (var map in Maps) + map.Write(data); + foreach (var map in Maps) map.Write(data); } diff --git a/Source/Game/Networking/Packets/NPCPackets.cs b/Source/Game/Networking/Packets/NPCPackets.cs index cbdf90a07..a4bd6fe27 100644 --- a/Source/Game/Networking/Packets/NPCPackets.cs +++ b/Source/Game/Networking/Packets/NPCPackets.cs @@ -63,6 +63,7 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt8(options.OptionNPC); _worldPacket.WriteUInt8(options.OptionFlags); _worldPacket.WriteInt32(options.OptionCost); + _worldPacket.WriteUInt32(options.OptionLanguage); _worldPacket.WriteBits(options.Text.GetByteCount(), 12); _worldPacket.WriteBits(options.Confirm.GetByteCount(), 12); @@ -113,9 +114,15 @@ namespace Game.Networking.Packets public class GossipComplete : ServerPacket { + public bool SuppressSound; + public GossipComplete() : base(ServerOpcodes.GossipComplete) { } - public override void Write() { } + public override void Write() + { + _worldPacket.WriteBit(SuppressSound); + _worldPacket.FlushBits(); + } } public class VendorInventory : ServerPacket @@ -341,6 +348,7 @@ namespace Game.Networking.Packets public byte OptionNPC; public byte OptionFlags; public int OptionCost; + public uint OptionLanguage; public GossipOptionStatus Status; public string Text; public string Confirm; diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs index f82f16783..e7e6aa5f1 100644 --- a/Source/Game/Networking/Packets/QueryPackets.cs +++ b/Source/Game/Networking/Packets/QueryPackets.cs @@ -33,31 +33,26 @@ namespace Game.Networking.Packets public override void Read() { - Player = _worldPacket.ReadPackedGuid(); + Players = new ObjectGuid[_worldPacket.ReadInt32()]; + for (var i = 0; i < Players.Length; ++i) + Players[i] = _worldPacket.ReadPackedGuid(); } - public ObjectGuid Player; + public ObjectGuid[] Players; } public class QueryPlayerNameResponse : ServerPacket { - public QueryPlayerNameResponse() : base(ServerOpcodes.QueryPlayerNameResponse) - { - Data = new PlayerGuidLookupData(); - } + public List Players = new(); + + public QueryPlayerNameResponse() : base(ServerOpcodes.QueryPlayerNameResponse) { } public override void Write() { - _worldPacket.WriteInt8((sbyte)Result); - _worldPacket.WritePackedGuid(Player); - - if (Result == ResponseCodes.Success) - Data.Write(_worldPacket); + _worldPacket.WriteInt32(Players.Count); + foreach (NameCacheLookupResult lookupResult in Players) + lookupResult.Write(_worldPacket); } - - public ObjectGuid Player; - public ResponseCodes Result; // 0 - full packet, != 0 - only guid - public PlayerGuidLookupData Data; } public class QueryCreature : ClientPacket @@ -685,6 +680,46 @@ namespace Game.Networking.Packets public DeclinedName DeclinedNames = new(); } + public struct NameCacheUnused920 + { + public uint Unused1; + public ObjectGuid Unused2; + public string Unused3 = ""; + + public void Write(WorldPacket data) + { + data.WriteUInt32(Unused1); + data.WritePackedGuid(Unused2); + data.WriteBits(Unused3.GetByteCount(), 7); + data.FlushBits(); + + data.WriteString(Unused3); + } + } + + public struct NameCacheLookupResult + { + public ObjectGuid Player; + public byte Result = 0; // 0 - full packet, != 0 - only guid + public PlayerGuidLookupData Data; + public NameCacheUnused920? Unused920; + + public void Write(WorldPacket data) + { + data.WriteUInt8(Result); + data.WritePackedGuid(Player); + data.WriteBit(Data != null); + data.WriteBit(Unused920.HasValue); + data.FlushBits(); + + if (Data != null) + Data.Write(data); + + if (Unused920.HasValue) + Unused920.Value.Write(data); + } + } + public class CreatureXDisplay { public CreatureXDisplay(uint creatureDisplayID, float displayScale, float probability) diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs index cbb6cfc08..c833025c9 100644 --- a/Source/Game/Networking/Packets/QuestPackets.cs +++ b/Source/Game/Networking/Packets/QuestPackets.cs @@ -850,8 +850,11 @@ namespace Game.Networking.Packets _worldPacket.WritePackedGuid(SenderGUID); _worldPacket.WriteInt32(UiTextureKitID); _worldPacket.WriteUInt32(SoundKitID); + _worldPacket.WriteUInt32(CloseUISoundKitID); _worldPacket.WriteUInt8(NumRerolls); + _worldPacket.WriteInt64(Duration); _worldPacket.WriteBits(Question.GetByteCount(), 8); + _worldPacket.WriteBits(PendingChoiceText.GetByteCount(), 8); _worldPacket.WriteBit(CloseChoiceFrame); _worldPacket.WriteBit(HideWarboardHeader); _worldPacket.WriteBit(KeepOpenAfterChoice); @@ -861,14 +864,18 @@ namespace Game.Networking.Packets response.Write(_worldPacket); _worldPacket.WriteString(Question); + _worldPacket.WriteString(PendingChoiceText); } public ObjectGuid SenderGUID; public int ChoiceID; public int UiTextureKitID; public uint SoundKitID; + public uint CloseUISoundKitID; public byte NumRerolls; + public long Duration; public string Question; + public string PendingChoiceText; public List Responses = new(); public bool CloseChoiceFrame; public bool HideWarboardHeader; @@ -1278,8 +1285,8 @@ namespace Game.Networking.Packets { public int Unused901_1; public int TypeArtFileID; - public int Rarity; - public uint RarityColor; + public int? Rarity; + public uint? RarityColor; public int Unused901_2; public int SpellID; public int MaxStacks; @@ -1288,11 +1295,18 @@ namespace Game.Networking.Packets { data.WriteInt32(Unused901_1); data.WriteInt32(TypeArtFileID); - data.WriteInt32(Rarity); - data.WriteUInt32(RarityColor); data.WriteInt32(Unused901_2); data.WriteInt32(SpellID); data.WriteInt32(MaxStacks); + data.WriteBit(Rarity.HasValue); + data.WriteBit(RarityColor.HasValue); + data.FlushBits(); + + if (Rarity.HasValue) + data.WriteInt32(Rarity.Value); + + if (RarityColor.HasValue) + data.WriteUInt32(RarityColor.Value); } } diff --git a/Source/Game/Networking/Packets/SystemPackets.cs b/Source/Game/Networking/Packets/SystemPackets.cs index 7a4dd3555..89ae2598d 100644 --- a/Source/Game/Networking/Packets/SystemPackets.cs +++ b/Source/Game/Networking/Packets/SystemPackets.cs @@ -53,6 +53,14 @@ namespace Game.Networking.Packets _worldPacket.WriteUInt32(ClubsPresenceUpdateTimer); _worldPacket.WriteUInt32(HiddenUIClubsPresenceUpdateTimer); + _worldPacket.WriteInt32(GameRuleUnknown1); + _worldPacket.WriteInt32(GameRuleValues.Count); + + _worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); + + foreach (GameRuleValuePair gameRuleValue in GameRuleValues) + gameRuleValue.Write(_worldPacket); + _worldPacket.WriteBit(VoiceEnabled); _worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue); _worldPacket.WriteBit(ScrollOfResurrectionEnabled); @@ -152,6 +160,8 @@ namespace Game.Networking.Packets public uint ClubsPresenceUpdateTimer; public uint HiddenUIClubsPresenceUpdateTimer; // Timer for updating club presence when communities ui frame is hidden public uint KioskSessionMinutes; + public int GameRuleUnknown1; + public short MaxPlayerNameQueriesPerPacket = 50; public bool ItemRestorationButtonEnabled; public bool CharUndeleteEnabled; // Implemented public bool BpayStoreDisabledByParentalControls; @@ -184,6 +194,7 @@ namespace Game.Networking.Packets public SocialQueueConfig QuickJoinConfig; public SquelchInfo Squelch; public RafSystemFeatureInfo RAFSystem; + public List GameRuleValues = new(); public struct SessionAlertConfig { @@ -276,10 +287,15 @@ namespace Game.Networking.Packets _worldPacket.WriteInt32(ActiveClassTrialBoostType); _worldPacket.WriteInt32(MinimumExpansionLevel); _worldPacket.WriteInt32(MaximumExpansionLevel); + _worldPacket.WriteInt32(GameRuleUnknown1); + _worldPacket.WriteInt32(GameRuleValues.Count); + _worldPacket.WriteInt16(MaxPlayerNameQueriesPerPacket); foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions) _worldPacket.WriteInt32(sourceRegion); + foreach (GameRuleValuePair gameRuleValue in GameRuleValues) + gameRuleValue.Write(_worldPacket); } public bool BpayStoreAvailable; // NYI @@ -310,6 +326,9 @@ namespace Game.Networking.Packets public int MinimumExpansionLevel; public int MaximumExpansionLevel; public uint KioskSessionMinutes; + public int GameRuleUnknown1; + public List GameRuleValues = new(); + public short MaxPlayerNameQueriesPerPacket = 50; } public class MOTD : ServerPacket @@ -383,4 +402,16 @@ namespace Game.Networking.Packets ThrottleState.Write(data); } } + + public struct GameRuleValuePair + { + public int Rule; + public int Value; + + public void Write(WorldPacket data) + { + data.WriteInt32(Rule); + data.WriteInt32(Value); + } + } }