From c6e53b2ba70aa55a0f69fe7313319b8175b1b11c Mon Sep 17 00:00:00 2001 From: hondacrx Date: Mon, 28 Oct 2019 14:33:43 -0400 Subject: [PATCH] Core/PacketIO: Update opcodes and packet structures to 8.2.5 Port From (https://github.com/TrinityCore/TrinityCore/commit/ee2e49429f4383732b4e0f39b493470b9c1dd10c) --- Source/Framework/Constants/Network/Opcodes.cs | 1536 +++++++++-------- Source/Framework/Constants/ObjectConst.cs | 3 +- .../Game/BattleGrounds/Zones/ArathiBasin.cs | 4 +- Source/Game/BattleGrounds/Zones/EyeofStorm.cs | 2 +- .../BattleGrounds/Zones/StrandofAncients.cs | 29 +- .../Game/BattleGrounds/Zones/WarsongGluch.cs | 13 +- Source/Game/Chat/Channels/Channel.cs | 8 +- Source/Game/Chat/Channels/ChannelAppenders.cs | 1 + Source/Game/Chat/Channels/ChannelManager.cs | 73 +- Source/Game/Entities/Creature/Gossip.cs | 1 + Source/Game/Entities/Object/ObjectGuid.cs | 1 + .../Entities/Object/Update/UpdateField.cs | 6 +- .../Entities/Object/Update/UpdateFields.cs | 991 +++++++---- Source/Game/Entities/Player/Player.DB.cs | 10 +- Source/Game/Globals/ObjectManager.cs | 6 +- Source/Game/Handlers/CharacterHandler.cs | 17 +- Source/Game/Handlers/LFGHandler.cs | 1 + Source/Game/Handlers/RAFHandler.cs | 10 +- .../Network/Packets/AchievementPackets.cs | 6 + .../Network/Packets/BattleGroundPackets.cs | 25 +- Source/Game/Network/Packets/ChannelPackets.cs | 2 + .../Game/Network/Packets/CharacterPackets.cs | 65 +- Source/Game/Network/Packets/GuildPackets.cs | 7 +- Source/Game/Network/Packets/LFGPackets.cs | 2 + Source/Game/Network/Packets/QueryPackets.cs | 1 - Source/Game/Network/Packets/QuestPackets.cs | 5 + .../Network/Packets/ReferAFriendPackets.cs | 4 +- Source/Game/Network/Packets/SystemPackets.cs | 35 +- Source/Game/Network/Packets/TicketPackets.cs | 151 +- .../Packets/TransmogrificationPackets.cs | 5 + Source/Game/Network/WorldSocket.cs | 2 +- Source/Game/Quest/Quest.cs | 24 +- .../master/2019_10_26_00_characters.sql | 25 + .../world/master/2019_10_26_00_world.sql | 1 + 34 files changed, 1792 insertions(+), 1280 deletions(-) create mode 100644 sql/updates/characters/master/2019_10_26_00_characters.sql create mode 100644 sql/updates/world/master/2019_10_26_00_world.sql diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs index 3faadec8b..47afc77d2 100644 --- a/Source/Framework/Constants/Network/Opcodes.cs +++ b/Source/Framework/Constants/Network/Opcodes.cs @@ -20,18 +20,17 @@ namespace Framework.Constants public enum ClientOpcodes : uint { AcceptGuildInvite = 0x35fd, - AcceptLevelGrant = 0x34fa, AcceptTrade = 0x315a, AcceptWargameInvite = 0x35e1, ActivateTaxi = 0x34ab, AddonList = 0x35d8, AddBattlenetFriend = 0x365c, - AddFriend = 0x36d5, - AddIgnore = 0x36d9, - AddToy = 0x329a, + AddFriend = 0x36d2, + AddIgnore = 0x36d6, + AddToy = 0x329b, AdventureJournalOpenQuest = 0x3204, - AdventureJournalStartQuest = 0x3341, - AdventureMapPoiQuery = 0x3248, + AdventureJournalStartQuest = 0x3342, + AdventureMapPoiQuery = 0x3249, AlterAppearance = 0x34f6, AreaSpiritHealerQuery = 0x34b0, AreaSpiritHealerQueue = 0x34b1, @@ -39,8 +38,8 @@ namespace Framework.Constants ArtifactAddPower = 0x31a9, ArtifactSetAppearance = 0x31ab, AssignEquipmentSetSpec = 0x320c, - AttackStop = 0x3257, - AttackSwing = 0x3256, + AttackStop = 0x3258, + AttackSwing = 0x3257, AuctionHelloRequest = 0x34cb, AuctionListBidderItems = 0x34d1, AuctionListItems = 0x34ce, @@ -59,39 +58,39 @@ namespace Framework.Constants AutoEquipItem = 0x399a, AutoEquipItemSlot = 0x399f, AutoStoreBagItem = 0x399b, - AzeriteEmpoweredItemSelectPower = 0x335f, - AzeriteEmpoweredItemViewed = 0x334b, - AzeriteEssenceActivateEssence = 0x3361, - AzeriteEssenceUnlockMilestone = 0x3360, + AzeriteEmpoweredItemSelectPower = 0x3360, + AzeriteEmpoweredItemViewed = 0x334c, + AzeriteEssenceActivateEssence = 0x3362, + AzeriteEssenceUnlockMilestone = 0x3361, BankerActivate = 0x34b3, BattlefieldLeave = 0x3173, BattlefieldList = 0x317e, - BattlefieldPort = 0x3527, - BattlemasterHello = 0x32b2, - BattlemasterJoin = 0x3522, - BattlemasterJoinArena = 0x3523, - BattlemasterJoinBrawl = 0x3525, - BattlemasterJoinSkirmish = 0x3524, - BattlenetChallengeResponse = 0x36d8, - BattlenetRequest = 0x36fc, - BattlenetRequestRealmListTicket = 0x3700, - BattlePayAckFailedResponse = 0x36d0, - BattlePayCancelOpenCheckout = 0x3719, - BattlePayConfirmPurchaseResponse = 0x36cf, - BattlePayDistributionAssignToTarget = 0x36c6, - BattlePayGetProductList = 0x36be, - BattlePayGetPurchaseList = 0x36bf, - BattlePayOpenCheckout = 0x3712, - BattlePayQueryClassTrialBoostResult = 0x36c9, - BattlePayRequestCharacterBoostUnrevoke = 0x36c7, - BattlePayRequestCurrentVasTransferQueues = 0x370f, - BattlePayRequestPriceInfo = 0x370e, - BattlePayRequestVasCharacterQueueTime = 0x3710, - BattlePayStartPurchase = 0x36f8, - BattlePayStartVasPurchase = 0x36f9, - BattlePayTrialBoostCharacter = 0x36c8, - BattlePayValidateBnetVasTransfer = 0x3711, - BattlePayVasPurchaseComplete = 0x36f7, + BattlefieldPort = 0x3526, + BattlemasterHello = 0x32b3, + BattlemasterJoin = 0x3521, + BattlemasterJoinArena = 0x3522, + BattlemasterJoinBrawl = 0x3524, + BattlemasterJoinSkirmish = 0x3523, + BattlenetChallengeResponse = 0x36d5, + BattlenetRequest = 0x36f9, + BattlenetRequestRealmListTicket = 0x36fe, + BattlePayAckFailedResponse = 0x36cf, + BattlePayCancelOpenCheckout = 0x3717, + BattlePayConfirmPurchaseResponse = 0x36ce, + BattlePayDistributionAssignToTarget = 0x36c5, + BattlePayGetProductList = 0x36bd, + BattlePayGetPurchaseList = 0x36be, + BattlePayOpenCheckout = 0x3710, + BattlePayQueryClassTrialBoostResult = 0x36c8, + BattlePayRequestCharacterBoostUnrevoke = 0x36c6, + BattlePayRequestCurrentVasTransferQueues = 0x370d, + BattlePayRequestPriceInfo = 0x370c, + BattlePayRequestVasCharacterQueueTime = 0x370e, + BattlePayStartPurchase = 0x36f5, + BattlePayStartVasPurchase = 0x36f6, + BattlePayTrialBoostCharacter = 0x36c7, + BattlePayValidateBnetVasTransfer = 0x370f, + BattlePayVasPurchaseComplete = 0x36f4, BattlePetClearFanfare = 0x312c, BattlePetDeletePet = 0x3625, BattlePetDeletePetCheat = 0x3626, @@ -105,18 +104,18 @@ namespace Framework.Constants BattlePetUpdateNotify = 0x31e1, BeginTrade = 0x3157, BinderActivate = 0x34b2, - BlackMarketBidOnItem = 0x352f, - BlackMarketOpen = 0x352d, - BlackMarketRequestItems = 0x352e, - BonusRoll = 0x3362, + BlackMarketBidOnItem = 0x352e, + BlackMarketOpen = 0x352c, + BlackMarketRequestItems = 0x352d, + BonusRoll = 0x3363, BugReport = 0x3688, BusyTrade = 0x3158, BuyBackItem = 0x34a4, BuyBankSlot = 0x34b4, BuyItem = 0x34a3, BuyReagentBank = 0x34b5, - BuyWowTokenConfirm = 0x36f1, - BuyWowTokenStart = 0x36f0, + BuyWowTokenConfirm = 0x36ee, + BuyWowTokenStart = 0x36ed, CageBattlePet = 0x31f3, CalendarAddEvent = 0x367f, CalendarCommunityFilter = 0x3673, @@ -135,25 +134,25 @@ namespace Framework.Constants CalendarUpdateEvent = 0x3680, CancelAura = 0x31ad, CancelAutoRepeatSpell = 0x34e8, - CancelCast = 0x32a0, - CancelChannelling = 0x326c, - CancelGrowthAura = 0x3271, + CancelCast = 0x32a1, + CancelChannelling = 0x326d, + CancelGrowthAura = 0x3272, CancelMasterLootRoll = 0x3214, CancelModSpeedNoControlAuras = 0x31ac, - CancelMountAura = 0x3282, + CancelMountAura = 0x3283, CancelQueuedSpell = 0x317f, CancelTempEnchantment = 0x34f3, CancelTrade = 0x315c, CanDuel = 0x3664, - CanRedeemWowTokenForBalance = 0x370d, - CastSpell = 0x329d, + CanRedeemWowTokenForBalance = 0x370b, + CastSpell = 0x329e, ChallengeModeRequestLeaders = 0x3090, ChallengeModeRequestMapStats = 0x308f, - ChangeBagSlotFlag = 0x3323, - ChangeBankBagSlotFlag = 0x3324, - ChangeMonumentAppearance = 0x3305, + ChangeBagSlotFlag = 0x3324, + ChangeBankBagSlotFlag = 0x3325, + ChangeMonumentAppearance = 0x3306, ChangeSubGroup = 0x364e, - CharacterRenameRequest = 0x36c4, + CharacterRenameRequest = 0x36c3, CharCustomize = 0x3693, CharDelete = 0x36a0, CharRaceOrFactionChange = 0x3699, @@ -193,23 +192,24 @@ namespace Framework.Constants ChatReportFiltered = 0x37cc, ChatReportIgnored = 0x37cb, ChatUnregisterAllAddonPrefixes = 0x37ce, - CheckRafEmailEnabled = 0x36d1, - CheckWowTokenVeteranEligibility = 0x36ef, - ChoiceResponse = 0x32a2, + CheckWowTokenVeteranEligibility = 0x36ec, + ChoiceResponse = 0x32a3, + ClearNewAppearance = 0x312f, ClearRaidMarker = 0x31a5, ClearTradeItem = 0x315e, - ClientPortGraveyard = 0x3529, + ClientPortGraveyard = 0x3528, CloseInteraction = 0x3493, - CloseQuestChoice = 0x32a3, - ClubFinderApplicationResponse = 0x3723, - ClubFinderGetApplicantsList = 0x3721, - ClubFinderPost = 0x371e, - ClubFinderRequestClubsData = 0x3727, - ClubFinderRequestClubsList = 0x371f, - ClubFinderRequestMembershipToClub = 0x3720, - ClubFinderRequestPendingClubsList = 0x3726, - ClubFinderRespondToApplicant = 0x3722, - ClubInvite = 0x36ff, + CloseQuestChoice = 0x32a4, + ClubFinderApplicationResponse = 0x3721, + ClubFinderGetApplicantsList = 0x371f, + ClubFinderPost = 0x371c, + ClubFinderRequestClubsData = 0x3723, + ClubFinderRequestClubsList = 0x371d, + ClubFinderRequestMembershipToClub = 0x371e, + ClubFinderRequestPendingClubsList = 0x3722, + ClubFinderRequestSubscribedClubPostingIds = 0x3724, + ClubFinderRespondToApplicant = 0x3720, + ClubInvite = 0x36fd, CollectionItemSetFavorite = 0x3634, CommentatorEnable = 0x35f1, CommentatorEnterInstance = 0x35f5, @@ -219,25 +219,25 @@ namespace Framework.Constants CommentatorGetPlayerInfo = 0x35f3, CommentatorStartWargame = 0x35f0, Complaint = 0x366e, - CompleteCinematic = 0x3547, + CompleteCinematic = 0x3546, CompleteMovie = 0x34de, ConfirmArtifactRespec = 0x31aa, ConfirmRespecWipe = 0x320e, ConnectToFailed = 0x35d4, - ContributionContribute = 0x3557, - ContributionGetState = 0x3558, - ConversationLineStarted = 0x3548, + ContributionContribute = 0x3556, + ContributionGetState = 0x3557, + ConversationLineStarted = 0x3547, ConvertRaid = 0x3650, CreateCharacter = 0x3645, - CreateShipment = 0x32f1, + CreateShipment = 0x32f2, DbQueryBulk = 0x35e5, - DeclineGuildInvites = 0x3520, - DeclinePetition = 0x3536, - DeleteEquipmentSet = 0x350d, - DelFriend = 0x36d6, - DelIgnore = 0x36da, - DepositReagentBank = 0x332c, - DestroyItem = 0x3294, + DeclineGuildInvites = 0x351f, + DeclinePetition = 0x3535, + DeleteEquipmentSet = 0x350c, + DelFriend = 0x36d3, + DelIgnore = 0x36d7, + DepositReagentBank = 0x332d, + DestroyItem = 0x3295, DfBootPlayerVote = 0x3616, DfGetJoinStatus = 0x3614, DfGetSystemInfo = 0x3613, @@ -248,62 +248,62 @@ namespace Framework.Constants DfSetRoles = 0x3615, DfTeleport = 0x3617, DiscardedTimeSyncAcks = 0x3a3c, - DismissCritter = 0x34fc, + DismissCritter = 0x34fa, DoMasterLootRoll = 0x3213, DoReadyCheck = 0x3635, DuelResponse = 0x34e3, - EjectPassenger = 0x323d, - Emote = 0x3543, + EjectPassenger = 0x323e, + Emote = 0x3542, EnableEncryptionAck = 0x3767, EnableNagle = 0x376b, EnableTaxiNode = 0x34a9, - EngineSurvey = 0x36e9, + EngineSurvey = 0x36e6, EnumCharacters = 0x35e9, - EnumCharactersDeletedByClient = 0x36e3, + EnumCharactersDeletedByClient = 0x36e0, FarSight = 0x34e9, GameEventDebugDisable = 0x31b1, GameEventDebugEnable = 0x31b0, GameObjReportUse = 0x34f0, GameObjUse = 0x34ef, - GarrisonAssignFollowerToBuilding = 0x32dc, - GarrisonCancelConstruction = 0x32cd, - GarrisonCheckUpgradeable = 0x331f, - GarrisonCompleteMission = 0x3312, - GarrisonGenerateRecruits = 0x32df, - GarrisonGetBuildingLandmarks = 0x32ed, - GarrisonGetMissionReward = 0x3345, - GarrisonMissionBonusRoll = 0x3314, - GarrisonPurchaseBuilding = 0x32c9, - GarrisonRecruitFollower = 0x32e1, - GarrisonRemoveFollower = 0x3309, - GarrisonRemoveFollowerFromBuilding = 0x32dd, - GarrisonRenameFollower = 0x32de, - GarrisonRequestBlueprintAndSpecializationData = 0x32c8, - GarrisonRequestClassSpecCategoryInfo = 0x32e6, - GarrisonRequestLandingPageShipmentInfo = 0x32f0, - GarrisonRequestShipmentInfo = 0x32ef, - GarrisonResearchTalent = 0x32e2, - GarrisonSetBuildingActive = 0x32ca, - GarrisonSetFollowerFavorite = 0x32da, - GarrisonSetFollowerInactive = 0x32d6, - GarrisonSetRecruitmentPreferences = 0x32e0, - GarrisonStartMission = 0x3311, - GarrisonSwapBuildings = 0x32ce, + GarrisonAssignFollowerToBuilding = 0x32dd, + GarrisonCancelConstruction = 0x32ce, + GarrisonCheckUpgradeable = 0x3320, + GarrisonCompleteMission = 0x3313, + GarrisonGenerateRecruits = 0x32e0, + GarrisonGetBuildingLandmarks = 0x32ee, + GarrisonGetMissionReward = 0x3346, + GarrisonMissionBonusRoll = 0x3315, + GarrisonPurchaseBuilding = 0x32ca, + GarrisonRecruitFollower = 0x32e2, + GarrisonRemoveFollower = 0x330a, + GarrisonRemoveFollowerFromBuilding = 0x32de, + GarrisonRenameFollower = 0x32df, + GarrisonRequestBlueprintAndSpecializationData = 0x32c9, + GarrisonRequestClassSpecCategoryInfo = 0x32e7, + GarrisonRequestLandingPageShipmentInfo = 0x32f1, + GarrisonRequestShipmentInfo = 0x32f0, + GarrisonResearchTalent = 0x32e3, + GarrisonSetBuildingActive = 0x32cb, + GarrisonSetFollowerFavorite = 0x32db, + GarrisonSetFollowerInactive = 0x32d7, + GarrisonSetRecruitmentPreferences = 0x32e1, + GarrisonStartMission = 0x3312, + GarrisonSwapBuildings = 0x32cf, GenerateRandomCharacterName = 0x35e8, - GetAccountCharacterList = 0x36ba, + GetAccountCharacterList = 0x36b9, GetChallengeModeRewards = 0x3685, - GetGarrisonInfo = 0x32c3, - GetItemPurchaseData = 0x3531, - GetMirrorImageData = 0x3298, + GetGarrisonInfo = 0x32c4, + GetItemPurchaseData = 0x3530, + GetMirrorImageData = 0x3299, GetPvpOptionsEnabled = 0x35ef, - GetRemainingGameTime = 0x36f2, - GetTrophyList = 0x3302, - GetUndeleteCharacterCooldownStatus = 0x36e5, + GetRafAccountInfo = 0x3725, + GetRemainingGameTime = 0x36ef, + GetTrophyList = 0x3303, + GetUndeleteCharacterCooldownStatus = 0x36e2, GmTicketAcknowledgeSurvey = 0x3697, GmTicketGetCaseStatus = 0x3696, GmTicketGetSystemStatus = 0x3695, GossipSelectOption = 0x3494, - GrantLevel = 0x34f8, GuildAddBattlenetFriend = 0x308e, GuildAddRank = 0x3065, GuildAssignMemberRank = 0x3060, @@ -330,7 +330,6 @@ namespace Framework.Constants GuildGetRoster = 0x3074, GuildInviteByName = 0x3607, GuildLeave = 0x3063, - GuildMemberSendSorRequest = 0x308d, GuildNewsUpdateSticky = 0x306f, GuildOfficerRemoveMember = 0x3064, GuildPermissionsQuery = 0x3085, @@ -342,28 +341,28 @@ namespace Framework.Constants GuildReplaceGuildMaster = 0x3089, GuildSetAchievementTracking = 0x3070, GuildSetFocusedAchievement = 0x3071, - GuildSetGuildMaster = 0x36cb, + GuildSetGuildMaster = 0x36ca, GuildSetMemberNote = 0x3073, GuildSetRankPermissions = 0x3068, GuildShiftRank = 0x3067, GuildUpdateInfoText = 0x3076, GuildUpdateMotdText = 0x3075, - HearthAndResurrect = 0x3509, + HearthAndResurrect = 0x3508, HotfixRequest = 0x35e6, IgnoreTrade = 0x3159, InitiateRolePoll = 0x35da, InitiateTrade = 0x3156, - Inspect = 0x352b, - InstanceLockResponse = 0x350e, - IslandQueue = 0x338e, - ItemPurchaseRefund = 0x3532, - ItemTextQuery = 0x3320, + Inspect = 0x352a, + InstanceLockResponse = 0x350d, + IslandQueue = 0x3390, + ItemPurchaseRefund = 0x3531, + ItemTextQuery = 0x3321, JoinPetBattleQueue = 0x31df, JoinRatedBattleground = 0x3178, KeepAlive = 0x3681, - KeyboundOverride = 0x3225, - LearnPvpTalents = 0x3556, - LearnTalents = 0x3554, + KeyboundOverride = 0x3226, + LearnPvpTalents = 0x3555, + LearnTalents = 0x3553, LeaveGroup = 0x364b, LeavePetBattleQueue = 0x31e0, LfgListApplyToGroup = 0x360d, @@ -372,10 +371,10 @@ namespace Framework.Constants LfgListGetStatus = 0x360b, LfgListInviteApplicant = 0x3610, LfgListInviteResponse = 0x3611, - LfgListJoin = 0x335d, + LfgListJoin = 0x335e, LfgListLeave = 0x360a, LfgListSearch = 0x360c, - LfgListUpdateRequest = 0x335e, + LfgListUpdateRequest = 0x335f, LfGuildAddRecruit = 0x361c, LfGuildBrowse = 0x361e, LfGuildDeclineRecruit = 0x3079, @@ -385,11 +384,11 @@ namespace Framework.Constants LfGuildRemoveRecruit = 0x307b, LfGuildSetGuildPost = 0x361d, ListInventory = 0x34a1, - LiveRegionAccountRestore = 0x36bd, - LiveRegionCharacterCopy = 0x36bc, - LiveRegionGetAccountCharacterList = 0x36bb, + LiveRegionAccountRestore = 0x36bc, + LiveRegionCharacterCopy = 0x36bb, + LiveRegionGetAccountCharacterList = 0x36ba, LoadingScreenNotify = 0x35f9, - LoadSelectedTrophy = 0x3303, + LoadSelectedTrophy = 0x3304, LogoutCancel = 0x34d9, LogoutInstant = 0x34da, LogoutRequest = 0x34d7, @@ -401,21 +400,21 @@ namespace Framework.Constants LootRoll = 0x3216, LootUnit = 0x320f, LowLevelRaid1 = 0x36a4, - LowLevelRaid2 = 0x3515, - MailCreateTextItem = 0x353d, - MailDelete = 0x3227, - MailGetList = 0x3538, - MailMarkAsRead = 0x353c, + LowLevelRaid2 = 0x3514, + MailCreateTextItem = 0x353c, + MailDelete = 0x3228, + MailGetList = 0x3537, + MailMarkAsRead = 0x353b, MailReturnToSender = 0x3657, - MailTakeItem = 0x353a, - MailTakeMoney = 0x3539, + MailTakeItem = 0x3539, + MailTakeMoney = 0x3538, MakeContitionalAppearancePermanent = 0x322a, MasterLootItem = 0x3212, MinimapPing = 0x364d, MissileTrajectoryCollision = 0x318a, MountClearFanfare = 0x312d, MountSetFavorite = 0x3633, - MountSpecialAnim = 0x3283, + MountSpecialAnim = 0x3284, MoveApplyMovementForceAck = 0x3a12, MoveChangeTransport = 0x3a2c, MoveChangeVehicleSeats = 0x3a31, @@ -481,28 +480,28 @@ namespace Framework.Constants MoveUpdateFallSpeed = 0x3a17, MoveWaterWalkAck = 0x3a1a, NeutralPlayerSelectFaction = 0x31d5, - NextCinematicCamera = 0x3546, + NextCinematicCamera = 0x3545, ObjectUpdateFailed = 0x3180, ObjectUpdateRescued = 0x3181, - OfferPetition = 0x36b3, - OpeningCinematic = 0x3545, - OpenItem = 0x3321, - OpenMissionNpc = 0x32e8, - OpenShipmentNpc = 0x32ee, - OpenTradeskillNpc = 0x32f9, + OfferPetition = 0x36b2, + OpeningCinematic = 0x3544, + OpenItem = 0x3322, + OpenMissionNpc = 0x32e9, + OpenShipmentNpc = 0x32ef, + OpenTradeskillNpc = 0x32fa, OptOutOfLoot = 0x34f7, PartyInvite = 0x3603, PartyInviteResponse = 0x3604, PartyUninvite = 0x3649, PetitionBuy = 0x34c9, - PetitionRenameGuild = 0x36cc, + PetitionRenameGuild = 0x36cb, PetitionShowList = 0x34c8, PetitionShowSignatures = 0x34ca, PetAbandon = 0x348d, PetAction = 0x348b, PetBattleFinalNotify = 0x31e4, PetBattleInput = 0x3642, - PetBattleQueueProposeMatchResult = 0x3226, + PetBattleQueueProposeMatchResult = 0x3227, PetBattleQuitNotify = 0x31e3, PetBattleReplaceFrontPet = 0x3643, PetBattleRequestPvp = 0x31dd, @@ -511,7 +510,7 @@ namespace Framework.Constants PetBattleScriptErrorNotify = 0x31e5, PetBattleWildLocationFail = 0x31dc, PetCancelAura = 0x348e, - PetCastSpell = 0x329c, + PetCastSpell = 0x329d, PetRename = 0x3687, PetSetAction = 0x348a, PetSpellAutocast = 0x348f, @@ -520,28 +519,28 @@ namespace Framework.Constants PlayerLogin = 0x35eb, PushQuestToParty = 0x349f, PvpLogData = 0x317b, - QueryBattlePetName = 0x3278, + QueryBattlePetName = 0x3279, QueryCommunityName = 0x368e, QueryCorpseLocationFromClient = 0x3662, QueryCorpseTransport = 0x3663, QueryCountdownTimer = 0x31a8, - QueryCreature = 0x3272, - QueryGameObject = 0x3273, - QueryGarrisonCreatureName = 0x3279, + QueryCreature = 0x3273, + QueryGameObject = 0x3274, + QueryGarrisonCreatureName = 0x327a, QueryGuildInfo = 0x3691, - QueryInspectAchievements = 0x3503, - QueryNextMailTime = 0x353b, - QueryNpcText = 0x3274, - QueryPageText = 0x3276, - QueryPetition = 0x327a, - QueryPetName = 0x3277, + QueryInspectAchievements = 0x3501, + QueryNextMailTime = 0x353a, + QueryNpcText = 0x3275, + QueryPageText = 0x3277, + QueryPetition = 0x327b, + QueryPetName = 0x3278, QueryPlayerName = 0x368d, QueryQuestCompletionNpcs = 0x3175, - QueryQuestInfo = 0x3275, + QueryQuestInfo = 0x3276, QueryRealmName = 0x3690, QueryScenarioPoi = 0x3658, QueryTime = 0x34d6, - QueryTreasurePicker = 0x3347, + QueryTreasurePicker = 0x3348, QueryVoidStorage = 0x31a1, QuestConfirmAccept = 0x349e, QuestGiverAcceptQuest = 0x3498, @@ -552,136 +551,143 @@ namespace Framework.Constants QuestGiverRequestReward = 0x349b, QuestGiverStatusMultipleQuery = 0x349d, QuestGiverStatusQuery = 0x349c, - QuestLogRemoveQuest = 0x3530, - QuestPoiQuery = 0x36b4, + QuestLogRemoveQuest = 0x352f, + QuestPoiQuery = 0x36b3, QuestPushResult = 0x34a0, + QuestSessionBeginResponse = 0x339f, + QuestSessionRequestStart = 0x339e, + QuestSessionRequestStop = 0x3730, QueuedMessagesEnd = 0x376c, - QuickJoinAutoAcceptRequests = 0x370c, - QuickJoinRequestInvite = 0x370b, - QuickJoinRespondToInvite = 0x370a, - QuickJoinSignalToastDisplayed = 0x3709, - RaidOrBattlegroundEngineSurvey = 0x36ea, + QuickJoinAutoAcceptRequests = 0x370a, + QuickJoinRequestInvite = 0x3709, + QuickJoinRequestInviteWithConfirmation = 0x3735, + QuickJoinRespondToInvite = 0x3708, + QuickJoinSignalToastDisplayed = 0x3707, + RafClaimActivityReward = 0x3505, + RafClaimNextReward = 0x3726, + RafGenerateRecruitmentLink = 0x3728, + RafUpdateRecruitmentInfo = 0x3727, + RaidOrBattlegroundEngineSurvey = 0x36e7, RandomRoll = 0x3656, ReadyCheckResponse = 0x3636, - ReadItem = 0x3322, + ReadItem = 0x3323, ReclaimCorpse = 0x34dc, - RecruitAFriend = 0x36d2, - RedeemWowTokenConfirm = 0x36f4, - RedeemWowTokenStart = 0x36f3, - RemoveNewItem = 0x334a, + RedeemWowTokenConfirm = 0x36f1, + RedeemWowTokenStart = 0x36f0, + RemoveNewItem = 0x334b, + RemoveRafRecruit = 0x3729, ReorderCharacters = 0x35ea, RepairItem = 0x34ed, - ReplaceTrophy = 0x3304, - RepopRequest = 0x3528, - ReportClientVariables = 0x3706, - ReportEnabledAddons = 0x3705, - ReportKeybindingExecutionCounts = 0x3707, + ReplaceTrophy = 0x3305, + RepopRequest = 0x3527, + ReportClientVariables = 0x3704, + ReportEnabledAddons = 0x3703, + ReportKeybindingExecutionCounts = 0x3705, ReportPvpPlayerAfk = 0x34f5, - ReportServerLag = 0x3394, + ReportServerLag = 0x3396, RequestAccountData = 0x369a, - RequestAreaPoiUpdate = 0x3349, + RequestAreaPoiUpdate = 0x334a, RequestBattlefieldStatus = 0x35dd, RequestCategoryCooldowns = 0x317d, RequestCemeteryList = 0x3176, RequestChallengeModeAffixes = 0x3208, RequestCharacterGuildFollowInfo = 0x3692, - RequestConquestFormulaConstants = 0x32b5, - RequestCrowdControlSpell = 0x352c, + RequestConquestFormulaConstants = 0x32b6, + RequestCrowdControlSpell = 0x352b, RequestForcedReactions = 0x320a, RequestGuildPartyState = 0x31a7, RequestGuildRewardsList = 0x31a6, - RequestLfgListBlacklist = 0x32a5, + RequestLfgListBlacklist = 0x32a6, RequestPartyJoinUpdates = 0x35f8, RequestPartyMemberStats = 0x3655, RequestPetInfo = 0x3490, - RequestPlayedTime = 0x327d, + RequestPlayedTime = 0x327e, RequestPvpBrawlInfo = 0x3195, RequestPvpRewards = 0x3194, - RequestQuestLinesForMap = 0x338f, - RequestRaidInfo = 0x36cd, + RequestQuestLinesForMap = 0x3391, + RequestRaidInfo = 0x36cc, RequestRatedBattlefieldInfo = 0x35e4, RequestRealmGuildMasterInfo = 0x309b, RequestResearchHistory = 0x3167, RequestStabledPets = 0x3491, - RequestVehicleExit = 0x3238, - RequestVehicleNextSeat = 0x323a, - RequestVehiclePrevSeat = 0x3239, - RequestVehicleSwitchSeat = 0x323b, - RequestWorldQuestUpdate = 0x3348, - RequestWowTokenMarketPrice = 0x36ec, + RequestVehicleExit = 0x3239, + RequestVehicleNextSeat = 0x323b, + RequestVehiclePrevSeat = 0x323a, + RequestVehicleSwitchSeat = 0x323c, + RequestWorldQuestUpdate = 0x3349, + RequestWowTokenMarketPrice = 0x36e9, ResetChallengeMode = 0x3206, ResetChallengeModeCheat = 0x3207, ResetInstances = 0x366a, ResurrectResponse = 0x3686, - RevertMonumentAppearance = 0x3306, - RideVehicleInteract = 0x323c, + RevertMonumentAppearance = 0x3307, + RideVehicleInteract = 0x323d, SaveCufProfiles = 0x318b, - SaveEquipmentSet = 0x350c, - SaveGuildEmblem = 0x32a9, - ScenePlaybackCanceled = 0x3222, - ScenePlaybackComplete = 0x3221, - SceneTriggerEvent = 0x3223, - SelfRes = 0x3533, + SaveEquipmentSet = 0x350b, + SaveGuildEmblem = 0x32aa, + ScenePlaybackCanceled = 0x3223, + ScenePlaybackComplete = 0x3222, + SceneTriggerEvent = 0x3224, + SelfRes = 0x3532, SellItem = 0x34a2, - SellWowTokenConfirm = 0x36ee, - SellWowTokenStart = 0x36ed, - SendContactList = 0x36d4, + SellWowTokenConfirm = 0x36eb, + SellWowTokenStart = 0x36ea, + SendContactList = 0x36d1, SendMail = 0x35fb, - SendSorRequestViaAddress = 0x3621, SendTextEmote = 0x3488, - SetAchievementsHidden = 0x3228, - SetActionBarToggles = 0x3534, + SetAchievementsHidden = 0x3229, + SetActionBarToggles = 0x3533, SetActionButton = 0x3637, SetActiveMover = 0x3a37, - SetAdvancedCombatLogging = 0x32b6, + SetAdvancedCombatLogging = 0x32b7, SetAssistantLeader = 0x3651, - SetBackpackAutosortDisabled = 0x3325, - SetBankAutosortDisabled = 0x3326, - SetContactNotes = 0x36d7, + SetBackpackAutosortDisabled = 0x3326, + SetBankAutosortDisabled = 0x3327, + SetContactNotes = 0x36d4, SetCurrencyFlags = 0x3169, - SetDifficultyId = 0x3224, + SetDifficultyId = 0x3225, SetDungeonDifficulty = 0x3684, SetEveryoneIsAssistant = 0x3618, SetFactionAtWar = 0x34df, SetFactionInactive = 0x34e1, SetFactionNotAtWar = 0x34e0, SetGameEventDebugViewState = 0x31b9, - SetInsertItemsLeftToRight = 0x3328, - SetLfgBonusFactionId = 0x32a4, + SetInsertItemsLeftToRight = 0x3329, + SetLfgBonusFactionId = 0x32a5, SetLootMethod = 0x364a, - SetLootSpecialization = 0x3541, + SetLootSpecialization = 0x3540, SetPartyAssignment = 0x3653, SetPartyLeader = 0x364c, SetPetSlot = 0x3168, SetPlayerDeclinedNames = 0x368c, SetPreferredCemetery = 0x3177, - SetPvp = 0x32ad, - SetRaidDifficulty = 0x36e1, + SetPvp = 0x32ae, + SetRaidDifficulty = 0x36de, SetRole = 0x35d9, SetSavedInstanceExtend = 0x368a, - SetSelection = 0x352a, + SetSelection = 0x3529, SetSheathed = 0x3489, - SetSortBagsRightToLeft = 0x3327, + SetSortBagsRightToLeft = 0x3328, SetTaxiBenchmarkMode = 0x34f4, - SetTitle = 0x3281, + SetTitle = 0x3282, SetTradeCurrency = 0x3160, SetTradeGold = 0x315f, SetTradeItem = 0x315d, - SetUsingPartyGarrison = 0x32ea, - SetWarMode = 0x32ae, + SetUsingPartyGarrison = 0x32eb, + SetWarMode = 0x32af, SetWatchedFaction = 0x34e2, - ShowTradeSkill = 0x36c5, - SignPetition = 0x3535, + ShowTradeSkill = 0x36c4, + SignPetition = 0x3534, SilencePartyTalker = 0x3654, SocketGems = 0x34ec, - SortBags = 0x3329, - SortBankBags = 0x332a, - SortReagentBankBags = 0x332b, + SortBags = 0x332a, + SortBankBags = 0x332b, + SortReagentBankBags = 0x332c, SpellClick = 0x3495, SpiritHealerActivate = 0x34af, SplitItem = 0x399e, StandStateChange = 0x3189, - StartChallengeMode = 0x354c, + StartChallengeMode = 0x354b, StartSpectatorWarGame = 0x35e0, StartWarGame = 0x35df, SummonResponse = 0x366c, @@ -695,7 +701,7 @@ namespace Framework.Constants SwapItem = 0x399c, SwapSubGroups = 0x364f, SwapVoidItem = 0x31a3, - TabardVendorActivate = 0x32aa, + TabardVendorActivate = 0x32ab, TalkToGossip = 0x3492, TaxiNodeStatusQuery = 0x34a8, TaxiQueryAvailableNodes = 0x34aa, @@ -705,43 +711,43 @@ namespace Framework.Constants TimeSyncResponseDropped = 0x3a3a, TimeSyncResponseFailed = 0x3a39, ToggleDifficulty = 0x3659, - TogglePvp = 0x32ac, - TotemDestroyed = 0x34fb, + TogglePvp = 0x32ad, + TotemDestroyed = 0x34f9, ToyClearFanfare = 0x312e, - TradeSkillSetFavorite = 0x3346, + TradeSkillSetFavorite = 0x3347, TrainerBuySpell = 0x34ae, TrainerList = 0x34ad, TransmogrifyItems = 0x3196, - TurnInPetition = 0x3537, - Tutorial = 0x36e2, + TurnInPetition = 0x3536, + Tutorial = 0x36df, TwitterCheckStatus = 0x312a, TwitterConnect = 0x3127, TwitterDisconnect = 0x312b, - TwitterPost = 0x332d, + TwitterPost = 0x332e, UiTimeRequest = 0x369f, UnacceptTrade = 0x315b, - UndeleteCharacter = 0x36e4, + UndeleteCharacter = 0x36e1, UnlearnSkill = 0x34e6, UnlearnSpecialization = 0x31a4, UnlockVoidStorage = 0x31a0, UpdateAccountData = 0x369b, - UpdateAreaTriggerVisual = 0x329f, + UpdateAreaTriggerVisual = 0x32a0, UpdateClientSettings = 0x3666, UpdateMissileTrajectory = 0x3a3e, UpdateRaidTarget = 0x3652, - UpdateSpellVisual = 0x329e, - UpdateVasPurchaseStates = 0x36fa, - UpdateWowTokenAuctionableList = 0x36f5, - UpdateWowTokenCount = 0x36eb, - UpgradeGarrison = 0x32be, + UpdateSpellVisual = 0x329f, + UpdateVasPurchaseStates = 0x36f7, + UpdateWowTokenAuctionableList = 0x36f2, + UpdateWowTokenCount = 0x36e8, + UpgradeGarrison = 0x32bf, UsedFollow = 0x3186, - UseCritterItem = 0x3242, + UseCritterItem = 0x3243, UseEquipmentSet = 0x3995, - UseItem = 0x3299, - UseToy = 0x329b, + UseItem = 0x329a, + UseToy = 0x329c, ViolenceLevel = 0x3184, - VoiceChatJoinChannel = 0x3715, - VoiceChatLogin = 0x3714, + VoiceChatJoinChannel = 0x3713, + VoiceChatLogin = 0x3712, VoidStorageTransfer = 0x31a2, WardenData = 0x35ed, Who = 0x3683, @@ -755,150 +761,151 @@ namespace Framework.Constants public enum ServerOpcodes : uint { - AbortNewWorld = 0x25ae, - AccountCriteriaUpdate = 0x2655, - AccountDataTimes = 0x2753, - AccountMountUpdate = 0x25c3, - AccountToysUpdate = 0x25c4, - AchievementDeleted = 0x2728, + AbortNewWorld = 0x25af, + AccountCriteriaUpdate = 0x28c1, + AccountDataTimes = 0x2752, + AccountMountUpdate = 0x25c4, + AccountToysUpdate = 0x25c5, + AchievementDeleted = 0x2727, AchievementEarned = 0x2663, ActivateTaxiReply = 0x26ac, ActiveGlyphs = 0x2c53, AddBattlenetFriendResponse = 0x265d, - AddItemPassive = 0x25bf, + AddItemPassive = 0x25c0, AddLossOfControl = 0x269c, AddRunePower = 0x26eb, - AdjustSplineDuration = 0x25e8, - AdventureMapPoiQueryResponse = 0x2847, - AeLootTargets = 0x262e, - AeLootTargetAck = 0x262f, + AdjustSplineDuration = 0x25e9, + AdventureMapPoiQueryResponse = 0x2843, + AeLootTargets = 0x262f, + AeLootTargetAck = 0x2630, AiReaction = 0x26e8, - AllAccountCriteria = 0x2570, - AllAchievementData = 0x256f, + AllAccountCriteria = 0x2571, + AllAchievementData = 0x2570, AllGuildAchievements = 0x29b8, - ArchaeologySurveryCast = 0x2587, - AreaPoiUpdate = 0x2854, - AreaSpiritHealerTime = 0x278b, + ArchaeologySurveryCast = 0x2588, + AreaPoiUpdate = 0x2850, + AreaSpiritHealerTime = 0x2789, AreaTriggerDenied = 0x26a3, - AreaTriggerNoCorpse = 0x275f, - AreaTriggerPlayVisualEvent = 0x2640, - AreaTriggerRePath = 0x263e, - AreaTriggerReShape = 0x2643, - ArenaCrowdControlSpells = 0x2651, - ArenaMatchEnd = 0x28ac, - ArenaMatchStart = 0x28ab, + AreaTriggerNoCorpse = 0x275e, + AreaTriggerPlayVisualEvent = 0x2641, + AreaTriggerRePath = 0x263f, + AreaTriggerReShape = 0x2644, + ArenaCrowdControlSpells = 0x2652, + ArenaMatchEnd = 0x28a8, + ArenaMatchStart = 0x28a7, ArenaPrepOpponentSpecializations = 0x2668, - ArtifactForgeOpened = 0x27ef, - ArtifactRespecConfirm = 0x27f2, - ArtifactTraitsRefunded = 0x27f3, - ArtifactXpGain = 0x2837, - AttackerStateUpdate = 0x27dc, + ArtifactForgeOpened = 0x27eb, + ArtifactRespecConfirm = 0x27ee, + ArtifactTraitsRefunded = 0x27ef, + ArtifactXpGain = 0x2833, + AttackerStateUpdate = 0x27d8, AttackStart = 0x2670, AttackStop = 0x2671, - AttackSwingError = 0x273d, - AttackSwingLandedLog = 0x273e, - AuctionClosedNotification = 0x2732, - AuctionCommandResult = 0x272f, - AuctionHelloResponse = 0x272d, - AuctionListBidderItemsResult = 0x2736, - AuctionListItemsResult = 0x2734, - AuctionListOwnerItemsResult = 0x2735, - AuctionListPendingSalesResult = 0x2737, - AuctionOutbidNotification = 0x2731, - AuctionOwnerBidNotification = 0x2733, - AuctionReplicateResponse = 0x272e, - AuctionWonNotification = 0x2730, + AttackSwingError = 0x273c, + AttackSwingLandedLog = 0x273d, + AuctionClosedNotification = 0x2731, + AuctionCommandResult = 0x272e, + AuctionHelloResponse = 0x272c, + AuctionListBidderItemsResult = 0x2735, + AuctionListItemsResult = 0x2733, + AuctionListOwnerItemsResult = 0x2734, + AuctionListPendingSalesResult = 0x2736, + AuctionOutbidNotification = 0x2730, + AuctionOwnerBidNotification = 0x2732, + AuctionReplicateResponse = 0x272d, + AuctionWonNotification = 0x272f, AuraPointsDepleted = 0x2c23, AuraUpdate = 0x2c22, AuthChallenge = 0x3048, - AuthResponse = 0x256c, - AvailableHotfixes = 0x25a2, - AzeriteEmpoweredItemEquippedStatusChanged = 0x2876, - AzeriteEmpoweredItemRespecOpen = 0x2841, - AzeriteEssenceForgeClose = 0x2879, - AzeriteEssenceForgeOpened = 0x2878, - AzeriteEssenceSelectionResult = 0x2877, - AzeriteXpGain = 0x2875, + AuthError = 0x256c, + AuthResponse = 0x256d, + AvailableHotfixes = 0x25a3, + AzeriteEmpoweredItemEquippedStatusChanged = 0x2872, + AzeriteEmpoweredItemRespecOpen = 0x283d, + AzeriteEssenceForgeClose = 0x2875, + AzeriteEssenceForgeOpened = 0x2874, + AzeriteEssenceSelectionResult = 0x2873, + AzeriteXpGain = 0x2871, BanReason = 0x26b8, BarberShopResult = 0x26f1, - BattlefieldList = 0x2595, - BattlefieldPortDenied = 0x259b, - BattlefieldStatusActive = 0x2591, - BattlefieldStatusFailed = 0x2594, - BattlefieldStatusNeedConfirmation = 0x2590, - BattlefieldStatusNone = 0x2593, - BattlefieldStatusQueued = 0x2592, - BattlefieldStatusWaitForGroups = 0x25a6, - BattlegroundInfoThrottled = 0x259c, - BattlegroundInit = 0x27aa, - BattlegroundPlayerJoined = 0x2599, - BattlegroundPlayerLeft = 0x259a, - BattlegroundPlayerPositions = 0x2596, - BattlegroundPoints = 0x27a9, - BattlenetChallengeAbort = 0x27db, - BattlenetChallengeStart = 0x27da, - BattlenetNotification = 0x284f, - BattlenetRealmListTicket = 0x2851, - BattlenetResponse = 0x284e, - BattlenetSetSessionState = 0x2850, - BattlenetUpdateSessionKey = 0x286f, - BattlePayAckFailed = 0x27d3, - BattlePayBattlePetDelivered = 0x27c8, - BattlePayBundlePriceUpdate = 0x2862, - BattlePayConfirmPurchase = 0x27d2, - BattlePayDeliveryEnded = 0x27c6, - BattlePayDeliveryStarted = 0x27c5, - BattlePayDistributionUpdate = 0x27c4, - BattlePayGetDistributionListResponse = 0x27c2, - BattlePayGetProductListResponse = 0x27c0, - BattlePayGetPurchaseListResponse = 0x27c1, - BattlePayMountDelivered = 0x27c7, - BattlePayOpenCheckoutResult = 0x2868, - BattlePayPurchaseUpdate = 0x27d1, - BattlePayStartDistributionAssignToTargetResponse = 0x27cf, - BattlePayStartPurchaseResponse = 0x27ce, - BattlePaySubscriptionChanged = 0x2871, - BattlePayToyDelivered = 0x27c9, - BattlePayVasBnetTransferValidationResult = 0x2866, - BattlePayVasBoostConsumed = 0x27c3, - BattlePayVasCharacterList = 0x283a, - BattlePayVasCharacterQueueStatus = 0x2864, + BattlefieldList = 0x2596, + BattlefieldPortDenied = 0x259c, + BattlefieldStatusActive = 0x2592, + BattlefieldStatusFailed = 0x2595, + BattlefieldStatusNeedConfirmation = 0x2591, + BattlefieldStatusNone = 0x2594, + BattlefieldStatusQueued = 0x2593, + BattlefieldStatusWaitForGroups = 0x25a7, + BattlegroundInfoThrottled = 0x259d, + BattlegroundInit = 0x27a7, + BattlegroundPlayerJoined = 0x259a, + BattlegroundPlayerLeft = 0x259b, + BattlegroundPlayerPositions = 0x2597, + BattlegroundPoints = 0x27a6, + BattlenetChallengeAbort = 0x27d7, + BattlenetChallengeStart = 0x27d6, + BattlenetNotification = 0x284b, + BattlenetRealmListTicket = 0x284d, + BattlenetResponse = 0x284a, + BattlenetSetSessionState = 0x284c, + BattlenetUpdateSessionKey = 0x286b, + BattlePayAckFailed = 0x27d1, + BattlePayBattlePetDelivered = 0x27c5, + BattlePayBundlePriceUpdate = 0x285e, + BattlePayConfirmPurchase = 0x27d0, + BattlePayDeliveryEnded = 0x27c3, + BattlePayDeliveryStarted = 0x27c2, + BattlePayDistributionUpdate = 0x27c1, + BattlePayGetDistributionListResponse = 0x27bf, + BattlePayGetProductListResponse = 0x27bd, + BattlePayGetPurchaseListResponse = 0x27be, + BattlePayMountDelivered = 0x27c4, + BattlePayOpenCheckoutResult = 0x2864, + BattlePayPurchaseUpdate = 0x27cf, + BattlePayStartDistributionAssignToTargetResponse = 0x27cd, + BattlePayStartPurchaseResponse = 0x27cc, + BattlePaySubscriptionChanged = 0x286d, + BattlePayToyDelivered = 0x27c6, + BattlePayVasBnetTransferValidationResult = 0x2862, + BattlePayVasBoostConsumed = 0x27c0, + BattlePayVasCharacterList = 0x2836, + BattlePayVasCharacterQueueStatus = 0x2860, BattlePayVasGuildFollowInfo = 0x29e7, BattlePayVasGuildMasterList = 0x29e6, - BattlePayVasPurchaseComplete = 0x283d, - BattlePayVasPurchaseList = 0x283e, - BattlePayVasPurchaseStarted = 0x283c, - BattlePayVasRealmList = 0x283b, - BattlePayVasTransferQueueStatus = 0x2863, - BattlePetsHealed = 0x260a, + BattlePayVasPurchaseComplete = 0x2839, + BattlePayVasPurchaseList = 0x283a, + BattlePayVasPurchaseStarted = 0x2838, + BattlePayVasRealmList = 0x2837, + BattlePayVasTransferQueueStatus = 0x285f, + BattlePetsHealed = 0x260b, BattlePetCageDateError = 0x26a6, - BattlePetDeleted = 0x2607, + BattlePetDeleted = 0x2608, BattlePetError = 0x2658, - BattlePetJournal = 0x2606, - BattlePetJournalLockAcquired = 0x2604, - BattlePetJournalLockDenied = 0x2605, - BattlePetLicenseChanged = 0x260b, - BattlePetMaxCountChanged = 0x2602, - BattlePetRestored = 0x2609, - BattlePetRevoked = 0x2608, - BattlePetTrapLevel = 0x2601, - BattlePetUpdates = 0x2600, - BinderConfirm = 0x2743, - BindPointUpdate = 0x257c, - BlackMarketBidOnItemResult = 0x2647, - BlackMarketOpenResult = 0x2645, - BlackMarketOutbid = 0x2648, - BlackMarketRequestItemsResult = 0x2646, - BlackMarketWon = 0x2649, + BattlePetJournal = 0x2607, + BattlePetJournalLockAcquired = 0x2605, + BattlePetJournalLockDenied = 0x2606, + BattlePetLicenseChanged = 0x260c, + BattlePetMaxCountChanged = 0x2603, + BattlePetRestored = 0x260a, + BattlePetRevoked = 0x2609, + BattlePetTrapLevel = 0x2602, + BattlePetUpdates = 0x2601, + BinderConfirm = 0x2742, + BindPointUpdate = 0x257d, + BlackMarketBidOnItemResult = 0x2648, + BlackMarketOpenResult = 0x2646, + BlackMarketOutbid = 0x2649, + BlackMarketRequestItemsResult = 0x2647, + BlackMarketWon = 0x264a, BonusRollEmpty = 0x2665, - BonusRollFailed = 0x287c, - BossKillCredit = 0x27cd, + BonusRollFailed = 0x2878, + BossKillCredit = 0x27cb, BreakTarget = 0x266f, BroadcastAchievement = 0x2bbc, BuyFailed = 0x26fa, BuySucceeded = 0x26f9, - CacheInfo = 0x274d, - CacheVersion = 0x274c, + CacheInfo = 0x274c, + CacheVersion = 0x274b, CalendarClearPendingAction = 0x26cc, CalendarCommandResult = 0x26cd, CalendarEventInitialInvites = 0x26bc, @@ -919,9 +926,9 @@ namespace Framework.Constants CalendarSendCalendar = 0x26ba, CalendarSendEvent = 0x26bb, CalendarSendNumPending = 0x26cb, - CameraEffect = 0x2770, - CancelAutoRepeat = 0x271c, - CancelCombat = 0x273b, + CameraEffect = 0x276e, + CancelAutoRepeat = 0x271b, + CancelCombat = 0x273a, CancelOrphanSpellVisual = 0x2c46, CancelScene = 0x2657, CancelSpellVisual = 0x2c44, @@ -929,35 +936,35 @@ namespace Framework.Constants CanDuelResult = 0x267a, CastFailed = 0x2c56, CategoryCooldown = 0x2c16, - ChallengeModeAffixes = 0x2624, - ChallengeModeAllMapStats = 0x2623, - ChallengeModeComplete = 0x2621, - ChallengeModeNewPlayerRecord = 0x2627, - ChallengeModeNewPlayerSeasonRecord = 0x2628, - ChallengeModeRequestLeadersResult = 0x2625, - ChallengeModeReset = 0x2620, - ChallengeModeRewards = 0x2622, - ChallengeModeStart = 0x261e, - ChallengeModeUpdateDeathCount = 0x261f, - ChangePlayerDifficultyResult = 0x273f, + ChallengeModeAffixes = 0x2625, + ChallengeModeAllMapStats = 0x2624, + ChallengeModeComplete = 0x2622, + ChallengeModeNewPlayerRecord = 0x2628, + ChallengeModeNewPlayerSeasonRecord = 0x2629, + ChallengeModeRequestLeadersResult = 0x2626, + ChallengeModeReset = 0x2621, + ChallengeModeRewards = 0x2623, + ChallengeModeStart = 0x261f, + ChallengeModeUpdateDeathCount = 0x2620, + ChangePlayerDifficultyResult = 0x273e, ChannelList = 0x2bc3, ChannelNotify = 0x2bc0, ChannelNotifyJoined = 0x2bc1, ChannelNotifyLeft = 0x2bc2, - CharacterClassTrialCreate = 0x280d, - CharacterInventoryOverflowWarning = 0x2870, - CharacterItemFixup = 0x285f, - CharacterLoginFailed = 0x274e, - CharacterObjectTestResponse = 0x27d9, - CharacterRenameResult = 0x27b2, - CharacterUpgradeComplete = 0x280c, - CharacterUpgradeQueued = 0x280b, - CharacterUpgradeSpellTierSet = 0x25f5, - CharacterUpgradeStarted = 0x280a, - CharacterUpgradeUnrevokeResult = 0x280e, - CharCustomize = 0x2723, - CharCustomizeFailed = 0x2722, - CharFactionChangeResult = 0x27f7, + CharacterClassTrialCreate = 0x2809, + CharacterInventoryOverflowWarning = 0x286c, + CharacterItemFixup = 0x285b, + CharacterLoginFailed = 0x274d, + CharacterObjectTestResponse = 0x27d5, + CharacterRenameResult = 0x27af, + CharacterUpgradeComplete = 0x2808, + CharacterUpgradeQueued = 0x2807, + CharacterUpgradeSpellTierSet = 0x25f6, + CharacterUpgradeStarted = 0x2806, + CharacterUpgradeUnrevokeResult = 0x280a, + CharCustomize = 0x2722, + CharCustomizeFailed = 0x2721, + CharFactionChangeResult = 0x27f3, Chat = 0x2bad, ChatAutoResponded = 0x2bb8, ChatDown = 0x2bbd, @@ -970,62 +977,63 @@ namespace Framework.Constants ChatRestricted = 0x2bb3, ChatServerMessage = 0x2bc4, CheatIgnoreDimishingReturns = 0x2c12, - CheckWargameEntry = 0x259f, + CheckWargameEntry = 0x25a0, ClearAllSpellCharges = 0x2c27, - ClearBossEmotes = 0x25cd, + ClearBossEmotes = 0x25ce, ClearCooldown = 0x26ed, ClearCooldowns = 0x2c26, ClearLossOfControl = 0x269e, ClearSpellCharges = 0x2c28, ClearTarget = 0x26e4, - ClubFinderApplicantsList = 0x28b3, - ClubFinderApplications = 0x28b4, - ClubFinderApplicationsChanged = 0x28b5, - ClubFinderClubsData = 0x28b6, - ClubFinderClubsList = 0x28b2, - CoinRemoved = 0x262d, + ClubFinderApplicantsList = 0x28af, + ClubFinderApplications = 0x28b0, + ClubFinderApplicationsChanged = 0x28b1, + ClubFinderClubsData = 0x28b3, + ClubFinderClubsList = 0x28ae, + ClubFinderCommandResult = 0x28b2, + CoinRemoved = 0x262e, CombatEventFailed = 0x2672, - CommentatorMapInfo = 0x2750, - CommentatorPlayerInfo = 0x2751, - CommentatorStateChanged = 0x274f, + CommentatorMapInfo = 0x274f, + CommentatorPlayerInfo = 0x2750, + CommentatorStateChanged = 0x274e, ComplaintResult = 0x26db, - CompleteShipmentResponse = 0x27eb, + CompleteShipmentResponse = 0x27e7, ConnectTo = 0x304d, - ConquestFormulaConstants = 0x27d4, - ConsoleWrite = 0x2654, - ContactList = 0x27d7, - ContributionCollectorState = 0x2867, + ConquestFormulaConstants = 0x27d2, + ConsoleWrite = 0x2655, + ContactList = 0x27d3, + ContributionCollectorState = 0x2863, ControlUpdate = 0x2667, - CooldownCheat = 0x2784, + CooldownCheat = 0x2782, CooldownEvent = 0x26ec, CorpseLocation = 0x266e, - CorpseReclaimDelay = 0x2797, - CorpseTransportQuery = 0x275b, - CreateChar = 0x2748, - CreateShipmentResponse = 0x27ea, - CriteriaDeleted = 0x2727, - CriteriaUpdate = 0x2721, + CorpseReclaimDelay = 0x2794, + CorpseTransportQuery = 0x275a, + CreateChar = 0x2747, + CreateShipmentResponse = 0x27e6, + CriteriaDeleted = 0x2726, + CriteriaUpdate = 0x2720, CrossedInebriationThreshold = 0x26f5, - CustomLoadScreen = 0x25e3, + CustomLoadScreen = 0x25e4, DailyQuestsReset = 0x2a80, - DamageCalcLog = 0x2815, - DbReply = 0x25a1, + DamageCalcLog = 0x2811, + DbReply = 0x25a2, DeathReleaseLoc = 0x2710, DefenseMessage = 0x2bb6, - DeleteChar = 0x2749, - DestroyArenaUnit = 0x278d, - DestructibleBuildingDamage = 0x273c, - DifferentInstanceFromParty = 0x258b, - DisenchantCredit = 0x25bc, + DeleteChar = 0x2748, + DestroyArenaUnit = 0x278b, + DestructibleBuildingDamage = 0x273b, + DifferentInstanceFromParty = 0x258c, + DisenchantCredit = 0x25bd, Dismount = 0x26e3, - DismountResult = 0x257b, + DismountResult = 0x257c, DispelFailed = 0x2c30, - DisplayGameError = 0x25b5, + DisplayGameError = 0x25b6, DisplayPlayerChoice = 0x26a7, DisplayPromotion = 0x266b, DisplayQuestPopup = 0x2a9d, - DisplayToast = 0x263a, - DontAutoPushSpellsToActionBar = 0x25f7, + DisplayToast = 0x263b, + DontAutoPushSpellsToActionBar = 0x25f8, DropNewConnection = 0x304c, DuelComplete = 0x2678, DuelCountdown = 0x2677, @@ -1034,43 +1042,45 @@ namespace Framework.Constants DuelOutOfBounds = 0x2675, DuelRequested = 0x2673, DuelWinner = 0x2679, - DurabilityDamageDeath = 0x2793, - Emote = 0x2816, + DurabilityDamageDeath = 0x2790, + Emote = 0x2812, EnableBarberShop = 0x26f0, EnableEncryption = 0x3049, - EnchantmentLog = 0x275c, - EncounterEnd = 0x27cc, - EncounterStart = 0x27cb, - EnumCharactersResult = 0x2583, + EnchantmentLog = 0x275b, + EncounterEnd = 0x27ca, + EncounterStart = 0x27c9, + Entitlements = 0x28c4, + EntitlementNotification = 0x28c5, + EnumCharactersResult = 0x2584, EnvironmentalDamageLog = 0x2c21, EquipmentSetId = 0x26e5, ExpectedSpamRecords = 0x2bb1, - ExplorationExperience = 0x27af, - FactionBonusInfo = 0x276f, - FailedPlayerCondition = 0x25e2, - FeatureSystemStatus = 0x25d1, - FeatureSystemStatusGlueScreen = 0x25d2, - FeignDeathResisted = 0x2790, + ExplorationExperience = 0x27ac, + FactionBonusInfo = 0x276d, + FailedPlayerCondition = 0x25e3, + FeatureSystemStatus = 0x25d2, + FeatureSystemStatusGlueScreen = 0x25d3, + FeignDeathResisted = 0x278e, FishEscaped = 0x2703, FishNotHooked = 0x2702, FlightSplineSync = 0x2df7, ForcedDeathUpdate = 0x2711, - ForceAnim = 0x279e, + ForceAnim = 0x279b, ForceObjectRelink = 0x266a, - FriendStatus = 0x27d8, + FriendStatus = 0x27d4, GameEventDebugInitialize = 0x2680, - GameObjectActivateAnimKit = 0x25d6, - GameObjectCustomAnim = 0x25d7, - GameObjectDespawn = 0x25d8, - GameObjectMultiTransition = 0x287a, + GameObjectActivateAnimKit = 0x25d7, + GameObjectCustomAnim = 0x25d8, + GameObjectDespawn = 0x25d9, + GameObjectMultiTransition = 0x2876, GameObjectPlaySpellVisual = 0x2c4b, GameObjectPlaySpellVisualKit = 0x2c4a, - GameObjectResetState = 0x2766, - GameObjectSetState = 0x284d, - GameObjectUiAction = 0x2763, + GameObjectResetState = 0x2765, + GameObjectSetState = 0x2849, + GameObjectUiAction = 0x2762, GameSpeedSet = 0x26b0, - GameTimeSet = 0x2755, - GameTimeUpdate = 0x2754, + GameTimeSet = 0x2754, + GameTimeUpdate = 0x2753, GarrisonAddFollowerResult = 0x2902, GarrisonAddMissionResult = 0x2906, GarrisonAssignFollowerToBuildingResult = 0x2918, @@ -1089,7 +1099,7 @@ namespace Framework.Constants GarrisonFollowerChangedStatus = 0x2915, GarrisonFollowerChangedXp = 0x2912, GarrisonIsUpgradeableResult = 0x2929, - GarrisonLandingPageShipmentInfo = 0x27ed, + GarrisonLandingPageShipmentInfo = 0x27e9, GarrisonLearnBlueprintResult = 0x28f7, GarrisonLearnSpecializationResult = 0x28f5, GarrisonListFollowersCheatResult = 0x2905, @@ -1119,28 +1129,28 @@ namespace Framework.Constants GarrisonStartMissionResult = 0x2907, GarrisonUnlearnBlueprintResult = 0x28f8, GarrisonUpgradeResult = 0x28fd, - GenerateRandomCharacterNameResult = 0x2584, - GetAccountCharacterListResult = 0x27b0, + GenerateRandomCharacterNameResult = 0x2585, + GetAccountCharacterListResult = 0x27ad, GetDisplayedTrophyListResponse = 0x2928, GetGarrisonInfoResult = 0x28f0, - GetShipmentsOfTypeResponse = 0x27ec, - GetShipmentInfoResponse = 0x27e8, - GetTrophyListResponse = 0x2811, - GmPlayerInfo = 0x2783, - GmRequestPlayerInfo = 0x25ee, + GetShipmentsOfTypeResponse = 0x27e8, + GetShipmentInfoResponse = 0x27e4, + GetTrophyListResponse = 0x280d, + GmPlayerInfo = 0x2781, + GmRequestPlayerInfo = 0x25ef, GmTicketCaseStatus = 0x26d2, GmTicketSystemStatus = 0x26d1, - GodMode = 0x2742, + GodMode = 0x2741, GossipComplete = 0x2a96, GossipMessage = 0x2a97, - GossipPoi = 0x27e5, + GossipPoi = 0x27e1, GossipTextUpdate = 0x2a98, - GroupActionThrottled = 0x259d, - GroupDecline = 0x27e0, - GroupDestroyed = 0x27e2, - GroupInviteConfirmation = 0x2860, - GroupNewLeader = 0x264c, - GroupUninvite = 0x27e1, + GroupActionThrottled = 0x259e, + GroupDecline = 0x27dc, + GroupDestroyed = 0x27de, + GroupInviteConfirmation = 0x285c, + GroupNewLeader = 0x264d, + GroupUninvite = 0x27dd, GuildAchievementDeleted = 0x29c5, GuildAchievementEarned = 0x29c4, GuildAchievementMembers = 0x29c7, @@ -1196,62 +1206,68 @@ namespace Framework.Constants GuildSendRankChange = 0x29b9, HealthUpdate = 0x2706, HighestThreatUpdate = 0x2717, - HotfixMessage = 0x25a3, - HotfixResponse = 0x25a4, - IncomingSummonCompleted = 0x28ae, - IncomingSummonPending = 0x28ad, - InitializeFactions = 0x276e, - InitialSetup = 0x2580, - InitWorldStates = 0x2794, - InspectResult = 0x2650, - InstanceEncounterChangePriority = 0x27fd, - InstanceEncounterDisengageUnit = 0x27fc, - InstanceEncounterEnd = 0x2805, - InstanceEncounterEngageUnit = 0x27fb, - InstanceEncounterGainCombatResurrectionCharge = 0x2807, - InstanceEncounterInCombatResurrection = 0x2806, - InstanceEncounterObjectiveComplete = 0x2800, - InstanceEncounterObjectiveStart = 0x27ff, - InstanceEncounterObjectiveUpdate = 0x2804, - InstanceEncounterPhaseShiftChanged = 0x2808, - InstanceEncounterSetAllowingRelease = 0x2803, - InstanceEncounterSetSuppressingRelease = 0x2802, - InstanceEncounterStart = 0x2801, - InstanceEncounterTimerStart = 0x27fe, - InstanceGroupSizeChanged = 0x2740, - InstanceInfo = 0x2653, + HotfixMessage = 0x25a4, + HotfixResponse = 0x25a5, + IncomingSummonCompleted = 0x28aa, + IncomingSummonPending = 0x28a9, + InitializeFactions = 0x276c, + InitialSetup = 0x2581, + InitWorldStates = 0x2791, + InspectResult = 0x2651, + InstanceEncounterChangePriority = 0x27f9, + InstanceEncounterDisengageUnit = 0x27f8, + InstanceEncounterEnd = 0x2801, + InstanceEncounterEngageUnit = 0x27f7, + InstanceEncounterGainCombatResurrectionCharge = 0x2803, + InstanceEncounterInCombatResurrection = 0x2802, + InstanceEncounterObjectiveComplete = 0x27fc, + InstanceEncounterObjectiveStart = 0x27fb, + InstanceEncounterObjectiveUpdate = 0x2800, + InstanceEncounterPhaseShiftChanged = 0x2804, + InstanceEncounterSetAllowingRelease = 0x27ff, + InstanceEncounterSetSuppressingRelease = 0x27fe, + InstanceEncounterStart = 0x27fd, + InstanceEncounterTimerStart = 0x27fa, + InstanceGroupSizeChanged = 0x273f, + InstanceInfo = 0x2654, InstanceReset = 0x26b5, InstanceResetFailed = 0x26b6, - InstanceSaveCreated = 0x27ca, + InstanceSaveCreated = 0x27c8, InvalidatePageText = 0x270c, InvalidatePlayer = 0x26da, - InvalidPromotionCode = 0x279f, - InventoryChangeFailure = 0x276c, - IslandAzeriteXpGain = 0x27ac, - IslandCompleted = 0x27ad, - IslandOpenQueueNpc = 0x2842, + InvalidPromotionCode = 0x279c, + InventoryChangeFailure = 0x276a, + IslandAzeriteXpGain = 0x27a9, + IslandCompleted = 0x27aa, + IslandOpenQueueNpc = 0x283e, IsQuestCompleteResponse = 0x2a83, - ItemChanged = 0x272a, - ItemCooldown = 0x2814, - ItemEnchantTimeUpdate = 0x27a1, - ItemExpirePurchaseRefund = 0x25b2, - ItemPurchaseRefundResult = 0x25b0, - ItemPushResult = 0x2639, - ItemTimeUpdate = 0x27a0, - KickReason = 0x2839, + ItemChanged = 0x2729, + ItemCooldown = 0x2810, + ItemEnchantTimeUpdate = 0x279e, + ItemExpirePurchaseRefund = 0x25b3, + ItemPurchaseRefundResult = 0x25b1, + ItemPushResult = 0x263a, + ItemTimeUpdate = 0x279d, + KickReason = 0x2835, LearnedSpells = 0x2c4d, - LearnPvpTalentsFailed = 0x25ea, - LearnTalentsFailed = 0x25e9, - LevelUpdate = 0x2588, - LevelUpInfo = 0x2729, + LearnPvpTalentsFailed = 0x25eb, + LearnTalentsFailed = 0x25ea, + LevelLinkingResult = 0x28b8, + LevelUpdate = 0x2589, + LevelUpInfo = 0x2728, LfgBootPlayer = 0x2a35, LfgDisabled = 0x2a33, LfgInstanceShutdownCountdown = 0x2a25, LfgJoinResult = 0x2a1c, + LfgListApplicantListUpdate = 0x2a2b, + LfgListApplicationStatusUpdate = 0x2a28, + LfgListApplyToGroupResult = 0x2a29, LfgListJoinResult = 0x2a1d, LfgListSearchResults = 0x2a1e, + LfgListSearchResultsUpdate = 0x2a2c, LfgListSearchStatus = 0x2a1f, LfgListUpdateBlacklist = 0x2a2a, + LfgListUpdateExpiration = 0x2a27, LfgListUpdateStatus = 0x2a26, LfgOfferContinue = 0x2a34, LfgPartyInfo = 0x2a36, @@ -1274,50 +1290,50 @@ namespace Framework.Constants LfGuildRecruits = 0x29cf, LightningStormEnd = 0x26d7, LightningStormStart = 0x26d6, - LiveRegionAccountRestoreResult = 0x27be, - LiveRegionCharacterCopyResult = 0x27bc, - LiveRegionGetAccountCharacterListResult = 0x27b1, - LoadCufProfiles = 0x25ce, - LoadEquipmentSet = 0x2757, - LoadSelectedTrophyResult = 0x2812, - LoginSetTimeSpeed = 0x2756, - LoginVerifyWorld = 0x25ad, + LiveRegionAccountRestoreResult = 0x27bb, + LiveRegionCharacterCopyResult = 0x27b9, + LiveRegionGetAccountCharacterListResult = 0x27ae, + LoadCufProfiles = 0x25cf, + LoadEquipmentSet = 0x2756, + LoadSelectedTrophyResult = 0x280e, + LoginSetTimeSpeed = 0x2755, + LoginVerifyWorld = 0x25ae, LogoutCancelAck = 0x26b4, LogoutComplete = 0x26b3, LogoutResponse = 0x26b2, - LogXpGain = 0x2725, - LootAllPassed = 0x2637, - LootLegacyRulesInEffect = 0x287b, - LootList = 0x278c, - LootMoneyNotify = 0x2632, - LootRelease = 0x2631, - LootReleaseAll = 0x2630, - LootRemoved = 0x262c, - LootResponse = 0x262b, - LootRoll = 0x2634, - LootRollsComplete = 0x2636, - LootRollWon = 0x2638, + LogXpGain = 0x2724, + LootAllPassed = 0x2638, + LootLegacyRulesInEffect = 0x2877, + LootList = 0x278a, + LootMoneyNotify = 0x2633, + LootRelease = 0x2632, + LootReleaseAll = 0x2631, + LootRemoved = 0x262d, + LootResponse = 0x262c, + LootRoll = 0x2635, + LootRollsComplete = 0x2637, + LootRollWon = 0x2639, LossOfControlAuraUpdate = 0x269b, MailCommandResult = 0x265b, - MailListResult = 0x27a2, - MailQueryNextTimeResult = 0x27a3, - MapObjectivesInit = 0x27ab, - MapObjectiveAdd = 0x2597, - MapObjectiveRemove = 0x2598, - MapObjEvents = 0x25d9, - MasterLootCandidateList = 0x2635, - MessageBox = 0x2575, + MailListResult = 0x279f, + MailQueryNextTimeResult = 0x27a0, + MapObjectivesInit = 0x27a8, + MapObjectiveAdd = 0x2598, + MapObjectiveRemove = 0x2599, + MapObjEvents = 0x25da, + MasterLootCandidateList = 0x2636, + MessageBox = 0x2576, MinimapPing = 0x2701, MirrorImageComponentedData = 0x2c14, MirrorImageCreatureData = 0x2c13, - MissileCancel = 0x25da, - ModifyChargeRecoverySpeed = 0x27b5, - ModifyCooldown = 0x27b3, - ModifyCooldownRecoverySpeed = 0x27b4, - ModifyPartyRange = 0x278f, + MissileCancel = 0x25db, + ModifyChargeRecoverySpeed = 0x27b2, + ModifyCooldown = 0x27b0, + ModifyCooldownRecoverySpeed = 0x27b1, + ModifyPartyRange = 0x278d, Motd = 0x2baf, - MountEquipmentApplyResult = 0x28b7, - MountResult = 0x257a, + MountEquipmentApplyResult = 0x28b6, + MountResult = 0x257b, MoveApplyMovementForce = 0x2de1, MoveDisableCollision = 0x2ddd, MoveDisableDoubleJump = 0x2dcb, @@ -1402,112 +1418,111 @@ namespace Framework.Constants MoveUpdateTeleport = 0x2daf, MoveUpdateTurnRate = 0x2dab, MoveUpdateWalkSpeed = 0x2da6, - NeutralPlayerFactionSelectResult = 0x25f2, + NeutralPlayerFactionSelectResult = 0x25f3, NewTaxiPath = 0x26ad, - NewWorld = 0x25ac, + NewWorld = 0x25ad, NotifyDestLocSpellCast = 0x2c43, NotifyMissileTrajectoryCollision = 0x26d9, - NotifyMoney = 0x25af, + NotifyMoney = 0x25b0, NotifyReceivedMail = 0x265c, OfferPetitionError = 0x26e9, - OnCancelExpectedRideVehicleAura = 0x2726, + OnCancelExpectedRideVehicleAura = 0x2725, OnMonsterMove = 0x2da2, - OpenAlliedRaceDetailsGiver = 0x2843, - OpenContainer = 0x276d, + OpenAlliedRaceDetailsGiver = 0x283f, + OpenContainer = 0x276b, OpenLfgDungeonFinder = 0x2a31, - OpenShipmentNpcFromGossip = 0x27e7, - OpenShipmentNpcResult = 0x27e9, - OpenTransmogrifier = 0x2840, + OpenShipmentNpcFromGossip = 0x27e3, + OpenShipmentNpcResult = 0x27e5, + OpenTransmogrifier = 0x283c, OverrideLight = 0x26ef, - PageText = 0x2762, - PartyCommandResult = 0x27e4, - PartyInvite = 0x25cf, - PartyKillLog = 0x27a7, - PartyMemberState = 0x27a5, - PartyMemberStateUpdate = 0x27a4, - PartyUpdate = 0x260c, - PauseMirrorTimer = 0x2759, - PendingRaidLock = 0x273a, - PetitionAlreadySigned = 0x25b8, + PageText = 0x2761, + PartyCommandResult = 0x27e0, + PartyInvite = 0x25d0, + PartyKillLog = 0x27a4, + PartyMemberState = 0x27a2, + PartyMemberStateUpdate = 0x27a1, + PartyUpdate = 0x260d, + PauseMirrorTimer = 0x2758, + PendingRaidLock = 0x2739, + PetitionAlreadySigned = 0x25b9, PetitionRenameGuildResponse = 0x29fa, PetitionShowList = 0x26f2, PetitionShowSignatures = 0x26f3, - PetitionSignResults = 0x2799, - PetActionFeedback = 0x2796, + PetitionSignResults = 0x2796, + PetActionFeedback = 0x2793, PetActionSound = 0x26cf, - PetAdded = 0x25a9, - PetBattleChatRestricted = 0x2619, + PetAdded = 0x25aa, + PetBattleChatRestricted = 0x261a, PetBattleDebugQueueDumpResponse = 0x26a2, - PetBattleFinalizeLocation = 0x2612, - PetBattleFinalRound = 0x2617, - PetBattleFinished = 0x2618, - PetBattleFirstRound = 0x2614, - PetBattleInitialUpdate = 0x2613, - PetBattleMaxGameLengthWarning = 0x261a, - PetBattlePvpChallenge = 0x2611, + PetBattleFinalizeLocation = 0x2613, + PetBattleFinalRound = 0x2618, + PetBattleFinished = 0x2619, + PetBattleFirstRound = 0x2615, + PetBattleInitialUpdate = 0x2614, + PetBattleMaxGameLengthWarning = 0x261b, + PetBattlePvpChallenge = 0x2612, PetBattleQueueProposeMatch = 0x2659, PetBattleQueueStatus = 0x265a, - PetBattleReplacementsMade = 0x2616, - PetBattleRequestFailed = 0x2610, - PetBattleRoundResult = 0x2615, - PetBattleSlotUpdates = 0x2603, + PetBattleReplacementsMade = 0x2617, + PetBattleRequestFailed = 0x2611, + PetBattleRoundResult = 0x2616, + PetBattleSlotUpdates = 0x2604, PetCastFailed = 0x2c57, PetClearSpells = 0x2c24, PetDismissSound = 0x26d0, PetGodMode = 0x26aa, - PetGuids = 0x274b, + PetGuids = 0x274a, PetLearnedSpells = 0x2c4f, - PetMode = 0x258a, + PetMode = 0x258b, PetNameInvalid = 0x26f7, - PetSlotUpdated = 0x2589, + PetSlotUpdated = 0x258a, PetSpellsMessage = 0x2c25, - PetStableList = 0x25aa, - PetStableResult = 0x25ab, + PetStableList = 0x25ab, + PetStableResult = 0x25ac, PetTameFailure = 0x26e6, PetUnlearnedSpells = 0x2c50, - PhaseShiftChange = 0x2577, + PhaseShiftChange = 0x2578, PlayedTime = 0x2713, - PlayerBound = 0x257d, + PlayerBound = 0x257e, PlayerSaveGuildEmblem = 0x29f9, - PlayerSkinned = 0x2791, - PlayerTabardVendorActivate = 0x27a6, - PlayMusic = 0x27b8, - PlayObjectSound = 0x27b9, - PlayOneShotAnimKit = 0x277b, + PlayerSkinned = 0x278f, + PlayerTabardVendorActivate = 0x27a3, + PlayMusic = 0x27b5, + PlayObjectSound = 0x27b6, + PlayOneShotAnimKit = 0x2779, PlayOrphanSpellVisual = 0x2c47, PlayScene = 0x2656, - PlaySound = 0x27b7, - PlaySpeakerbotSound = 0x27ba, + PlaySound = 0x27b4, + PlaySpeakerbotSound = 0x27b7, PlaySpellVisual = 0x2c45, PlaySpellVisualKit = 0x2c49, - PlayTimeWarning = 0x2744, + PlayTimeWarning = 0x2743, Pong = 0x304e, PowerUpdate = 0x2707, - PreRessurect = 0x27b6, - PrintNotification = 0x25e1, - ProcResist = 0x27a8, - ProposeLevelGrant = 0x271b, + PreRessurect = 0x27b3, + PrintNotification = 0x25e2, + ProcResist = 0x27a5, PushSpellToActionBar = 0x2c51, - PvpCredit = 0x2720, - PvpLogData = 0x25b3, - PvpMatchStart = 0x28b1, - PvpOptionsEnabled = 0x25b6, - PvpSeason = 0x25d3, + PvpCredit = 0x271f, + PvpLogData = 0x25b4, + PvpMatchStart = 0x28ad, + PvpOptionsEnabled = 0x25b7, + PvpSeason = 0x25d4, QueryBattlePetNameResponse = 0x270e, QueryCommunityNameResponse = 0x270a, QueryCreatureResponse = 0x2704, QueryGameObjectResponse = 0x2705, QueryGarrisonCreatureNameResponse = 0x292b, QueryGuildInfoResponse = 0x29e5, - QueryItemTextResponse = 0x2813, + QueryItemTextResponse = 0x280f, QueryNpcTextResponse = 0x2708, QueryPageTextResponse = 0x270b, QueryPetitionResponse = 0x270f, QueryPetNameResponse = 0x270d, QueryPlayerNameResponse = 0x2709, QueryQuestInfoResponse = 0x2a95, - QueryTimeResponse = 0x2724, - QueryTreasurePickerResponse = 0x2852, + QueryTimeResponse = 0x2723, + QueryTreasurePickerResponse = 0x284e, QuestCompletionNpcResponse = 0x2a81, QuestConfirmAccept = 0x2a8e, QuestForceRemoved = 0x2a9b, @@ -1517,7 +1532,7 @@ namespace Framework.Constants QuestGiverQuestDetails = 0x2a91, QuestGiverQuestFailed = 0x2a85, QuestGiverQuestListMessage = 0x2a99, - QuestGiverQuestTurnInFailure = 0x285d, + QuestGiverQuestTurnInFailure = 0x2859, QuestGiverRequestItems = 0x2a92, QuestGiverStatus = 0x2a9a, QuestGiverStatusMultiple = 0x2a90, @@ -1525,6 +1540,9 @@ namespace Framework.Constants QuestPoiChanged = 0x2a9f, QuestPoiQueryResponse = 0x2a9c, QuestPushResult = 0x2a8f, + QuestSessionMemberConfirm = 0x28bc, + QuestSessionMemberStartResponse = 0x28bd, + QuestSessionNotification = 0x28bb, QuestSpawnTrackingUpdate = 0x2a9e, QuestUpdateAddCredit = 0x2a8b, QuestUpdateAddCreditSimple = 0x2a8c, @@ -1533,116 +1551,116 @@ namespace Framework.Constants QuestUpdateCompleteBySpell = 0x2a87, QuestUpdateFailed = 0x2a89, QuestUpdateFailedTimer = 0x2a8a, - RafEmailEnabledResponse = 0x27d5, - RaidDifficultySet = 0x27f8, - RaidGroupOnly = 0x27fa, + QuickJoinConfirmRequestInvite = 0x28c6, + RafAccountInfo = 0x28b9, + RafActivity = 0x28c2, + RafInfoUpdate = 0x28ba, + RaidDifficultySet = 0x27f4, + RaidGroupOnly = 0x27f6, RaidInstanceMessage = 0x2bb4, - RaidMarkersChanged = 0x25b9, - RandomRoll = 0x264f, - RatedBattlefieldInfo = 0x25a7, - ReadyCheckCompleted = 0x260f, - ReadyCheckResponse = 0x260e, - ReadyCheckStarted = 0x260d, - ReadItemResultFailed = 0x27f4, - ReadItemResultOk = 0x27ee, - RealmLookupInformation = 0x2819, + RaidMarkersChanged = 0x25ba, + RandomRoll = 0x2650, + RatedBattlefieldInfo = 0x25a8, + ReadyCheckCompleted = 0x2610, + ReadyCheckResponse = 0x260f, + ReadyCheckStarted = 0x260e, + ReadItemResultFailed = 0x27f0, + ReadItemResultOk = 0x27ea, + RealmLookupInformation = 0x2815, RealmQueryResponse = 0x26ee, - RecruitAFriendResponse = 0x27d6, - ReferAFriendExpired = 0x276b, ReferAFriendFailure = 0x26f4, RefreshComponent = 0x267c, RefreshSpellHistory = 0x2c2c, - RemoveItemPassive = 0x25c0, + RemoveItemPassive = 0x25c1, RemoveLossOfControl = 0x269d, - ReplaceTrophyResponse = 0x2810, + ReplaceTrophyResponse = 0x280c, ReportPvpPlayerAfkResult = 0x26e2, RequestAddonList = 0x2662, - RequestCemeteryListResponse = 0x259e, - RequestPvpBrawlInfoResponse = 0x25d5, - RequestPvpRewardsResponse = 0x25d4, - ResearchComplete = 0x2586, + RequestCemeteryListResponse = 0x259f, + RequestPvpBrawlInfoResponse = 0x25d6, + RequestPvpRewardsResponse = 0x25d5, + ResearchComplete = 0x2587, ResetCompressionContext = 0x304f, ResetFailedNotify = 0x26ea, - ResetRangedCombatTimer = 0x271d, - ResetWeeklyCurrency = 0x2574, - RespecWipeConfirm = 0x2629, - RespondInspectAchievements = 0x2571, + ResetRangedCombatTimer = 0x271c, + ResetWeeklyCurrency = 0x2575, + RespecWipeConfirm = 0x262a, + RespondInspectAchievements = 0x2572, ResumeCastBar = 0x2c3e, ResumeComms = 0x304b, - ResumeToken = 0x25be, - ResurrectClearData = 0x257f, - ResurrectRequest = 0x257e, - ResyncRunes = 0x2747, - RoleChangedInform = 0x258d, + ResumeToken = 0x25bf, + ResurrectClearData = 0x2580, + ResurrectRequest = 0x257f, + ResyncRunes = 0x2746, + RoleChangedInform = 0x258e, RoleChosen = 0x2a39, - RolePollInform = 0x258e, - RuneRegenDebug = 0x25c8, - ScenarioBoot = 0x27f5, - ScenarioCompleted = 0x2836, - ScenarioPois = 0x2652, - ScenarioProgressUpdate = 0x264b, - ScenarioSetShouldShowCriteria = 0x2846, - ScenarioSpellUpdate = 0x2845, - ScenarioState = 0x264a, - SceneObjectEvent = 0x25f8, - SceneObjectPetBattleFinalRound = 0x25fd, - SceneObjectPetBattleFinished = 0x25fe, - SceneObjectPetBattleFirstRound = 0x25fa, - SceneObjectPetBattleInitialUpdate = 0x25f9, - SceneObjectPetBattleReplacementsMade = 0x25fc, - SceneObjectPetBattleRoundResult = 0x25fb, + RolePollInform = 0x258f, + RuneRegenDebug = 0x25c9, + ScenarioBoot = 0x27f1, + ScenarioCompleted = 0x2832, + ScenarioPois = 0x2653, + ScenarioProgressUpdate = 0x264c, + ScenarioSetShouldShowCriteria = 0x2842, + ScenarioSpellUpdate = 0x2841, + ScenarioState = 0x264b, + SceneObjectEvent = 0x25f9, + SceneObjectPetBattleFinalRound = 0x25fe, + SceneObjectPetBattleFinished = 0x25ff, + SceneObjectPetBattleFirstRound = 0x25fb, + SceneObjectPetBattleInitialUpdate = 0x25fa, + SceneObjectPetBattleReplacementsMade = 0x25fd, + SceneObjectPetBattleRoundResult = 0x25fc, ScriptCast = 0x2c55, SellResponse = 0x26f8, - SendItemPassives = 0x25c1, + SendItemPassives = 0x25c2, SendKnownSpells = 0x2c2a, - SendRaidTargetUpdateAll = 0x264d, - SendRaidTargetUpdateSingle = 0x264e, + SendRaidTargetUpdateAll = 0x264e, + SendRaidTargetUpdateSingle = 0x264f, SendSpellCharges = 0x2c2d, SendSpellHistory = 0x2c2b, SendUnlearnSpells = 0x2c2e, ServerFirstAchievements = 0x266d, ServerTime = 0x26b1, - SetupCurrency = 0x2572, - SetupResearchHistory = 0x2585, - SetAiAnimKit = 0x277a, - SetAllTaskProgress = 0x27de, - SetAnimTier = 0x277e, - SetCurrency = 0x2573, + SetupCurrency = 0x2573, + SetupResearchHistory = 0x2586, + SetAiAnimKit = 0x2778, + SetAllTaskProgress = 0x27da, + SetAnimTier = 0x277c, + SetCurrency = 0x2574, SetDfFastLaunchResult = 0x2a2e, SetDungeonDifficulty = 0x26d3, - SetFactionAtWar = 0x2746, - SetFactionNotVisible = 0x2775, - SetFactionStanding = 0x2776, - SetFactionVisible = 0x2774, + SetFactionAtWar = 0x2745, + SetFactionNotVisible = 0x2773, + SetFactionStanding = 0x2774, + SetFactionVisible = 0x2772, SetFlatSpellModifier = 0x2c36, - SetForcedReactions = 0x2765, - SetItemPurchaseData = 0x25b1, - SetLootMethodFailed = 0x281f, - SetMaxWeeklyQuantity = 0x25b7, - SetMeleeAnimKit = 0x277d, - SetMovementAnimKit = 0x277c, + SetForcedReactions = 0x2764, + SetItemPurchaseData = 0x25b2, + SetLootMethodFailed = 0x281b, + SetMaxWeeklyQuantity = 0x25b8, + SetMeleeAnimKit = 0x277b, + SetMovementAnimKit = 0x277a, SetPctSpellModifier = 0x2c37, - SetPetSpecialization = 0x2644, + SetPetSpecialization = 0x2645, SetPlayerDeclinedNamesResult = 0x2712, - SetPlayHoverAnim = 0x25cc, - SetProficiency = 0x277f, + SetPlayHoverAnim = 0x25cd, + SetProficiency = 0x277d, SetSpellCharges = 0x2c29, - SetTaskComplete = 0x27df, + SetTaskComplete = 0x27db, SetTimeZoneInformation = 0x26a5, - SetVehicleRecId = 0x2739, - ShowAdventureMap = 0x283f, + SetVehicleRecId = 0x2738, + ShowAdventureMap = 0x283b, ShowBank = 0x26ae, - ShowMailbox = 0x27f6, - ShowNeutralPlayerFactionSelectUi = 0x25f1, + ShowMailbox = 0x27f2, + ShowNeutralPlayerFactionSelectUi = 0x25f2, ShowTaxiNodes = 0x2700, - ShowTradeSkillResponse = 0x27bf, - SocketGems = 0x2771, - SocketGemsFailure = 0x2772, - SortBagsResult = 0x282d, - SorStartExperienceIncomplete = 0x25f3, - SpecializationChanged = 0x25ed, + ShowTradeSkillResponse = 0x27bc, + SocketGems = 0x276f, + SocketGemsFailure = 0x2770, + SortBagsResult = 0x2829, + SpecializationChanged = 0x25ee, SpecialMountAnim = 0x26ce, - SpecInvoluntarilyChanged = 0x2761, + SpecInvoluntarilyChanged = 0x2760, SpellAbsorbLog = 0x2c1f, SpellCategoryCooldown = 0x2c17, SpellChannelStart = 0x2c34, @@ -1667,24 +1685,24 @@ namespace Framework.Constants SpellPeriodicAuraLog = 0x2c1b, SpellPrepare = 0x2c38, SpellStart = 0x2c3a, - SpiritHealerConfirm = 0x275e, - StandStateUpdate = 0x2764, - StartElapsedTimer = 0x261b, - StartElapsedTimers = 0x261d, - StartLootRoll = 0x2633, - StartMirrorTimer = 0x2758, - StartTimer = 0x25bb, - StopElapsedTimer = 0x261c, - StopMirrorTimer = 0x275a, - StopSpeakerbotSound = 0x27bb, - StreamingMovies = 0x25ba, + SpiritHealerConfirm = 0x275d, + StandStateUpdate = 0x2763, + StartElapsedTimer = 0x261c, + StartElapsedTimers = 0x261e, + StartLootRoll = 0x2634, + StartMirrorTimer = 0x2757, + StartTimer = 0x25bc, + StopElapsedTimer = 0x261d, + StopMirrorTimer = 0x2759, + StopSpeakerbotSound = 0x27b8, + StreamingMovies = 0x25bb, SummonCancel = 0x26e1, - SummonRaidMemberValidateFailed = 0x258f, - SummonRequest = 0x2769, + SummonRaidMemberValidateFailed = 0x2590, + SummonRequest = 0x2768, SupercededSpells = 0x2c4c, SuspendComms = 0x304a, - SuspendToken = 0x25bd, - TalentsInvoluntarilyReset = 0x2760, + SuspendToken = 0x25be, + TalentsInvoluntarilyReset = 0x275f, TaxiNodeStatus = 0x26ab, TextEmote = 0x26a9, ThreatClear = 0x271a, @@ -1697,77 +1715,77 @@ namespace Framework.Constants TotemCreated = 0x26fb, TotemDurationChanged = 0x26fc, TotemMoved = 0x26fd, - TradeStatus = 0x2582, - TradeUpdated = 0x2581, - TrainerBuyFailed = 0x271f, - TrainerList = 0x271e, - TransferAborted = 0x274a, - TransferPending = 0x25e5, - TransmogCollectionUpdate = 0x25c6, - TransmogSetCollectionUpdate = 0x25c7, - TriggerCinematic = 0x2817, + TradeStatus = 0x2583, + TradeUpdated = 0x2582, + TrainerBuyFailed = 0x271e, + TrainerList = 0x271d, + TransferAborted = 0x2749, + TransferPending = 0x25e6, + TransmogCollectionUpdate = 0x25c7, + TransmogSetCollectionUpdate = 0x25c8, + TriggerCinematic = 0x2813, TriggerMovie = 0x26fe, - TurnInPetitionResult = 0x279b, - TutorialFlags = 0x2809, - TutorialHighlightSpell = 0x284c, - TutorialUnhighlightSpell = 0x284b, + TurnInPetitionResult = 0x2798, + TutorialFlags = 0x2805, + TutorialHighlightSpell = 0x2848, + TutorialUnhighlightSpell = 0x2847, TwitterStatus = 0x2ffd, - UiTime = 0x275d, - UndeleteCharacterResponse = 0x281a, - UndeleteCooldownStatusResponse = 0x281b, + UiTime = 0x275c, + UndeleteCharacterResponse = 0x2816, + UndeleteCooldownStatusResponse = 0x2817, UnlearnedSpells = 0x2c4e, - UpdateAccountData = 0x2752, - UpdateActionButtons = 0x25f6, - UpdateCelestialBody = 0x286b, - UpdateCharacterFlags = 0x280f, + UpdateAccountData = 0x2751, + UpdateActionButtons = 0x25f7, + UpdateCelestialBody = 0x2867, + UpdateCharacterFlags = 0x280b, UpdateExpansionLevel = 0x2666, - UpdateGameTimeState = 0x2872, + UpdateGameTimeState = 0x286e, UpdateInstanceOwnership = 0x26d8, UpdateLastInstance = 0x26b7, - UpdateObject = 0x2818, - UpdateTalentData = 0x25ec, - UpdateTaskProgress = 0x27dd, + UpdateObject = 0x2814, + UpdateTalentData = 0x25ed, + UpdateTaskProgress = 0x27d9, UpdateWeeklySpellUsage = 0x2c19, - UpdateWorldState = 0x2795, + UpdateWorldState = 0x2792, UserlistAdd = 0x2bb9, UserlistRemove = 0x2bba, UserlistUpdate = 0x2bbb, - UseEquipmentSetResult = 0x279c, - VendorInventory = 0x25ca, - VignetteUpdate = 0x27bd, - VoidItemSwapResponse = 0x25df, - VoidStorageContents = 0x25dc, - VoidStorageFailed = 0x25db, - VoidStorageTransferChanges = 0x25dd, - VoidTransferResult = 0x25de, - WaitQueueFinish = 0x256e, - WaitQueueUpdate = 0x256d, - WardenData = 0x2576, - WarfrontCompleted = 0x27ae, - WargameRequestSuccessfullySentToOpponent = 0x25b4, + UseEquipmentSetResult = 0x2799, + VendorInventory = 0x25cb, + VignetteUpdate = 0x27ba, + VoidItemSwapResponse = 0x25e0, + VoidStorageContents = 0x25dd, + VoidStorageFailed = 0x25dc, + VoidStorageTransferChanges = 0x25de, + VoidTransferResult = 0x25df, + WaitQueueFinish = 0x256f, + WaitQueueUpdate = 0x256e, + WardenData = 0x2577, + WarfrontCompleted = 0x27ab, + WargameRequestSuccessfullySentToOpponent = 0x25b5, Weather = 0x26d5, WeeklySpellUsage = 0x2c18, Who = 0x2bae, WhoIs = 0x26d4, - WorldQuestUpdate = 0x2853, - WorldServerInfo = 0x25c2, - WorldText = 0x2838, - WowTokenAuctionSold = 0x2825, - WowTokenBuyRequestConfirmation = 0x2827, - WowTokenBuyResultConfirmation = 0x2828, - WowTokenCanRedeemForBalanceResult = 0x2861, - WowTokenCanVeteranBuyResult = 0x2826, - WowTokenDistributionGlueUpdate = 0x2820, - WowTokenDistributionUpdate = 0x2821, - WowTokenMarketPriceResponse = 0x2822, - WowTokenRedeemGameTimeUpdated = 0x2829, - WowTokenRedeemRequestConfirmation = 0x282a, - WowTokenRedeemResult = 0x282b, - WowTokenSellRequestConfirmation = 0x2823, - WowTokenSellResultConfirmation = 0x2824, - WowTokenUpdateAuctionableListResponse = 0x282c, - XpGainAborted = 0x25e0, - XpGainEnabled = 0x27f9, + WorldQuestUpdate = 0x284f, + WorldServerInfo = 0x25c3, + WorldText = 0x2834, + WowTokenAuctionSold = 0x2821, + WowTokenBuyRequestConfirmation = 0x2823, + WowTokenBuyResultConfirmation = 0x2824, + WowTokenCanRedeemForBalanceResult = 0x285d, + WowTokenCanVeteranBuyResult = 0x2822, + WowTokenDistributionGlueUpdate = 0x281c, + WowTokenDistributionUpdate = 0x281d, + WowTokenMarketPriceResponse = 0x281e, + WowTokenRedeemGameTimeUpdated = 0x2825, + WowTokenRedeemRequestConfirmation = 0x2826, + WowTokenRedeemResult = 0x2827, + WowTokenSellRequestConfirmation = 0x281f, + WowTokenSellResultConfirmation = 0x2820, + WowTokenUpdateAuctionableListResponse = 0x2828, + XpGainAborted = 0x25e1, + XpGainEnabled = 0x27f5, ZoneUnderAttack = 0x2bb5, // Opcodes that are not generated automatically diff --git a/Source/Framework/Constants/ObjectConst.cs b/Source/Framework/Constants/ObjectConst.cs index dad353014..6521a1802 100644 --- a/Source/Framework/Constants/ObjectConst.cs +++ b/Source/Framework/Constants/ObjectConst.cs @@ -105,7 +105,8 @@ namespace Framework.Constants CommerceObj = 45, ClientSession = 46, Cast = 47, - ClientConnection = 48 + ClientConnection = 48, + ClubFinder = 49 } public enum NotifyFlags diff --git a/Source/Game/BattleGrounds/Zones/ArathiBasin.cs b/Source/Game/BattleGrounds/Zones/ArathiBasin.cs index d320db8bd..4ebc3b3ba 100644 --- a/Source/Game/BattleGrounds/Zones/ArathiBasin.cs +++ b/Source/Game/BattleGrounds/Zones/ArathiBasin.cs @@ -837,8 +837,8 @@ namespace Game.BattleGrounds.Zones { base.BuildPvPLogPlayerDataPacket(out playerData); - playerData.Stats.Add(BasesAssaulted); - playerData.Stats.Add(BasesDefended); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat((int)ABObjectives.AssaultBase, BasesAssaulted)); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat((int)ABObjectives.DefendBase, BasesDefended)); } public override uint GetAttr1() { return BasesAssaulted; } diff --git a/Source/Game/BattleGrounds/Zones/EyeofStorm.cs b/Source/Game/BattleGrounds/Zones/EyeofStorm.cs index 4315f4c62..900b43956 100644 --- a/Source/Game/BattleGrounds/Zones/EyeofStorm.cs +++ b/Source/Game/BattleGrounds/Zones/EyeofStorm.cs @@ -1003,7 +1003,7 @@ namespace Game.BattleGrounds.Zones { base.BuildPvPLogPlayerDataPacket(out playerData); - playerData.Stats.Add(FlagCaptures); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat((int)EotSMisc.ObjectiveCaptureFlag, FlagCaptures)); } public override uint GetAttr1() { return FlagCaptures; } diff --git a/Source/Game/BattleGrounds/Zones/StrandofAncients.cs b/Source/Game/BattleGrounds/Zones/StrandofAncients.cs index 3fff51033..5ddc4c69e 100644 --- a/Source/Game/BattleGrounds/Zones/StrandofAncients.cs +++ b/Source/Game/BattleGrounds/Zones/StrandofAncients.cs @@ -1088,6 +1088,25 @@ namespace Game.BattleGrounds.Zones return true; } + public override bool UpdatePlayerScore(Player player, ScoreType type, uint value, bool doAddHonor = true) + { + if (!base.UpdatePlayerScore(player, type, value, doAddHonor)) + return false; + + switch (type) + { + case ScoreType.DestroyedDemolisher: + player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, (uint)SAObjectives.DemolishersDestroyed); + break; + case ScoreType.DestroyedWall: + player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, (uint)SAObjectives.GatesDestroyed); + break; + default: + break; + } + return true; + } + SAGateInfo GetGate(uint entry) { foreach (var gate in SAMiscConst.Gates) @@ -1157,8 +1176,8 @@ namespace Game.BattleGrounds.Zones { base.BuildPvPLogPlayerDataPacket(out playerData); - playerData.Stats.Add(DemolishersDestroyed); - playerData.Stats.Add(GatesDestroyed); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat((int)SAObjectives.DemolishersDestroyed, DemolishersDestroyed)); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat((int)SAObjectives.GatesDestroyed, GatesDestroyed)); } public override uint GetAttr1() { return DemolishersDestroyed; } @@ -1643,5 +1662,11 @@ namespace Game.BattleGrounds.Zones public const int CentralCapturableGy = 4; public const int Max = 5; } + + enum SAObjectives + { + GatesDestroyed = 231, + DemolishersDestroyed = 232 + } #endregion } diff --git a/Source/Game/BattleGrounds/Zones/WarsongGluch.cs b/Source/Game/BattleGrounds/Zones/WarsongGluch.cs index 6b1170c9c..2240c83ff 100644 --- a/Source/Game/BattleGrounds/Zones/WarsongGluch.cs +++ b/Source/Game/BattleGrounds/Zones/WarsongGluch.cs @@ -789,10 +789,10 @@ namespace Game.BattleGrounds.Zones switch (type) { case ScoreType.FlagCaptures: // flags captured - player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, 42); + player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, WSObjectives.CaptureFlag); break; case ScoreType.FlagReturns: // flags returned - player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, 44); + player.UpdateCriteria(CriteriaTypes.BgObjectiveCapture, WSObjectives.ReturnFlag); break; default: break; @@ -970,8 +970,8 @@ namespace Game.BattleGrounds.Zones { base.BuildPvPLogPlayerDataPacket(out playerData); - playerData.Stats.Add(FlagCaptures); - playerData.Stats.Add(FlagReturns); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat(WSObjectives.CaptureFlag, FlagCaptures)); + playerData.Stats.Add(new PVPLogData.PVPMatchPlayerPVPStat(WSObjectives.ReturnFlag, FlagReturns)); } public override uint GetAttr1() { return FlagCaptures; } @@ -1115,5 +1115,10 @@ namespace Game.BattleGrounds.Zones public const uint AllianceFlagReturned = 9808; public const uint HordeFlagReturned = 9809; } + struct WSObjectives + { + public const int CaptureFlag = 42; + public const int ReturnFlag = 44; + } #endregion } diff --git a/Source/Game/Chat/Channels/Channel.cs b/Source/Game/Chat/Channels/Channel.cs index 3c0cd2935..57b691cfb 100644 --- a/Source/Game/Chat/Channels/Channel.cs +++ b/Source/Game/Chat/Channels/Channel.cs @@ -30,11 +30,12 @@ namespace Game.Chat { public class Channel { - public Channel(uint channelId, Team team = 0, AreaTableRecord zoneEntry = null) + public Channel(ObjectGuid guid, uint channelId, Team team = 0, AreaTableRecord zoneEntry = null) { _channelFlags = ChannelFlags.General; _channelId = channelId; _channelTeam = team; + _channelGuid = guid; _zoneEntry = zoneEntry; ChatChannelsRecord channelEntry = CliDB.ChatChannelsStorage.LookupByKey(channelId); @@ -50,12 +51,13 @@ namespace Game.Chat _channelFlags |= ChannelFlags.NotLfg; } - public Channel(string name, Team team = 0) + public Channel(ObjectGuid guid, string name, Team team = 0) { _announceEnabled = true; _ownershipEnabled = true; _channelFlags = ChannelFlags.Custom; _channelTeam = team; + _channelGuid = guid; _channelName = name; // If storing custom channels in the db is enabled either load or save the channel @@ -881,6 +883,7 @@ namespace Game.Chat } public uint GetChannelId() { return _channelId; } + public ObjectGuid GetChannelGuid() { return _channelGuid; } public bool IsConstant() { return _channelId != 0; } public bool IsLFG() { return GetFlags().HasAnyFlag(ChannelFlags.Lfg); } @@ -924,6 +927,7 @@ namespace Game.Chat ChannelFlags _channelFlags; uint _channelId; Team _channelTeam; + ObjectGuid _channelGuid; ObjectGuid _ownerGuid; string _channelName; string _channelPassword; diff --git a/Source/Game/Chat/Channels/ChannelAppenders.cs b/Source/Game/Chat/Channels/ChannelAppenders.cs index b6dcaa615..2c507f1ec 100644 --- a/Source/Game/Chat/Channels/ChannelAppenders.cs +++ b/Source/Game/Chat/Channels/ChannelAppenders.cs @@ -71,6 +71,7 @@ namespace Game.Chat //notify.InstanceID = 0; notify.ChannelFlags = _source.GetFlags(); notify.Channel = _source.GetName(localeIdx); + notify.ChannelGUID = _source.GetChannelGuid(); return notify; } diff --git a/Source/Game/Chat/Channels/ChannelManager.cs b/Source/Game/Chat/Channels/ChannelManager.cs index b0bfa946e..dc89aa374 100644 --- a/Source/Game/Chat/Channels/ChannelManager.cs +++ b/Source/Game/Chat/Channels/ChannelManager.cs @@ -29,6 +29,7 @@ namespace Game.Chat public ChannelManager(Team team) { _team = team; + _guidGenerator = new ObjectGuidGenerator(HighGuid.ChatChannel); } public static ChannelManager ForTeam(Team team) @@ -61,18 +62,13 @@ namespace Game.Chat { if (channelId != 0) // builtin { - ChatChannelsRecord channelEntry = CliDB.ChatChannelsStorage.LookupByKey(channelId); - uint zoneId = zoneEntry != null ? zoneEntry.Id : 0; - if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.Global | ChannelDBCFlags.CityOnly)) - zoneId = 0; - - Tuple key = Tuple.Create(channelId, zoneId); - var channel = _channels.LookupByKey(key); + ObjectGuid channelGuid = CreateBuiltinChannelGuid(channelId, zoneEntry); + var channel = _channels.LookupByKey(channelGuid); if (channel != null) return channel; - Channel newChannel = new Channel(channelId, _team, zoneEntry); - _channels[key] = newChannel; + Channel newChannel = new Channel(channelGuid, channelId, _team, zoneEntry); + _channels[channelGuid] = newChannel; return newChannel; } else // custom @@ -81,7 +77,7 @@ namespace Game.Chat if (channel != null) return channel; - Channel newChannel = new Channel(name, _team); + Channel newChannel = new Channel(CreateCustomChannelGuid(), name, _team); _customChannels[name.ToLower()] = newChannel; return newChannel; } @@ -92,13 +88,7 @@ namespace Game.Chat Channel result = null; if (channelId != 0) // builtin { - ChatChannelsRecord channelEntry = CliDB.ChatChannelsStorage.LookupByKey(channelId); - uint zoneId = zoneEntry != null ? zoneEntry.Id : 0; - if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.Global | ChannelDBCFlags.CityOnly)) - zoneId = 0; - - Tuple key = Tuple.Create(channelId, zoneId); - var channel = _channels.LookupByKey(key); + var channel = _channels.LookupByKey(CreateBuiltinChannelGuid(channelId, zoneEntry)); if (channel != null) result = channel; } @@ -134,18 +124,13 @@ namespace Game.Chat public void LeftChannel(uint channelId, AreaTableRecord zoneEntry) { - ChatChannelsRecord channelEntry = CliDB.ChatChannelsStorage.LookupByKey(channelId); - uint zoneId = zoneEntry != null ? zoneEntry.Id : 0; - if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.Global | ChannelDBCFlags.CityOnly)) - zoneId = 0; - - Tuple key = Tuple.Create(channelId, zoneId); - var channel = _channels.LookupByKey(key); + var guid = CreateBuiltinChannelGuid(channelId, zoneEntry); + var channel = _channels.LookupByKey(guid); if (channel == null) return; if (channel.GetNumPlayers() == 0) - _channels.Remove(key); + _channels.Remove(guid); } public static void SendNotOnChannelNotify(Player player, string name) @@ -156,9 +141,45 @@ namespace Game.Chat player.SendPacket(notify); } + ObjectGuid CreateCustomChannelGuid() + { + ulong high = 0; + high |= (ulong)HighGuid.ChatChannel << 58; + high |= (ulong)Global.WorldMgr.GetRealmId().Realm << 42; + high |= (ulong)(_team == Team.Alliance ? 3 : 5) << 4; + + ObjectGuid channelGuid = new ObjectGuid(); + channelGuid.SetRawValue(high, _guidGenerator.Generate()); + return channelGuid; + } + + ObjectGuid CreateBuiltinChannelGuid(uint channelId, AreaTableRecord zoneEntry = null) + { + + ChatChannelsRecord channelEntry = CliDB.ChatChannelsStorage.LookupByKey(channelId); + uint zoneId = zoneEntry != null ? zoneEntry.Id : 0; + if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.Global | ChannelDBCFlags.CityOnly)) + zoneId = 0; + + ulong high = 0; + high |= (ulong)HighGuid.ChatChannel << 58; + high |= (ulong)Global.WorldMgr.GetRealmId().Realm << 42; + high |= 1ul << 25; // built-in + if (channelEntry.Flags.HasAnyFlag(ChannelDBCFlags.CityOnly2)) + high |= 1ul << 24; // trade + + high |= (ulong)(zoneId) << 10; + high |= (ulong)(_team == Team.Alliance ? 3 : 5) << 4; + + ObjectGuid channelGuid = new ObjectGuid(); + channelGuid.SetRawValue(high, channelId); + return channelGuid; + } + Dictionary _customChannels = new Dictionary(); - Dictionary, Channel> _channels = new Dictionary, Channel>(); + Dictionary _channels = new Dictionary(); Team _team; + ObjectGuidGenerator _guidGenerator; static ChannelManager allianceChannelMgr = new ChannelManager(Team.Alliance); static ChannelManager hordeChannelMgr = new ChannelManager(Team.Horde); diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs index 96b22cfe9..7b6c77db5 100644 --- a/Source/Game/Entities/Creature/Gossip.cs +++ b/Source/Game/Entities/Creature/Gossip.cs @@ -434,6 +434,7 @@ namespace Game.Misc packet.PortraitGiver = quest.QuestGiverPortrait; packet.PortraitGiverMount = quest.QuestGiverPortraitMount; packet.PortraitTurnIn = quest.QuestTurnInPortrait; + packet.QuestSessionBonus = 0; //quest.GetQuestSessionBonus(); // this is only sent while quest session is active packet.AutoLaunched = autoLaunched; packet.DisplayPopup = displayPopup; packet.QuestFlags[0] = (uint)(quest.Flags & (WorldConfig.GetBoolValue(WorldCfg.QuestIgnoreAutoAccept) ? ~QuestFlags.AutoAccept : ~QuestFlags.None)); diff --git a/Source/Game/Entities/Object/ObjectGuid.cs b/Source/Game/Entities/Object/ObjectGuid.cs index f6fdc924a..89ff9340c 100644 --- a/Source/Game/Entities/Object/ObjectGuid.cs +++ b/Source/Game/Entities/Object/ObjectGuid.cs @@ -295,6 +295,7 @@ namespace Game.Entities { case HighGuid.Player: case HighGuid.Item: + case HighGuid.ChatChannel: case HighGuid.Transport: case HighGuid.Guild: return true; diff --git a/Source/Game/Entities/Object/Update/UpdateField.cs b/Source/Game/Entities/Object/Update/UpdateField.cs index 7bc2c8ce3..ed24db394 100644 --- a/Source/Game/Entities/Object/Update/UpdateField.cs +++ b/Source/Game/Entities/Object/Update/UpdateField.cs @@ -319,8 +319,10 @@ namespace Game.Entities _changesMask = new UpdateMask(changeMask); } - public abstract void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, T owner, Player receiver); - public abstract void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, T owner, Player receiver); + public virtual void WriteCreate(WorldPacket data, T owner, Player receiver) { } + public virtual void WriteUpdate(WorldPacket data, T owner, Player receiver) { } + public virtual void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, T owner, Player receiver) { } + public virtual void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, T owner, Player receiver) { } public abstract void ClearChangesMask(); diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index a462bc23c..7066de689 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -22,6 +22,7 @@ using System.Collections.Generic; using Framework.GameMath; using Game.Spells; using Game.DataStorage; +using Framework.Dynamic; namespace Game.Entities { @@ -150,7 +151,7 @@ namespace Game.Entities public ItemEnchantment() : base(5) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteCreate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt32(ID); data.WriteUInt32(Duration); @@ -158,7 +159,7 @@ namespace Game.Entities data.WriteUInt16(Inactive); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Item owner, Player receiver) { data.WriteBits(_changesMask.GetBlock(0), 5); @@ -200,13 +201,13 @@ namespace Game.Entities public byte PurchasedRank; public byte CurrentRankWithBonus; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public void WriteCreate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt16(ArtifactPowerId); data.WriteUInt8(PurchasedRank); data.WriteUInt8(CurrentRankWithBonus); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public void WriteUpdate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt16(ArtifactPowerId); data.WriteUInt8(PurchasedRank); @@ -222,7 +223,7 @@ namespace Game.Entities public SocketedGem() : base(20) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteCreate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt32(ItemId); for (int i = 0; i < 16; ++i) @@ -231,7 +232,7 @@ namespace Game.Entities data.WriteUInt8(Context); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Item owner, Player receiver) { data.WriteBits(_changesMask.GetBlocksMask(0), 1); if (_changesMask.GetBlock(0) != 0) @@ -319,7 +320,7 @@ namespace Game.Entities data.WriteUInt32(DynamicFlags); for (int i = 0; i < 13; ++i) { - Enchantment[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Enchantment[i].WriteCreate(data, owner, receiver); } if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.Owner)) { @@ -350,11 +351,11 @@ namespace Game.Entities } for (int i = 0; i < ArtifactPowers.Size(); ++i) { - ArtifactPowers[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ArtifactPowers[i].WriteCreate(data, owner, receiver); } for (int i = 0; i < Gems.Size(); ++i) { - Gems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Gems[i].WriteCreate(data, owner, receiver); } } @@ -423,7 +424,7 @@ namespace Game.Entities { if (ArtifactPowers.HasChanged(i)) { - ArtifactPowers[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ArtifactPowers[i].WriteUpdate(data, owner, receiver); } } } @@ -433,7 +434,7 @@ namespace Game.Entities { if (Gems.HasChanged(i)) { - Gems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Gems[i].WriteUpdate(data, owner, receiver); } } } @@ -514,7 +515,7 @@ namespace Game.Entities { if (changesMask[27 + i]) { - Enchantment[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Enchantment[i].WriteUpdate(data, owner, receiver); } } } @@ -641,12 +642,12 @@ namespace Game.Entities uint AzeriteEssenceID; uint Rank; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public void WriteCreate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt32(AzeriteEssenceID); data.WriteUInt32(Rank); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public void WriteUpdate(WorldPacket data, Item owner, Player receiver) { data.WriteUInt32(AzeriteEssenceID); data.WriteUInt32(Rank); @@ -661,7 +662,7 @@ namespace Game.Entities public SelectedAzeriteEssences() : base(7) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteCreate(WorldPacket data, Item owner, Player receiver) { for (int i = 0; i < 3; ++i) { @@ -671,7 +672,7 @@ namespace Game.Entities data.WriteBits(Enabled, 1); data.FlushBits(); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Item owner, Player receiver) { UpdateMask changesMask = _changesMask; data.WriteBits(changesMask.GetBlocksMask(0), 1); @@ -721,7 +722,7 @@ namespace Game.Entities public UpdateField Level = new UpdateField(0, 5); public UpdateField AuraLevel = new UpdateField(0, 6); public UpdateField KnowledgeLevel = new UpdateField(0, 7); - public UpdateField DEBUGknowledgeWeek = new UpdateField(0, 8); + public UpdateField DEBUGknowledgeWeek = new UpdateField(0, 8); public AzeriteItemData() : base(9) { } @@ -733,14 +734,14 @@ namespace Game.Entities data.WriteUInt32(Level); data.WriteUInt32(AuraLevel); data.WriteUInt32(KnowledgeLevel); - data.WriteUInt32(DEBUGknowledgeWeek); + data.WriteInt32(DEBUGknowledgeWeek); } data.WriteInt32(UnlockedEssences.Size()); data.WriteInt32(SelectedEssences.Size()); data.WriteInt32(UnlockedEssenceMilestones.Size()); for (int i = 0; i < UnlockedEssences.Size(); ++i) { - UnlockedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + UnlockedEssences[i].WriteCreate(data, owner, receiver); } for (int i = 0; i < UnlockedEssenceMilestones.Size(); ++i) { @@ -748,7 +749,7 @@ namespace Game.Entities } for (int i = 0; i < SelectedEssences.Size(); ++i) { - SelectedEssences[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SelectedEssences[i].WriteCreate(data, owner, receiver); } } public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Item owner, Player receiver) @@ -790,7 +791,7 @@ namespace Game.Entities { if (UnlockedEssences.HasChanged(i)) { - UnlockedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + UnlockedEssences[i].WriteUpdate(data, owner, receiver); } } } @@ -800,7 +801,7 @@ namespace Game.Entities { if (SelectedEssences.HasChanged(i)) { - SelectedEssences[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SelectedEssences[i].WriteUpdate(data, owner, receiver); } } } @@ -832,7 +833,7 @@ namespace Game.Entities } if (changesMask[8]) { - data.WriteUInt32(DEBUGknowledgeWeek); + data.WriteInt32(DEBUGknowledgeWeek); } } } @@ -856,12 +857,12 @@ namespace Game.Entities public uint SpellID; public uint SpellXSpellVisualID; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public void WriteCreate(WorldPacket data, Unit owner, Player receiver) { data.WriteUInt32(SpellID); data.WriteUInt32(SpellXSpellVisualID); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public void WriteUpdate(WorldPacket data, Unit owner, Player receiver) { data.WriteUInt32(SpellID); data.WriteUInt32(SpellXSpellVisualID); @@ -876,13 +877,13 @@ namespace Game.Entities public VisibleItem() : base(4) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public override void WriteCreate(WorldPacket data, Unit owner, Player receiver) { data.WriteUInt32(ItemID); data.WriteUInt16(ItemAppearanceModID); data.WriteUInt16(ItemVisual); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Unit owner, Player receiver) { data.WriteBits(_changesMask.GetBlock(0), 4); @@ -918,12 +919,12 @@ namespace Game.Entities int SpellID; int AuraSpellID; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public void WriteCreate(WorldPacket data, Unit owner, Player receiver) { data.WriteInt32(SpellID); data.WriteInt32(AuraSpellID); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Unit owner, Player receiver) + public void WriteUpdate(WorldPacket data, Unit owner, Player receiver) { data.WriteInt32(SpellID); data.WriteInt32(AuraSpellID); @@ -1086,7 +1087,7 @@ namespace Game.Entities data.WritePackedGuid(Target); data.WritePackedGuid(BattlePetCompanionGUID); data.WriteUInt64(BattlePetDBID); - ((UnitChannel)ChannelData).WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ((UnitChannel)ChannelData).WriteCreate(data, owner, receiver); data.WriteUInt32(SummonedByHomeRealm); data.WriteUInt8(Race); data.WriteUInt8(ClassId); @@ -1120,7 +1121,7 @@ namespace Game.Entities data.WriteInt32(ScalingDamageItemLevelCurveID); data.WriteUInt32(GetViewerDependentFactionTemplate(FactionTemplate, owner, receiver)); for (int i = 0; i < 3; ++i) - VirtualItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + VirtualItems[i].WriteCreate(data, owner, receiver); data.WriteUInt32(GetViewerDependentFlags(Flags, owner, receiver)); data.WriteUInt32(Flags2); @@ -1234,7 +1235,7 @@ namespace Game.Entities data.WriteInt32(WorldEffects.Size()); data.WriteInt32(ChannelObjects.Size()); for (int i = 0; i < PassiveSpells.Size(); ++i) - PassiveSpells[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + PassiveSpells[i].WriteCreate(data, owner, receiver); for (int i = 0; i < WorldEffects.Size(); ++i) data.WriteInt32(WorldEffects[i]); @@ -1304,7 +1305,7 @@ namespace Game.Entities { if (PassiveSpells.HasChanged(i)) { - PassiveSpells[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + PassiveSpells[i].WriteUpdate(data, owner, receiver); } } } @@ -1394,7 +1395,7 @@ namespace Game.Entities } if (changesMask[21]) { - ((UnitChannel)ChannelData).WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ((UnitChannel)ChannelData).WriteUpdate(data, owner, receiver); } if (changesMask[22]) { @@ -1800,7 +1801,7 @@ namespace Game.Entities { if (changesMask[143 + i]) { - VirtualItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + VirtualItems[i].WriteUpdate(data, owner, receiver); } } } @@ -2070,22 +2071,24 @@ namespace Game.Entities public UpdateField StateFlags = new UpdateField(0, 2); public UpdateField EndTime = new UpdateField(0, 3); public UpdateField AcceptTime = new UpdateField(0, 4); - public UpdateFieldArray ObjectiveProgress = new UpdateFieldArray(24, 5, 6); + public UpdateField Field_10 = new UpdateField(0, 5); + public UpdateFieldArray ObjectiveProgress = new UpdateFieldArray(24, 6, 7); - public QuestLog() : base(30) { } + public QuestLog() : base(31) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteUInt32(QuestID); data.WriteUInt32(StateFlags); data.WriteUInt32(EndTime); data.WriteUInt32(AcceptTime); + data.WriteUInt32(Field_10); for (int i = 0; i < 24; ++i) { data.WriteUInt16(ObjectiveProgress[i]); } } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteBits(_changesMask.GetBlocksMask(0), 1); if (_changesMask.GetBlock(0) != 0) @@ -2110,12 +2113,16 @@ namespace Game.Entities { data.WriteUInt32(AcceptTime); } + if (_changesMask[5]) + { + data.WriteUInt32(Field_10); + } } - if (_changesMask[5]) + if (_changesMask[6]) { for (int i = 0; i < 24; ++i) { - if (_changesMask[6 + i]) + if (_changesMask[7 + i]) { data.WriteUInt16(ObjectiveProgress[i]); } @@ -2129,6 +2136,7 @@ namespace Game.Entities ClearChangesMask(StateFlags); ClearChangesMask(EndTime); ClearChangesMask(AcceptTime); + ClearChangesMask(Field_10); ClearChangesMask(ObjectiveProgress); _changesMask.ResetAll(); } @@ -2146,7 +2154,7 @@ namespace Game.Entities public ArenaCooldown() : base(8) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(SpellID); data.WriteInt32(Charges); @@ -2156,7 +2164,7 @@ namespace Game.Entities data.WriteUInt32(NextChargeTime); data.WriteUInt8(MaxCharges); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteBits(_changesMask.GetBlock(0), 8); @@ -2209,42 +2217,47 @@ namespace Game.Entities public class PlayerData : BaseUpdateData { - public DynamicUpdateField ArenaCooldowns = new DynamicUpdateField(0, 1); - public UpdateField DuelArbiter = new UpdateField(0, 2); - public UpdateField WowAccount = new UpdateField(0, 3); - public UpdateField LootTargetGUID = new UpdateField(0, 4); - public UpdateField PlayerFlags = new UpdateField(0, 5); - public UpdateField PlayerFlagsEx = new UpdateField(0, 6); - public UpdateField GuildRankID = new UpdateField(0, 7); - public UpdateField GuildDeleteDate = new UpdateField(0, 8); - public UpdateField GuildLevel = new UpdateField(0, 9); - public UpdateField SkinID = new UpdateField(0, 10); - public UpdateField FaceID = new UpdateField(0, 11); - public UpdateField HairStyleID = new UpdateField(0, 12); - public UpdateField HairColorID = new UpdateField(0, 13); - public UpdateField FacialHairStyleID = new UpdateField(0, 14); - public UpdateField PartyType = new UpdateField(0, 15); - public UpdateField NativeSex = new UpdateField(0, 16); - public UpdateField Inebriation = new UpdateField(0, 17); - public UpdateField PvpTitle = new UpdateField(0, 18); - public UpdateField ArenaFaction = new UpdateField(0, 19); - public UpdateField DuelTeam = new UpdateField(0, 20); - public UpdateField GuildTimeStamp = new UpdateField(0, 21); - public UpdateField PlayerTitle = new UpdateField(0, 22); - public UpdateField FakeInebriation = new UpdateField(0, 23); - public UpdateField VirtualPlayerRealm = new UpdateField(0, 24); - public UpdateField CurrentSpecID = new UpdateField(0, 25); - public UpdateField TaxiMountAnimKitID = new UpdateField(0, 26); - public UpdateField CurrentBattlePetBreedQuality = new UpdateField(0, 27); - public UpdateField HonorLevel = new UpdateField(0, 28); - public UpdateField Field_B0 = new UpdateField(0, 29); - public UpdateField Field_B4 = new UpdateField(0, 30); - public UpdateFieldArray CustomDisplayOption = new UpdateFieldArray(3, 31, 32); - public UpdateFieldArray QuestLog = new UpdateFieldArray(100, 35, 36); - public UpdateFieldArray VisibleItems = new UpdateFieldArray(19, 136, 137); - public UpdateFieldArray AvgItemLevel = new UpdateFieldArray(4, 156, 157); + public UpdateField HasQuestSession = new UpdateField(0, 1); + public UpdateField HasLevelLink = new UpdateField(0, 2); + public DynamicUpdateField QuestSessionQuestLog = new DynamicUpdateField(0, 3); + public DynamicUpdateField ArenaCooldowns = new DynamicUpdateField(0, 4); + public UpdateField DuelArbiter = new UpdateField(0, 5); + public UpdateField WowAccount = new UpdateField(0, 6); + public UpdateField LootTargetGUID = new UpdateField(0, 7); + public UpdateField PlayerFlags = new UpdateField(0, 8); + public UpdateField PlayerFlagsEx = new UpdateField(0, 9); + public UpdateField GuildRankID = new UpdateField(0, 10); + public UpdateField GuildDeleteDate = new UpdateField(0, 11); + public UpdateField GuildLevel = new UpdateField(0, 12); + public UpdateField SkinID = new UpdateField(0, 13); + public UpdateField FaceID = new UpdateField(0, 14); + public UpdateField HairStyleID = new UpdateField(0, 15); + public UpdateField HairColorID = new UpdateField(0, 16); + public UpdateField FacialHairStyleID = new UpdateField(0, 17); + public UpdateField PartyType = new UpdateField(0, 18); + public UpdateField NativeSex = new UpdateField(0, 19); + public UpdateField Inebriation = new UpdateField(0, 20); + public UpdateField PvpTitle = new UpdateField(0, 21); + public UpdateField ArenaFaction = new UpdateField(0, 22); + public UpdateField DuelTeam = new UpdateField(0, 23); + public UpdateField GuildTimeStamp = new UpdateField(0, 24); + public UpdateField PlayerTitle = new UpdateField(0, 25); + public UpdateField FakeInebriation = new UpdateField(0, 26); + public UpdateField VirtualPlayerRealm = new UpdateField(0, 27); + public UpdateField CurrentSpecID = new UpdateField(0, 28); + public UpdateField TaxiMountAnimKitID = new UpdateField(0, 29); + public UpdateField CurrentBattlePetBreedQuality = new UpdateField(0, 30); + public UpdateField HonorLevel = new UpdateField(0, 31); + public UpdateField Field_B0 = new UpdateField(32, 33); + public UpdateField Field_B4 = new UpdateField(32, 34); + public UpdateField Field_F8 = new UpdateField(32, 35); + public UpdateField Field_108 = new UpdateField(32, 36); + public UpdateFieldArray CustomDisplayOption = new UpdateFieldArray(3, 37, 38); + public UpdateFieldArray QuestLog = new UpdateFieldArray(125, 41, 42); + public UpdateFieldArray VisibleItems = new UpdateFieldArray(19, 167, 168); + public UpdateFieldArray AvgItemLevel = new UpdateFieldArray(4, 187, 188); - public PlayerData() : base(0, TypeId.Player, 161) { } + public PlayerData() : base(0, TypeId.Player, 192) { } public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -2274,14 +2287,15 @@ namespace Game.Entities data.WriteInt32(GuildTimeStamp); if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) { - for (int i = 0; i < 100; ++i) + for (int i = 0; i < 125; ++i) { - QuestLog[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + QuestLog[i].WriteCreate(data, owner, receiver); } + data.WriteInt32(QuestSessionQuestLog.Size()); } for (int i = 0; i < 19; ++i) { - VisibleItems[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + VisibleItems[i].WriteCreate(data, owner, receiver); } data.WriteUInt32(PlayerTitle); data.WriteInt32(FakeInebriation); @@ -2297,22 +2311,36 @@ namespace Game.Entities data.WriteInt32(ArenaCooldowns.Size()); data.WriteInt32(Field_B0); data.WriteInt32(Field_B4); + data.WritePackedGuid(Field_F8); + data.WriteInt32(Field_108); + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) + { + for (int i = 0; i < QuestSessionQuestLog.Size(); ++i) + { + QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); + } + } for (int i = 0; i < ArenaCooldowns.Size(); ++i) { - ArenaCooldown arenaCooldown = ArenaCooldowns[i]; - arenaCooldown.WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ArenaCooldowns[i].WriteCreate(data, owner, receiver); } + if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) + { + data.WriteBit(HasQuestSession); + } + data.WriteBit(HasLevelLink); + data.FlushBits(); } public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { - UpdateMask allowedMaskForTarget = new UpdateMask(161, new[] { 0xFFFFFFFFu, 0x00000007u, 0x00000000u, 0x00000000u, 0xFFFFFF00u, 0x00000001u }); + UpdateMask allowedMaskForTarget = new UpdateMask(192, new[] { 0xFFFFFFF5u, 0x000001FFu, 0x00000000u, 0x00000000u, 0x00000000u, 0xFFFFFF80u }); AppendAllowedFieldsMaskForFlag(allowedMaskForTarget, fieldVisibilityFlags); WriteUpdate(data, _changesMask & allowedMaskForTarget, fieldVisibilityFlags, owner, receiver); } public void AppendAllowedFieldsMaskForFlag(UpdateMask allowedMaskForTarget, UpdateFieldFlag fieldVisibilityFlags) { if (fieldVisibilityFlags.HasFlag(UpdateFieldFlag.PartyMember)) - allowedMaskForTarget |= new UpdateMask(161, new[] { 0x00000000u, 0xFFFFFFF8u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x000000FFu, 0x00000000u }); + allowedMaskForTarget |= new UpdateMask(192, new[] { 0x0000000Au, 0xFFFFFE00u, 0xFFFFFFFFu, 0xFFFFFFFFu, 0xFFFFFFFFu, 0x0000007Fu }); } public void WriteUpdate(WorldPacket data, UpdateMask changesMask, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) { @@ -2321,9 +2349,22 @@ namespace Game.Entities if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); + bool hasQuestLogDynamicChangesMask = data.WriteBit(IsQuestLogDynamicChangesMask()); if (changesMask[0]) { if (changesMask[1]) + { + data.WriteBit(HasQuestSession); + } + if (changesMask[2]) + { + data.WriteBit(HasLevelLink); + } + if (changesMask[3]) + { + QuestSessionQuestLog.WriteUpdateMask(data); + } + if (changesMask[4]) { ArenaCooldowns.WriteUpdateMask(data); } @@ -2331,179 +2372,208 @@ namespace Game.Entities data.FlushBits(); if (changesMask[0]) { - if (changesMask[1]) + if (changesMask[3]) + { + for (int i = 0; i < QuestSessionQuestLog.Size(); ++i) + { + if (QuestSessionQuestLog.HasChanged(i)) + { + if (hasQuestLogDynamicChangesMask) + QuestSessionQuestLog[i].WriteUpdate(data, owner, receiver); + else + QuestSessionQuestLog[i].WriteCreate(data, owner, receiver); + } + } + } + if (changesMask[4]) { for (int i = 0; i < ArenaCooldowns.Size(); ++i) { if (ArenaCooldowns.HasChanged(i)) { - ArenaCooldown arenaCooldown = ArenaCooldowns[i]; - arenaCooldown.WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ArenaCooldowns[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[2]) + if (changesMask[5]) { data.WritePackedGuid(DuelArbiter); } - if (changesMask[3]) + if (changesMask[6]) { data.WritePackedGuid(WowAccount); } - if (changesMask[4]) + if (changesMask[7]) { data.WritePackedGuid(LootTargetGUID); } - if (changesMask[5]) + if (changesMask[8]) { data.WriteUInt32(PlayerFlags); } - if (changesMask[6]) + if (changesMask[9]) { data.WriteUInt32(PlayerFlagsEx); } - if (changesMask[7]) + if (changesMask[10]) { data.WriteUInt32(GuildRankID); } - if (changesMask[8]) + if (changesMask[11]) { data.WriteUInt32(GuildDeleteDate); } - if (changesMask[9]) + if (changesMask[12]) { data.WriteUInt32(GuildLevel); } - if (changesMask[10]) + if (changesMask[13]) { data.WriteUInt8(SkinID); } - if (changesMask[11]) + if (changesMask[14]) { data.WriteUInt8(FaceID); } - if (changesMask[12]) + if (changesMask[15]) { data.WriteUInt8(HairStyleID); } - if (changesMask[13]) + if (changesMask[16]) { data.WriteUInt8(HairColorID); } - if (changesMask[14]) + if (changesMask[17]) { data.WriteUInt8(FacialHairStyleID); } - if (changesMask[15]) + if (changesMask[18]) { data.WriteUInt8(PartyType); } - if (changesMask[16]) + if (changesMask[19]) { data.WriteUInt8(NativeSex); } - if (changesMask[17]) + if (changesMask[20]) { data.WriteUInt8(Inebriation); } - if (changesMask[18]) + if (changesMask[21]) { data.WriteUInt8(PvpTitle); } - if (changesMask[19]) + if (changesMask[22]) { data.WriteUInt8(ArenaFaction); } - if (changesMask[20]) + if (changesMask[23]) { data.WriteUInt32(DuelTeam); } - if (changesMask[21]) + if (changesMask[24]) { data.WriteInt32(GuildTimeStamp); } - if (changesMask[22]) + if (changesMask[25]) { data.WriteUInt32(PlayerTitle); } - if (changesMask[23]) + if (changesMask[26]) { data.WriteInt32(FakeInebriation); } - if (changesMask[24]) + if (changesMask[27]) { data.WriteUInt32(VirtualPlayerRealm); } - if (changesMask[25]) + if (changesMask[28]) { data.WriteUInt32(CurrentSpecID); } - if (changesMask[26]) + if (changesMask[29]) { data.WriteInt32(TaxiMountAnimKitID); } - if (changesMask[27]) + if (changesMask[30]) { data.WriteUInt8(CurrentBattlePetBreedQuality); } - if (changesMask[28]) + if (changesMask[31]) { data.WriteUInt32(HonorLevel); } - if (changesMask[29]) + } + if (changesMask[32]) + { + if (changesMask[33]) { data.WriteInt32(Field_B0); } - if (changesMask[30]) + if (changesMask[34]) { data.WriteInt32(Field_B4); } + if (changesMask[35]) + { + data.WritePackedGuid(Field_F8); + } + if (changesMask[36]) + { + data.WriteInt32(Field_108); + } } - if (changesMask[31]) + if (changesMask[37]) { for (int i = 0; i < 3; ++i) { - if (changesMask[32 + i]) + if (changesMask[38 + i]) { data.WriteUInt8(CustomDisplayOption[i]); } } } - if (changesMask[35]) + if (changesMask[41]) { - for (int i = 0; i < 100; ++i) + for (int i = 0; i < 125; ++i) { - if (changesMask[36 + i]) + if (changesMask[42 + i]) { - QuestLog[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + if (hasQuestLogDynamicChangesMask) + QuestLog[i].WriteUpdate(data, owner, receiver); + else + QuestLog[i].WriteCreate(data, owner, receiver); } } } - if (changesMask[136]) + if (changesMask[167]) { for (int i = 0; i < 19; ++i) { - if (changesMask[137 + i]) + if (changesMask[168 + i]) { - //todo needs fixed on clearing - VisibleItems[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + VisibleItems[i].WriteUpdate(data, owner, receiver); } } } - if (changesMask[156]) + if (changesMask[187]) { for (int i = 0; i < 4; ++i) { - if (changesMask[157 + i]) + if (changesMask[188 + i]) { data.WriteFloat(AvgItemLevel[i]); } } } + data.FlushBits(); } public override void ClearChangesMask() { + ClearChangesMask(HasQuestSession); + ClearChangesMask(HasLevelLink); + ClearChangesMask(QuestSessionQuestLog); ClearChangesMask(ArenaCooldowns); ClearChangesMask(DuelArbiter); ClearChangesMask(WowAccount); @@ -2534,12 +2604,16 @@ namespace Game.Entities ClearChangesMask(HonorLevel); ClearChangesMask(Field_B0); ClearChangesMask(Field_B4); + ClearChangesMask(Field_F8); + ClearChangesMask(Field_108); ClearChangesMask(CustomDisplayOption); ClearChangesMask(QuestLog); ClearChangesMask(VisibleItems); ClearChangesMask(AvgItemLevel); _changesMask.ResetAll(); } + + bool IsQuestLogDynamicChangesMask() { return false; } // bandwidth savings aren't worth the cpu time } public class SkillInfo : BaseUpdateData @@ -2554,7 +2628,7 @@ namespace Game.Entities public SkillInfo() : base(1793) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) { for (int i = 0; i < 256; ++i) { @@ -2567,7 +2641,7 @@ namespace Game.Entities data.WriteUInt16(SkillPermBonus[i]); } } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) { for (uint i = 0; i < 1; ++i) data.WriteUInt32(_changesMask.GetBlocksMask(i)); @@ -2633,12 +2707,12 @@ namespace Game.Entities public RestInfo() : base(3) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteUInt32(Threshold); data.WriteUInt8(StateID); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteBits(_changesMask.GetBlock(0), 3); @@ -2678,7 +2752,7 @@ namespace Game.Entities public PVPInfo() : base(10) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteUInt32(Field_0); data.WriteUInt32(Field_4); @@ -2691,7 +2765,7 @@ namespace Game.Entities data.WriteBits((uint)Field_20, 1); data.FlushBits(); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteBits(_changesMask.GetBlock(0), 10); @@ -2760,7 +2834,7 @@ namespace Game.Entities public int Field_8; public uint Type; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(Field_0); data.WriteInt32(Field_4); @@ -2768,7 +2842,7 @@ namespace Game.Entities data.WriteBits(Type, 5); data.FlushBits(); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(Field_0); data.WriteInt32(Field_4); @@ -2784,13 +2858,13 @@ namespace Game.Entities public float ModifierValue; public int LabelID; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(ModIndex); data.WriteFloat(ModifierValue); data.WriteInt32(LabelID); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(ModIndex); data.WriteFloat(ModifierValue); @@ -2804,13 +2878,13 @@ namespace Game.Entities public int ModifierValue; public int LabelID; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(ModIndex); data.WriteInt32(ModifierValue); data.WriteInt32(LabelID); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteInt32(ModIndex); data.WriteInt32(ModifierValue); @@ -2822,23 +2896,113 @@ namespace Game.Entities { public short ResearchProjectID; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteCreate(WorldPacket data, Player owner, Player receiver) { data.WriteInt16(ResearchProjectID); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Player owner, Player receiver) + public void WriteUpdate(WorldPacket data, Player owner, Player receiver) { data.WriteInt16(ResearchProjectID); } } + public class ReplayedQuest : BaseUpdateData + { + public UpdateField QuestID = new UpdateField(0, 1); + public UpdateField ReplayTime = new UpdateField(0, 2); + + public ReplayedQuest() : base(3) { } + + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WriteInt32(QuestID); + data.WriteUInt32(ReplayTime); + } + + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) + { + data.WriteBits(_changesMask.GetBlock(0), 3); + + data.FlushBits(); + if (_changesMask[0]) + { + if (_changesMask[1]) + { + data.WriteInt32(QuestID); + } + if (_changesMask[2]) + { + data.WriteUInt32(ReplayTime); + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(QuestID); + ClearChangesMask(ReplayTime); + _changesMask.ResetAll(); + } + } + + public class QuestSession : BaseUpdateData + { + public UpdateField Owner = new UpdateField(0, 1); + public UpdateFieldArray QuestCompleted = new UpdateFieldArray(875, 2, 3); + + public QuestSession() : base(878) { } + + public override void WriteCreate(WorldPacket data, Player owner, Player receiver) + { + data.WritePackedGuid(Owner); + for (int i = 0; i < 875; ++i) + { + data.WriteUInt64(QuestCompleted[i]); + } + } + + public override void WriteUpdate(WorldPacket data, Player owner, Player receiver) + { + data.WriteBits(_changesMask.GetBlocksMask(0), 28); + for (uint i = 0; i < 28; ++i) + if (_changesMask.GetBlock(i) != 0) + data.WriteBits(_changesMask.GetBlock(i), 32); + + data.FlushBits(); + if (_changesMask[0]) + { + if (_changesMask[1]) + { + data.WritePackedGuid(Owner); + } + } + if (_changesMask[2]) + { + for (int i = 0; i < 875; ++i) + { + if (_changesMask[3 + i]) + { + data.WriteUInt64(QuestCompleted[i]); + } + } + } + } + + public override void ClearChangesMask() + { + ClearChangesMask(Owner); + ClearChangesMask(QuestCompleted); + _changesMask.ResetAll(); + } + } + public class ActivePlayerData : BaseUpdateData { public UpdateField BackpackAutoSortDisabled = new UpdateField(0, 1); public UpdateField BankAutoSortDisabled = new UpdateField(0, 2); public UpdateField SortBagsRightToLeft = new UpdateField(0, 3); public UpdateField InsertItemsLeftToRight = new UpdateField(0, 4); - public UpdateFieldArray> Research = new UpdateFieldArray>(1, 20, 21);//-1-1 + public UpdateFieldArray> Research = new UpdateFieldArray>(1, 22, 23);//-1-1 public DynamicUpdateField KnownTitles = new DynamicUpdateField(0, 5); public DynamicUpdateField ResearchSites = new DynamicUpdateField(0, 6); public DynamicUpdateField ResearchSiteProgress = new DynamicUpdateField(0, 7); @@ -2851,103 +3015,108 @@ namespace Game.Entities public DynamicUpdateField Transmog = new DynamicUpdateField(0, 14); public DynamicUpdateField ConditionalTransmog = new DynamicUpdateField(0, 15); public DynamicUpdateField SelfResSpells = new DynamicUpdateField(0, 16); - public DynamicUpdateField CharacterRestrictions = new DynamicUpdateField(0, 17); public DynamicUpdateField SpellPctModByLabel = new DynamicUpdateField(0, 18); public DynamicUpdateField SpellFlatModByLabel = new DynamicUpdateField(0, 19); - public UpdateField FarsightObject = new UpdateField(0, 22); - public UpdateField SummonedBattlePetGUID = new UpdateField(0, 23); - public UpdateField Coinage = new UpdateField(0, 24); - public UpdateField XP = new UpdateField(0, 25); - public UpdateField NextLevelXP = new UpdateField(0, 26); - public UpdateField TrialXP = new UpdateField(0, 27); - public UpdateField Skill = new UpdateField(0, 28); - public UpdateField CharacterPoints = new UpdateField(0, 29); - public UpdateField MaxTalentTiers = new UpdateField(0, 30); - public UpdateField TrackCreatureMask = new UpdateField(0, 31); - public UpdateField MainhandExpertise = new UpdateField(0, 32); - public UpdateField OffhandExpertise = new UpdateField(0, 33); - public UpdateField RangedExpertise = new UpdateField(34, 35); - public UpdateField CombatRatingExpertise = new UpdateField(34, 36); - public UpdateField BlockPercentage = new UpdateField(34, 37); - public UpdateField DodgePercentage = new UpdateField(34, 38); - public UpdateField DodgePercentageFromAttribute = new UpdateField(34, 39); - public UpdateField ParryPercentage = new UpdateField(34, 40); - public UpdateField ParryPercentageFromAttribute = new UpdateField(34, 41); - public UpdateField CritPercentage = new UpdateField(34, 42); - public UpdateField RangedCritPercentage = new UpdateField(34, 43); - public UpdateField OffhandCritPercentage = new UpdateField(34, 44); - public UpdateField SpellCritPercentage = new UpdateField(34, 45); - public UpdateField ShieldBlock = new UpdateField(34, 46); - public UpdateField ShieldBlockCritPercentage = new UpdateField(34, 47); - public UpdateField Mastery = new UpdateField(34, 48); - public UpdateField Speed = new UpdateField(34, 49); - public UpdateField Avoidance = new UpdateField(34, 50); - public UpdateField Sturdiness = new UpdateField(34, 51); - public UpdateField Versatility = new UpdateField(34, 52); - public UpdateField VersatilityBonus = new UpdateField(34, 53); - public UpdateField PvpPowerDamage = new UpdateField(34, 54); - public UpdateField PvpPowerHealing = new UpdateField(34, 55); - public UpdateField ModHealingDonePos = new UpdateField(34, 56); - public UpdateField ModHealingPercent = new UpdateField(34, 57); - public UpdateField ModHealingDonePercent = new UpdateField(34, 58); - public UpdateField ModPeriodicHealingDonePercent = new UpdateField(34, 59); - public UpdateField ModSpellPowerPercent = new UpdateField(34, 60); - public UpdateField ModResiliencePercent = new UpdateField(34, 61); - public UpdateField OverrideSpellPowerByAPPercent = new UpdateField(34, 62); - public UpdateField OverrideAPBySpellPowerPercent = new UpdateField(34, 63); - public UpdateField ModTargetResistance = new UpdateField(34, 64); - public UpdateField ModTargetPhysicalResistance = new UpdateField(34, 65); - public UpdateField LocalFlags = new UpdateField(66, 67); - public UpdateField GrantableLevels = new UpdateField(66, 68); - public UpdateField MultiActionBars = new UpdateField(66, 69); - public UpdateField LifetimeMaxRank = new UpdateField(66, 70); - public UpdateField NumRespecs = new UpdateField(66, 71); - public UpdateField PvpMedals = new UpdateField(66, 72); - public UpdateField TodayHonorableKills = new UpdateField(66, 73); - public UpdateField YesterdayHonorableKills = new UpdateField(66, 74); - public UpdateField LifetimeHonorableKills = new UpdateField(66, 75); - public UpdateField WatchedFactionIndex = new UpdateField(66, 76); - public UpdateField MaxLevel = new UpdateField(66, 77); - public UpdateField ScalingPlayerLevelDelta = new UpdateField(66, 78); - public UpdateField MaxCreatureScalingLevel = new UpdateField(66, 79); - public UpdateField PetSpellPower = new UpdateField(66, 80); - public UpdateField UiHitModifier = new UpdateField(66, 81); - public UpdateField UiSpellHitModifier = new UpdateField(66, 82); - public UpdateField HomeRealmTimeOffset = new UpdateField(66, 83); - public UpdateField ModPetHaste = new UpdateField(66, 84); - public UpdateField LocalRegenFlags = new UpdateField(66, 85); - public UpdateField AuraVision = new UpdateField(66, 86); - public UpdateField NumBackpackSlots = new UpdateField(66, 87); - public UpdateField OverrideSpellsID = new UpdateField(66, 88); - public UpdateField LfgBonusFactionID = new UpdateField(66, 89); - public UpdateField LootSpecID = new UpdateField(66, 90); - public UpdateField OverrideZonePVPType = new UpdateField(66, 91); - public UpdateField Honor = new UpdateField(66, 92); - public UpdateField HonorNextLevel = new UpdateField(66, 93); - public UpdateField PvpRewardAchieved = new UpdateField(66, 94); - public UpdateField PvpTierMaxFromWins = new UpdateField(66, 95); - public UpdateField PvpLastWeeksRewardAchieved = new UpdateField(66, 96); - public UpdateField PvpLastWeeksTierMaxFromWins = new UpdateField(66, 97); - public UpdateField PvpLastWeeksRewardClaimed = new UpdateField(98, 99); - public UpdateField NumBankSlots = new UpdateField(98, 100); - public UpdateFieldArray InvSlots = new UpdateFieldArray(195, 101, 102); - public UpdateFieldArray TrackResourceMask = new UpdateFieldArray(2, 297, 298); - public UpdateFieldArray ExploredZones = new UpdateFieldArray(192, 300, 301); - public UpdateFieldArray RestInfo = new UpdateFieldArray(2, 493, 494); - public UpdateFieldArray ModDamageDonePos = new UpdateFieldArray(7, 496, 497); - public UpdateFieldArray ModDamageDoneNeg = new UpdateFieldArray(7, 496, 504); - public UpdateFieldArray ModDamageDonePercent = new UpdateFieldArray(7, 496, 511); - public UpdateFieldArray WeaponDmgMultipliers = new UpdateFieldArray(3, 518, 519); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new UpdateFieldArray(3, 518, 522); - public UpdateFieldArray BuybackPrice = new UpdateFieldArray(12, 525, 526); - public UpdateFieldArray BuybackTimestamp = new UpdateFieldArray(12, 525, 538); - public UpdateFieldArray CombatRatings = new UpdateFieldArray(32, 550, 551); - public UpdateFieldArray PvpInfo = new UpdateFieldArray(6, 583, 584); - public UpdateFieldArray NoReagentCostMask = new UpdateFieldArray(4, 590, 591); - public UpdateFieldArray ProfessionSkillLine = new UpdateFieldArray(2, 595, 596); - public UpdateFieldArray BagSlotFlags = new UpdateFieldArray(4, 598, 599); - public UpdateFieldArray BankBagSlotFlags = new UpdateFieldArray(7, 603, 604); - public UpdateFieldArray QuestCompleted = new UpdateFieldArray(875, 611, 612); + public DynamicUpdateField ReplayedQuests = new DynamicUpdateField(0, 20); + public DynamicUpdateField DisabledSpells = new DynamicUpdateField(0, 21); + public DynamicUpdateField CharacterRestrictions = new DynamicUpdateField(0, 17); + public UpdateField FarsightObject = new UpdateField(0, 24); + public UpdateField SummonedBattlePetGUID = new UpdateField(0, 25); + public UpdateField Coinage = new UpdateField(0, 26); + public UpdateField XP = new UpdateField(0, 27); + public UpdateField NextLevelXP = new UpdateField(0, 28); + public UpdateField TrialXP = new UpdateField(0, 29); + public UpdateField Skill = new UpdateField(0, 30); + public UpdateField CharacterPoints = new UpdateField(0, 31); + public UpdateField MaxTalentTiers = new UpdateField(0, 32); + public UpdateField TrackCreatureMask = new UpdateField(0, 33); + public UpdateField MainhandExpertise = new UpdateField(34, 35); + public UpdateField OffhandExpertise = new UpdateField(34, 36); + public UpdateField RangedExpertise = new UpdateField(34, 37); + public UpdateField CombatRatingExpertise = new UpdateField(34, 38); + public UpdateField BlockPercentage = new UpdateField(34, 39); + public UpdateField DodgePercentage = new UpdateField(34, 40); + public UpdateField DodgePercentageFromAttribute = new UpdateField(34, 41); + public UpdateField ParryPercentage = new UpdateField(34, 42); + public UpdateField ParryPercentageFromAttribute = new UpdateField(34, 43); + public UpdateField CritPercentage = new UpdateField(34, 44); + public UpdateField RangedCritPercentage = new UpdateField(34, 45); + public UpdateField OffhandCritPercentage = new UpdateField(34, 46); + public UpdateField SpellCritPercentage = new UpdateField(34, 47); + public UpdateField ShieldBlock = new UpdateField(34, 48); + public UpdateField ShieldBlockCritPercentage = new UpdateField(34, 49); + public UpdateField Mastery = new UpdateField(34, 50); + public UpdateField Speed = new UpdateField(34, 51); + public UpdateField Avoidance = new UpdateField(34, 52); + public UpdateField Sturdiness = new UpdateField(34, 53); + public UpdateField Versatility = new UpdateField(34, 54); + public UpdateField VersatilityBonus = new UpdateField(34, 55); + public UpdateField PvpPowerDamage = new UpdateField(34, 56); + public UpdateField PvpPowerHealing = new UpdateField(34, 57); + public UpdateField ModHealingDonePos = new UpdateField(34, 58); + public UpdateField ModHealingPercent = new UpdateField(34, 59); + public UpdateField ModHealingDonePercent = new UpdateField(34, 60); + public UpdateField ModPeriodicHealingDonePercent = new UpdateField(34, 61); + public UpdateField ModSpellPowerPercent = new UpdateField(34, 62); + public UpdateField ModResiliencePercent = new UpdateField(34, 63); + public UpdateField OverrideSpellPowerByAPPercent = new UpdateField(34, 64); + public UpdateField OverrideAPBySpellPowerPercent = new UpdateField(34, 65); + public UpdateField ModTargetResistance = new UpdateField(66, 67); + public UpdateField ModTargetPhysicalResistance = new UpdateField(66, 68); + public UpdateField LocalFlags = new UpdateField(66, 69); + public UpdateField GrantableLevels = new UpdateField(66, 70); + public UpdateField MultiActionBars = new UpdateField(66, 71); + public UpdateField LifetimeMaxRank = new UpdateField(66, 72); + public UpdateField NumRespecs = new UpdateField(66, 73); + public UpdateField PvpMedals = new UpdateField(66, 74); + public UpdateField TodayHonorableKills = new UpdateField(66, 75); + public UpdateField YesterdayHonorableKills = new UpdateField(66, 76); + public UpdateField LifetimeHonorableKills = new UpdateField(66, 77); + public UpdateField WatchedFactionIndex = new UpdateField(66, 78); + public UpdateField MaxLevel = new UpdateField(66, 79); + public UpdateField ScalingPlayerLevelDelta = new UpdateField(66, 80); + public UpdateField MaxCreatureScalingLevel = new UpdateField(66, 81); + public UpdateField PetSpellPower = new UpdateField(66, 82); + public UpdateField UiHitModifier = new UpdateField(66, 83); + public UpdateField UiSpellHitModifier = new UpdateField(66, 84); + public UpdateField HomeRealmTimeOffset = new UpdateField(66, 85); + public UpdateField ModPetHaste = new UpdateField(66, 86); + public UpdateField LocalRegenFlags = new UpdateField(66, 87); + public UpdateField AuraVision = new UpdateField(66, 88); + public UpdateField NumBackpackSlots = new UpdateField(66, 89); + public UpdateField OverrideSpellsID = new UpdateField(66, 90); + public UpdateField LfgBonusFactionID = new UpdateField(66, 91); + public UpdateField LootSpecID = new UpdateField(66, 92); + public UpdateField OverrideZonePVPType = new UpdateField(66, 93); + public UpdateField Honor = new UpdateField(66, 94); + public UpdateField HonorNextLevel = new UpdateField(66, 95); + public UpdateField PvpRewardAchieved = new UpdateField(66, 96); + public UpdateField PvpTierMaxFromWins = new UpdateField(66, 97); + public UpdateField PvpLastWeeksRewardAchieved = new UpdateField(98, 99); + public UpdateField PvpLastWeeksTierMaxFromWins = new UpdateField(98, 100); + public UpdateField PvpLastWeeksRewardClaimed = new UpdateField(98, 101); + public UpdateField NumBankSlots = new UpdateField(98, 102); + public UpdateField> QuestSession = new UpdateField>(98, 103); + public UpdateFieldArray InvSlots = new UpdateFieldArray(195, 104, 105); + public UpdateFieldArray TrackResourceMask = new UpdateFieldArray(2, 300, 301); + public UpdateFieldArray ExploredZones = new UpdateFieldArray(192, 303, 304); + public UpdateFieldArray RestInfo = new UpdateFieldArray(2, 496, 497); + public UpdateFieldArray ModDamageDonePos = new UpdateFieldArray(7, 499, 500); + public UpdateFieldArray ModDamageDoneNeg = new UpdateFieldArray(7, 499, 507); + public UpdateFieldArray ModDamageDonePercent = new UpdateFieldArray(7, 499, 514); + public UpdateFieldArray WeaponDmgMultipliers = new UpdateFieldArray(3, 521, 522); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new UpdateFieldArray(3, 521, 525); + public UpdateFieldArray BuybackPrice = new UpdateFieldArray(12, 528, 529); + public UpdateFieldArray BuybackTimestamp = new UpdateFieldArray(12, 528, 541); + public UpdateFieldArray CombatRatings = new UpdateFieldArray(32, 553, 554); + public UpdateFieldArray PvpInfo = new UpdateFieldArray(6, 586, 587); + public UpdateFieldArray NoReagentCostMask = new UpdateFieldArray(4, 593, 594); + public UpdateFieldArray ProfessionSkillLine = new UpdateFieldArray(2, 598, 599); + public UpdateFieldArray BagSlotFlags = new UpdateFieldArray(4, 601, 602); + public UpdateFieldArray BankBagSlotFlags = new UpdateFieldArray(7, 606, 607); + public UpdateFieldArray QuestCompleted = new UpdateFieldArray(875, 614, 615); + + public ActivePlayerData() : base(0, TypeId.ActivePlayer, 1487) { } @@ -2964,7 +3133,7 @@ namespace Game.Entities data.WriteUInt32(XP); data.WriteUInt32(NextLevelXP); data.WriteInt32(TrialXP); - ((SkillInfo)Skill).WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ((SkillInfo)Skill).WriteCreate(data, owner, receiver); data.WriteUInt32(CharacterPoints); data.WriteUInt32(MaxTalentTiers); data.WriteUInt32(TrackCreatureMask); @@ -3001,7 +3170,7 @@ namespace Game.Entities } for (int i = 0; i < 2; ++i) { - RestInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + RestInfo[i].WriteCreate(data, owner, receiver); } for (int i = 0; i < 7; ++i) { @@ -3105,9 +3274,11 @@ namespace Game.Entities data.WriteInt32(Research[i].Size()); for (int j = 0; j < Research[i].Size(); ++j) { - Research[i][j].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Research[i][j].WriteCreate(data, owner, receiver); } } + data.WriteInt32(ReplayedQuests.Size()); + data.WriteInt32(DisabledSpells.Size()); for (int i = 0; i < KnownTitles.Size(); ++i) { data.WriteUInt64(KnownTitles[i]); @@ -3158,23 +3329,36 @@ namespace Game.Entities } for (int i = 0; i < SpellPctModByLabel.Size(); ++i) { - SpellPctModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SpellPctModByLabel[i].WriteCreate(data, owner, receiver); } for (int i = 0; i < SpellFlatModByLabel.Size(); ++i) { - SpellFlatModByLabel[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + SpellFlatModByLabel[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < ReplayedQuests.Size(); ++i) + { + ReplayedQuests[i].WriteCreate(data, owner, receiver); + } + for (int i = 0; i < DisabledSpells.Size(); ++i) + { + data.WriteInt32(DisabledSpells[i]); } for (int i = 0; i < 6; ++i) { - PvpInfo[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + PvpInfo[i].WriteCreate(data, owner, receiver); } data.WriteBit((bool)BackpackAutoSortDisabled); data.WriteBit((bool)BankAutoSortDisabled); data.WriteBit((bool)SortBagsRightToLeft); data.WriteBit((bool)InsertItemsLeftToRight); + data.WriteBit(QuestSession.GetValue().HasValue); for (int i = 0; i < CharacterRestrictions.Size(); ++i) { - CharacterRestrictions[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + CharacterRestrictions[i].WriteCreate(data, owner, receiver); + } + if (QuestSession.GetValue().HasValue) + { + QuestSession.GetValue().Value.WriteCreate(data, owner, receiver); } data.FlushBits(); } @@ -3266,33 +3450,45 @@ namespace Game.Entities SpellFlatModByLabel.WriteUpdateMask(data); } } - if (_changesMask[20]) + if (_changesMask[22]) { for (int i = 0; i < 1; ++i) { - if (_changesMask[21 + i]) + if (_changesMask[23 + i]) { Research[i].WriteUpdateMask(data); } } } - data.FlushBits(); - if (_changesMask[20]) + if (_changesMask[22]) { for (int i = 0; i < 1; ++i) { - if (_changesMask[21 + i]) + if (_changesMask[23 + i]) { for (int j = 0; j < Research[i].Size(); ++j) { if (Research[i].HasChanged(j)) { - Research[i][j].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Research[i][j].WriteUpdate(data, owner, receiver); } } } } } + data.FlushBits(); + if (_changesMask[0]) + { + if (_changesMask[20]) + { + ReplayedQuests.WriteUpdateMask(data); + } + if (_changesMask[21]) + { + DisabledSpells.WriteUpdateMask(data); + } + } + data.FlushBits(); if (_changesMask[0]) { if (_changesMask[5]) @@ -3421,7 +3617,7 @@ namespace Game.Entities { if (CharacterRestrictions.HasChanged(i)) { - CharacterRestrictions[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + CharacterRestrictions[i].WriteUpdate(data, owner, receiver); } } } @@ -3431,7 +3627,7 @@ namespace Game.Entities { if (SpellPctModByLabel.HasChanged(i)) { - SpellPctModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SpellPctModByLabel[i].WriteUpdate(data, owner, receiver); } } } @@ -3441,7 +3637,27 @@ namespace Game.Entities { if (SpellFlatModByLabel.HasChanged(i)) { - SpellFlatModByLabel[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + SpellFlatModByLabel[i].WriteUpdate(data, owner, receiver); + } + } + } + if (_changesMask[20]) + { + for (int i = 0; i < ReplayedQuests.Size(); ++i) + { + if (ReplayedQuests.HasChanged(i)) + { + ReplayedQuests[i].WriteUpdate(data, owner, receiver); + } + } + } + if (_changesMask[21]) + { + for (int i = 0; i < DisabledSpells.Size(); ++i) + { + if (DisabledSpells.HasChanged(i)) + { + data.WriteInt32(DisabledSpells[i]); } } } @@ -3455,463 +3671,483 @@ namespace Game.Entities } if (_changesMask[24]) { - data.WriteUInt64(Coinage); + data.WritePackedGuid(FarsightObject); } if (_changesMask[25]) { - data.WriteUInt32(XP); + data.WritePackedGuid(SummonedBattlePetGUID); } if (_changesMask[26]) { - data.WriteUInt32(NextLevelXP); + data.WriteUInt64(Coinage); } if (_changesMask[27]) { - data.WriteInt32(TrialXP); + data.WriteUInt32(XP); } if (_changesMask[28]) { - ((SkillInfo)Skill).WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + data.WriteUInt32(NextLevelXP); } if (_changesMask[29]) { - data.WriteUInt32(CharacterPoints); + data.WriteInt32(TrialXP); } if (_changesMask[30]) { - data.WriteUInt32(MaxTalentTiers); + ((SkillInfo)Skill).WriteUpdate(data, owner, receiver); } if (_changesMask[31]) { - data.WriteUInt32(TrackCreatureMask); + data.WriteUInt32(CharacterPoints); } if (_changesMask[32]) { - data.WriteFloat(MainhandExpertise); + data.WriteFloat(MaxTalentTiers); } if (_changesMask[33]) { - data.WriteFloat(OffhandExpertise); + data.WriteFloat(TrackCreatureMask); } } if (_changesMask[34]) { if (_changesMask[35]) { - data.WriteFloat(RangedExpertise); + data.WriteFloat(MainhandExpertise); } if (_changesMask[36]) { - data.WriteFloat(CombatRatingExpertise); + data.WriteFloat(OffhandExpertise); } if (_changesMask[37]) { - data.WriteFloat(BlockPercentage); + data.WriteFloat(RangedExpertise); } if (_changesMask[38]) { - data.WriteFloat(DodgePercentage); + data.WriteFloat(CombatRatingExpertise); } if (_changesMask[39]) { - data.WriteFloat(DodgePercentageFromAttribute); + data.WriteFloat(BlockPercentage); } if (_changesMask[40]) { - data.WriteFloat(ParryPercentage); + data.WriteFloat(DodgePercentage); } if (_changesMask[41]) { - data.WriteFloat(ParryPercentageFromAttribute); + data.WriteFloat(DodgePercentageFromAttribute); } if (_changesMask[42]) { - data.WriteFloat(CritPercentage); + data.WriteFloat(ParryPercentage); } if (_changesMask[43]) { - data.WriteFloat(RangedCritPercentage); + data.WriteFloat(ParryPercentageFromAttribute); } if (_changesMask[44]) { - data.WriteFloat(OffhandCritPercentage); + data.WriteFloat(CritPercentage); } if (_changesMask[45]) { - data.WriteFloat(SpellCritPercentage); + data.WriteFloat(RangedCritPercentage); } if (_changesMask[46]) { - data.WriteUInt32(ShieldBlock); + data.WriteFloat(OffhandCritPercentage); } if (_changesMask[47]) { - data.WriteFloat(ShieldBlockCritPercentage); + data.WriteFloat(SpellCritPercentage); } if (_changesMask[48]) { - data.WriteFloat(Mastery); + data.WriteFloat(ShieldBlock); } if (_changesMask[49]) { - data.WriteFloat(Speed); + data.WriteFloat(ShieldBlockCritPercentage); } if (_changesMask[50]) { - data.WriteFloat(Avoidance); + data.WriteFloat(Mastery); } if (_changesMask[51]) { - data.WriteFloat(Sturdiness); + data.WriteFloat(Speed); } if (_changesMask[52]) { - data.WriteInt32(Versatility); + data.WriteFloat(Avoidance); } if (_changesMask[53]) { - data.WriteFloat(VersatilityBonus); + data.WriteFloat(Sturdiness); } if (_changesMask[54]) { - data.WriteFloat(PvpPowerDamage); + data.WriteFloat(Versatility); } if (_changesMask[55]) { - data.WriteFloat(PvpPowerHealing); + data.WriteFloat(VersatilityBonus); } if (_changesMask[56]) { - data.WriteInt32(ModHealingDonePos); + data.WriteFloat(PvpPowerDamage); } if (_changesMask[57]) { - data.WriteFloat(ModHealingPercent); + data.WriteFloat(PvpPowerHealing); } if (_changesMask[58]) { - data.WriteFloat(ModHealingDonePercent); + data.WriteFloat(ModHealingDonePos); } if (_changesMask[59]) { - data.WriteFloat(ModPeriodicHealingDonePercent); + data.WriteFloat(ModHealingPercent); } if (_changesMask[60]) { - data.WriteFloat(ModSpellPowerPercent); + data.WriteFloat(ModHealingDonePercent); } if (_changesMask[61]) { - data.WriteFloat(ModResiliencePercent); + data.WriteFloat(ModPeriodicHealingDonePercent); } if (_changesMask[62]) { - data.WriteFloat(OverrideSpellPowerByAPPercent); + data.WriteFloat(ModSpellPowerPercent); } if (_changesMask[63]) { - data.WriteFloat(OverrideAPBySpellPowerPercent); + data.WriteFloat(ModResiliencePercent); } if (_changesMask[64]) { - data.WriteInt32(ModTargetResistance); + data.WriteFloat(OverrideSpellPowerByAPPercent); } if (_changesMask[65]) { - data.WriteInt32(ModTargetPhysicalResistance); + data.WriteFloat(OverrideAPBySpellPowerPercent); } } if (_changesMask[66]) { if (_changesMask[67]) { - data.WriteInt32(LocalFlags); + data.WriteInt32(ModTargetResistance); } if (_changesMask[68]) { - data.WriteUInt8(GrantableLevels); + data.WriteInt32(ModTargetPhysicalResistance); } if (_changesMask[69]) { - data.WriteUInt8(MultiActionBars); + data.WriteInt32(LocalFlags); } if (_changesMask[70]) { - data.WriteUInt8(LifetimeMaxRank); + data.WriteUInt8(GrantableLevels); } if (_changesMask[71]) { - data.WriteUInt8(NumRespecs); + data.WriteUInt8(MultiActionBars); } if (_changesMask[72]) { - data.WriteUInt32(PvpMedals); + data.WriteUInt32(LifetimeMaxRank); } if (_changesMask[73]) { - data.WriteUInt16(TodayHonorableKills); + data.WriteUInt16(NumRespecs); } if (_changesMask[74]) { - data.WriteUInt16(YesterdayHonorableKills); + data.WriteUInt32(PvpMedals); } if (_changesMask[75]) { - data.WriteUInt32(LifetimeHonorableKills); + data.WriteUInt32(TodayHonorableKills); } if (_changesMask[76]) { - data.WriteUInt32(WatchedFactionIndex); + data.WriteUInt32(YesterdayHonorableKills); } if (_changesMask[77]) { - data.WriteInt32(MaxLevel); + data.WriteUInt32(LifetimeHonorableKills); } if (_changesMask[78]) { - data.WriteInt32(ScalingPlayerLevelDelta); + data.WriteUInt32(WatchedFactionIndex); } if (_changesMask[79]) { - data.WriteInt32(MaxCreatureScalingLevel); + data.WriteInt32(MaxLevel); } if (_changesMask[80]) { - data.WriteUInt32(PetSpellPower); + data.WriteInt32(ScalingPlayerLevelDelta); } if (_changesMask[81]) { - data.WriteFloat(UiHitModifier); + data.WriteFloat(MaxCreatureScalingLevel); } if (_changesMask[82]) { - data.WriteFloat(UiSpellHitModifier); + data.WriteFloat(PetSpellPower); } if (_changesMask[83]) { - data.WriteInt32(HomeRealmTimeOffset); + data.WriteFloat(UiHitModifier); } if (_changesMask[84]) { - data.WriteFloat(ModPetHaste); + data.WriteFloat(UiSpellHitModifier); } if (_changesMask[85]) { - data.WriteUInt8(LocalRegenFlags); + data.WriteInt32(HomeRealmTimeOffset); } if (_changesMask[86]) { - data.WriteUInt8(AuraVision); + data.WriteFloat(ModPetHaste); } if (_changesMask[87]) { - data.WriteUInt8(NumBackpackSlots); + data.WriteUInt8(LocalRegenFlags); } if (_changesMask[88]) { - data.WriteUInt32(OverrideSpellsID); + data.WriteUInt32(AuraVision); } if (_changesMask[89]) { - data.WriteInt32(LfgBonusFactionID); + data.WriteInt32(NumBackpackSlots); } if (_changesMask[90]) { - data.WriteUInt16(LootSpecID); + data.WriteUInt32(OverrideSpellsID); } if (_changesMask[91]) { - data.WriteUInt32(OverrideZonePVPType); + data.WriteInt32(LfgBonusFactionID); } if (_changesMask[92]) { - data.WriteUInt32(Honor); + data.WriteUInt32(LootSpecID); } if (_changesMask[93]) { - data.WriteUInt32(HonorNextLevel); + data.WriteUInt32(OverrideZonePVPType); } if (_changesMask[94]) { - data.WriteInt32(PvpRewardAchieved); + data.WriteUInt32(Honor); } if (_changesMask[95]) { - data.WriteInt32(PvpTierMaxFromWins); + data.WriteUInt32(HonorNextLevel); } if (_changesMask[96]) { - data.WriteInt32(PvpLastWeeksRewardAchieved); + data.WriteInt32(PvpRewardAchieved); } if (_changesMask[97]) { - data.WriteInt32(PvpLastWeeksTierMaxFromWins); + data.WriteInt32(PvpTierMaxFromWins); } } if (_changesMask[98]) { if (_changesMask[99]) { - data.WriteInt32(PvpLastWeeksRewardClaimed); + data.WriteInt32(PvpLastWeeksRewardAchieved); } if (_changesMask[100]) + { + data.WriteInt32(PvpLastWeeksTierMaxFromWins); + } + if (_changesMask[101]) + { + data.WriteInt32(PvpLastWeeksRewardClaimed); + } + if (_changesMask[102]) { data.WriteUInt8(NumBankSlots); } } - if (_changesMask[101]) + data.FlushBits(); + if (_changesMask[98]) + { + data.WriteBit(QuestSession.GetValue().HasValue); + if (_changesMask[103]) + { + if (QuestSession.GetValue().HasValue) + { + QuestSession.GetValue().Value.WriteUpdate(data, owner, receiver); + } + } + } + if (_changesMask[104]) { for (int i = 0; i < 195; ++i) { - if (_changesMask[102 + i]) + if (_changesMask[105 + i]) { data.WritePackedGuid(InvSlots[i]); } } } - if (_changesMask[297]) + if (_changesMask[300]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[298 + i]) + if (_changesMask[301 + i]) { data.WriteUInt32(TrackResourceMask[i]); } } } - if (_changesMask[300]) + if (_changesMask[303]) { for (int i = 0; i < 192; ++i) { - if (_changesMask[301 + i]) + if (_changesMask[304 + i]) { data.WriteUInt64(ExploredZones[i]); } } } - if (_changesMask[493]) + if (_changesMask[496]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[494 + i]) + if (_changesMask[497 + i]) { - RestInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + RestInfo[i].WriteUpdate(data, owner, receiver); } } } - if (_changesMask[496]) + if (_changesMask[499]) { for (int i = 0; i < 7; ++i) { - if (_changesMask[497 + i]) + if (_changesMask[500 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (_changesMask[504 + i]) + if (_changesMask[507 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (_changesMask[511 + i]) + if (_changesMask[514 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } } } - if (_changesMask[518]) + if (_changesMask[521]) { for (int i = 0; i < 3; ++i) { - if (_changesMask[519 + i]) + if (_changesMask[522 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (_changesMask[522 + i]) + if (_changesMask[525 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (_changesMask[525]) + if (_changesMask[528]) { for (int i = 0; i < 12; ++i) { - if (_changesMask[526 + i]) + if (_changesMask[529 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (_changesMask[538 + i]) + if (_changesMask[541 + i]) { data.WriteUInt32(BuybackTimestamp[i]); } } } - if (_changesMask[550]) + if (_changesMask[553]) { for (int i = 0; i < 32; ++i) { - if (_changesMask[551 + i]) + if (_changesMask[554 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (_changesMask[590]) + if (_changesMask[593]) { for (int i = 0; i < 4; ++i) { - if (_changesMask[591 + i]) + if (_changesMask[594 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (_changesMask[595]) + if (_changesMask[598]) { for (int i = 0; i < 2; ++i) { - if (_changesMask[596 + i]) + if (_changesMask[599 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (_changesMask[598]) + if (_changesMask[601]) { for (int i = 0; i < 4; ++i) { - if (_changesMask[599 + i]) + if (_changesMask[602 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (_changesMask[603]) + if (_changesMask[606]) { for (int i = 0; i < 7; ++i) { - if (_changesMask[604 + i]) + if (_changesMask[607 + i]) { data.WriteUInt32(BankBagSlotFlags[i]); } } } - if (_changesMask[611]) + if (_changesMask[614]) { for (int i = 0; i < 875; ++i) { - if (_changesMask[612 + i]) + if (_changesMask[615 + i]) { data.WriteUInt64(QuestCompleted[i]); } } } - if (_changesMask[583]) + if (_changesMask[586]) { for (int i = 0; i < 6; ++i) { - if (_changesMask[584 + i]) + if (_changesMask[587 + i]) { - PvpInfo[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + PvpInfo[i].WriteUpdate(data, owner, receiver); } } } @@ -3939,6 +4175,8 @@ namespace Game.Entities ClearChangesMask(SelfResSpells); ClearChangesMask(SpellPctModByLabel); ClearChangesMask(SpellFlatModByLabel); + ClearChangesMask(ReplayedQuests); + ClearChangesMask(DisabledSpells); ClearChangesMask(CharacterRestrictions); ClearChangesMask(FarsightObject); ClearChangesMask(SummonedBattlePetGUID); @@ -4016,6 +4254,7 @@ namespace Game.Entities ClearChangesMask(PvpLastWeeksTierMaxFromWins); ClearChangesMask(PvpLastWeeksRewardClaimed); ClearChangesMask(NumBankSlots); + ClearChangesMask(QuestSession); ClearChangesMask(InvSlots); ClearChangesMask(TrackResourceMask); ClearChangesMask(ExploredZones); @@ -4496,7 +4735,7 @@ namespace Game.Entities public ScaleCurve() : base(7) { } - public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) + public override void WriteCreate(WorldPacket data, AreaTrigger owner, Player receiver) { data.WriteUInt32(StartTimeOffset); for (int i = 0; i < 2; ++i) @@ -4507,7 +4746,7 @@ namespace Game.Entities data.WriteBit(OverrideActive); data.FlushBits(); } - public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) + public override void WriteUpdate(WorldPacket data, AreaTrigger owner, Player receiver) { UpdateMask changesMask = _changesMask; data.WriteBits(changesMask.GetBlock(0), 7); @@ -4575,7 +4814,7 @@ namespace Game.Entities public override void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) { - ((ScaleCurve)OverrideScaleCurve).WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ((ScaleCurve)OverrideScaleCurve).WriteCreate(data, owner, receiver); data.WritePackedGuid(Caster); data.WriteUInt32(Duration); data.WriteUInt32(TimeToTarget); @@ -4587,7 +4826,7 @@ namespace Game.Entities data.WriteFloat(BoundsRadius2D); data.WriteUInt32(DecalPropertiesID); data.WritePackedGuid(CreatingEffectGUID); - ((ScaleCurve)ExtraScaleCurve).WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ((ScaleCurve)ExtraScaleCurve).WriteCreate(data, owner, receiver); } public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, AreaTrigger owner, Player receiver) { @@ -4598,7 +4837,7 @@ namespace Game.Entities { if (_changesMask[1]) { - ((ScaleCurve)OverrideScaleCurve).WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ((ScaleCurve)OverrideScaleCurve).WriteUpdate(data, owner, receiver); } if (_changesMask[3]) { @@ -4646,7 +4885,7 @@ namespace Game.Entities } if (_changesMask[2]) { - ((ScaleCurve)ExtraScaleCurve).WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + ((ScaleCurve)ExtraScaleCurve).WriteUpdate(data, owner, receiver); } } } @@ -4730,7 +4969,7 @@ namespace Game.Entities public byte ActorIndex; public byte Flags; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) + public void WriteCreate(WorldPacket data, Conversation owner, Player receiver) { data.WriteUInt32(ConversationLineID); data.WriteUInt32(StartTime); @@ -4738,7 +4977,7 @@ namespace Game.Entities data.WriteUInt8(ActorIndex); data.WriteUInt8(Flags); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) + public void WriteUpdate(WorldPacket data, Conversation owner, Player receiver) { data.WriteUInt32(ConversationLineID); data.WriteUInt32(StartTime); @@ -4756,7 +4995,7 @@ namespace Game.Entities public int Field_18; public ConversationActorType Type; - public void WriteCreate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) + public void WriteCreate(WorldPacket data, Conversation owner, Player receiver) { data.WriteUInt32(CreatureID); data.WriteUInt32(CreatureDisplayInfoID); @@ -4765,7 +5004,7 @@ namespace Game.Entities data.WriteBits(Type, 1); data.FlushBits(); } - public void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) + public void WriteUpdate(WorldPacket data, Conversation owner, Player receiver) { data.WriteUInt32(CreatureID); data.WriteUInt32(CreatureDisplayInfoID); @@ -4792,12 +5031,12 @@ namespace Game.Entities data.WriteUInt32(Field_1C); for (int i = 0; i < ((List)Lines).Count; ++i) { - ((List)Lines)[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + ((List)Lines)[i].WriteCreate(data, owner, receiver); } data.WriteInt32(Actors.Size()); for (int i = 0; i < Actors.Size(); ++i) { - Actors[i].WriteCreate(data, fieldVisibilityFlags, owner, receiver); + Actors[i].WriteCreate(data, owner, receiver); } } public override void WriteUpdate(WorldPacket data, UpdateFieldFlag fieldVisibilityFlags, Conversation owner, Player receiver) @@ -4812,7 +5051,7 @@ namespace Game.Entities data.WriteBits(list.Count, 32); for (int i = 0; i < list.Count; ++i) { - list[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + list[i].WriteUpdate(data, owner, receiver); } } } @@ -4833,7 +5072,7 @@ namespace Game.Entities { if (Actors.HasChanged(i)) { - Actors[i].WriteUpdate(data, fieldVisibilityFlags, owner, receiver); + Actors[i].WriteUpdate(data, owner, receiver); } } } diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index f3af5292a..3459de51c 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -3205,17 +3205,17 @@ namespace Game.Entities Item item = GetItemByPos(InventorySlots.Bag0, i); if (item != null) { - ss.Append($"{item.GetTemplate().GetInventoryType()} {item.GetDisplayId(this)} "); + ss.Append($"{(uint)item.GetTemplate().GetInventoryType()} {item.GetDisplayId(this)} "); SpellItemEnchantmentRecord enchant = CliDB.SpellItemEnchantmentStorage.LookupByKey(item.GetVisibleEnchantmentId(this)); if (enchant != null) ss.Append(enchant.ItemVisual); else ss.Append('0'); - ss.Append(' '); + ss.Append($" {(uint)CliDB.ItemStorage.LookupByKey(item.GetVisibleEntry(this)).SubclassID} "); } else - ss.Append("0 0 0 "); + ss.Append("0 0 0 0 "); } stmt.AddValue(index++, ss.ToString()); @@ -3362,10 +3362,10 @@ namespace Game.Entities else ss.Append('0'); - ss.Append(' '); + ss.Append($" {(uint)CliDB.ItemStorage.LookupByKey(item.GetVisibleEntry(this)).SubclassID} "); } else - ss.Append("0 0 0 "); + ss.Append("0 0 0 0 "); } stmt.AddValue(index++, ss.ToString()); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index d31cefb7c..21dc598dc 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -6252,9 +6252,9 @@ namespace Game "RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " + //96 97 98 99 100 101 102 103 "RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " + - //104 105 106 107 108 109 110 111 - "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, " + - //112 113 114 115 116 117 118 119 120 + //104 105 106 107 108 109 110 111 112 + "AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, TreasurePickerID, Expansion, ManagedWorldStateID, QuestSessionBonus, " + + //113 114 115 116 117 118 119 120 121 "LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog" + " FROM quest_template"); diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index 5786b03e6..4197a214b 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -73,24 +73,24 @@ namespace Game Log.outInfo(LogFilter.Network, "Loading Character {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId()); - if (!Player.ValidateAppearance((Race)charInfo.RaceId, charInfo.ClassId, (Gender)charInfo.Sex, charInfo.HairStyle, charInfo.HairColor, charInfo.Face, charInfo.FacialHair, charInfo.Skin, charInfo.CustomDisplay)) + if (!Player.ValidateAppearance((Race)charInfo.RaceId, charInfo.ClassId, (Gender)charInfo.SexId, charInfo.HairStyle, charInfo.HairColor, charInfo.FaceId, charInfo.FacialHair, charInfo.SkinId, charInfo.CustomDisplay)) { Log.outError(LogFilter.Player, "Player {0} has wrong Appearance values (Hair/Skin/Color), forcing recustomize", charInfo.Guid.ToString()); // Make sure customization always works properly - send all zeroes instead - charInfo.Skin = 0; - charInfo.Face = 0; + charInfo.SkinId = 0; + charInfo.FaceId = 0; charInfo.HairStyle = 0; charInfo.HairColor = 0; charInfo.FacialHair = 0; - if (charInfo.CustomizationFlag != CharacterCustomizeFlags.Customize) + if (charInfo.Flags2 != CharacterCustomizeFlags.Customize) { PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG); stmt.AddValue(0, (ushort)AtLoginFlags.Customize); stmt.AddValue(1, charInfo.Guid.GetCounter()); DB.Characters.Execute(stmt); - charInfo.CustomizationFlag = CharacterCustomizeFlags.Customize; + charInfo.Flags2 = CharacterCustomizeFlags.Customize; } } @@ -99,7 +99,7 @@ namespace Game _legitCharacters.Add(charInfo.Guid); if (!Global.CharacterCacheStorage.HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. - Global.CharacterCacheStorage.AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.Sex, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.Level, false); + Global.CharacterCacheStorage.AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexId, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.ExperienceLevel, false); if (charInfo.ClassId == Class.DemonHunter) demonHunterCount++; @@ -109,7 +109,7 @@ namespace Game else charResult.HasDemonHunterOnRealm = false; - charResult.MaxCharacterLevel = Math.Max(charResult.MaxCharacterLevel, charInfo.Level); + charResult.MaxCharacterLevel = Math.Max(charResult.MaxCharacterLevel, charInfo.ExperienceLevel); charResult.Characters.Add(charInfo); } @@ -163,7 +163,7 @@ namespace Game Log.outInfo(LogFilter.Network, "Loading undeleted char guid {0} from account {1}.", charInfo.Guid.ToString(), GetAccountId()); if (!Global.CharacterCacheStorage.HasCharacterCacheEntry(charInfo.Guid)) // This can happen if characters are inserted into the database manually. Core hasn't loaded name data yet. - Global.CharacterCacheStorage.AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.Sex, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.Level, true); + Global.CharacterCacheStorage.AddCharacterCacheEntry(charInfo.Guid, GetAccountId(), charInfo.Name, charInfo.SexId, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.ExperienceLevel, true); charEnum.Characters.Add(charInfo); } @@ -891,7 +891,6 @@ namespace Game features.CfgRealmID = 2; features.CfgRealmRecID = 0; features.TokenPollTimeSeconds = 300; - features.TokenRedeemIndex = 0; features.VoiceEnabled = false; features.BrowserEnabled = false; // Has to be false, otherwise client will crash if "Customer Support" is opened diff --git a/Source/Game/Handlers/LFGHandler.cs b/Source/Game/Handlers/LFGHandler.cs index ef304662d..f7cb1b440 100644 --- a/Source/Game/Handlers/LFGHandler.cs +++ b/Source/Game/Handlers/LFGHandler.cs @@ -285,6 +285,7 @@ namespace Game lfgUpdateStatus.Joined = join; lfgUpdateStatus.LfgJoined = updateData.updateType != LfgUpdateType.RemovedFromQueue; lfgUpdateStatus.Queued = queued; + lfgUpdateStatus.QueueMapID = Global.LFGMgr.GetDungeonMapId(_player.GetGUID()); SendPacket(lfgUpdateStatus); } diff --git a/Source/Game/Handlers/RAFHandler.cs b/Source/Game/Handlers/RAFHandler.cs index 11b8b4fda..ca36612f6 100644 --- a/Source/Game/Handlers/RAFHandler.cs +++ b/Source/Game/Handlers/RAFHandler.cs @@ -24,7 +24,7 @@ namespace Game { public partial class WorldSession { - [WorldPacketHandler(ClientOpcodes.GrantLevel)] + //[WorldPacketHandler(ClientOpcodes.GrantLevel)] void HandleGrantLevel(GrantLevel grantLevel) { Player target = Global.ObjAccessor.GetPlayer(GetPlayer(), grantLevel.Target); @@ -60,12 +60,12 @@ namespace Game return; } - ProposeLevelGrant proposeLevelGrant = new ProposeLevelGrant(); - proposeLevelGrant.Sender = GetPlayer().GetGUID(); - target.SendPacket(proposeLevelGrant); + //ProposeLevelGrant proposeLevelGrant = new ProposeLevelGrant(); + //proposeLevelGrant.Sender = GetPlayer().GetGUID(); + //target.SendPacket(proposeLevelGrant); } - [WorldPacketHandler(ClientOpcodes.AcceptLevelGrant)] + //[WorldPacketHandler(ClientOpcodes.AcceptLevelGrant)] void HandleAcceptGrantLevel(AcceptLevelGrant acceptLevelGrant) { Player other = Global.ObjAccessor.GetPlayer(GetPlayer(), acceptLevelGrant.Granter); diff --git a/Source/Game/Network/Packets/AchievementPackets.cs b/Source/Game/Network/Packets/AchievementPackets.cs index 68cc6c3e1..89357b8a7 100644 --- a/Source/Game/Network/Packets/AchievementPackets.cs +++ b/Source/Game/Network/Packets/AchievementPackets.cs @@ -19,6 +19,7 @@ using Framework.Constants; using Game.Entities; using System; using System.Collections.Generic; +using Framework.Dynamic; namespace Game.Network.Packets { @@ -302,7 +303,11 @@ namespace Game.Network.Packets data.WriteUInt32(TimeFromStart); data.WriteUInt32(TimeFromCreate); data.WriteBits(Flags, 4); + data.WriteBit(RafAcceptanceID.HasValue); data.FlushBits(); + + if (RafAcceptanceID.HasValue) + data.WriteUInt64(RafAcceptanceID.Value); } public uint Id; @@ -312,6 +317,7 @@ namespace Game.Network.Packets public long Date; public uint TimeFromStart; public uint TimeFromCreate; + public Optional RafAcceptanceID; } public struct GuildCriteriaProgress diff --git a/Source/Game/Network/Packets/BattleGroundPackets.cs b/Source/Game/Network/Packets/BattleGroundPackets.cs index 47d0d118d..4901b4054 100644 --- a/Source/Game/Network/Packets/BattleGroundPackets.cs +++ b/Source/Game/Network/Packets/BattleGroundPackets.cs @@ -135,6 +135,25 @@ namespace Game.Network.Packets public uint ContributionPoints; } + public struct PVPMatchPlayerPVPStat + { + public int PvpStatID; + public uint PvpStatValue; + + public PVPMatchPlayerPVPStat(int pvpStatID, uint pvpStatValue) + { + PvpStatID = pvpStatID; + PvpStatValue = pvpStatValue; + } + + public void Write(WorldPacket data) + { + data.WriteInt32(PvpStatID); + data.WriteUInt32(PvpStatValue); + } + + } + public class PVPMatchPlayerStatistics { public void Write(WorldPacket data) @@ -151,8 +170,8 @@ namespace Game.Network.Packets data.WriteInt32(CreatureID); data.WriteInt32(HonorLevel); - foreach (var id in Stats) - data.WriteUInt32(id); + foreach (var pvpStat in Stats) + pvpStat.Write(data); data.WriteBit(Faction); data.WriteBit(IsInWorld); @@ -190,7 +209,7 @@ namespace Game.Network.Packets public Optional RatingChange; public Optional PreMatchMMR; public Optional MmrChange; - public List Stats = new List(); + public List Stats = new List(); public int PrimaryTalentTree; public int Sex; public Race PlayerRace; diff --git a/Source/Game/Network/Packets/ChannelPackets.cs b/Source/Game/Network/Packets/ChannelPackets.cs index 8b8b7e960..f01263258 100644 --- a/Source/Game/Network/Packets/ChannelPackets.cs +++ b/Source/Game/Network/Packets/ChannelPackets.cs @@ -116,6 +116,7 @@ namespace Game.Network.Packets _worldPacket.WriteUInt32((uint)ChannelFlags); _worldPacket.WriteInt32(ChatChannelID); _worldPacket.WriteUInt64((ulong)InstanceID); + _worldPacket.WritePackedGuid(ChannelGUID); _worldPacket.WriteString(Channel); _worldPacket.WriteString(ChannelWelcomeMsg); } @@ -125,6 +126,7 @@ namespace Game.Network.Packets public int InstanceID; public ChannelFlags ChannelFlags; public string Channel = ""; + public ObjectGuid ChannelGUID; } public class ChannelNotifyLeft : ServerPacket diff --git a/Source/Game/Network/Packets/CharacterPackets.cs b/Source/Game/Network/Packets/CharacterPackets.cs index 517f4cadb..fa3c03fc4 100644 --- a/Source/Game/Network/Packets/CharacterPackets.cs +++ b/Source/Game/Network/Packets/CharacterPackets.cs @@ -97,19 +97,19 @@ namespace Game.Network.Packets Name = fields.Read(1); RaceId = fields.Read(2); ClassId = (Class)fields.Read(3); - Sex = fields.Read(4); - Skin = fields.Read(5); - Face = fields.Read(6); + SexId = fields.Read(4); + SkinId = fields.Read(5); + FaceId = fields.Read(6); HairStyle = fields.Read(7); HairColor = fields.Read(8); FacialHair = fields.Read(9); CustomDisplay[0] = fields.Read(10); CustomDisplay[1] = fields.Read(11); CustomDisplay[2] = fields.Read(12); - Level = fields.Read(13); + ExperienceLevel = fields.Read(13); ZoneId = fields.Read(14); MapId = fields.Read(15); - PreLoadPosition = new Vector3(fields.Read(16), fields.Read(17), fields.Read(18)); + PreloadPos = new Vector3(fields.Read(16), fields.Read(17), fields.Read(18)); ulong guildId = fields.Read(19); if (guildId != 0) @@ -134,11 +134,11 @@ namespace Game.Network.Packets Flags |= CharacterFlags.Declined; if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize)) - CustomizationFlag = CharacterCustomizeFlags.Customize; + Flags2 = CharacterCustomizeFlags.Customize; else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeFaction)) - CustomizationFlag = CharacterCustomizeFlags.Faction; + Flags2 = CharacterCustomizeFlags.Faction; else if (atLoginFlags.HasAnyFlag(AtLoginFlags.ChangeRace)) - CustomizationFlag = CharacterCustomizeFlags.Race; + Flags2 = CharacterCustomizeFlags.Race; Flags3 = 0; Flags4 = 0; @@ -150,9 +150,9 @@ namespace Game.Network.Packets CreatureTemplate creatureInfo = Global.ObjectMgr.GetCreatureTemplate(fields.Read(22)); if (creatureInfo != null) { - Pet.CreatureDisplayId = fields.Read(23); - Pet.Level = fields.Read(24); - Pet.CreatureFamily = (uint)creatureInfo.Family; + PetCreatureDisplayId = fields.Read(23); + PetExperienceLevel = fields.Read(24); + PetCreatureFamilyId = (uint)creatureInfo.Family; } } @@ -172,9 +172,10 @@ namespace Game.Network.Packets for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot) { - VisualItems[slot].InventoryType = (byte)equipment.NextUInt32(); + VisualItems[slot].InvType = (byte)equipment.NextUInt32(); VisualItems[slot].DisplayId = equipment.NextUInt32(); VisualItems[slot].DisplayEnchantId = equipment.NextUInt32(); + VisualItems[slot].Subclass = (byte)equipment.NextUInt32(); } } @@ -185,9 +186,9 @@ namespace Game.Network.Packets data.WriteUInt8(ListPosition); data.WriteUInt8(RaceId); data.WriteUInt8((byte)ClassId); - data.WriteUInt8(Sex); - data.WriteUInt8(Skin); - data.WriteUInt8(Face); + data.WriteUInt8(SexId); + data.WriteUInt8(SkinId); + data.WriteUInt8(FaceId); data.WriteUInt8(HairStyle); data.WriteUInt8(HairColor); data.WriteUInt8(FacialHair); @@ -195,17 +196,17 @@ namespace Game.Network.Packets foreach (var display in CustomDisplay) data.WriteUInt8(display); - data.WriteUInt8(Level); + data.WriteUInt8(ExperienceLevel); data.WriteUInt32(ZoneId); data.WriteUInt32(MapId); - data.WriteVector3(PreLoadPosition); + data.WriteVector3(PreloadPos); data.WritePackedGuid(GuildGuid); data.WriteUInt32((uint)Flags); - data.WriteUInt32((uint)CustomizationFlag); + data.WriteUInt32((uint)Flags2); data.WriteUInt32(Flags3); - data.WriteUInt32(Pet.CreatureDisplayId); - data.WriteUInt32(Pet.Level); - data.WriteUInt32(Pet.CreatureFamily); + data.WriteUInt32(PetCreatureDisplayId); + data.WriteUInt32(PetExperienceLevel); + data.WriteUInt32(PetCreatureFamilyId); data.WriteUInt32(ProfessionIds[0]); data.WriteUInt32(ProfessionIds[1]); @@ -233,20 +234,20 @@ namespace Game.Network.Packets public byte ListPosition; // Order of the characters in list public byte RaceId; public Class ClassId; - public byte Sex; - public byte Skin; - public byte Face; + public byte SexId; + public byte SkinId; + public byte FaceId; public byte HairStyle; public byte HairColor; public byte FacialHair; public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize); - public byte Level; + public byte ExperienceLevel; public uint ZoneId; public uint MapId; - public Vector3 PreLoadPosition; + public Vector3 PreloadPos; public ObjectGuid GuildGuid; public CharacterFlags Flags; // Character flag @see enum CharacterFlags - public CharacterCustomizeFlags CustomizationFlag; // Character customization flags @see enum CharacterCustomizeFlags + public CharacterCustomizeFlags Flags2; // Character customization flags @see enum CharacterCustomizeFlags public uint Flags3; // Character flags 3 @todo research public uint Flags4; public bool FirstLogin; @@ -255,7 +256,9 @@ namespace Game.Network.Packets public ushort SpecID; public uint Unknown703; public uint LastLoginVersion; - public PetInfo Pet = new PetInfo(); + public uint PetCreatureDisplayId; + public uint PetExperienceLevel; + public uint PetCreatureFamilyId; public bool BoostInProgress; // @todo public uint[] ProfessionIds = new uint[2]; // @todo public VisualItemInfo[] VisualItems = new VisualItemInfo[InventorySlots.BagEnd]; @@ -266,12 +269,14 @@ namespace Game.Network.Packets { data.WriteUInt32(DisplayId); data.WriteUInt32(DisplayEnchantId); - data.WriteUInt8(InventoryType); + data.WriteUInt8(InvType); + data.WriteUInt8(Subclass); } public uint DisplayId; public uint DisplayEnchantId; - public byte InventoryType; + public byte InvType; + public byte Subclass; } public struct PetInfo diff --git a/Source/Game/Network/Packets/GuildPackets.cs b/Source/Game/Network/Packets/GuildPackets.cs index e2067e419..ed43b9495 100644 --- a/Source/Game/Network/Packets/GuildPackets.cs +++ b/Source/Game/Network/Packets/GuildPackets.cs @@ -559,7 +559,6 @@ namespace Game.Network.Packets RankID = _worldPacket.ReadInt32(); RankOrder = _worldPacket.ReadInt32(); Flags = _worldPacket.ReadUInt32(); - OldFlags = _worldPacket.ReadUInt32(); WithdrawGoldLimit = _worldPacket.ReadUInt32(); for (byte i = 0; i < GuildConst.MaxBankTabs; i++) @@ -572,6 +571,8 @@ namespace Game.Network.Packets uint rankNameLen = _worldPacket.ReadBits(7); RankName = _worldPacket.ReadString(rankNameLen); + + OldFlags = _worldPacket.ReadUInt32(); } public int RankID; @@ -1445,7 +1446,7 @@ namespace Game.Network.Packets { public void Write(WorldPacket data) { - data.WriteUInt32(RankID); + data.WriteUInt8(RankID); data.WriteUInt32(RankOrder); data.WriteUInt32(Flags); data.WriteUInt32(WithdrawGoldLimit); @@ -1460,7 +1461,7 @@ namespace Game.Network.Packets data.WriteString(RankName); } - public uint RankID; + public byte RankID; public uint RankOrder; public uint Flags; public uint WithdrawGoldLimit; diff --git a/Source/Game/Network/Packets/LFGPackets.cs b/Source/Game/Network/Packets/LFGPackets.cs index d89987228..4fa5476a3 100644 --- a/Source/Game/Network/Packets/LFGPackets.cs +++ b/Source/Game/Network/Packets/LFGPackets.cs @@ -179,6 +179,7 @@ namespace Game.Network.Packets _worldPacket.WriteInt32(Slots.Count); _worldPacket.WriteUInt32(RequestedRoles); _worldPacket.WriteInt32(SuspendedPlayers.Count); + _worldPacket.WriteUInt32(QueueMapID); foreach (var slot in Slots) _worldPacket.WriteUInt32(slot); @@ -201,6 +202,7 @@ namespace Game.Network.Packets public List Slots = new List(); public uint RequestedRoles; public List SuspendedPlayers = new List(); + public uint QueueMapID; public bool NotifyUI; public bool IsParty; public bool Joined; diff --git a/Source/Game/Network/Packets/QueryPackets.cs b/Source/Game/Network/Packets/QueryPackets.cs index d67113ec1..131e9436d 100644 --- a/Source/Game/Network/Packets/QueryPackets.cs +++ b/Source/Game/Network/Packets/QueryPackets.cs @@ -731,7 +731,6 @@ namespace Game.Network.Packets public struct DBQueryRecord { - public ObjectGuid GUID; public uint RecordID; } diff --git a/Source/Game/Network/Packets/QuestPackets.cs b/Source/Game/Network/Packets/QuestPackets.cs index 8678d173f..0a21e2a12 100644 --- a/Source/Game/Network/Packets/QuestPackets.cs +++ b/Source/Game/Network/Packets/QuestPackets.cs @@ -202,6 +202,7 @@ namespace Game.Network.Packets _worldPacket.WriteInt32(Info.TreasurePickerID); _worldPacket.WriteInt32(Info.Expansion); _worldPacket.WriteInt32(Info.ManagedWorldStateID); + _worldPacket.WriteInt32(Info.QuestSessionBonus); _worldPacket.WriteBits(Info.LogTitle.GetByteCount(), 9); _worldPacket.WriteBits(Info.LogDescription.GetByteCount(), 12); @@ -428,6 +429,7 @@ namespace Game.Network.Packets _worldPacket.WriteInt32(DescEmotes.Count); _worldPacket.WriteInt32(Objectives.Count); _worldPacket.WriteInt32(QuestStartItemID); + _worldPacket.WriteInt32(QuestSessionBonus); foreach (uint spell in LearnSpells) _worldPacket.WriteUInt32(spell); @@ -454,6 +456,7 @@ namespace Game.Network.Packets _worldPacket.WriteBits(PortraitTurnInText.GetByteCount(), 10); _worldPacket.WriteBits(PortraitTurnInName.GetByteCount(), 8); _worldPacket.WriteBit(AutoLaunched); + _worldPacket.WriteBit(false); // unused in client _worldPacket.WriteBit(StartCheat); _worldPacket.WriteBit(DisplayPopup); _worldPacket.FlushBits(); @@ -483,6 +486,7 @@ namespace Game.Network.Packets public uint PortraitGiver; public uint PortraitGiverMount; public int QuestStartItemID; + public int QuestSessionBonus; public string PortraitGiverText = ""; public string PortraitGiverName = ""; public string PortraitTurnInText = ""; @@ -969,6 +973,7 @@ namespace Game.Network.Packets public int TreasurePickerID; public int Expansion; public int ManagedWorldStateID; + public int QuestSessionBonus; public List Objectives = new List(); public uint[] RewardItems = new uint[SharedConst.QuestRewardItemCount]; public uint[] RewardAmount = new uint[SharedConst.QuestRewardItemCount]; diff --git a/Source/Game/Network/Packets/ReferAFriendPackets.cs b/Source/Game/Network/Packets/ReferAFriendPackets.cs index 1dc19bddd..709b27747 100644 --- a/Source/Game/Network/Packets/ReferAFriendPackets.cs +++ b/Source/Game/Network/Packets/ReferAFriendPackets.cs @@ -45,7 +45,7 @@ namespace Game.Network.Packets public ObjectGuid Target; } - public class ProposeLevelGrant : ServerPacket + /*public class ProposeLevelGrant : ServerPacket { public ProposeLevelGrant() : base(ServerOpcodes.ProposeLevelGrant) { } @@ -55,7 +55,7 @@ namespace Game.Network.Packets } public ObjectGuid Sender; - } + }*/ public class ReferAFriendFailure : ServerPacket { diff --git a/Source/Game/Network/Packets/SystemPackets.cs b/Source/Game/Network/Packets/SystemPackets.cs index 57e9449f7..c13728b14 100644 --- a/Source/Game/Network/Packets/SystemPackets.cs +++ b/Source/Game/Network/Packets/SystemPackets.cs @@ -41,11 +41,15 @@ namespace Game.Network.Packets _worldPacket.WriteUInt32(CfgRealmID); _worldPacket.WriteInt32(CfgRealmRecID); + _worldPacket.WriteUInt32(RAFSystem.MaxRecruits); + _worldPacket.WriteUInt32(RAFSystem.MaxRecruitMonths); + _worldPacket.WriteUInt32(RAFSystem.MaxRecruitmentUses); + _worldPacket.WriteUInt32(RAFSystem.DaysInCycle); + _worldPacket.WriteUInt32(TwitterPostThrottleLimit); _worldPacket.WriteUInt32(TwitterPostThrottleCooldown); _worldPacket.WriteUInt32(TokenPollTimeSeconds); - _worldPacket.WriteUInt32(TokenRedeemIndex); _worldPacket.WriteInt64(TokenBalanceAmount); _worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay); @@ -61,7 +65,8 @@ namespace Game.Network.Packets _worldPacket.WriteBit(ItemRestorationButtonEnabled); _worldPacket.WriteBit(BrowserEnabled); _worldPacket.WriteBit(SessionAlert.HasValue); - _worldPacket.WriteBit(RecruitAFriendSendingEnabled); + _worldPacket.WriteBit(RAFSystem.Enabled); + _worldPacket.WriteBit(RAFSystem.RecruitingEnabled); _worldPacket.WriteBit(CharUndeleteEnabled); _worldPacket.WriteBit(RestrictedAccount); _worldPacket.WriteBit(CommerceSystemEnabled); @@ -81,6 +86,9 @@ namespace Game.Network.Packets _worldPacket.WriteBit(ClubsPresenceUpdateEnabled); _worldPacket.WriteBit(VoiceChatDisabledByParentalControl); _worldPacket.WriteBit(VoiceChatMutedByParentalControl); + _worldPacket.WriteBit(QuestSessionEnabled); + _worldPacket.WriteBit(Unused825); + _worldPacket.WriteBit(ClubFinderEnabled); _worldPacket.FlushBits(); { @@ -144,7 +152,6 @@ namespace Game.Network.Packets public bool VoiceEnabled; public bool BrowserEnabled; public bool BpayStoreAvailable; - public bool RecruitAFriendSendingEnabled; public bool BpayStoreEnabled; public Optional SessionAlert; public uint ScrollOfResurrectionMaxRequestsPerDay; @@ -157,7 +164,6 @@ namespace Game.Network.Packets public uint TwitterPostThrottleLimit; public uint TwitterPostThrottleCooldown; public uint TokenPollTimeSeconds; - public uint TokenRedeemIndex; public long TokenBalanceAmount; public uint BpayStoreProductDeliveryDelay; public uint ClubsPresenceUpdateTimer; @@ -182,10 +188,14 @@ namespace Game.Network.Packets public bool ClubsPresenceUpdateEnabled; public bool VoiceChatDisabledByParentalControl; public bool VoiceChatMutedByParentalControl; + public bool QuestSessionEnabled; + public bool Unused825; + public bool ClubFinderEnabled; public Optional> RaceClassExpansionLevels; public SocialQueueConfig QuickJoinConfig; public VoiceChatProxySettings VoiceChatManagerSettings; + public RafSystemFeatureInfo RAFSystem; public struct SavedThrottleObjectState { @@ -245,6 +255,16 @@ namespace Game.Network.Packets public ObjectGuid BnetAccountGuid; public ObjectGuid GuildGuid; } + + public struct RafSystemFeatureInfo + { + public bool Enabled; + public bool RecruitingEnabled; + public uint MaxRecruits; + public uint MaxRecruitMonths; + public uint MaxRecruitmentUses; + public uint DaysInCycle; + } } public class FeatureSystemStatusGlueScreen : ServerPacket @@ -263,7 +283,6 @@ namespace Game.Network.Packets _worldPacket.WriteBit(IsExpansionPreorderInStore); _worldPacket.WriteBit(KioskModeEnabled); _worldPacket.WriteBit(CompetitiveModeEnabled); - _worldPacket.WriteBit(false); // not accessed in handler _worldPacket.WriteBit(TrialBoostEnabled); _worldPacket.WriteBit(TokenBalanceEnabled); _worldPacket.WriteBit(LiveRegionCharacterListEnabled); @@ -271,8 +290,7 @@ namespace Game.Network.Packets _worldPacket.WriteBit(LiveRegionAccountCopyEnabled); _worldPacket.FlushBits(); - _worldPacket.WriteInt32(TokenPollTimeSeconds); - _worldPacket.WriteInt32(TokenRedeemIndex); + _worldPacket.WriteUInt32(TokenPollTimeSeconds); _worldPacket.WriteInt64(TokenBalanceAmount); _worldPacket.WriteInt32(MaxCharactersPerRealm); _worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay); @@ -297,8 +315,7 @@ namespace Game.Network.Packets public bool LiveRegionCharacterListEnabled; // NYI public bool LiveRegionCharacterCopyEnabled; // NYI public bool LiveRegionAccountCopyEnabled; // NYI - public int TokenPollTimeSeconds; // NYI - public int TokenRedeemIndex; // NYI + public uint TokenPollTimeSeconds; // NYI public long TokenBalanceAmount; // NYI public int MaxCharactersPerRealm; public uint BpayStoreProductDeliveryDelay; // NYI diff --git a/Source/Game/Network/Packets/TicketPackets.cs b/Source/Game/Network/Packets/TicketPackets.cs index 194fc6732..413755884 100644 --- a/Source/Game/Network/Packets/TicketPackets.cs +++ b/Source/Game/Network/Packets/TicketPackets.cs @@ -149,6 +149,7 @@ namespace Game.Network.Packets bool hasLFGListSearchResult = _worldPacket.HasBit(); bool hasLFGListApplicant = _worldPacket.HasBit(); bool hasClubMessage = _worldPacket.HasBit(); + bool hasClubFinderResult = _worldPacket.HasBit(); _worldPacket.ResetBitPos(); @@ -159,14 +160,16 @@ namespace Game.Network.Packets _worldPacket.ResetBitPos(); } + HorusChatLog.Read(_worldPacket); + + Note = _worldPacket.ReadString(noteLength); + if (hasMailInfo) { MailInfo.HasValue = true; MailInfo.Value.Read(_worldPacket); } - Note = _worldPacket.ReadString(noteLength); - if (hasCalendarInfo) { CalenderInfo.HasValue = true; @@ -196,6 +199,12 @@ namespace Game.Network.Packets LFGListApplicant.HasValue = true; LFGListApplicant.Value.Read(_worldPacket); } + + if (hasClubFinderResult) + { + ClubFinderResult.HasValue = true; + ClubFinderResult.Value.Read(_worldPacket); + } } public SupportTicketHeader Header; @@ -203,6 +212,7 @@ namespace Game.Network.Packets public ObjectGuid TargetCharacterGUID; public byte ComplaintType; public string Note; + public SupportTicketHorusChatLog HorusChatLog; public Optional MailInfo; public Optional CalenderInfo; public Optional PetInfo; @@ -210,6 +220,7 @@ namespace Game.Network.Packets public Optional LFGListSearchResult; public Optional LFGListApplicant; public Optional CommunityMessage; + public Optional ClubFinderResult; public struct SupportTicketChatLine { @@ -254,6 +265,82 @@ namespace Game.Network.Packets public Optional ReportLineIndex; } + public struct SupportTicketHorusChatLine + { + public void Read(WorldPacket data) + { + Timestamp = data.ReadInt32(); + AuthorGUID = data.ReadPackedGuid(); + + bool hasClubID = data.HasBit(); + bool hasChannelGUID = data.HasBit(); + bool hasRealmAddress = data.HasBit(); + bool hasSlashCmd = data.HasBit(); + uint textLength = data.ReadBits(12); + + if (hasClubID) + { + ClubID.HasValue = true; + ClubID.Value = data.ReadUInt64(); + } + + if (hasChannelGUID) + { + ChannelGUID.HasValue = true; + ChannelGUID.Value = data.ReadPackedGuid(); + } + + if (hasRealmAddress) + { + RealmAddress.HasValue = true; + RealmAddress.Value.VirtualRealmAddress = data.ReadUInt32(); + RealmAddress.Value.field_4 = data.ReadUInt16(); + RealmAddress.Value.field_6 = data.ReadUInt8(); + } + + if (hasSlashCmd) + { + SlashCmd.HasValue = true; + SlashCmd.Value = data.ReadInt32(); + } + + Text = data.ReadString(textLength); + } + + public struct SenderRealm + { + public uint VirtualRealmAddress; + public ushort field_4; + public byte field_6; + } + + public int Timestamp; + public ObjectGuid AuthorGUID; + public Optional ClubID; + public Optional ChannelGUID; + public Optional RealmAddress; + public Optional SlashCmd; + public string Text; + } + + public class SupportTicketHorusChatLog + { + public List Lines = new List(); + + public void Read(WorldPacket data) + { + uint linesCount = data.ReadUInt32(); + data.ResetBitPos(); + + for (uint i = 0; i < linesCount; i++) + { + var chatLine = new SupportTicketHorusChatLine(); + chatLine.Read(data); + Lines.Add(chatLine); + } + } + } + public struct SupportTicketMailInfo { public void Read(WorldPacket data) @@ -266,9 +353,9 @@ namespace Game.Network.Packets MailSubject = data.ReadString(subjectLength); } - int MailID; - string MailSubject; - string MailBody; + public int MailID; + public string MailSubject; + public string MailBody; } public struct SupportTicketCalendarEventInfo @@ -281,9 +368,9 @@ namespace Game.Network.Packets EventTitle = data.ReadString(data.ReadBits(8)); } - ulong EventID; - ulong InviteID; - string EventTitle; + public ulong EventID; + public ulong InviteID; + public string EventTitle; } public struct SupportTicketPetInfo @@ -295,8 +382,8 @@ namespace Game.Network.Packets PetName = data.ReadString(data.ReadBits(8)); } - ObjectGuid PetID; - string PetName; + public ObjectGuid PetID; + public string PetName; } public struct SupportTicketGuildInfo @@ -309,8 +396,8 @@ namespace Game.Network.Packets GuildName = data.ReadString(nameLength); } - ObjectGuid GuildID; - string GuildName; + public ObjectGuid GuildID; + public string GuildName; } public struct SupportTicketLFGListSearchResult @@ -336,16 +423,16 @@ namespace Game.Network.Packets VoiceChat = data.ReadString(voiceChatLength); } - RideTicket RideTicket; - uint GroupFinderActivityID; - ObjectGuid LastTitleAuthorGuid; - ObjectGuid LastDescriptionAuthorGuid; - ObjectGuid LastVoiceChatAuthorGuid; - ObjectGuid ListingCreatorGuid; - ObjectGuid Unknown735; - string Title; - string Description; - string VoiceChat; + public RideTicket RideTicket; + public uint GroupFinderActivityID; + public ObjectGuid LastTitleAuthorGuid; + public ObjectGuid LastDescriptionAuthorGuid; + public ObjectGuid LastVoiceChatAuthorGuid; + public ObjectGuid ListingCreatorGuid; + public ObjectGuid Unknown735; + public string Title; + public string Description; + public string VoiceChat; } public struct SupportTicketLFGListApplicant @@ -358,14 +445,30 @@ namespace Game.Network.Packets Comment = data.ReadString(data.ReadBits(9)); } - RideTicket RideTicket; - string Comment; + public RideTicket RideTicket; + public string Comment; } public struct SupportTicketCommunityMessage { public bool IsPlayerUsingVoice; } + + public struct SupportTicketClubFinderResult + { + public ulong ClubFinderPostingID; + public ulong ClubID; + public ObjectGuid ClubFinderGUID; + public string ClubName; + + public void Read(WorldPacket data) + { + ClubFinderPostingID = data.ReadUInt64(); + ClubID = data.ReadUInt64(); + ClubFinderGUID = data.ReadPackedGuid(); + ClubName = data.ReadString(data.ReadBits(12)); + } + } } class Complaint : ClientPacket diff --git a/Source/Game/Network/Packets/TransmogrificationPackets.cs b/Source/Game/Network/Packets/TransmogrificationPackets.cs index c4ed2e8fb..fdd5d6b4b 100644 --- a/Source/Game/Network/Packets/TransmogrificationPackets.cs +++ b/Source/Game/Network/Packets/TransmogrificationPackets.cs @@ -54,14 +54,19 @@ namespace Game.Network.Packets _worldPacket.WriteBit(IsFullUpdate); _worldPacket.WriteBit(IsSetFavorite); _worldPacket.WriteInt32(FavoriteAppearances.Count); + _worldPacket.WriteInt32(NewAppearances.Count); foreach (uint itemModifiedAppearanceId in FavoriteAppearances) _worldPacket.WriteUInt32(itemModifiedAppearanceId); + + foreach (var newAppearance in NewAppearances) + _worldPacket.WriteUInt32(newAppearance); } public bool IsFullUpdate; public bool IsSetFavorite; public List FavoriteAppearances = new List(); + public List NewAppearances = new List(); } class OpenTransmogrifier : ServerPacket diff --git a/Source/Game/Network/WorldSocket.cs b/Source/Game/Network/WorldSocket.cs index 99e4256ad..c443ed4cf 100644 --- a/Source/Game/Network/WorldSocket.cs +++ b/Source/Game/Network/WorldSocket.cs @@ -37,7 +37,7 @@ namespace Game.Network static byte[] ContinuedSessionSeed = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F }; static byte[] EncryptionKeySeed = { 0xE9, 0x75, 0x3C, 0x50, 0x90, 0x93, 0x61, 0xDA, 0x3B, 0x07, 0xEE, 0xFA, 0xFF, 0x9D, 0x41, 0xB8 }; - static byte[] ClientTypeSeed_Wn64 = { 0x79, 0x73, 0xA8, 0xD5, 0x4B, 0xDB, 0x8B, 0x79, 0x8D, 0x92, 0x97, 0xB0, 0x96, 0xE7, 0x71, 0xEF }; + static byte[] ClientTypeSeed_Wn64 = { 0x21, 0xF5, 0xA6, 0xFC, 0x7A, 0xD8, 0x9F, 0xBF, 0x41, 0x1F, 0xDA, 0x8B, 0x87, 0x38, 0x18, 0x6A }; static byte[] ClientTypeSeed_Mc64 = { 0x34, 0x1C, 0xFE, 0xFE, 0x3D, 0x72, 0xAC, 0xA9, 0xA4, 0x40, 0x7D, 0xC5, 0x35, 0xDE, 0xD6, 0x6A }; public WorldSocket(Socket socket) : base(socket) diff --git a/Source/Game/Quest/Quest.cs b/Source/Game/Quest/Quest.cs index f3ef10b77..db3b07915 100644 --- a/Source/Game/Quest/Quest.cs +++ b/Source/Game/Quest/Quest.cs @@ -125,16 +125,17 @@ namespace Game TreasurePickerID = fields.Read(109); Expansion = fields.Read(110); ManagedWorldStateID = fields.Read(111); + QuestSessionBonus = fields.Read(112); - LogTitle = fields.Read(112); - LogDescription = fields.Read(113); - QuestDescription = fields.Read(114); - AreaDescription = fields.Read(115); - PortraitGiverText = fields.Read(116); - PortraitGiverName = fields.Read(117); - PortraitTurnInText = fields.Read(118); - PortraitTurnInName = fields.Read(119); - QuestCompletionLog = fields.Read(120); + LogTitle = fields.Read(113); + LogDescription = fields.Read(114); + QuestDescription = fields.Read(115); + AreaDescription = fields.Read(116); + PortraitGiverText = fields.Read(117); + PortraitGiverName = fields.Read(118); + PortraitTurnInText = fields.Read(119); + PortraitTurnInName = fields.Read(120); + QuestCompletionLog = fields.Read(121); } public void LoadQuestDetails(SQLFields fields) @@ -498,8 +499,10 @@ namespace Game QueryData.Info.POIPriority = POIPriority; QueryData.Info.AllowableRaces = AllowableRaces; - QueryData.Info.TreasurePickerID = (int)TreasurePickerID; + QueryData.Info.TreasurePickerID = TreasurePickerID; QueryData.Info.Expansion = Expansion; + QueryData.Info.ManagedWorldStateID = ManagedWorldStateID; + QueryData.Info.QuestSessionBonus = 0; //GetQuestSessionBonus(); // this is only sent while quest session is active foreach (QuestObjective questObjective in Objectives) QueryData.Info.Objectives.Add(questObjective); @@ -606,6 +609,7 @@ namespace Game public int TreasurePickerID; public int Expansion; public int ManagedWorldStateID; + public int QuestSessionBonus; public List Objectives = new List(); public string LogTitle = ""; public string LogDescription = ""; diff --git a/sql/updates/characters/master/2019_10_26_00_characters.sql b/sql/updates/characters/master/2019_10_26_00_characters.sql new file mode 100644 index 000000000..37de4489e --- /dev/null +++ b/sql/updates/characters/master/2019_10_26_00_characters.sql @@ -0,0 +1,25 @@ +UPDATE `characters` SET `equipmentCache`=CONCAT( +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -70), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -67), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -64), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -61), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -58), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -55), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -52), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -49), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -46), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -43), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -40), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -37), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -34), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -31), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -28), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -25), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -22), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -19), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -16), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -13), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -10), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -7), ' ', 2), ' 0 0 '), +CONCAT(SUBSTRING_INDEX(SUBSTRING_INDEX(`equipmentCache`, ' ', -4), ' ', 2), ' 0 0 ') +) WHERE LENGTH(`equipmentCache`) > 0; diff --git a/sql/updates/world/master/2019_10_26_00_world.sql b/sql/updates/world/master/2019_10_26_00_world.sql new file mode 100644 index 000000000..8694c6122 --- /dev/null +++ b/sql/updates/world/master/2019_10_26_00_world.sql @@ -0,0 +1 @@ +ALTER TABLE `quest_template` ADD `QuestSessionBonus` int(11) NOT NULL DEFAULT '0' AFTER `ManagedWorldStateID`;