diff --git a/Source/Framework/Constants/GossipConst.cs b/Source/Framework/Constants/GossipConst.cs
index 2c6a342fa..b1fb6f8eb 100644
--- a/Source/Framework/Constants/GossipConst.cs
+++ b/Source/Framework/Constants/GossipConst.cs
@@ -123,4 +123,18 @@ namespace Framework.Constants
public const uint GossipSenderSecMailbox = 9;
public const uint GossipSenderSecStablemaster = 10;
}
+
+ public enum GossipOptionStatus
+ {
+ Available = 0,
+ Unavailable = 1,
+ Locked = 2,
+ AlreadyComplete = 3
+ }
+
+ public enum GossipOptionRewardType
+ {
+ Item = 0,
+ Currency = 1
+ }
}
diff --git a/Source/Framework/Constants/LootConst.cs b/Source/Framework/Constants/LootConst.cs
index 3f7e23121..4f2be50f0 100644
--- a/Source/Framework/Constants/LootConst.cs
+++ b/Source/Framework/Constants/LootConst.cs
@@ -85,6 +85,12 @@ namespace Framework.Constants
FishingJunk = 22 // unsupported by client, sending LOOT_FISHING instead
}
+ public enum LootItemType
+ {
+ Item = 0,
+ Currency = 1
+ }
+
public enum LootError
{
DidntKill = 0, // You don't have permission to loot that corpse.
diff --git a/Source/Framework/Constants/Movement/SplineConst.cs b/Source/Framework/Constants/Movement/SplineConst.cs
index 6dbcbe63c..dff8e2a66 100644
--- a/Source/Framework/Constants/Movement/SplineConst.cs
+++ b/Source/Framework/Constants/Movement/SplineConst.cs
@@ -32,12 +32,15 @@ namespace Framework.Constants
{
None = 0x00,
// x00-x07 used as animation Ids storage in pair with Animation flag
- Unknown0 = 0x00000008, // NOT VERIFIED - does someting related to falling/fixed orientation
+ Unknown_0x1 = 0x00000001, // NOT VERIFIED
+ Unknown_0x2 = 0x00000002, // NOT VERIFIED
+ Unknown_0x4 = 0x00000004, // NOT VERIFIED
+ Unknown_0x8 = 0x00000008, // NOT VERIFIED - does someting related to falling/fixed orientation
FallingSlow = 0x00000010,
Done = 0x00000020,
Falling = 0x00000040, // Affects elevation computation, can't be combined with Parabolic flag
NoSpline = 0x00000080,
- Unknown1 = 0x00000100, // NOT VERIFIED
+ Unknown_0x100 = 0x00000100, // NOT VERIFIED
Flying = 0x00000200, // Smooth movement(Catmullrom interpolation mode), flying animation
OrientationFixed = 0x00000400, // Model orientation fixed
Catmullrom = 0x00000800, // Used Catmullrom interpolation mode
@@ -46,27 +49,28 @@ namespace Framework.Constants
Frozen = 0x00004000, // Will never arrive
TransportEnter = 0x00008000,
TransportExit = 0x00010000,
- Unknown2 = 0x00020000, // NOT VERIFIED
- Unknown3 = 0x00040000, // NOT VERIFIED
+ Unknown_0x20000 = 0x00020000, // NOT VERIFIED
+ Unknown_0x40000 = 0x00040000, // NOT VERIFIED
Backward = 0x00080000,
SmoothGroundPath = 0x00100000,
CanSwim = 0x00200000,
UncompressedPath = 0x00400000,
- Unknown4 = 0x00800000, // NOT VERIFIED
- Unknown5 = 0x01000000, // NOT VERIFIED
+ Unknown_0x800000 = 0x00800000, // NOT VERIFIED
+ Unknown_0x1000000 = 0x01000000, // NOT VERIFIED
Animation = 0x02000000, // Plays animation after some time passed
Parabolic = 0x04000000, // Affects elevation computation, can't be combined with Falling flag
FadeObject = 0x08000000,
Steering = 0x10000000,
- Unknown8 = 0x20000000, // NOT VERIFIED
- Unknown9 = 0x40000000, // NOT VERIFIED
- Unknown10 = 0x80000000, // NOT VERIFIED
+ Unknown_0x20000000 = 0x20000000, // NOT VERIFIED
+ Unknown_0x40000000 = 0x40000000, // NOT VERIFIED
+ Unknown_0x80000000 = 0x80000000, // NOT VERIFIED
// animation ids stored here, see AnimType enum, used with Animation flag
MaskAnimations = 0x7,
// flags that shouldn't be appended into SMSG_MONSTER_MOVE\SMSG_MONSTER_MOVE_TRANSPORT packet, should be more probably
- MaskNoMonsterMove = MaskAnimations | Done,
+ MaskNoMonsterMove = Done,
// Unused, not suported flags
- MaskUnused = NoSpline | EnterCycle | Frozen | Unknown0 | Unknown1 | Unknown2 | Unknown3 | Unknown4 | FadeObject | Steering | Unknown8 | Unknown9 | Unknown10
+ MaskUnused = NoSpline | EnterCycle | Frozen | Unknown_0x8 | Unknown_0x100 | Unknown_0x20000 | Unknown_0x40000
+ | Unknown_0x800000 | Unknown_0x1000000 | FadeObject | Steering | Unknown_0x20000000 | Unknown_0x40000000 | Unknown_0x80000000
}
}
diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs
index b7fa5b988..32f55e3b1 100644
--- a/Source/Framework/Constants/Network/Opcodes.cs
+++ b/Source/Framework/Constants/Network/Opcodes.cs
@@ -19,45 +19,47 @@ namespace Framework.Constants
{
public enum ClientOpcodes : uint
{
+ AbandonNpeResponse = 0x33ef,
AcceptGuildInvite = 0x35fc,
AcceptTrade = 0x315a,
AcceptWargameInvite = 0x35e0,
- ActivateTaxi = 0x34ab,
+ ActivateSoulbind = 0x33df,
+ ActivateTaxi = 0x34b1,
AddonList = 0x35d8,
AddBattlenetFriend = 0x365a,
- AddFriend = 0x36ce,
- AddIgnore = 0x36d2,
- AddToy = 0x329c,
- AdventureJournalOpenQuest = 0x3203,
- AdventureJournalStartQuest = 0x3346,
- AdventureMapPoiQuery = 0x324a,
- AlterAppearance = 0x34fd,
- AreaSpiritHealerQuery = 0x34b0,
- AreaSpiritHealerQueue = 0x34b1,
- AreaTrigger = 0x31d7,
- ArtifactAddPower = 0x31a9,
- ArtifactSetAppearance = 0x31ab,
- AssignEquipmentSetSpec = 0x320b,
- AttackStop = 0x3259,
- AttackSwing = 0x3258,
- AuctionableTokenSell = 0x36e6,
- AuctionableTokenSellAtMarketPrice = 0x36e7,
- AuctionBrowseQuery = 0x34d0,
- AuctionCancelCommoditiesPurchase = 0x34d8,
- AuctionConfirmCommoditiesPurchase = 0x34d7,
- AuctionGetCommodityQuote = 0x34d6,
- AuctionHelloRequest = 0x34cb,
- AuctionListBiddedItems = 0x34d4,
- AuctionListBucketsByBucketKeys = 0x34d5,
- AuctionListItemsByBucketKey = 0x34d1,
- AuctionListItemsByItemId = 0x34d2,
- AuctionListOwnedItems = 0x34d3,
- AuctionPlaceBid = 0x34cf,
- AuctionRemoveItem = 0x34cd,
- AuctionReplicateItems = 0x34ce,
- AuctionSellCommodity = 0x34d9,
- AuctionSellItem = 0x34cc,
- AuctionSetFavoriteItem = 0x3732,
+ AddFriend = 0x36d0,
+ AddIgnore = 0x36d4,
+ AddToy = 0x32a6,
+ AdventureJournalOpenQuest = 0x3206,
+ AdventureJournalStartQuest = 0x335b,
+ AdventureJournalUpdateSuggestions = 0x33e2,
+ AlterAppearance = 0x3503,
+ AreaSpiritHealerQuery = 0x34b6,
+ AreaSpiritHealerQueue = 0x34b7,
+ AreaTrigger = 0x31d9,
+ ArtifactAddPower = 0x31ab,
+ ArtifactSetAppearance = 0x31ad,
+ AssignEquipmentSetSpec = 0x320f,
+ AttackStop = 0x325e,
+ AttackSwing = 0x325d,
+ AuctionableTokenSell = 0x36e8,
+ AuctionableTokenSellAtMarketPrice = 0x36e9,
+ AuctionBrowseQuery = 0x34d6,
+ AuctionCancelCommoditiesPurchase = 0x34de,
+ AuctionConfirmCommoditiesPurchase = 0x34dd,
+ AuctionGetCommodityQuote = 0x34dc,
+ AuctionHelloRequest = 0x34d1,
+ AuctionListBiddedItems = 0x34da,
+ AuctionListBucketsByBucketKeys = 0x34db,
+ AuctionListItemsByBucketKey = 0x34d7,
+ AuctionListItemsByItemId = 0x34d8,
+ AuctionListOwnedItems = 0x34d9,
+ AuctionPlaceBid = 0x34d5,
+ AuctionRemoveItem = 0x34d3,
+ AuctionReplicateItems = 0x34d4,
+ AuctionSellCommodity = 0x34df,
+ AuctionSellItem = 0x34d2,
+ AuctionSetFavoriteItem = 0x3735,
AuthContinuedSession = 0x3766,
AuthSession = 0x3765,
AutobankItem = 0x3996,
@@ -67,97 +69,96 @@ namespace Framework.Constants
AutoEquipItem = 0x399a,
AutoEquipItemSlot = 0x399f,
AutoStoreBagItem = 0x399b,
- AzeriteEmpoweredItemSelectPower = 0x3366,
- AzeriteEmpoweredItemViewed = 0x3350,
- AzeriteEssenceActivateEssence = 0x3368,
- AzeriteEssenceUnlockMilestone = 0x3367,
- BankerActivate = 0x34b3,
+ AzeriteEmpoweredItemSelectPower = 0x3384,
+ AzeriteEmpoweredItemViewed = 0x3366,
+ AzeriteEssenceActivateEssence = 0x3386,
+ AzeriteEssenceUnlockMilestone = 0x3385,
+ BankerActivate = 0x34b9,
BattlefieldLeave = 0x3173,
BattlefieldList = 0x317e,
- BattlefieldPort = 0x352f,
- BattlemasterHello = 0x32b4,
- BattlemasterJoin = 0x3528,
- BattlemasterJoinArena = 0x3529,
- BattlemasterJoinBrawl = 0x352d,
- BattlemasterJoinSkirmish = 0x352a,
- BattlenetChallengeResponse = 0x36d1,
- BattlenetRequest = 0x36f5,
- BattlePayAckFailedResponse = 0x36cb,
- BattlePayCancelOpenCheckout = 0x3712,
- BattlePayConfirmPurchaseResponse = 0x36ca,
- BattlePayDistributionAssignToTarget = 0x36c1,
- BattlePayGetProductList = 0x36b9,
- BattlePayGetPurchaseList = 0x36ba,
- BattlePayOpenCheckout = 0x370c,
- BattlePayQueryClassTrialBoostResult = 0x36c4,
- BattlePayRequestCharacterBoostUnrevoke = 0x36c2,
- BattlePayRequestPriceInfo = 0x3708,
- BattlePayStartPurchase = 0x36c9,
- BattlePayStartVasPurchase = 0x36f2,
- BattlePayTrialBoostCharacter = 0x36c3,
+ BattlefieldPort = 0x3537,
+ BattlemasterHello = 0x32c0,
+ BattlemasterJoin = 0x3530,
+ BattlemasterJoinArena = 0x3531,
+ BattlemasterJoinBrawl = 0x3535,
+ BattlemasterJoinSkirmish = 0x3532,
+ BattlenetChallengeResponse = 0x36d3,
+ BattlenetRequest = 0x36f7,
+ BattlePayAckFailedResponse = 0x36cd,
+ BattlePayCancelOpenCheckout = 0x3714,
+ BattlePayConfirmPurchaseResponse = 0x36cc,
+ BattlePayDistributionAssignToTarget = 0x36c3,
+ BattlePayGetProductList = 0x36bb,
+ BattlePayGetPurchaseList = 0x36bc,
+ BattlePayOpenCheckout = 0x370e,
+ BattlePayRequestPriceInfo = 0x370a,
+ BattlePayStartPurchase = 0x36cb,
+ BattlePayStartVasPurchase = 0x36f4,
BattlePetClearFanfare = 0x312c,
- BattlePetDeletePet = 0x3623,
- BattlePetDeletePetCheat = 0x3624,
- BattlePetModifyName = 0x3626,
- BattlePetRequestJournal = 0x3622,
- BattlePetRequestJournalLock = 0x3621,
- BattlePetSetBattleSlot = 0x362b,
- BattlePetSetFlags = 0x362f,
- BattlePetSummon = 0x3627,
- BattlePetUpdateDisplayNotify = 0x31e1,
- BattlePetUpdateNotify = 0x31e0,
+ BattlePetDeletePet = 0x3624,
+ BattlePetDeletePetCheat = 0x3625,
+ BattlePetModifyName = 0x3627,
+ BattlePetRequestJournal = 0x3623,
+ BattlePetRequestJournalLock = 0x3622,
+ BattlePetSetBattleSlot = 0x362c,
+ BattlePetSetFlags = 0x3630,
+ BattlePetSummon = 0x3628,
+ BattlePetUpdateDisplayNotify = 0x31e3,
+ BattlePetUpdateNotify = 0x31e2,
BeginTrade = 0x3157,
- BinderActivate = 0x34b2,
- BlackMarketBidOnItem = 0x3537,
- BlackMarketOpen = 0x3535,
- BlackMarketRequestItems = 0x3536,
- BonusRoll = 0x3369,
+ BinderActivate = 0x34b8,
+ BlackMarketBidOnItem = 0x353f,
+ BlackMarketOpen = 0x353d,
+ BlackMarketRequestItems = 0x353e,
+ BonusRoll = 0x3387,
BugReport = 0x3686,
BusyTrade = 0x3158,
- BuyBackItem = 0x34a4,
- BuyBankSlot = 0x34b4,
- BuyItem = 0x34a3,
- BuyReagentBank = 0x34b5,
- CageBattlePet = 0x31f2,
+ BuyBackItem = 0x34aa,
+ BuyBankSlot = 0x34ba,
+ BuyItem = 0x34a9,
+ BuyReagentBank = 0x34bb,
+ CageBattlePet = 0x31f5,
CalendarAddEvent = 0x367d,
- CalendarCommunityFilter = 0x3671,
+ CalendarCommunityInvite = 0x3671,
CalendarComplain = 0x3679,
CalendarCopyEvent = 0x3678,
- CalendarEventInvite = 0x3672,
- CalendarEventModeratorStatus = 0x3676,
- CalendarEventRsvp = 0x3674,
CalendarEventSignUp = 0x367b,
- CalendarEventStatus = 0x3675,
CalendarGet = 0x366f,
CalendarGetEvent = 0x3670,
CalendarGetNumPending = 0x367a,
+ CalendarInvite = 0x3672,
+ CalendarModeratorStatus = 0x3676,
CalendarRemoveEvent = 0x3677,
CalendarRemoveInvite = 0x3673,
+ CalendarRsvp = 0x3674,
+ CalendarStatus = 0x3675,
CalendarUpdateEvent = 0x367e,
- CancelAura = 0x31ad,
- CancelAutoRepeatSpell = 0x34ef,
- CancelCast = 0x32a2,
- CancelChannelling = 0x326e,
- CancelGrowthAura = 0x3273,
- CancelMasterLootRoll = 0x3213,
- CancelModSpeedNoControlAuras = 0x31ac,
- CancelMountAura = 0x3284,
+ CancelAura = 0x31af,
+ CancelAutoRepeatSpell = 0x34f5,
+ CancelCast = 0x32ac,
+ CancelChannelling = 0x3276,
+ CancelGrowthAura = 0x327b,
+ CancelMasterLootRoll = 0x3217,
+ CancelModSpeedNoControlAuras = 0x31ae,
+ CancelMountAura = 0x328e,
CancelQueuedSpell = 0x317f,
- CancelTempEnchantment = 0x34fa,
+ CancelTempEnchantment = 0x3500,
CancelTrade = 0x315c,
CanDuel = 0x3662,
- CanRedeemTokenForBalance = 0x3707,
- CastSpell = 0x329f,
+ CanRedeemTokenForBalance = 0x3709,
+ CastSpell = 0x32a9,
ChallengeModeRequestLeaders = 0x3090,
- ChallengeModeRequestMapStats = 0x308f,
- ChangeBagSlotFlag = 0x3328,
- ChangeBankBagSlotFlag = 0x3329,
- ChangeMonumentAppearance = 0x330a,
- ChangeRealmTicket = 0x36fa,
+ ChangeBagSlotFlag = 0x333f,
+ ChangeBankBagSlotFlag = 0x3340,
+ ChangeMonumentAppearance = 0x3321,
+ ChangeRealmTicket = 0x36fc,
ChangeSubGroup = 0x364c,
- CharacterRenameRequest = 0x36bf,
+ CharacterCheckUpgrade = 0x36c6,
+ CharacterRenameRequest = 0x36c1,
+ CharacterUpgradeManualUnrevokeRequest = 0x36c4,
+ CharacterUpgradeStart = 0x36c5,
CharCustomize = 0x3690,
- CharDelete = 0x369d,
+ CharDelete = 0x369e,
CharRaceOrFactionChange = 0x3696,
ChatAddonMessage = 0x37ee,
ChatAddonMessageTargeted = 0x37ef,
@@ -195,24 +196,29 @@ namespace Framework.Constants
ChatReportFiltered = 0x37cc,
ChatReportIgnored = 0x37cb,
ChatUnregisterAllAddonPrefixes = 0x37ce,
- ChoiceResponse = 0x32a4,
+ CheckCharacterNameAvailability = 0x3645,
+ CheckIsAdventureMapPoiValid = 0x324f,
+ ChoiceResponse = 0x32b0,
+ ChromieTimeSelectExpansion = 0x33de,
+ ClaimWeeklyReward = 0x33b9,
ClearNewAppearance = 0x312f,
- ClearRaidMarker = 0x31a5,
+ ClearRaidMarker = 0x31a7,
ClearTradeItem = 0x315e,
- ClientPortGraveyard = 0x3531,
- CloseInteraction = 0x3493,
- CloseQuestChoice = 0x32a5,
- ClubFinderApplicationResponse = 0x371c,
- ClubFinderGetApplicantsList = 0x371a,
- ClubFinderPost = 0x3717,
- ClubFinderRequestClubsData = 0x371e,
- ClubFinderRequestClubsList = 0x3718,
- ClubFinderRequestMembershipToClub = 0x3719,
- ClubFinderRequestPendingClubsList = 0x371d,
- ClubFinderRequestSubscribedClubPostingIds = 0x371f,
- ClubFinderRespondToApplicant = 0x371b,
- ClubInvite = 0x36f9,
- CollectionItemSetFavorite = 0x3632,
+ ClientPortGraveyard = 0x3539,
+ CloseInteraction = 0x3499,
+ CloseQuestChoice = 0x32b1,
+ CloseRuneforgeInteraction = 0x33e6,
+ ClubFinderApplicationResponse = 0x371f,
+ ClubFinderGetApplicantsList = 0x371d,
+ ClubFinderPost = 0x371a,
+ ClubFinderRequestClubsData = 0x3721,
+ ClubFinderRequestClubsList = 0x371b,
+ ClubFinderRequestMembershipToClub = 0x371c,
+ ClubFinderRequestPendingClubsList = 0x3720,
+ ClubFinderRequestSubscribedClubPostingIds = 0x3722,
+ ClubFinderRespondToApplicant = 0x371e,
+ ClubPresenceSubscribe = 0x36f9,
+ CollectionItemSetFavorite = 0x3633,
CommentatorEnable = 0x35f0,
CommentatorEnterInstance = 0x35f4,
CommentatorExitInstance = 0x35f5,
@@ -220,116 +226,122 @@ namespace Framework.Constants
CommentatorGetPlayerCooldowns = 0x35f3,
CommentatorGetPlayerInfo = 0x35f2,
CommentatorStartWargame = 0x35ef,
- CommerceTokenGetCount = 0x36e4,
- CommerceTokenGetLog = 0x36ee,
- CommerceTokenGetMarketPrice = 0x36e5,
+ CommerceTokenGetCount = 0x36e6,
+ CommerceTokenGetLog = 0x36f0,
+ CommerceTokenGetMarketPrice = 0x36e7,
Complaint = 0x366c,
- CompleteCinematic = 0x354f,
- CompleteMovie = 0x34e5,
- ConfirmArtifactRespec = 0x31aa,
- ConfirmRespecWipe = 0x320d,
+ CompleteCinematic = 0x3557,
+ CompleteMovie = 0x34eb,
+ ConfirmArtifactRespec = 0x31ac,
+ ConfirmRespecWipe = 0x3211,
ConnectToFailed = 0x35d4,
- ConsumableTokenBuy = 0x36e9,
- ConsumableTokenBuyAtMarketPrice = 0x36ea,
- ConsumableTokenCanVeteranBuy = 0x36e8,
- ConsumableTokenRedeem = 0x36ec,
- ConsumableTokenRedeemConfirmation = 0x36ed,
- ContributionContribute = 0x355f,
- ContributionLastUpdateRequest = 0x3560,
- ConversationLineStarted = 0x3550,
+ ConsumableTokenBuy = 0x36eb,
+ ConsumableTokenBuyAtMarketPrice = 0x36ec,
+ ConsumableTokenCanVeteranBuy = 0x36ea,
+ ConsumableTokenRedeem = 0x36ee,
+ ConsumableTokenRedeemConfirmation = 0x36ef,
+ ContributionContribute = 0x3569,
+ ContributionLastUpdateRequest = 0x356a,
+ ConversationLineStarted = 0x3558,
ConvertRaid = 0x364e,
- CreateCharacter = 0x3643,
- CreateShipment = 0x32f6,
+ CreateCharacter = 0x3644,
+ CreateShipment = 0x330d,
DbQueryBulk = 0x35e4,
- DeclineGuildInvites = 0x3526,
- DeclinePetition = 0x353e,
- DeleteEquipmentSet = 0x3513,
- DelFriend = 0x36cf,
- DelIgnore = 0x36d3,
- DepositReagentBank = 0x3331,
- DestroyItem = 0x3296,
- DfBootPlayerVote = 0x3614,
- DfGetJoinStatus = 0x3612,
- DfGetSystemInfo = 0x3611,
- DfJoin = 0x3607,
- DfLeave = 0x3610,
+ DeclineGuildInvites = 0x352d,
+ DeclinePetition = 0x3546,
+ DeleteEquipmentSet = 0x3519,
+ DelFriend = 0x36d1,
+ DelIgnore = 0x36d5,
+ DepositReagentBank = 0x3348,
+ DestroyItem = 0x32a0,
+ DfBootPlayerVote = 0x3615,
+ DfConfirmExpandSearch = 0x3607,
+ DfGetJoinStatus = 0x3613,
+ DfGetSystemInfo = 0x3612,
+ DfJoin = 0x3608,
+ DfLeave = 0x3611,
DfProposalResponse = 0x3606,
- DfReadyCheckResponse = 0x3617,
- DfSetRoles = 0x3613,
- DfTeleport = 0x3615,
- DiscardedTimeSyncAcks = 0x3a3d,
- DismissCritter = 0x3501,
- DoMasterLootRoll = 0x3212,
- DoReadyCheck = 0x3633,
- DuelResponse = 0x34ea,
- EjectPassenger = 0x323f,
- Emote = 0x354b,
+ DfReadyCheckResponse = 0x3618,
+ DfSetRoles = 0x3614,
+ DfTeleport = 0x3616,
+ DiscardedTimeSyncAcks = 0x3a3e,
+ DismissCritter = 0x3507,
+ DoCountdown = 0x3719,
+ DoMasterLootRoll = 0x3216,
+ DoReadyCheck = 0x3634,
+ DuelResponse = 0x34f0,
+ EjectPassenger = 0x3244,
+ Emote = 0x3553,
EnableNagle = 0x376b,
- EnableTaxiNode = 0x34a9,
- EngineSurvey = 0x36e2,
+ EnableTaxiNode = 0x34af,
+ EngineSurvey = 0x36e4,
EnterEncryptedModeAck = 0x3767,
EnumCharacters = 0x35e8,
- EnumCharactersDeletedByClient = 0x36dc,
- FarSight = 0x34f0,
- GameEventDebugDisable = 0x31b1,
- GameEventDebugEnable = 0x31b0,
- GameObjReportUse = 0x34f7,
- GameObjUse = 0x34f6,
- GarrisonAssignFollowerToBuilding = 0x32e1,
- GarrisonCancelConstruction = 0x32cf,
- GarrisonCheckUpgradeable = 0x3324,
- GarrisonCompleteMission = 0x3317,
- GarrisonGenerateRecruits = 0x32e4,
- GarrisonGetBuildingLandmarks = 0x32f2,
- GarrisonGetMissionReward = 0x334a,
- GarrisonMissionBonusRoll = 0x3319,
- GarrisonPurchaseBuilding = 0x32cb,
- GarrisonRecruitFollower = 0x32e6,
- GarrisonRemoveFollower = 0x330e,
- GarrisonRemoveFollowerFromBuilding = 0x32e2,
- GarrisonRenameFollower = 0x32e3,
- GarrisonRequestBlueprintAndSpecializationData = 0x32ca,
- GarrisonRequestClassSpecCategoryInfo = 0x32eb,
- GarrisonRequestLandingPageShipmentInfo = 0x32f5,
- GarrisonRequestShipmentInfo = 0x32f4,
- GarrisonResearchTalent = 0x32e7,
- GarrisonSetBuildingActive = 0x32cc,
- GarrisonSetFollowerFavorite = 0x32df,
- GarrisonSetFollowerInactive = 0x32d8,
- GarrisonSetRecruitmentPreferences = 0x32e5,
- GarrisonStartMission = 0x3316,
- GarrisonSwapBuildings = 0x32d0,
+ EnumCharactersDeletedByClient = 0x36de,
+ FarSight = 0x34f6,
+ GameEventDebugDisable = 0x31b3,
+ GameEventDebugEnable = 0x31b2,
+ GameObjReportUse = 0x34fd,
+ GameObjUse = 0x34fc,
+ GarrisonAddFollowerHealth = 0x3308,
+ GarrisonAssignFollowerToBuilding = 0x32ee,
+ GarrisonCancelConstruction = 0x32db,
+ GarrisonCheckUpgradeable = 0x333b,
+ GarrisonCompleteMission = 0x332e,
+ GarrisonFullyHealAllFollowers = 0x3309,
+ GarrisonGenerateRecruits = 0x32f1,
+ GarrisonGetClassSpecCategoryInfo = 0x3300,
+ GarrisonGetMapData = 0x3307,
+ GarrisonGetMissionReward = 0x335f,
+ GarrisonLearnTalent = 0x32fc,
+ GarrisonMissionBonusRoll = 0x3330,
+ GarrisonPurchaseBuilding = 0x32d7,
+ GarrisonRecruitFollower = 0x32f3,
+ GarrisonRemoveFollower = 0x3325,
+ GarrisonRemoveFollowerFromBuilding = 0x32ef,
+ GarrisonRenameFollower = 0x32f0,
+ GarrisonRequestBlueprintAndSpecializationData = 0x32d6,
+ GarrisonRequestShipmentInfo = 0x330b,
+ GarrisonResearchTalent = 0x32f4,
+ GarrisonSetBuildingActive = 0x32d8,
+ GarrisonSetFollowerFavorite = 0x32ec,
+ GarrisonSetFollowerInactive = 0x32e4,
+ GarrisonSetRecruitmentPreferences = 0x32f2,
+ GarrisonSocketTalent = 0x33f2,
+ GarrisonStartMission = 0x332d,
+ GarrisonSwapBuildings = 0x32dc,
GenerateRandomCharacterName = 0x35e7,
- GetAccountCharacterList = 0x36b5,
- GetChallengeModeRewards = 0x3683,
- GetGarrisonInfo = 0x32c5,
- GetItemPurchaseData = 0x3539,
- GetMirrorImageData = 0x329a,
+ GetAccountCharacterList = 0x36b6,
+ GetGarrisonInfo = 0x32d1,
+ GetItemPurchaseData = 0x3541,
+ GetLandingPageShipments = 0x330c,
+ GetMirrorImageData = 0x32a4,
GetPvpOptionsEnabled = 0x35ee,
- GetRafAccountInfo = 0x3720,
- GetRemainingGameTime = 0x36eb,
- GetTrophyList = 0x3307,
- GetUndeleteCharacterCooldownStatus = 0x36de,
- GetVasAccountCharacterList = 0x36f0,
- GetVasTransferTargetRealmList = 0x36f1,
+ GetRafAccountInfo = 0x3723,
+ GetRemainingGameTime = 0x36ed,
+ GetTrophyList = 0x331e,
+ GetUndeleteCharacterCooldownStatus = 0x36e0,
+ GetVasAccountCharacterList = 0x36f2,
+ GetVasTransferTargetRealmList = 0x36f3,
GmTicketAcknowledgeSurvey = 0x3694,
GmTicketGetCaseStatus = 0x3693,
GmTicketGetSystemStatus = 0x3692,
- GossipSelectOption = 0x3494,
+ GossipRefreshOptions = 0x357c,
+ GossipSelectOption = 0x349a,
GuildAddBattlenetFriend = 0x308e,
GuildAddRank = 0x3065,
GuildAssignMemberRank = 0x3060,
GuildAutoDeclineInvitation = 0x3062,
- GuildBankActivate = 0x34b6,
- GuildBankBuyTab = 0x34c4,
- GuildBankDepositMoney = 0x34c6,
+ GuildBankActivate = 0x34bc,
+ GuildBankBuyTab = 0x34ca,
+ GuildBankDepositMoney = 0x34cc,
GuildBankLogQuery = 0x3083,
- GuildBankQueryTab = 0x34c3,
+ GuildBankQueryTab = 0x34c9,
GuildBankRemainingWithdrawMoneyQuery = 0x3084,
GuildBankSetTabText = 0x3087,
GuildBankTextQuery = 0x3088,
- GuildBankUpdateTab = 0x34c5,
- GuildBankWithdrawMoney = 0x34c7,
+ GuildBankUpdateTab = 0x34cb,
+ GuildBankWithdrawMoney = 0x34cd,
GuildChallengeUpdateRequest = 0x307c,
GuildChangeNameRequest = 0x307f,
GuildDeclineInvitation = 0x3061,
@@ -353,125 +365,131 @@ namespace Framework.Constants
GuildReplaceGuildMaster = 0x3089,
GuildSetAchievementTracking = 0x3070,
GuildSetFocusedAchievement = 0x3071,
- GuildSetGuildMaster = 0x36c6,
+ GuildSetGuildMaster = 0x36c8,
GuildSetMemberNote = 0x3073,
GuildSetRankPermissions = 0x3068,
GuildShiftRank = 0x3067,
GuildUpdateInfoText = 0x3076,
GuildUpdateMotdText = 0x3075,
- HearthAndResurrect = 0x350f,
+ HearthAndResurrect = 0x3515,
+ HideQuestChoice = 0x32b2,
HotfixRequest = 0x35e5,
IgnoreTrade = 0x3159,
InitiateRolePoll = 0x35da,
InitiateTrade = 0x3156,
- Inspect = 0x3533,
- InstanceLockResponse = 0x3514,
- IslandQueue = 0x3396,
- ItemPurchaseRefund = 0x353a,
- ItemTextQuery = 0x3325,
- JoinPetBattleQueue = 0x31de,
+ Inspect = 0x353b,
+ InstanceLockResponse = 0x351a,
+ IslandQueue = 0x33b5,
+ ItemPurchaseRefund = 0x3542,
+ ItemTextQuery = 0x333c,
+ JoinPetBattleQueue = 0x31e0,
JoinRatedBattleground = 0x3178,
KeepAlive = 0x367f,
- KeyboundOverride = 0x3225,
- LearnPvpTalents = 0x355e,
- LearnTalents = 0x355c,
+ KeyboundOverride = 0x3229,
+ LearnPvpTalents = 0x3568,
+ LearnTalents = 0x3566,
LeaveGroup = 0x3649,
- LeavePetBattleQueue = 0x31df,
- LfgListApplyToGroup = 0x360b,
- LfgListCancelApplication = 0x360c,
- LfgListDeclineApplicant = 0x360d,
- LfgListGetStatus = 0x3609,
- LfgListInviteApplicant = 0x360e,
- LfgListInviteResponse = 0x360f,
- LfgListJoin = 0x3364,
- LfgListLeave = 0x3608,
- LfgListSearch = 0x360a,
- LfgListUpdateRequest = 0x3365,
- LfGuildAddRecruit = 0x361a,
- LfGuildBrowse = 0x361c,
+ LeavePetBattleQueue = 0x31e1,
+ LfgListApplyToGroup = 0x360c,
+ LfgListCancelApplication = 0x360d,
+ LfgListDeclineApplicant = 0x360e,
+ LfgListGetStatus = 0x360a,
+ LfgListInviteApplicant = 0x360f,
+ LfgListInviteResponse = 0x3610,
+ LfgListJoin = 0x3382,
+ LfgListLeave = 0x3609,
+ LfgListSearch = 0x360b,
+ LfgListUpdateRequest = 0x3383,
+ LfGuildAddRecruit = 0x361b,
+ LfGuildBrowse = 0x361d,
LfGuildDeclineRecruit = 0x3079,
LfGuildGetApplications = 0x307a,
LfGuildGetGuildPost = 0x3077,
LfGuildGetRecruits = 0x3078,
LfGuildRemoveRecruit = 0x307b,
- LfGuildSetGuildPost = 0x361b,
- ListInventory = 0x34a1,
- LiveRegionAccountRestore = 0x36b8,
- LiveRegionCharacterCopy = 0x36b7,
- LiveRegionGetAccountCharacterList = 0x36b6,
+ LfGuildSetGuildPost = 0x361c,
+ ListInventory = 0x34a7,
+ LiveRegionAccountRestore = 0x36b9,
+ LiveRegionCharacterCopy = 0x36b8,
+ LiveRegionGetAccountCharacterList = 0x36b7,
+ LiveRegionKeyBindingsCopy = 0x36ba,
LoadingScreenNotify = 0x35f8,
- LoadSelectedTrophy = 0x3308,
- LogoutCancel = 0x34e0,
- LogoutInstant = 0x34e1,
- LogoutRequest = 0x34de,
+ LoadSelectedTrophy = 0x331f,
+ LogoutCancel = 0x34e6,
+ LogoutInstant = 0x34e7,
+ LogoutRequest = 0x34e4,
LogDisconnect = 0x3769,
LogStreamingError = 0x376d,
- LootItem = 0x3210,
- LootMoney = 0x320f,
- LootRelease = 0x3214,
- LootRoll = 0x3215,
- LootUnit = 0x320e,
- LowLevelRaid1 = 0x36a1,
- LowLevelRaid2 = 0x351b,
- MailCreateTextItem = 0x3545,
- MailDelete = 0x3227,
- MailGetList = 0x3540,
- MailMarkAsRead = 0x3544,
+ LootItem = 0x3214,
+ LootMoney = 0x3213,
+ LootRelease = 0x3218,
+ LootRoll = 0x3219,
+ LootUnit = 0x3212,
+ LowLevelRaid1 = 0x36a2,
+ LowLevelRaid2 = 0x3521,
+ MailCreateTextItem = 0x354d,
+ MailDelete = 0x322b,
+ MailGetList = 0x3548,
+ MailMarkAsRead = 0x354c,
MailReturnToSender = 0x3655,
- MailTakeItem = 0x3542,
- MailTakeMoney = 0x3541,
- MakeContitionalAppearancePermanent = 0x3229,
- MasterLootItem = 0x3211,
+ MailTakeItem = 0x354a,
+ MailTakeMoney = 0x3549,
+ MakeContitionalAppearancePermanent = 0x322d,
+ MasterLootItem = 0x3215,
MinimapPing = 0x364b,
MissileTrajectoryCollision = 0x318a,
MountClearFanfare = 0x312d,
- MountSetFavorite = 0x3631,
- MountSpecialAnim = 0x3285,
- MoveApplyMovementForceAck = 0x3a13,
- MoveChangeTransport = 0x3a2d,
- MoveChangeVehicleSeats = 0x3a32,
- MoveDismissVehicle = 0x3a31,
+ MountSetFavorite = 0x3632,
+ MountSpecialAnim = 0x328f,
+ MoveApplyMovementForceAck = 0x3a14,
+ MoveChangeTransport = 0x3a2e,
+ MoveChangeVehicleSeats = 0x3a33,
+ MoveCollisionDisableAck = 0x3a36,
+ MoveCollisionEnableAck = 0x3a37,
+ MoveDismissVehicle = 0x3a32,
MoveDoubleJump = 0x39eb,
- MoveEnableDoubleJumpAck = 0x3a1c,
- MoveEnableSwimToFlyTransAck = 0x3a22,
+ MoveEnableDoubleJumpAck = 0x3a1d,
+ MoveEnableSwimToFlyTransAck = 0x3a23,
MoveFallLand = 0x39fa,
- MoveFallReset = 0x3a17,
- MoveFeatherFallAck = 0x3a1a,
- MoveForceFlightBackSpeedChangeAck = 0x3a2c,
- MoveForceFlightSpeedChangeAck = 0x3a2b,
- MoveForcePitchRateChangeAck = 0x3a30,
- MoveForceRootAck = 0x3a0c,
- MoveForceRunBackSpeedChangeAck = 0x3a0a,
- MoveForceRunSpeedChangeAck = 0x3a09,
- MoveForceSwimBackSpeedChangeAck = 0x3a20,
- MoveForceSwimSpeedChangeAck = 0x3a0b,
- MoveForceTurnRateChangeAck = 0x3a21,
- MoveForceUnrootAck = 0x3a0d,
- MoveForceWalkSpeedChangeAck = 0x3a1f,
- MoveGravityDisableAck = 0x3a33,
- MoveGravityEnableAck = 0x3a34,
- MoveHeartbeat = 0x3a0e,
- MoveHoverAck = 0x3a11,
+ MoveFallReset = 0x3a18,
+ MoveFeatherFallAck = 0x3a1b,
+ MoveForceFlightBackSpeedChangeAck = 0x3a2d,
+ MoveForceFlightSpeedChangeAck = 0x3a2c,
+ MoveForcePitchRateChangeAck = 0x3a31,
+ MoveForceRootAck = 0x3a0d,
+ MoveForceRunBackSpeedChangeAck = 0x3a0b,
+ MoveForceRunSpeedChangeAck = 0x3a0a,
+ MoveForceSwimBackSpeedChangeAck = 0x3a21,
+ MoveForceSwimSpeedChangeAck = 0x3a0c,
+ MoveForceTurnRateChangeAck = 0x3a22,
+ MoveForceUnrootAck = 0x3a0e,
+ MoveForceWalkSpeedChangeAck = 0x3a20,
+ MoveGravityDisableAck = 0x3a34,
+ MoveGravityEnableAck = 0x3a35,
+ MoveHeartbeat = 0x3a0f,
+ MoveHoverAck = 0x3a12,
+ MoveInitActiveMoverComplete = 0x3a43,
MoveJump = 0x39ea,
- MoveKnockBackAck = 0x3a10,
- MoveRemoveMovementForces = 0x3a15,
- MoveRemoveMovementForceAck = 0x3a14,
- MoveSeamlessTransferComplete = 0x3a40,
- MoveSetCanFlyAck = 0x3a25,
- MoveSetCanTurnWhileFallingAck = 0x3a23,
- MoveSetCollisionHeightAck = 0x3a37,
- MoveSetFacing = 0x3a07,
- MoveSetFly = 0x3a26,
- MoveSetIgnoreMovementForcesAck = 0x3a24,
- MoveSetModMovementForceMagnitudeAck = 0x3a3e,
- MoveSetPitch = 0x3a08,
+ MoveKnockBackAck = 0x3a11,
+ MoveRemoveMovementForces = 0x3a16,
+ MoveRemoveMovementForceAck = 0x3a15,
+ MoveSeamlessTransferComplete = 0x3a41,
+ MoveSetCanFlyAck = 0x3a26,
+ MoveSetCanTurnWhileFallingAck = 0x3a24,
+ MoveSetCollisionHeightAck = 0x3a38,
+ MoveSetFacing = 0x3a08,
+ MoveSetFly = 0x3a27,
+ MoveSetIgnoreMovementForcesAck = 0x3a25,
+ MoveSetModMovementForceMagnitudeAck = 0x3a3f,
+ MoveSetPitch = 0x3a09,
MoveSetRunMode = 0x39f2,
- MoveSetVehicleRecIdAck = 0x3a12,
+ MoveSetTurnRateCheat = 0x3a05,
+ MoveSetVehicleRecIdAck = 0x3a13,
MoveSetWalkMode = 0x39f3,
- MoveSplineDone = 0x3a16,
- MoveStartAscend = 0x3a27,
+ MoveSplineDone = 0x3a17,
+ MoveStartAscend = 0x3a28,
MoveStartBackward = 0x39e5,
- MoveStartDescend = 0x3a2e,
+ MoveStartDescend = 0x3a2f,
MoveStartForward = 0x39e4,
MoveStartPitchDown = 0x39f0,
MoveStartPitchUp = 0x39ef,
@@ -481,284 +499,295 @@ namespace Framework.Constants
MoveStartTurnLeft = 0x39ec,
MoveStartTurnRight = 0x39ed,
MoveStop = 0x39e6,
- MoveStopAscend = 0x3a28,
+ MoveStopAscend = 0x3a29,
MoveStopPitch = 0x39f1,
MoveStopStrafe = 0x39e9,
MoveStopSwim = 0x39fc,
MoveStopTurn = 0x39ee,
MoveTeleportAck = 0x39f9,
- MoveTimeSkipped = 0x3a19,
- MoveToggleCollisionCheat = 0x3a06,
- MoveUpdateFallSpeed = 0x3a18,
- MoveWaterWalkAck = 0x3a1b,
- NeutralPlayerSelectFaction = 0x31d4,
- NextCinematicCamera = 0x354e,
+ MoveTimeSkipped = 0x3a1a,
+ MoveUpdateFallSpeed = 0x3a19,
+ MoveWaterWalkAck = 0x3a1c,
+ MythicPlusRequestMapStats = 0x308f,
+ MythicPlusWeeklyRewardRequest = 0x3683,
+ NeutralPlayerSelectFaction = 0x31d6,
+ NextCinematicCamera = 0x3556,
ObjectUpdateFailed = 0x3180,
ObjectUpdateRescued = 0x3181,
- OfferPetition = 0x33b1,
- OpeningCinematic = 0x354d,
- OpenItem = 0x3326,
- OpenMissionNpc = 0x32ed,
- OpenShipmentNpc = 0x32f3,
- OpenTradeskillNpc = 0x32fe,
- OptOutOfLoot = 0x34fe,
+ OfferPetition = 0x33dd,
+ OpeningCinematic = 0x3555,
+ OpenItem = 0x333d,
+ OpenMissionNpc = 0x3302,
+ OpenShipmentNpc = 0x330a,
+ OpenTradeskillNpc = 0x3315,
+ OptOutOfLoot = 0x3504,
+ OverrideScreenFlash = 0x352e,
PartyInvite = 0x3602,
PartyInviteResponse = 0x3603,
PartyUninvite = 0x3647,
- PerformItemInteraction = 0x3231,
- PetitionBuy = 0x34c9,
- PetitionRenameGuild = 0x36c7,
- PetitionShowList = 0x34c8,
- PetitionShowSignatures = 0x34ca,
- PetAbandon = 0x348d,
- PetAction = 0x348b,
- PetBattleFinalNotify = 0x31e3,
- PetBattleInput = 0x3640,
- PetBattleQueueProposeMatchResult = 0x3226,
- PetBattleQuitNotify = 0x31e2,
- PetBattleReplaceFrontPet = 0x3641,
- PetBattleRequestPvp = 0x31dc,
- PetBattleRequestUpdate = 0x31dd,
- PetBattleRequestWild = 0x31da,
- PetBattleScriptErrorNotify = 0x31e4,
- PetBattleWildLocationFail = 0x31db,
- PetCancelAura = 0x348e,
- PetCastSpell = 0x329e,
+ PerformItemInteraction = 0x3235,
+ PetitionBuy = 0x34cf,
+ PetitionRenameGuild = 0x36c9,
+ PetitionShowList = 0x34ce,
+ PetitionShowSignatures = 0x34d0,
+ PetAbandon = 0x3493,
+ PetAction = 0x3491,
+ PetBattleFinalNotify = 0x31e5,
+ PetBattleInput = 0x3641,
+ PetBattleQueueProposeMatchResult = 0x322a,
+ PetBattleQuitNotify = 0x31e4,
+ PetBattleReplaceFrontPet = 0x3642,
+ PetBattleRequestPvp = 0x31de,
+ PetBattleRequestUpdate = 0x31df,
+ PetBattleRequestWild = 0x31dc,
+ PetBattleScriptErrorNotify = 0x31e6,
+ PetBattleWildLocationFail = 0x31dd,
+ PetCancelAura = 0x3494,
+ PetCastSpell = 0x32a8,
PetRename = 0x3685,
- PetSetAction = 0x348a,
- PetSpellAutocast = 0x348f,
- PetStopAttack = 0x348c,
+ PetSetAction = 0x3490,
+ PetSpellAutocast = 0x3495,
+ PetStopAttack = 0x3492,
Ping = 0x3768,
PlayerLogin = 0x35ea,
- PushQuestToParty = 0x349f,
+ PushQuestToParty = 0x34a5,
PvpLogData = 0x317b,
- QueryBattlePetName = 0x327a,
- QueryCommunityName = 0x368b,
+ QueryBattlePetName = 0x3282,
QueryCorpseLocationFromClient = 0x3660,
QueryCorpseTransport = 0x3661,
- QueryCountdownTimer = 0x31a8,
- QueryCreature = 0x3274,
- QueryGameObject = 0x3275,
- QueryGarrisonCreatureName = 0x327b,
+ QueryCountdownTimer = 0x31aa,
+ QueryCreature = 0x327c,
+ QueryGameObject = 0x327d,
+ QueryGarrisonPetName = 0x3283,
QueryGuildInfo = 0x368e,
- QueryInspectAchievements = 0x3508,
- QueryNextMailTime = 0x3543,
- QueryNpcText = 0x3276,
- QueryPageText = 0x3278,
- QueryPetition = 0x327c,
- QueryPetName = 0x3279,
+ QueryInspectAchievements = 0x350e,
+ QueryNextMailTime = 0x354b,
+ QueryNpcText = 0x327e,
+ QueryPageText = 0x3280,
+ QueryPetition = 0x3284,
+ QueryPetName = 0x3281,
QueryPlayerName = 0x368a,
+ QueryPlayerNamesForCommunity = 0x368c,
+ QueryPlayerNameByCommunityId = 0x368b,
QueryQuestCompletionNpcs = 0x3175,
- QueryQuestInfo = 0x3277,
+ QueryQuestInfo = 0x327f,
QueryRealmName = 0x368d,
QueryScenarioPoi = 0x3656,
- QueryTime = 0x34dd,
- QueryTreasurePicker = 0x334c,
- QueryVoidStorage = 0x31a1,
- QuestConfirmAccept = 0x349e,
- QuestGiverAcceptQuest = 0x3498,
- QuestGiverChooseReward = 0x349a,
- QuestGiverCompleteQuest = 0x3499,
- QuestGiverHello = 0x3496,
- QuestGiverQueryQuest = 0x3497,
- QuestGiverRequestReward = 0x349b,
- QuestGiverStatusMultipleQuery = 0x349d,
- QuestGiverStatusQuery = 0x349c,
- QuestLogRemoveQuest = 0x3538,
- QuestPoiQuery = 0x36af,
- QuestPushResult = 0x34a0,
- QuestSessionBeginResponse = 0x33a5,
- QuestSessionRequestStart = 0x33a4,
- QuestSessionRequestStop = 0x372b,
+ QueryTime = 0x34e3,
+ QueryTreasurePicker = 0x3362,
+ QueryVoidStorage = 0x31a3,
+ QuestConfirmAccept = 0x34a4,
+ QuestGiverAcceptQuest = 0x349e,
+ QuestGiverChooseReward = 0x34a0,
+ QuestGiverCloseQuest = 0x355b,
+ QuestGiverCompleteQuest = 0x349f,
+ QuestGiverHello = 0x349c,
+ QuestGiverQueryQuest = 0x349d,
+ QuestGiverRequestReward = 0x34a1,
+ QuestGiverStatusMultipleQuery = 0x34a3,
+ QuestGiverStatusQuery = 0x34a2,
+ QuestLogRemoveQuest = 0x3540,
+ QuestPoiQuery = 0x36b0,
+ QuestPushResult = 0x34a6,
+ QuestSessionBeginResponse = 0x33ce,
+ QuestSessionRequestStart = 0x33cd,
+ QuestSessionRequestStop = 0x372e,
QueuedMessagesEnd = 0x376c,
- QuickJoinAutoAcceptRequests = 0x3706,
- QuickJoinRequestInvite = 0x3705,
- QuickJoinRequestInviteWithConfirmation = 0x3730,
- QuickJoinRespondToInvite = 0x3704,
- QuickJoinSignalToastDisplayed = 0x3703,
- RafClaimActivityReward = 0x350c,
- RafClaimNextReward = 0x3721,
- RafGenerateRecruitmentLink = 0x3723,
- RafUpdateRecruitmentInfo = 0x3722,
- RaidOrBattlegroundEngineSurvey = 0x36e3,
+ QuickJoinAutoAcceptRequests = 0x3708,
+ QuickJoinRequestInvite = 0x3707,
+ QuickJoinRequestInviteWithConfirmation = 0x3733,
+ QuickJoinRespondToInvite = 0x3706,
+ QuickJoinSignalToastDisplayed = 0x3705,
+ RafClaimActivityReward = 0x3512,
+ RafClaimNextReward = 0x3724,
+ RafGenerateRecruitmentLink = 0x3726,
+ RafUpdateRecruitmentInfo = 0x3725,
+ RaidOrBattlegroundEngineSurvey = 0x36e5,
RandomRoll = 0x3654,
- ReadyCheckResponse = 0x3634,
- ReadItem = 0x3327,
- ReclaimCorpse = 0x34e3,
- RemoveNewItem = 0x334f,
- RemoveRafRecruit = 0x3724,
+ ReadyCheckResponse = 0x3635,
+ ReadItem = 0x333e,
+ ReclaimCorpse = 0x34e9,
+ RemoveNewItem = 0x3365,
+ RemoveRafRecruit = 0x3727,
ReorderCharacters = 0x35e9,
- RepairItem = 0x34f4,
- ReplaceTrophy = 0x3309,
- RepopRequest = 0x3530,
- ReportClientVariables = 0x3700,
- ReportEnabledAddons = 0x36ff,
- ReportKeybindingExecutionCounts = 0x3701,
- ReportPvpPlayerAfk = 0x34fc,
- ReportServerLag = 0x339c,
- RequestAccountData = 0x3697,
- RequestAreaPoiUpdate = 0x334e,
+ RepairItem = 0x34fa,
+ ReplaceTrophy = 0x3320,
+ RepopRequest = 0x3538,
+ ReportClientVariables = 0x3702,
+ ReportEnabledAddons = 0x3701,
+ ReportKeybindingExecutionCounts = 0x3703,
+ ReportPvpPlayerAfk = 0x3502,
+ ReportServerLag = 0x33c4,
+ ReportStuckInCombat = 0x33c5,
+ RequestAccountData = 0x3698,
+ RequestAreaPoiUpdate = 0x3364,
RequestBattlefieldStatus = 0x35dc,
RequestCategoryCooldowns = 0x317d,
RequestCemeteryList = 0x3176,
- RequestChallengeModeAffixes = 0x3207,
RequestCharacterGuildFollowInfo = 0x368f,
- RequestConquestFormulaConstants = 0x32b7,
- RequestCrowdControlSpell = 0x3534,
- RequestForcedReactions = 0x3209,
- RequestGuildPartyState = 0x31a7,
- RequestGuildRewardsList = 0x31a6,
- RequestLfgListBlacklist = 0x32a7,
+ RequestConquestFormulaConstants = 0x32c3,
+ RequestCovenantCallings = 0x33b7,
+ RequestCrowdControlSpell = 0x353c,
+ RequestForcedReactions = 0x320d,
+ RequestGarrisonTalentWorldQuestUnlocks = 0x33f1,
+ RequestGuildPartyState = 0x31a9,
+ RequestGuildRewardsList = 0x31a8,
+ RequestLatestSplashScreen = 0x33c6,
+ RequestLfgListBlacklist = 0x32b3,
+ RequestMythicPlusAffixes = 0x320a,
+ RequestMythicPlusSeasonData = 0x320b,
RequestPartyJoinUpdates = 0x35f7,
RequestPartyMemberStats = 0x3653,
- RequestPetInfo = 0x3490,
- RequestPlayedTime = 0x327f,
- RequestPvpBrawlInfo = 0x3195,
- RequestPvpRewards = 0x3194,
- RequestQuestLinesForMap = 0x3397,
- RequestRaidInfo = 0x36c8,
- RequestRatedBattlefieldInfo = 0x35e3,
+ RequestPetInfo = 0x3496,
+ RequestPlayedTime = 0x3287,
+ RequestPvpRewards = 0x3196,
+ RequestRaidInfo = 0x36ca,
+ RequestRatedPvpInfo = 0x35e3,
RequestRealmGuildMasterInfo = 0x309b,
RequestResearchHistory = 0x3167,
- RequestStabledPets = 0x3491,
- RequestVehicleExit = 0x323a,
- RequestVehicleNextSeat = 0x323c,
- RequestVehiclePrevSeat = 0x323b,
- RequestVehicleSwitchSeat = 0x323d,
- RequestWorldQuestUpdate = 0x334d,
- ResetChallengeMode = 0x3205,
- ResetChallengeModeCheat = 0x3206,
+ RequestScheduledPvpInfo = 0x3197,
+ RequestStabledPets = 0x3497,
+ RequestVehicleExit = 0x323f,
+ RequestVehicleNextSeat = 0x3241,
+ RequestVehiclePrevSeat = 0x3240,
+ RequestVehicleSwitchSeat = 0x3242,
+ RequestWeeklyRewards = 0x33ba,
+ RequestWorldQuestUpdate = 0x3363,
+ ResetChallengeMode = 0x3208,
+ ResetChallengeModeCheat = 0x3209,
ResetInstances = 0x3668,
ResurrectResponse = 0x3684,
- RevertMonumentAppearance = 0x330b,
- RideVehicleInteract = 0x323e,
+ RevertMonumentAppearance = 0x3322,
+ RideVehicleInteract = 0x3243,
SaveCufProfiles = 0x318b,
- SaveEquipmentSet = 0x3512,
- SaveGuildEmblem = 0x32ab,
- ScenePlaybackCanceled = 0x3222,
- ScenePlaybackComplete = 0x3221,
- SceneTriggerEvent = 0x3223,
- SelfRes = 0x353b,
- SellItem = 0x34a2,
- SendContactList = 0x36cd,
+ SaveEquipmentSet = 0x3518,
+ SaveGuildEmblem = 0x32b7,
+ ScenePlaybackCanceled = 0x3226,
+ ScenePlaybackComplete = 0x3225,
+ SceneTriggerEvent = 0x3227,
+ SelfRes = 0x3543,
+ SellItem = 0x34a8,
+ SendCharacterClubInvitation = 0x36fb,
+ SendContactList = 0x36cf,
SendMail = 0x35fa,
- SendTextEmote = 0x3488,
- ServerTimeOffsetRequest = 0x369c,
- SetAchievementsHidden = 0x3228,
- SetActionBarToggles = 0x353c,
- SetActionButton = 0x3635,
- SetActiveMover = 0x3a38,
- SetAdvancedCombatLogging = 0x32b8,
+ SendTextEmote = 0x348e,
+ ServerTimeOffsetRequest = 0x369d,
+ SetAchievementsHidden = 0x322c,
+ SetActionBarToggles = 0x3544,
+ SetActionButton = 0x3636,
+ SetActiveMover = 0x3a39,
+ SetAdvancedCombatLogging = 0x32c4,
SetAssistantLeader = 0x364f,
- SetBackpackAutosortDisabled = 0x332a,
- SetBankAutosortDisabled = 0x332b,
- SetContactNotes = 0x36d0,
+ SetBackpackAutosortDisabled = 0x3341,
+ SetBankAutosortDisabled = 0x3342,
+ SetContactNotes = 0x36d2,
SetCurrencyFlags = 0x3169,
- SetDifficultyId = 0x3224,
+ SetDifficultyId = 0x3228,
SetDungeonDifficulty = 0x3682,
- SetEveryoneIsAssistant = 0x3616,
- SetFactionAtWar = 0x34e6,
- SetFactionInactive = 0x34e8,
- SetFactionNotAtWar = 0x34e7,
- SetGameEventDebugViewState = 0x31b8,
- SetInsertItemsLeftToRight = 0x332d,
- SetLfgBonusFactionId = 0x32a6,
+ SetEveryoneIsAssistant = 0x3617,
+ SetFactionAtWar = 0x34ec,
+ SetFactionInactive = 0x34ee,
+ SetFactionNotAtWar = 0x34ed,
+ SetGameEventDebugViewState = 0x31ba,
+ SetInsertItemsLeftToRight = 0x3344,
SetLootMethod = 0x3648,
- SetLootSpecialization = 0x3549,
+ SetLootSpecialization = 0x3551,
SetPartyAssignment = 0x3651,
SetPartyLeader = 0x364a,
SetPetSlot = 0x3168,
SetPlayerDeclinedNames = 0x3689,
SetPreferredCemetery = 0x3177,
- SetPvp = 0x32af,
- SetRaidDifficulty = 0x36da,
+ SetPvp = 0x32bb,
+ SetRaidDifficulty = 0x36dc,
SetRole = 0x35d9,
SetSavedInstanceExtend = 0x3687,
- SetSelection = 0x3532,
- SetSheathed = 0x3489,
- SetSortBagsRightToLeft = 0x332c,
- SetTaxiBenchmarkMode = 0x34fb,
- SetTitle = 0x3283,
+ SetSelection = 0x353a,
+ SetSheathed = 0x348f,
+ SetSortBagsRightToLeft = 0x3343,
+ SetTaxiBenchmarkMode = 0x3501,
+ SetTitle = 0x328d,
SetTradeCurrency = 0x3160,
SetTradeGold = 0x315f,
SetTradeItem = 0x315d,
- SetUsingPartyGarrison = 0x32ef,
- SetWarMode = 0x32b0,
- SetWatchedFaction = 0x34e9,
- ShowTradeSkill = 0x36c0,
- SignPetition = 0x353d,
+ SetUsingPartyGarrison = 0x3304,
+ SetWarMode = 0x32bc,
+ SetWatchedFaction = 0x34ef,
+ ShowTradeSkill = 0x36c2,
+ SignPetition = 0x3545,
SilencePartyTalker = 0x3652,
- SocketGems = 0x34f3,
- SortBags = 0x332e,
- SortBankBags = 0x332f,
- SortReagentBankBags = 0x3330,
- SpellClick = 0x3495,
- SpiritHealerActivate = 0x34af,
+ SocketGems = 0x34f9,
+ SortBags = 0x3345,
+ SortBankBags = 0x3346,
+ SortReagentBankBags = 0x3347,
+ SpellClick = 0x349b,
+ SpiritHealerActivate = 0x34b5,
SplitItem = 0x399e,
StandStateChange = 0x3189,
- StartChallengeMode = 0x3554,
+ StartChallengeMode = 0x355c,
StartSpectatorWarGame = 0x35df,
StartWarGame = 0x35de,
+ SubmitUserFeedback = 0x3697,
+ SubscriptionInterstitialResponse = 0x33e7,
SummonResponse = 0x366a,
- SupportTicketSubmitBug = 0x3645,
- SupportTicketSubmitComplaint = 0x3644,
- SupportTicketSubmitSuggestion = 0x3646,
+ SupportTicketSubmitComplaint = 0x3646,
SurrenderArena = 0x3174,
SuspendCommsAck = 0x3764,
SuspendTokenResponse = 0x376a,
SwapInvItem = 0x399d,
SwapItem = 0x399c,
SwapSubGroups = 0x364d,
- SwapVoidItem = 0x31a3,
- TabardVendorActivate = 0x32ac,
- TalkToGossip = 0x3492,
- TaxiNodeStatusQuery = 0x34a8,
- TaxiQueryAvailableNodes = 0x34aa,
- TaxiRequestEarlyLanding = 0x34ac,
- TimeAdjustmentResponse = 0x3a3c,
- TimeSyncResponse = 0x3a39,
- TimeSyncResponseDropped = 0x3a3b,
- TimeSyncResponseFailed = 0x3a3a,
+ SwapVoidItem = 0x31a5,
+ TabardVendorActivate = 0x32b8,
+ TalkToGossip = 0x3498,
+ TaxiNodeStatusQuery = 0x34ae,
+ TaxiQueryAvailableNodes = 0x34b0,
+ TaxiRequestEarlyLanding = 0x34b2,
+ TimeAdjustmentResponse = 0x3a3d,
+ TimeSyncResponse = 0x3a3a,
+ TimeSyncResponseDropped = 0x3a3c,
+ TimeSyncResponseFailed = 0x3a3b,
ToggleDifficulty = 0x3657,
- TogglePvp = 0x32ae,
- TotemDestroyed = 0x3500,
+ TogglePvp = 0x32ba,
+ TotemDestroyed = 0x3506,
ToyClearFanfare = 0x312e,
- TradeSkillSetFavorite = 0x334b,
- TrainerBuySpell = 0x34ae,
- TrainerList = 0x34ad,
- TransmogrifyItems = 0x3196,
- TurnInPetition = 0x353f,
- Tutorial = 0x36db,
+ TradeSkillSetFavorite = 0x3361,
+ TrainerBuySpell = 0x34b4,
+ TrainerList = 0x34b3,
+ TransmogrifyItems = 0x3198,
+ TurnInPetition = 0x3547,
+ Tutorial = 0x36dd,
TwitterCheckStatus = 0x312a,
TwitterConnect = 0x3127,
TwitterDisconnect = 0x312b,
- TwitterPost = 0x3332,
+ TwitterPost = 0x3349,
+ UiMapQuestLinesRequest = 0x33b6,
UnacceptTrade = 0x315b,
- UndeleteCharacter = 0x36dd,
- UnlearnSkill = 0x34ed,
- UnlearnSpecialization = 0x31a4,
- UnlockVoidStorage = 0x31a0,
- UpdateAccountData = 0x3698,
- UpdateAreaTriggerVisual = 0x32a1,
+ UndeleteCharacter = 0x36df,
+ UnlearnSkill = 0x34f3,
+ UnlearnSpecialization = 0x31a6,
+ UnlockVoidStorage = 0x31a2,
+ UpdateAccountData = 0x3699,
+ UpdateAreaTriggerVisual = 0x32ab,
UpdateClientSettings = 0x3664,
- UpdateMissileTrajectory = 0x3a3f,
+ UpdateMissileTrajectory = 0x3a40,
UpdateRaidTarget = 0x3650,
- UpdateSpellVisual = 0x32a0,
- UpdateVasPurchaseStates = 0x36f3,
- UpgradeGarrison = 0x32c0,
+ UpdateSpellVisual = 0x32aa,
+ UpdateVasPurchaseStates = 0x36f5,
+ UpgradeGarrison = 0x32cc,
+ UpgradeRuneforgeLegendary = 0x33e5,
UsedFollow = 0x3186,
- UseCritterItem = 0x3244,
+ UseCritterItem = 0x3249,
UseEquipmentSet = 0x3995,
- UseItem = 0x329b,
- UseToy = 0x329d,
- VasCheckTransferOk = 0x370b,
- VasGetQueueMinutes = 0x370a,
- VasGetServiceStatus = 0x3709,
+ UseItem = 0x32a5,
+ UseToy = 0x32a7,
+ VasCheckTransferOk = 0x370d,
+ VasGetQueueMinutes = 0x370c,
+ VasGetServiceStatus = 0x370b,
ViolenceLevel = 0x3184,
- VoiceChatJoinChannel = 0x370f,
- VoiceChatLogin = 0x370e,
- VoidStorageTransfer = 0x31a2,
- WardenData = 0x35ec,
+ VoiceChatJoinChannel = 0x3711,
+ VoiceChatLogin = 0x3710,
+ VoidStorageTransfer = 0x31a4,
+ Warden3Data = 0x35ec,
Who = 0x3681,
WhoIs = 0x3680,
WorldPortResponse = 0x35f9,
@@ -770,203 +799,205 @@ namespace Framework.Constants
public enum ServerOpcodes : uint
{
- AbortNewWorld = 0x25af,
- AccountCriteriaUpdate = 0x28c5,
- AccountDataTimes = 0x274f,
- AccountMountUpdate = 0x25c4,
- AccountToyUpdate = 0x25c5,
- AccountTransmogSetFavoritesUpdate = 0x25c8,
- AccountTransmogUpdate = 0x25c7,
- AchievementDeleted = 0x2727,
- AchievementEarned = 0x2663,
- ActivateEssenceFailed = 0x2872,
- ActivateTaxiReply = 0x26ac,
- ActiveGlyphs = 0x2c53,
- AddonListRequest = 0x2662,
- AddBattlenetFriendResponse = 0x265d,
- AddItemPassive = 0x25c0,
- AddLossOfControl = 0x269c,
- AddRunePower = 0x26eb,
- AdjustSplineDuration = 0x25e9,
- AdventureMapOpenNpc = 0x2838,
- AeLootTargets = 0x262f,
- AeLootTargetAck = 0x2630,
- AiReaction = 0x26e8,
- AlliedRaceDetails = 0x283e,
+ AbortNewWorld = 0x259f,
+ AccountCriteriaUpdate = 0x287d,
+ AccountDataTimes = 0x270f,
+ AccountMountUpdate = 0x25b1,
+ AccountToyUpdate = 0x25b2,
+ AccountTransmogSetFavoritesUpdate = 0x25b5,
+ AccountTransmogUpdate = 0x25b4,
+ AchievementDeleted = 0x26ec,
+ AchievementEarned = 0x2640,
+ ActivateEssenceFailed = 0x3016,
+ ActivateSoulbindFailed = 0x3018,
+ ActivateTaxiReply = 0x267b,
+ ActiveGlyphs = 0x2c54,
+ AddonListRequest = 0x263f,
+ AddBattlenetFriendResponse = 0x263a,
+ AddItemPassive = 0x25ad,
+ AddLossOfControl = 0x266d,
+ AddRunePower = 0x26b5,
+ AdjustSplineDuration = 0x25cf,
+ AdventureJournalDataResponse = 0x288d,
+ AdventureMapOpenNpc = 0x27f7,
+ AeLootTargets = 0x2615,
+ AeLootTargetAck = 0x2616,
+ AiReaction = 0x26b2,
+ AlliedRaceDetails = 0x27fd,
AllAccountCriteria = 0x2571,
AllAchievementData = 0x2570,
AllGuildAchievements = 0x29b8,
- ApplyMountEquipmentResult = 0x28b5,
+ ApplyMountEquipmentResult = 0x286a,
ArchaeologySurveryCast = 0x2588,
- AreaPoiUpdateResponse = 0x284f,
- AreaSpiritHealerTime = 0x2786,
- AreaTriggerDenied = 0x26a3,
- AreaTriggerForceSetPositionAndFacing = 0x2642,
- AreaTriggerNoCorpse = 0x275b,
- AreaTriggerPlaySpellVisual = 0x2641,
- AreaTriggerRePath = 0x263f,
- AreaTriggerReShape = 0x2644,
- AreaTriggerSetVisualAnim = 0x2640,
- AreaTriggerUnattach = 0x2643,
- ArenaCrowdControlSpellResult = 0x2652,
- ArenaPrepOpponentSpecializations = 0x2668,
- ArtifactEndgamePowersRefunded = 0x27ec,
- ArtifactForgeError = 0x27ea,
- ArtifactRespecPrompt = 0x27eb,
- ArtifactXpGain = 0x2830,
- AttackerStateUpdate = 0x27d5,
- AttackStart = 0x2670,
- AttackStop = 0x2671,
- AttackSwingError = 0x2739,
- AttackSwingLandedLog = 0x273a,
- AuctionableTokenAuctionSold = 0x281e,
- AuctionableTokenSellAtMarketPriceResponse = 0x281d,
- AuctionableTokenSellConfirmRequired = 0x281c,
- AuctionClosedNotification = 0x2731,
- AuctionCommandResult = 0x272e,
- AuctionFavoriteList = 0x28cc,
- AuctionGetCommodityQuoteResult = 0x28c3,
- AuctionHelloResponse = 0x272c,
- AuctionListBiddedItemsResult = 0x28c2,
- AuctionListBucketsResult = 0x28bf,
- AuctionListItemsResult = 0x28c0,
- AuctionListOwnedItemsResult = 0x28c1,
- AuctionOutbidNotification = 0x2730,
- AuctionOwnerBidNotification = 0x2732,
- AuctionReplicateResponse = 0x272d,
- AuctionWonNotification = 0x272f,
+ AreaPoiUpdateResponse = 0x3011,
+ AreaSpiritHealerTime = 0x2744,
+ AreaTriggerDenied = 0x2917,
+ AreaTriggerForceSetPositionAndFacing = 0x2914,
+ AreaTriggerNoCorpse = 0x271b,
+ AreaTriggerPlaySpellVisual = 0x2913,
+ AreaTriggerRePath = 0x2911,
+ AreaTriggerReShape = 0x2916,
+ AreaTriggerSetVisualAnim = 0x2912,
+ AreaTriggerUnattach = 0x2915,
+ ArenaCrowdControlSpellResult = 0x262f,
+ ArenaPrepOpponentSpecializations = 0x2645,
+ ArtifactEndgamePowersRefunded = 0x27a6,
+ ArtifactForgeError = 0x27a4,
+ ArtifactRespecPrompt = 0x27a5,
+ ArtifactXpGain = 0x27ef,
+ AttackerStateUpdate = 0x294c,
+ AttackStart = 0x2937,
+ AttackStop = 0x2938,
+ AttackSwingError = 0x2946,
+ AttackSwingLandedLog = 0x2947,
+ AuctionableTokenAuctionSold = 0x27d8,
+ AuctionableTokenSellAtMarketPriceResponse = 0x27d7,
+ AuctionableTokenSellConfirmRequired = 0x27d6,
+ AuctionClosedNotification = 0x26f6,
+ AuctionCommandResult = 0x26f3,
+ AuctionFavoriteList = 0x2884,
+ AuctionGetCommodityQuoteResult = 0x287b,
+ AuctionHelloResponse = 0x26f1,
+ AuctionListBiddedItemsResult = 0x287a,
+ AuctionListBucketsResult = 0x2877,
+ AuctionListItemsResult = 0x2878,
+ AuctionListOwnedItemsResult = 0x2879,
+ AuctionOutbidNotification = 0x26f5,
+ AuctionOwnerBidNotification = 0x26f7,
+ AuctionReplicateResponse = 0x26f2,
+ AuctionWonNotification = 0x26f4,
AuraPointsDepleted = 0x2c23,
AuraUpdate = 0x2c22,
AuthChallenge = 0x3048,
AuthFailed = 0x256c,
AuthResponse = 0x256d,
- AvailableHotfixes = 0x25a3,
- AzeriteRespecNpc = 0x283b,
- BagCleanupFinished = 0x2826,
- BarberShopResult = 0x26f1,
- BatchPresenceSubscription = 0x28a4,
- BattlefieldList = 0x2596,
- BattlefieldPortDenied = 0x259c,
- BattlefieldStatusActive = 0x2592,
- BattlefieldStatusFailed = 0x2595,
- BattlefieldStatusNeedConfirmation = 0x2591,
- BattlefieldStatusNone = 0x2594,
- BattlefieldStatusQueued = 0x2593,
- BattlefieldStatusWaitForGroups = 0x25a7,
- BattlegroundInfoThrottled = 0x259d,
- BattlegroundInit = 0x27a4,
- BattlegroundPlayerJoined = 0x259a,
- BattlegroundPlayerLeft = 0x259b,
- BattlegroundPlayerPositions = 0x2597,
- BattlegroundPoints = 0x27a3,
- BattlenetChallengeAbort = 0x27d4,
- BattlenetChallengeStart = 0x27d3,
- BattlenetNotification = 0x284a,
- BattlenetResponse = 0x2849,
- BattleNetConnectionStatus = 0x284b,
- BattlePayAckFailed = 0x27ce,
- BattlePayBattlePetDelivered = 0x27c2,
- BattlePayCollectionItemDelivered = 0x27c3,
- BattlePayConfirmPurchase = 0x27cd,
- BattlePayDeliveryEnded = 0x27c0,
- BattlePayDeliveryStarted = 0x27bf,
- BattlePayDistributionUnrevoked = 0x27bd,
- BattlePayDistributionUpdate = 0x27be,
- BattlePayGetDistributionListResponse = 0x27bc,
- BattlePayGetProductListResponse = 0x27ba,
- BattlePayGetPurchaseListResponse = 0x27bb,
- BattlePayMountDelivered = 0x27c1,
- BattlePayPurchaseUpdate = 0x27cc,
- BattlePayStartCheckout = 0x2869,
- BattlePayStartDistributionAssignToTargetResponse = 0x27ca,
- BattlePayStartPurchaseResponse = 0x27c9,
- BattlePayValidatePurchaseResponse = 0x285d,
+ AvailableHotfixes = 0x2595,
+ AzeriteRespecNpc = 0x27fa,
+ BagCleanupFinished = 0x2da7,
+ BarberShopResult = 0x26bb,
+ BatchPresenceSubscription = 0x285b,
+ BattlefieldList = 0x2927,
+ BattlefieldPortDenied = 0x292d,
+ BattlefieldStatusActive = 0x2923,
+ BattlefieldStatusFailed = 0x2926,
+ BattlefieldStatusNeedConfirmation = 0x2922,
+ BattlefieldStatusNone = 0x2925,
+ BattlefieldStatusQueued = 0x2924,
+ BattlefieldStatusWaitForGroups = 0x292f,
+ BattlegroundInfoThrottled = 0x292e,
+ BattlegroundInit = 0x2949,
+ BattlegroundPlayerJoined = 0x292b,
+ BattlegroundPlayerLeft = 0x292c,
+ BattlegroundPlayerPositions = 0x2928,
+ BattlegroundPoints = 0x2948,
+ BattlenetChallengeAbort = 0x278d,
+ BattlenetChallengeStart = 0x278c,
+ BattlenetNotification = 0x2808,
+ BattlenetResponse = 0x2807,
+ BattleNetConnectionStatus = 0x2809,
+ BattlePayAckFailed = 0x2787,
+ BattlePayBattlePetDelivered = 0x277c,
+ BattlePayCollectionItemDelivered = 0x277d,
+ BattlePayConfirmPurchase = 0x2786,
+ BattlePayDeliveryEnded = 0x277a,
+ BattlePayDeliveryStarted = 0x2779,
+ BattlePayDistributionUpdate = 0x2778,
+ BattlePayGetDistributionListResponse = 0x2776,
+ BattlePayDistributionUnrevoked = 0x2777,
+ BattlePayGetProductListResponse = 0x2774,
+ BattlePayGetPurchaseListResponse = 0x2775,
+ BattlePayMountDelivered = 0x277b,
+ BattlePayPurchaseUpdate = 0x2785,
+ BattlePayStartCheckout = 0x2825,
+ BattlePayStartDistributionAssignToTargetResponse = 0x2783,
+ BattlePayStartPurchaseResponse = 0x2782,
+ BattlePayValidatePurchaseResponse = 0x2819,
BattlePayVasGuildFollowInfo = 0x29e7,
BattlePayVasGuildMasterList = 0x29e6,
- BattlePetsHealed = 0x260b,
- BattlePetCageDateError = 0x26a6,
- BattlePetDeleted = 0x2608,
- BattlePetError = 0x2658,
- BattlePetJournal = 0x2607,
- BattlePetJournalLockAcquired = 0x2605,
- BattlePetJournalLockDenied = 0x2606,
- BattlePetLicenseChanged = 0x260c,
- BattlePetRestored = 0x260a,
- BattlePetRevoked = 0x2609,
- BattlePetSetMaxPets = 0x2603,
- BattlePetTrapLevel = 0x2602,
- BattlePetUpdates = 0x2601,
- BinderConfirm = 0x273f,
+ BattlePetsHealed = 0x25f0,
+ BattlePetCageDateError = 0x2676,
+ BattlePetDeleted = 0x25ed,
+ BattlePetError = 0x2635,
+ BattlePetJournal = 0x25ec,
+ BattlePetJournalLockAcquired = 0x25ea,
+ BattlePetJournalLockDenied = 0x25eb,
+ BattlePetLicenseChanged = 0x25f1,
+ BattlePetRestored = 0x25ef,
+ BattlePetRevoked = 0x25ee,
+ BattlePetSetMaxPets = 0x25e8,
+ BattlePetTrapLevel = 0x25e7,
+ BattlePetUpdates = 0x25e6,
+ BinderConfirm = 0x2700,
BindPointUpdate = 0x257d,
- BlackMarketBidOnItemResult = 0x2648,
- BlackMarketOpenResult = 0x2646,
- BlackMarketOutbid = 0x2649,
- BlackMarketRequestItemsResult = 0x2647,
- BlackMarketWon = 0x264a,
- BonusRollEmpty = 0x2665,
- BossKill = 0x27c8,
- BreakTarget = 0x266f,
+ BlackMarketBidOnItemResult = 0x2625,
+ BlackMarketOpenResult = 0x2623,
+ BlackMarketOutbid = 0x2626,
+ BlackMarketRequestItemsResult = 0x2624,
+ BlackMarketWon = 0x2627,
+ BonusRollEmpty = 0x2642,
+ BossKill = 0x294b,
+ BreakTarget = 0x2936,
BroadcastAchievement = 0x2bbc,
- BroadcastSummonCast = 0x28a8,
- BroadcastSummonResponse = 0x28a9,
- BuyFailed = 0x26fa,
- BuySucceeded = 0x26f9,
- CacheInfo = 0x2749,
- CacheVersion = 0x2748,
- CalendarClearPendingAction = 0x26cc,
- CalendarCommandResult = 0x26cd,
- CalendarCommunityInvite = 0x26bc,
- CalendarEventRemovedAlert = 0x26c4,
- CalendarEventUpdatedAlert = 0x26c5,
- CalendarInviteAdded = 0x26bd,
- CalendarInviteAlert = 0x26c1,
- CalendarInviteNotes = 0x26c6,
- CalendarInviteNotesAlert = 0x26c7,
- CalendarInviteRemoved = 0x26be,
- CalendarInviteRemovedAlert = 0x26c3,
- CalendarInviteStatus = 0x26bf,
- CalendarInviteStatusAlert = 0x26c2,
- CalendarModeratorStatus = 0x26c0,
- CalendarRaidLockoutAdded = 0x26c8,
- CalendarRaidLockoutRemoved = 0x26c9,
- CalendarRaidLockoutUpdated = 0x26ca,
- CalendarSendCalendar = 0x26ba,
- CalendarSendEvent = 0x26bb,
- CalendarSendNumPending = 0x26cb,
- CameraEffect = 0x276b,
- CancelAutoRepeat = 0x271b,
- CancelCombat = 0x2737,
+ BroadcastSummonCast = 0x285d,
+ BroadcastSummonResponse = 0x285e,
+ BuyFailed = 0x26c4,
+ BuySucceeded = 0x26c3,
+ CacheInfo = 0x2709,
+ CacheVersion = 0x2708,
+ CalendarClearPendingAction = 0x269b,
+ CalendarCommandResult = 0x269c,
+ CalendarCommunityInvite = 0x268b,
+ CalendarEventRemovedAlert = 0x2693,
+ CalendarEventUpdatedAlert = 0x2694,
+ CalendarInviteAdded = 0x268c,
+ CalendarInviteAlert = 0x2690,
+ CalendarInviteNotes = 0x2695,
+ CalendarInviteNotesAlert = 0x2696,
+ CalendarInviteRemoved = 0x268d,
+ CalendarInviteRemovedAlert = 0x2692,
+ CalendarInviteStatus = 0x268e,
+ CalendarInviteStatusAlert = 0x2691,
+ CalendarModeratorStatus = 0x268f,
+ CalendarRaidLockoutAdded = 0x2697,
+ CalendarRaidLockoutRemoved = 0x2698,
+ CalendarRaidLockoutUpdated = 0x2699,
+ CalendarSendCalendar = 0x2689,
+ CalendarSendEvent = 0x268a,
+ CalendarSendNumPending = 0x269a,
+ CameraEffect = 0x272a,
+ CancelAutoRepeat = 0x26e2,
+ CancelCombat = 0x2945,
CancelOrphanSpellVisual = 0x2c46,
- CancelScene = 0x2657,
+ CancelScene = 0x2634,
CancelSpellVisual = 0x2c44,
CancelSpellVisualKit = 0x2c48,
- CanDuelResult = 0x267a,
- CanRedeemTokenForBalanceResponse = 0x285c,
- CapturePointRemoved = 0x2599,
- CastFailed = 0x2c56,
+ CanDuelResult = 0x2941,
+ CanRedeemTokenForBalanceResponse = 0x2818,
+ CapturePointRemoved = 0x292a,
+ CastFailed = 0x2c57,
CategoryCooldown = 0x2c16,
- ChallengeModeComplete = 0x2622,
- ChallengeModeRequestLeadersResult = 0x2626,
- ChallengeModeReset = 0x2621,
- ChallengeModeStart = 0x261f,
- ChallengeModeUpdateDeathCount = 0x2620,
- ChangePlayerDifficultyResult = 0x273b,
- ChangeRealmTicketResponse = 0x284c,
+ ChallengeModeComplete = 0x2607,
+ ChallengeModeRequestLeadersResult = 0x260c,
+ ChallengeModeReset = 0x2606,
+ ChallengeModeStart = 0x2604,
+ ChallengeModeUpdateDeathCount = 0x2605,
+ ChangePlayerDifficultyResult = 0x3005,
+ ChangeRealmTicketResponse = 0x280a,
ChannelList = 0x2bc3,
ChannelNotify = 0x2bc0,
ChannelNotifyJoined = 0x2bc1,
ChannelNotifyLeft = 0x2bc2,
- CharacterCheckUpgradeResult = 0x2806,
- CharacterLoginFailed = 0x274a,
- CharacterObjectTestResponse = 0x27d2,
- CharacterRenameResult = 0x27ac,
- CharacterUpgradeAborted = 0x2805,
- CharacterUpgradeComplete = 0x2804,
- CharacterUpgradeManualUnrevokeResult = 0x2807,
- CharacterUpgradeStarted = 0x2803,
- CharCustomizeFailure = 0x2721,
- CharCustomizeSuccess = 0x2722,
- CharFactionChangeResult = 0x27f0,
+ CharacterCheckUpgradeResult = 0x27c0,
+ CharacterLoginFailed = 0x270a,
+ CharacterObjectTestResponse = 0x278b,
+ CharacterRenameResult = 0x2766,
+ CharacterUpgradeAborted = 0x27bf,
+ CharacterUpgradeComplete = 0x27be,
+ CharacterUpgradeManualUnrevokeResult = 0x27c1,
+ CharacterUpgradeStarted = 0x27bd,
+ CharCustomizeFailure = 0x26e6,
+ CharCustomizeSuccess = 0x26e7,
+ CharFactionChangeResult = 0x27aa,
Chat = 0x2bad,
ChatAutoResponded = 0x2bb8,
ChatDown = 0x2bbd,
@@ -976,205 +1007,241 @@ namespace Framework.Constants
ChatPlayerAmbiguous = 0x2bb0,
ChatPlayerNotfound = 0x2bb7,
ChatReconnect = 0x2bbf,
+ ChatRegionalServiceStatus = 0x2bc5,
ChatRestricted = 0x2bb3,
ChatServerMessage = 0x2bc4,
CheatIgnoreDimishingReturns = 0x2c12,
- CheckWargameEntry = 0x25a0,
- ClaimRafRewardResponse = 0x28b9,
+ CheckAbandonNpe = 0x3019,
+ CheckCharacterNameAvailabilityResult = 0x2584,
+ CheckWargameEntry = 0x2592,
+ ChromieTimeOpenNpc = 0x27ff,
+ ChromieTimeSelectExpansionSuccess = 0x2887,
+ ClaimRafRewardResponse = 0x286e,
ClearAllSpellCharges = 0x2c27,
- ClearBossEmotes = 0x25ce,
- ClearCooldown = 0x26ed,
+ ClearBossEmotes = 0x25bc,
+ ClearCooldown = 0x26b7,
ClearCooldowns = 0x2c26,
- ClearLossOfControl = 0x269e,
- ClearResurrect = 0x2580,
+ ClearLossOfControl = 0x266f,
+ ClearResurrect = 0x257f,
ClearSpellCharges = 0x2c28,
- ClearTarget = 0x26e4,
- CloseArtifactForge = 0x27e9,
- CloseHeartForge = 0x2874,
- ClubFinderErrorMessage = 0x28b1,
- ClubFinderGetClubPostingIdsResponse = 0x28b4,
- ClubFinderLookupClubPostingsList = 0x28b2,
- ClubFinderResponseCharacterApplicationList = 0x28af,
- ClubFinderResponsePostRecruitmentMessage = 0x28b3,
- ClubFinderUpdateApplications = 0x28b0,
- CoinRemoved = 0x262e,
- CombatEventFailed = 0x2672,
- CommentatorMapInfo = 0x274c,
- CommentatorPlayerInfo = 0x274d,
- CommentatorStateChanged = 0x274b,
- CommerceTokenGetCountResponse = 0x2819,
- CommerceTokenGetLogResponse = 0x2825,
- CommerceTokenGetMarketPriceResponse = 0x281b,
- CommerceTokenUpdate = 0x281a,
- ComplaintResult = 0x26db,
- CompleteShipmentResponse = 0x27e4,
- ConfirmPartyInvite = 0x285b,
+ ClearTarget = 0x2942,
+ ClearTreasurePickerCache = 0x2aa0,
+ CloseArtifactForge = 0x27a3,
+ CloseHeartForge = 0x282b,
+ CloseItemForge = 0x27a1,
+ ClubFinderErrorMessage = 0x2866,
+ ClubFinderGetClubPostingIdsResponse = 0x2869,
+ ClubFinderLookupClubPostingsList = 0x2867,
+ ClubFinderResponseCharacterApplicationList = 0x2864,
+ ClubFinderResponsePostRecruitmentMessage = 0x2868,
+ ClubFinderUpdateApplications = 0x2865,
+ CoinRemoved = 0x2614,
+ CombatEventFailed = 0x2939,
+ CommentatorMapInfo = 0x270c,
+ CommentatorPlayerInfo = 0x270d,
+ CommentatorStateChanged = 0x270b,
+ CommerceTokenGetCountResponse = 0x27d3,
+ CommerceTokenGetLogResponse = 0x27df,
+ CommerceTokenGetMarketPriceResponse = 0x27d5,
+ CommerceTokenUpdate = 0x27d4,
+ ComplaintResult = 0x26a9,
+ CompleteShipmentResponse = 0x279c,
+ ConfirmPartyInvite = 0x2817,
ConnectTo = 0x304d,
- ConquestFormulaConstants = 0x27cf,
- ConsoleWrite = 0x2655,
- ConsumableTokenBuyAtMarketPriceResponse = 0x2821,
- ConsumableTokenBuyChoiceRequired = 0x2820,
- ConsumableTokenCanVeteranBuyResponse = 0x281f,
- ConsumableTokenRedeemConfirmRequired = 0x2823,
- ConsumableTokenRedeemResponse = 0x2824,
- ContactList = 0x27d0,
- ContributionLastUpdateResponse = 0x2862,
- ControlUpdate = 0x2667,
- CooldownCheat = 0x277f,
- CooldownEvent = 0x26ec,
- CorpseLocation = 0x266e,
- CorpseReclaimDelay = 0x2791,
- CorpseTransportQuery = 0x2757,
- CreateChar = 0x2744,
- CreateShipmentResponse = 0x27e3,
- CriteriaDeleted = 0x2726,
- CriteriaUpdate = 0x2720,
- CrossedInebriationThreshold = 0x26f5,
- CustomLoadScreen = 0x25e4,
+ ConquestFormulaConstants = 0x2788,
+ ConsoleWrite = 0x2632,
+ ConsumableTokenBuyAtMarketPriceResponse = 0x27db,
+ ConsumableTokenBuyChoiceRequired = 0x27da,
+ ConsumableTokenCanVeteranBuyResponse = 0x27d9,
+ ConsumableTokenRedeemConfirmRequired = 0x27dd,
+ ConsumableTokenRedeemResponse = 0x27de,
+ ContactList = 0x2789,
+ ContributionLastUpdateResponse = 0x281e,
+ ControlUpdate = 0x2644,
+ ConvertItemsToCurrencyValue = 0x2890,
+ CooldownCheat = 0x273d,
+ CooldownEvent = 0x26b6,
+ CorpseLocation = 0x264b,
+ CorpseReclaimDelay = 0x274e,
+ CorpseTransportQuery = 0x2717,
+ CovenantCallingsAvailabilityResponse = 0x2aa2,
+ CovenantPreviewOpenNpc = 0x2800,
+ CovenantRenownOpenNpc = 0x288f,
+ CreateChar = 0x2704,
+ CreateShipmentResponse = 0x279b,
+ CriteriaDeleted = 0x26eb,
+ CriteriaUpdate = 0x26e5,
+ CrossedInebriationThreshold = 0x26bf,
+ CustomLoadScreen = 0x25ca,
DailyQuestsReset = 0x2a80,
- DamageCalcLog = 0x280e,
- DbReply = 0x25a2,
- DeathReleaseLoc = 0x2710,
- DebugMenuManagerFullUpdate = 0x2680,
+ DamageCalcLog = 0x27c8,
+ DbReply = 0x2594,
+ DeathReleaseLoc = 0x26d8,
+ DebugMenuManagerFullUpdate = 0x2651,
DefenseMessage = 0x2bb6,
- DeleteChar = 0x2745,
- DestroyArenaUnit = 0x2788,
- DestructibleBuildingDamage = 0x2738,
+ DeleteChar = 0x2705,
+ DeleteExpiredMissionsResult = 0x2976,
+ DestroyArenaUnit = 0x2746,
+ DestructibleBuildingDamage = 0x26fc,
DifferentInstanceFromParty = 0x258c,
- DisconnectReason = 0x2832,
- DisenchantCredit = 0x25bd,
- Dismount = 0x26e3,
+ DisconnectReason = 0x27f1,
+ DisenchantCredit = 0x25aa,
DismountResult = 0x257c,
DispelFailed = 0x2c30,
- DisplayGameError = 0x25b6,
- DisplayPlayerChoice = 0x26a7,
- DisplayPromotion = 0x266b,
+ DisplayGameError = 0x25a4,
+ DisplayPlayerChoice = 0x2ffc,
+ DisplayPromotion = 0x2648,
DisplayQuestPopup = 0x2a9d,
- DisplayToast = 0x263b,
- DisplayWorldText = 0x2831,
- DontAutoPushSpellsToActionBar = 0x25f8,
+ DisplayToast = 0x2621,
+ DisplayWorldText = 0x27f0,
+ DontAutoPushSpellsToActionBar = 0x25dd,
DropNewConnection = 0x304c,
- DuelArranged = 0x2674,
- DuelComplete = 0x2678,
- DuelCountdown = 0x2677,
- DuelInBounds = 0x2676,
- DuelOutOfBounds = 0x2675,
- DuelRequested = 0x2673,
- DuelWinner = 0x2679,
- DurabilityDamageDeath = 0x278d,
- Emote = 0x280f,
- EnableBarberShop = 0x26f0,
- EnchantmentLog = 0x2758,
- EncounterEnd = 0x27c7,
- EncounterStart = 0x27c6,
- EndLightningStorm = 0x26d7,
+ DuelArranged = 0x293b,
+ DuelComplete = 0x293f,
+ DuelCountdown = 0x293e,
+ DuelInBounds = 0x293d,
+ DuelOutOfBounds = 0x293c,
+ DuelRequested = 0x293a,
+ DuelWinner = 0x2940,
+ DurabilityDamageDeath = 0x274a,
+ Emote = 0x27c9,
+ EnableBarberShop = 0x26ba,
+ EnchantmentLog = 0x2718,
+ EncounterEnd = 0x2781,
+ EncounterStart = 0x2780,
+ EndLightningStorm = 0x26a6,
EnterEncryptedMode = 0x3049,
- EnumCharactersResult = 0x2584,
- EnumVasPurchaseStatesResponse = 0x2837,
+ EnumCharactersResult = 0x2583,
+ EnumVasPurchaseStatesResponse = 0x27f6,
EnvironmentalDamageLog = 0x2c21,
- EquipmentSetId = 0x26e5,
+ EquipmentSetId = 0x26af,
ExpectedSpamRecords = 0x2bb1,
- ExplorationExperience = 0x27a9,
- FactionBonusInfo = 0x276a,
- FailedPlayerCondition = 0x25e3,
- FailedQuestTurnIn = 0x2858,
- FeatureSystemStatus = 0x25d2,
- FeatureSystemStatusGlueScreen = 0x25d3,
- FeignDeathResisted = 0x278b,
- FishEscaped = 0x2703,
- FishNotHooked = 0x2702,
- FlightSplineSync = 0x2df7,
- ForcedDeathUpdate = 0x2711,
- ForceAnim = 0x2798,
- ForceObjectRelink = 0x266a,
- FriendStatus = 0x27d1,
- GameObjectActivateAnimKit = 0x25d7,
- GameObjectBase = 0x2875,
- GameObjectCustomAnim = 0x25d8,
- GameObjectDespawn = 0x25d9,
+ ExplorationExperience = 0x2763,
+ ExternalTransactionIdGenerated = 0x288e,
+ FactionBonusInfo = 0x2729,
+ FailedPlayerCondition = 0x2ffa,
+ FailedQuestTurnIn = 0x2814,
+ FeatureSystemStatus = 0x25c0,
+ FeatureSystemStatusGlueScreen = 0x25c1,
+ FeignDeathResisted = 0x2749,
+ FishEscaped = 0x26cd,
+ FishNotHooked = 0x26cc,
+ FlightSplineSync = 0x2e29,
+ ForcedDeathUpdate = 0x26d9,
+ ForceAnim = 0x2755,
+ ForceAnimations = 0x2756,
+ ForceObjectRelink = 0x2647,
+ FriendStatus = 0x278a,
+ GainMawPower = 0x27e4,
+ GameObjectActivateAnimKit = 0x25c3,
+ GameObjectBase = 0x282c,
+ GameObjectCustomAnim = 0x25c4,
+ GameObjectDespawn = 0x25c5,
GameObjectPlaySpellVisual = 0x2c4b,
GameObjectPlaySpellVisualKit = 0x2c4a,
- GameObjectResetState = 0x2762,
- GameObjectSetStateLocal = 0x2848,
- GameObjectUILink = 0x275f,
- GameSpeedSet = 0x26b0,
- GameTimeSet = 0x2751,
- GameTimeUpdate = 0x2750,
- GarrisonAddFollowerResult = 0x2902,
- GarrisonAddMissionResult = 0x2906,
- GarrisonAssignFollowerToBuildingResult = 0x2918,
- GarrisonBuildingActivated = 0x28fb,
- GarrisonBuildingLandmarks = 0x292c,
- GarrisonBuildingRemoved = 0x28f4,
- GarrisonBuildingSetActiveSpecializationResult = 0x28f6,
- GarrisonClearAllFollowersExhaustion = 0x2916,
- GarrisonCompleteMissionResult = 0x2908,
- GarrisonCreateResult = 0x28fc,
- GarrisonDeleteResult = 0x2920,
- GarrisonFollowerCategories = 0x2901,
- GarrisonFollowerChangedAbilities = 0x2914,
- GarrisonFollowerChangedDurability = 0x2904,
- GarrisonFollowerChangedItemLevel = 0x2913,
- GarrisonFollowerChangedStatus = 0x2915,
- GarrisonFollowerChangedXp = 0x2912,
- GarrisonIsUpgradeableResult = 0x2929,
- GarrisonLearnBlueprintResult = 0x28f7,
- GarrisonLearnSpecializationResult = 0x28f5,
- GarrisonListFollowersCheatResult = 0x2905,
- GarrisonListMissionsCheatResult = 0x292a,
- GarrisonMissionAreaBonusAdded = 0x2910,
- GarrisonMissionBonusRollResult = 0x290c,
- GarrisonMissionListUpdate = 0x290e,
- GarrisonMissionRewardResponse = 0x292d,
- GarrisonMissionUpdateCanStart = 0x2911,
- GarrisonNumFollowerActivationsRemaining = 0x2917,
- GarrisonOpenArchitect = 0x2921,
- GarrisonOpenMissionNpc = 0x2923,
- GarrisonOpenRecruitmentNpc = 0x291c,
- GarrisonOpenTalentNpc = 0x291d,
- GarrisonOpenTradeskillNpc = 0x2922,
- GarrisonPlaceBuildingResult = 0x28f3,
- GarrisonPlotPlaced = 0x28f1,
- GarrisonPlotRemoved = 0x28f2,
- GarrisonRecallPortalLastUsedTime = 0x290a,
- GarrisonRecallPortalUsed = 0x290b,
- GarrisonRecruitmentFollowersGenerated = 0x291e,
- GarrisonRecruitFollowerResult = 0x291f,
- GarrisonRemoteInfo = 0x28fa,
- GarrisonRemoveFollowerFromBuildingResult = 0x2919,
- GarrisonRemoveFollowerResult = 0x2903,
- GarrisonRequestBlueprintAndSpecializationDataResult = 0x28f9,
- GarrisonStartMissionResult = 0x2907,
- GarrisonUnlearnBlueprintResult = 0x28f8,
- GarrisonUpgradeResult = 0x28fd,
+ GameObjectResetState = 0x2723,
+ GameObjectSetStateLocal = 0x2806,
+ GameObjectUiLink = 0x271f,
+ GameSpeedSet = 0x267f,
+ GameTimeSet = 0x2711,
+ GameTimeUpdate = 0x2710,
+ GarrisonActivateMissionBonusAbility = 0x2978,
+ GarrisonAddEvent = 0x299b,
+ GarrisonAddFollowerResult = 0x296a,
+ GarrisonAddMissionResult = 0x296e,
+ GarrisonApplyTalentSocketDataChanges = 0x29a0,
+ GarrisonAssignFollowerToBuildingResult = 0x2980,
+ GarrisonBuildingActivated = 0x295f,
+ GarrisonBuildingRemoved = 0x2958,
+ GarrisonBuildingSetActiveSpecializationResult = 0x295a,
+ GarrisonChangeMissionStartTimeResult = 0x2971,
+ GarrisonClearCollection = 0x299a,
+ GarrisonClearEventList = 0x299d,
+ GarrisonCollectionRemoveEntry = 0x2999,
+ GarrisonCollectionUpdateEntry = 0x2998,
+ GarrisonCompleteBuildingConstructionResult = 0x2990,
+ GarrisonCompleteMissionResult = 0x2970,
+ GarrisonCreateResult = 0x2960,
+ GarrisonDeleteMissionResult = 0x2977,
+ GarrisonDeleteResult = 0x2989,
+ GarrisonFollowerActivationsSet = 0x297f,
+ GarrisonFollowerChangedFlags = 0x297d,
+ GarrisonFollowerChangedItemLevel = 0x297b,
+ GarrisonFollowerChangedQuality = 0x297c,
+ GarrisonFollowerChangedXp = 0x297a,
+ GarrisonFollowerFatigueCleared = 0x297e,
+ GarrisonGenerateFollowersResult = 0x2987,
+ GarrisonGetClassSpecCategoryInfoResult = 0x2969,
+ GarrisonGetRecallPortalLastUsedTimeResult = 0x2972,
+ GarrisonIsUpgradeableResponse = 0x2992,
+ GarrisonLearnBlueprintResult = 0x295b,
+ GarrisonLearnSpecializationResult = 0x2959,
+ GarrisonListCompletedMissionsCheatResult = 0x2993,
+ GarrisonListFollowersCheatResult = 0x296d,
+ GarrisonMapDataResponse = 0x2995,
+ GarrisonMissionBonusRollResult = 0x2974,
+ GarrisonMissionRequestRewardInfoResponse = 0x2996,
+ GarrisonMissionStartConditionUpdate = 0x2979,
+ GarrisonOpenArchitect = 0x298a,
+ GarrisonOpenCrafter = 0x298b,
+ GarrisonOpenMissionNpc = 0x298c,
+ GarrisonOpenRecruitmentNpc = 0x2984,
+ GarrisonOpenTalentNpc = 0x2985,
+ GarrisonPlaceBuildingResult = 0x2957,
+ GarrisonPlotPlaced = 0x2955,
+ GarrisonPlotRemoved = 0x2956,
+ GarrisonRecruitFollowerResult = 0x2988,
+ GarrisonRemoteInfo = 0x295e,
+ GarrisonRemoveEvent = 0x299c,
+ GarrisonRemoveFollowerAbilityResult = 0x2983,
+ GarrisonRemoveFollowerFromBuildingResult = 0x2981,
+ GarrisonRemoveFollowerResult = 0x296b,
+ GarrisonRenameFollowerResult = 0x2982,
+ GarrisonRequestBlueprintAndSpecializationDataResult = 0x295d,
+ GarrisonResearchTalentResult = 0x2962,
+ GarrisonResetTalentTree = 0x2967,
+ GarrisonResetTalentTreeSocketData = 0x2968,
+ GarrisonStartMissionResult = 0x296f,
+ GarrisonSwapBuildingsResponse = 0x298f,
+ GarrisonSwitchTalentTreeBranch = 0x299e,
+ GarrisonTalentCompleted = 0x2963,
+ GarrisonTalentRemoved = 0x2964,
+ GarrisonTalentRemoveSocketData = 0x2966,
+ GarrisonTalentUpdateSocketData = 0x2965,
+ GarrisonTalentWorldQuestUnlocksResponse = 0x299f,
+ GarrisonUnlearnBlueprintResult = 0x295c,
+ GarrisonUpdateFollower = 0x296c,
+ GarrisonUpdateGarrisonMonumentSelections = 0x2991,
+ GarrisonUpgradeResult = 0x2961,
+ GarrisonUseRecallPortalResult = 0x2973,
GenerateRandomCharacterNameResult = 0x2585,
- GenerateSsoTokenResponse = 0x2863,
- GetAccountCharacterListResult = 0x27aa,
- GetDisplayedTrophyListResponse = 0x2928,
- GetGarrisonInfoResult = 0x28f0,
- GetLandingPageShipmentsResponse = 0x27e6,
- GetRemainingGameTimeResponse = 0x2822,
- GetSelectedTrophyIdResponse = 0x280b,
- GetShipmentsOfTypeResponse = 0x27e5,
- GetShipmentInfoResponse = 0x27e1,
- GetTrophyListResponse = 0x280a,
- GetVasAccountCharacterListResult = 0x2833,
- GetVasTransferTargetRealmListResult = 0x2834,
- GmPlayerInfo = 0x277e,
- GmRequestPlayerInfo = 0x25ef,
- GmTicketCaseStatus = 0x26d2,
- GmTicketSystemStatus = 0x26d1,
- GodMode = 0x273e,
+ GenerateSsoTokenResponse = 0x281f,
+ GetAccountCharacterListResult = 0x2764,
+ GetGarrisonInfoResult = 0x2954,
+ GetLandingPageShipmentsResponse = 0x279e,
+ GetRemainingGameTimeResponse = 0x27dc,
+ GetSelectedTrophyIdResponse = 0x27c5,
+ GetShipmentsOfTypeResponse = 0x279d,
+ GetShipmentInfoResponse = 0x2799,
+ GetTrophyListResponse = 0x27c4,
+ GetVasAccountCharacterListResult = 0x27f2,
+ GetVasTransferTargetRealmListResult = 0x27f3,
+ GmPlayerInfo = 0x3006,
+ GmRequestPlayerInfo = 0x2ffb,
+ GmTicketCaseStatus = 0x26a1,
+ GmTicketSystemStatus = 0x26a0,
+ GodMode = 0x26ff,
GossipComplete = 0x2a96,
GossipMessage = 0x2a97,
- GossipPoi = 0x27de,
- GossipTextUpdate = 0x2a98,
- GroupActionThrottled = 0x259e,
- GroupAutoKick = 0x27dc,
- GroupDecline = 0x27d9,
- GroupDestroyed = 0x27db,
- GroupNewLeader = 0x264d,
- GroupUninvite = 0x27da,
+ GossipPoi = 0x2796,
+ GossipQuestUpdate = 0x2a98,
+ GossipRefreshOptions = 0x2aa5,
+ GroupActionThrottled = 0x2590,
+ GroupAutoKick = 0x2794,
+ GroupDecline = 0x2791,
+ GroupDestroyed = 0x2793,
+ GroupNewLeader = 0x262a,
+ GroupUninvite = 0x2792,
GuildAchievementDeleted = 0x29c5,
GuildAchievementEarned = 0x29c4,
GuildAchievementMembers = 0x29c7,
@@ -1188,7 +1255,6 @@ namespace Framework.Constants
GuildCommandResult = 0x29ba,
GuildCriteriaDeleted = 0x29c6,
GuildCriteriaUpdate = 0x29c3,
- GuildEventAwayChange = 0x29f0,
GuildEventBankContentsChanged = 0x29f8,
GuildEventBankMoneyChanged = 0x29f7,
GuildEventDisbanded = 0x29ed,
@@ -1200,6 +1266,7 @@ namespace Framework.Constants
GuildEventPresenceChange = 0x29ef,
GuildEventRanksUpdated = 0x29f1,
GuildEventRankChanged = 0x29f2,
+ GuildEventStatusChange = 0x29f0,
GuildEventTabAdded = 0x29f3,
GuildEventTabDeleted = 0x29f4,
GuildEventTabModified = 0x29f5,
@@ -1208,7 +1275,7 @@ namespace Framework.Constants
GuildInvite = 0x29ca,
GuildInviteDeclined = 0x29e8,
GuildInviteExpired = 0x29e9,
- GuildItemLooted = 0x29d4,
+ GuildItemLootedNotify = 0x29d4,
GuildKnownRecipes = 0x29be,
GuildMembersWithRecipe = 0x29bf,
GuildMemberDailyReset = 0x29e4,
@@ -1228,60 +1295,62 @@ namespace Framework.Constants
GuildRoster = 0x29bb,
GuildRosterUpdate = 0x29bc,
GuildSendRankChange = 0x29b9,
- HealthUpdate = 0x2706,
- HighestThreatUpdate = 0x2717,
- HotfixConnect = 0x25a5,
- HotfixMessage = 0x25a4,
- InitializeFactions = 0x2769,
- InitialSetup = 0x2581,
- InitWorldStates = 0x278e,
- InspectResult = 0x2651,
- InstanceEncounterChangePriority = 0x27f6,
- InstanceEncounterDisengageUnit = 0x27f5,
- InstanceEncounterEnd = 0x27fe,
- InstanceEncounterEngageUnit = 0x27f4,
- InstanceEncounterGainCombatResurrectionCharge = 0x2800,
- InstanceEncounterInCombatResurrection = 0x27ff,
- InstanceEncounterObjectiveComplete = 0x27f9,
- InstanceEncounterObjectiveStart = 0x27f8,
- InstanceEncounterObjectiveUpdate = 0x27fd,
- InstanceEncounterPhaseShiftChanged = 0x2801,
- InstanceEncounterStart = 0x27fa,
- InstanceEncounterTimerStart = 0x27f7,
- InstanceEncounterUpdateAllowReleaseInProgress = 0x27fc,
- InstanceEncounterUpdateSuppressRelease = 0x27fb,
- InstanceGroupSizeChanged = 0x273c,
- InstanceInfo = 0x2654,
- InstanceReset = 0x26b5,
- InstanceResetFailed = 0x26b6,
- InstanceSaveCreated = 0x27c5,
- InvalidatePageText = 0x270c,
- InvalidatePlayer = 0x26da,
- InvalidPromotionCode = 0x2799,
- InventoryChangeFailure = 0x2767,
- InventoryFixupComplete = 0x285a,
- InventoryFullOverflow = 0x286b,
- IslandsMissionNpc = 0x283d,
- IslandAzeriteGain = 0x27a6,
- IslandComplete = 0x27a7,
+ HealthUpdate = 0x26d0,
+ HighestThreatUpdate = 0x26de,
+ HotfixConnect = 0x2597,
+ HotfixMessage = 0x2596,
+ InitializeFactions = 0x2728,
+ InitialSetup = 0x2580,
+ InitWorldStates = 0x274b,
+ InspectResult = 0x262e,
+ InstanceEncounterChangePriority = 0x27b0,
+ InstanceEncounterDisengageUnit = 0x27af,
+ InstanceEncounterEnd = 0x27b8,
+ InstanceEncounterEngageUnit = 0x27ae,
+ InstanceEncounterGainCombatResurrectionCharge = 0x27ba,
+ InstanceEncounterInCombatResurrection = 0x27b9,
+ InstanceEncounterObjectiveComplete = 0x27b3,
+ InstanceEncounterObjectiveStart = 0x27b2,
+ InstanceEncounterObjectiveUpdate = 0x27b7,
+ InstanceEncounterPhaseShiftChanged = 0x27bb,
+ InstanceEncounterStart = 0x27b4,
+ InstanceEncounterTimerStart = 0x27b1,
+ InstanceEncounterUpdateAllowReleaseInProgress = 0x27b6,
+ InstanceEncounterUpdateSuppressRelease = 0x27b5,
+ InstanceGroupSizeChanged = 0x26fd,
+ InstanceInfo = 0x2631,
+ InstanceReset = 0x2684,
+ InstanceResetFailed = 0x2685,
+ InstanceSaveCreated = 0x277f,
+ InterruptPowerRegen = 0x2c59,
+ InvalidatePageText = 0x26d4,
+ InvalidatePlayer = 0x2fff,
+ InvalidPromotionCode = 0x2757,
+ InventoryChangeFailure = 0x2da5,
+ InventoryFixupComplete = 0x2816,
+ InventoryFullOverflow = 0x2827,
+ IslandsMissionNpc = 0x27fc,
+ IslandAzeriteGain = 0x2760,
+ IslandComplete = 0x2761,
IsQuestCompleteResponse = 0x2a83,
- ItemChanged = 0x2729,
- ItemCooldown = 0x280d,
- ItemEnchantTimeUpdate = 0x279b,
- ItemExpirePurchaseRefund = 0x25b3,
- ItemInteractionComplete = 0x28ce,
- ItemPurchaseRefundResult = 0x25b1,
- ItemPushResult = 0x263a,
- ItemTimeUpdate = 0x279a,
- KickReason = 0x26b8,
+ ItemChanged = 0x26ee,
+ ItemCooldown = 0x27c7,
+ ItemEnchantTimeUpdate = 0x2759,
+ ItemExpirePurchaseRefund = 0x25a3,
+ ItemInteractionComplete = 0x2886,
+ ItemPurchaseRefundResult = 0x25a1,
+ ItemPushResult = 0x2620,
+ ItemTimeUpdate = 0x2758,
+ KickReason = 0x2687,
LearnedSpells = 0x2c4d,
- LearnPvpTalentFailed = 0x25eb,
- LearnTalentFailed = 0x25ea,
- LegacyLootRules = 0x2876,
- LevelLinkingResult = 0x28b7,
- LevelUpInfo = 0x2728,
+ LearnPvpTalentFailed = 0x25d1,
+ LearnTalentFailed = 0x25d0,
+ LegacyLootRules = 0x282d,
+ LevelLinkingResult = 0x286c,
+ LevelUpInfo = 0x26ed,
LfgBootPlayer = 0x2a35,
LfgDisabled = 0x2a33,
+ LfgExpandSearchPrompt = 0x2a3b,
LfgInstanceShutdownCountdown = 0x2a25,
LfgJoinResult = 0x2a1c,
LfgListApplicantListUpdate = 0x2a2b,
@@ -1313,248 +1382,257 @@ namespace Framework.Constants
LfGuildCommandResult = 0x29d0,
LfGuildPost = 0x29cd,
LfGuildRecruits = 0x29cf,
- LiveRegionAccountRestoreResult = 0x27b8,
- LiveRegionCharacterCopyResult = 0x27b6,
- LiveRegionGetAccountCharacterListResult = 0x27ab,
- LoadCufProfiles = 0x25cf,
- LoadEquipmentSet = 0x2753,
- LoginSetTimeSpeed = 0x2752,
- LoginVerifyWorld = 0x25ae,
- LogoutCancelAck = 0x26b4,
- LogoutComplete = 0x26b3,
- LogoutResponse = 0x26b2,
- LogXpGain = 0x2724,
- LootAllPassed = 0x2638,
- LootList = 0x2787,
- LootMoneyNotify = 0x2633,
- LootRelease = 0x2632,
- LootReleaseAll = 0x2631,
- LootRemoved = 0x262d,
- LootResponse = 0x262c,
- LootRoll = 0x2635,
- LootRollsComplete = 0x2637,
- LootRollWon = 0x2639,
- LossOfControlAuraUpdate = 0x269b,
- MailCommandResult = 0x265b,
- MailListResult = 0x279c,
- MailQueryNextTimeResult = 0x279d,
- MapObjectivesInit = 0x27a5,
- MapObjEvents = 0x25da,
- MasterLootCandidateList = 0x2636,
+ LiveRegionAccountRestoreResult = 0x2771,
+ LiveRegionCharacterCopyResult = 0x2770,
+ LiveRegionGetAccountCharacterListResult = 0x2765,
+ LiveRegionKeyBindingsCopyResult = 0x2772,
+ LoadCufProfiles = 0x25bd,
+ LoadEquipmentSet = 0x2713,
+ LoginSetTimeSpeed = 0x2712,
+ LoginVerifyWorld = 0x259e,
+ LogoutCancelAck = 0x2683,
+ LogoutComplete = 0x2682,
+ LogoutResponse = 0x2681,
+ LogXpGain = 0x26e9,
+ LootAllPassed = 0x261e,
+ LootList = 0x2745,
+ LootMoneyNotify = 0x2619,
+ LootRelease = 0x2618,
+ LootReleaseAll = 0x2617,
+ LootRemoved = 0x2613,
+ LootResponse = 0x2612,
+ LootRoll = 0x261b,
+ LootRollsComplete = 0x261d,
+ LootRollWon = 0x261f,
+ LossOfControlAuraUpdate = 0x266c,
+ MailCommandResult = 0x2638,
+ MailListResult = 0x275a,
+ MailQueryNextTimeResult = 0x275b,
+ MapObjectivesInit = 0x294a,
+ MapObjEvents = 0x25c6,
+ MasterLootCandidateList = 0x261c,
MessageBox = 0x2576,
- MinimapPing = 0x2701,
+ MinimapPing = 0x26cb,
MirrorImageComponentedData = 0x2c14,
MirrorImageCreatureData = 0x2c13,
- MissileCancel = 0x25db,
- ModifyCooldown = 0x27ad,
+ MissileCancel = 0x25c7,
+ ModifyCooldown = 0x2767,
Motd = 0x2baf,
MountResult = 0x257b,
- MovementEnforcementAlert = 0x28a5,
- MoveApplyMovementForce = 0x2de1,
- MoveDisableCollision = 0x2ddd,
- MoveDisableDoubleJump = 0x2dcb,
- MoveDisableGravity = 0x2ddb,
- MoveDisableTransitionBetweenSwimAndFly = 0x2dda,
- MoveEnableCollision = 0x2dde,
- MoveEnableDoubleJump = 0x2dca,
- MoveEnableGravity = 0x2ddc,
- MoveEnableTransitionBetweenSwimAndFly = 0x2dd9,
- MoveKnockBack = 0x2dd1,
- MoveRemoveMovementForce = 0x2de2,
- MoveRoot = 0x2dc7,
- MoveSetActiveMover = 0x2da3,
- MoveSetCanFly = 0x2dd3,
- MoveSetCanTurnWhileFalling = 0x2dd5,
- MoveSetCollisionHeight = 0x2ddf,
- MoveSetCompoundState = 0x2de3,
- MoveSetFeatherFall = 0x2dcd,
- MoveSetFlightBackSpeed = 0x2dc3,
- MoveSetFlightSpeed = 0x2dc2,
- MoveSetHovering = 0x2dcf,
- MoveSetIgnoreMovementForces = 0x2dd7,
- MoveSetLandWalk = 0x2dcc,
- MoveSetModMovementForceMagnitude = 0x2db4,
- MoveSetNormalFall = 0x2dce,
- MoveSetPitchRate = 0x2dc6,
- MoveSetRunBackSpeed = 0x2dbf,
- MoveSetRunSpeed = 0x2dbe,
- MoveSetSwimBackSpeed = 0x2dc1,
- MoveSetSwimSpeed = 0x2dc0,
- MoveSetTurnRate = 0x2dc5,
- MoveSetVehicleRecId = 0x2de0,
- MoveSetWalkSpeed = 0x2dc4,
- MoveSetWaterWalk = 0x2dc9,
- MoveSkipTime = 0x2de4,
- MoveSplineDisableCollision = 0x2de9,
- MoveSplineDisableGravity = 0x2de7,
- MoveSplineEnableCollision = 0x2dea,
- MoveSplineEnableGravity = 0x2de8,
- MoveSplineRoot = 0x2de5,
- MoveSplineSetFeatherFall = 0x2deb,
- MoveSplineSetFlightBackSpeed = 0x2dba,
- MoveSplineSetFlightSpeed = 0x2db9,
- MoveSplineSetFlying = 0x2df5,
- MoveSplineSetHover = 0x2ded,
- MoveSplineSetLandWalk = 0x2df0,
- MoveSplineSetNormalFall = 0x2dec,
- MoveSplineSetPitchRate = 0x2dbd,
- MoveSplineSetRunBackSpeed = 0x2db6,
- MoveSplineSetRunMode = 0x2df3,
- MoveSplineSetRunSpeed = 0x2db5,
- MoveSplineSetSwimBackSpeed = 0x2db8,
- MoveSplineSetSwimSpeed = 0x2db7,
- MoveSplineSetTurnRate = 0x2dbc,
- MoveSplineSetWalkMode = 0x2df4,
- MoveSplineSetWalkSpeed = 0x2dbb,
- MoveSplineSetWaterWalk = 0x2def,
- MoveSplineStartSwim = 0x2df1,
- MoveSplineStopSwim = 0x2df2,
- MoveSplineUnroot = 0x2de6,
- MoveSplineUnsetFlying = 0x2df6,
- MoveSplineUnsetHover = 0x2dee,
- MoveTeleport = 0x2dd2,
- MoveUnroot = 0x2dc8,
- MoveUnsetCanFly = 0x2dd4,
- MoveUnsetCanTurnWhileFalling = 0x2dd6,
- MoveUnsetHovering = 0x2dd0,
- MoveUnsetIgnoreMovementForces = 0x2dd8,
- MoveUpdate = 0x2dae,
- MoveUpdateApplyMovementForce = 0x2db2,
- MoveUpdateCollisionHeight = 0x2dad,
- MoveUpdateFlightBackSpeed = 0x2daa,
- MoveUpdateFlightSpeed = 0x2da9,
- MoveUpdateKnockBack = 0x2db0,
- MoveUpdateModMovementForceMagnitude = 0x2db1,
- MoveUpdatePitchRate = 0x2dac,
- MoveUpdateRemoveMovementForce = 0x2db3,
- MoveUpdateRunBackSpeed = 0x2da5,
- MoveUpdateRunSpeed = 0x2da4,
- MoveUpdateSwimBackSpeed = 0x2da8,
- MoveUpdateSwimSpeed = 0x2da7,
- MoveUpdateTeleport = 0x2daf,
- MoveUpdateTurnRate = 0x2dab,
- MoveUpdateWalkSpeed = 0x2da6,
- MythicPlusAllMapStats = 0x2624,
- MythicPlusCurrentAffixes = 0x2625,
- MythicPlusNewSeasonRecord = 0x2629,
- MythicPlusNewWeekRecord = 0x2628,
- MythicPlusWeeklyRewardResponse = 0x2623,
- NeutralPlayerFactionSelectResult = 0x25f3,
- NewTaxiPath = 0x26ad,
- NewWorld = 0x25ad,
+ MovementEnforcementAlert = 0x285c,
+ MoveApplyMovementForce = 0x2e13,
+ MoveDisableCollision = 0x2e0f,
+ MoveDisableDoubleJump = 0x2dfd,
+ MoveDisableGravity = 0x2e0d,
+ MoveDisableTransitionBetweenSwimAndFly = 0x2e0c,
+ MoveEnableCollision = 0x2e10,
+ MoveEnableDoubleJump = 0x2dfc,
+ MoveEnableGravity = 0x2e0e,
+ MoveEnableTransitionBetweenSwimAndFly = 0x2e0b,
+ MoveKnockBack = 0x2e03,
+ MoveRemoveMovementForce = 0x2e14,
+ MoveRoot = 0x2df9,
+ MoveSetActiveMover = 0x2dd5,
+ MoveSetCanFly = 0x2e05,
+ MoveSetCanTurnWhileFalling = 0x2e07,
+ MoveSetCollisionHeight = 0x2e11,
+ MoveSetCompoundState = 0x2e15,
+ MoveSetFeatherFall = 0x2dff,
+ MoveSetFlightBackSpeed = 0x2df5,
+ MoveSetFlightSpeed = 0x2df4,
+ MoveSetHovering = 0x2e01,
+ MoveSetIgnoreMovementForces = 0x2e09,
+ MoveSetLandWalk = 0x2dfe,
+ MoveSetModMovementForceMagnitude = 0x2de6,
+ MoveSetNormalFall = 0x2e00,
+ MoveSetPitchRate = 0x2df8,
+ MoveSetRunBackSpeed = 0x2df1,
+ MoveSetRunSpeed = 0x2df0,
+ MoveSetSwimBackSpeed = 0x2df3,
+ MoveSetSwimSpeed = 0x2df2,
+ MoveSetTurnRate = 0x2df7,
+ MoveSetVehicleRecId = 0x2e12,
+ MoveSetWalkSpeed = 0x2df6,
+ MoveSetWaterWalk = 0x2dfb,
+ MoveSkipTime = 0x2e16,
+ MoveSplineDisableCollision = 0x2e1b,
+ MoveSplineDisableGravity = 0x2e19,
+ MoveSplineEnableCollision = 0x2e1c,
+ MoveSplineEnableGravity = 0x2e1a,
+ MoveSplineRoot = 0x2e17,
+ MoveSplineSetFeatherFall = 0x2e1d,
+ MoveSplineSetFlightBackSpeed = 0x2dec,
+ MoveSplineSetFlightSpeed = 0x2deb,
+ MoveSplineSetFlying = 0x2e27,
+ MoveSplineSetHover = 0x2e1f,
+ MoveSplineSetLandWalk = 0x2e22,
+ MoveSplineSetNormalFall = 0x2e1e,
+ MoveSplineSetPitchRate = 0x2def,
+ MoveSplineSetRunBackSpeed = 0x2de8,
+ MoveSplineSetRunMode = 0x2e25,
+ MoveSplineSetRunSpeed = 0x2de7,
+ MoveSplineSetSwimBackSpeed = 0x2dea,
+ MoveSplineSetSwimSpeed = 0x2de9,
+ MoveSplineSetTurnRate = 0x2dee,
+ MoveSplineSetWalkMode = 0x2e26,
+ MoveSplineSetWalkSpeed = 0x2ded,
+ MoveSplineSetWaterWalk = 0x2e21,
+ MoveSplineStartSwim = 0x2e23,
+ MoveSplineStopSwim = 0x2e24,
+ MoveSplineUnroot = 0x2e18,
+ MoveSplineUnsetFlying = 0x2e28,
+ MoveSplineUnsetHover = 0x2e20,
+ MoveTeleport = 0x2e04,
+ MoveUnroot = 0x2dfa,
+ MoveUnsetCanFly = 0x2e06,
+ MoveUnsetCanTurnWhileFalling = 0x2e08,
+ MoveUnsetHovering = 0x2e02,
+ MoveUnsetIgnoreMovementForces = 0x2e0a,
+ MoveUpdate = 0x2de0,
+ MoveUpdateApplyMovementForce = 0x2de4,
+ MoveUpdateCollisionHeight = 0x2ddf,
+ MoveUpdateFlightBackSpeed = 0x2ddc,
+ MoveUpdateFlightSpeed = 0x2ddb,
+ MoveUpdateKnockBack = 0x2de2,
+ MoveUpdateModMovementForceMagnitude = 0x2de3,
+ MoveUpdatePitchRate = 0x2dde,
+ MoveUpdateRemoveMovementForce = 0x2de5,
+ MoveUpdateRunBackSpeed = 0x2dd7,
+ MoveUpdateRunSpeed = 0x2dd6,
+ MoveUpdateSwimBackSpeed = 0x2dda,
+ MoveUpdateSwimSpeed = 0x2dd9,
+ MoveUpdateTeleport = 0x2de1,
+ MoveUpdateTurnRate = 0x2ddd,
+ MoveUpdateWalkSpeed = 0x2dd8,
+ MultiFloorLeaveFloor = 0x27e1,
+ MultiFloorNewFloor = 0x27e0,
+ MythicPlusAllMapStats = 0x2609,
+ MythicPlusCurrentAffixes = 0x260b,
+ MythicPlusNewSeasonRecord = 0x260f,
+ MythicPlusNewWeekRecord = 0x260e,
+ MythicPlusSeasonData = 0x260a,
+ MythicPlusWeeklyRewardResponse = 0x2608,
+ NeutralPlayerFactionSelectResult = 0x25d8,
+ NewTaxiPath = 0x267c,
+ NewWorld = 0x259d,
NotifyDestLocSpellCast = 0x2c43,
- NotifyMissileTrajectoryCollision = 0x26d9,
- NotifyMoney = 0x25b0,
- NotifyReceivedMail = 0x265c,
- OfferPetitionError = 0x26e9,
- OnCancelExpectedRideVehicleAura = 0x2725,
- OnMonsterMove = 0x2da2,
- OpenArtifactForge = 0x27e8,
- OpenContainer = 0x2768,
- OpenHeartForge = 0x2873,
+ NotifyMissileTrajectoryCollision = 0x26a8,
+ NotifyMoney = 0x25a0,
+ NotifyReceivedMail = 0x2639,
+ OfferPetitionError = 0x26b3,
+ OnCancelExpectedRideVehicleAura = 0x26ea,
+ OnMonsterMove = 0x2dd4,
+ OpenAnimaDiversionUi = 0x2720,
+ OpenArtifactForge = 0x27a2,
+ OpenContainer = 0x2da6,
+ OpenHeartForge = 0x282a,
+ OpenItemForge = 0x27a0,
OpenLfgDungeonFinder = 0x2a31,
- OpenShipmentNpcFromGossip = 0x27e0,
- OpenShipmentNpcResult = 0x27e2,
- OverrideLight = 0x26ef,
- PageText = 0x275e,
- PartyCommandResult = 0x27dd,
- PartyInvite = 0x25d0,
- PartyKillLog = 0x27a1,
- PartyMemberFullState = 0x279f,
- PartyMemberPartialState = 0x279e,
- PartyNotifyLfgLeaderChange = 0x28cf,
- PartyUpdate = 0x260d,
- PauseMirrorTimer = 0x2755,
- PendingRaidLock = 0x2736,
- PetitionAlreadySigned = 0x25b9,
+ OpenShipmentNpcFromGossip = 0x2798,
+ OpenShipmentNpcResult = 0x279a,
+ OverrideLight = 0x26b9,
+ PageText = 0x271e,
+ PartyCommandResult = 0x2795,
+ PartyInvite = 0x25be,
+ PartyKillLog = 0x275e,
+ PartyMemberFullState = 0x275d,
+ PartyMemberPartialState = 0x275c,
+ PartyNotifyLfgLeaderChange = 0x288c,
+ PartyUpdate = 0x25f2,
+ PauseMirrorTimer = 0x2715,
+ PendingRaidLock = 0x26fb,
+ PetitionAlreadySigned = 0x25a6,
PetitionRenameGuildResponse = 0x29fa,
- PetitionShowList = 0x26f2,
- PetitionShowSignatures = 0x26f3,
- PetitionSignResults = 0x2793,
- PetActionFeedback = 0x2790,
- PetActionSound = 0x26cf,
- PetAdded = 0x25aa,
- PetBattleChatRestricted = 0x261a,
- PetBattleDebugQueueDumpResponse = 0x26a2,
- PetBattleFinalizeLocation = 0x2613,
- PetBattleFinalRound = 0x2618,
- PetBattleFinished = 0x2619,
- PetBattleFirstRound = 0x2615,
- PetBattleInitialUpdate = 0x2614,
- PetBattleMaxGameLengthWarning = 0x261b,
- PetBattlePvpChallenge = 0x2612,
- PetBattleQueueProposeMatch = 0x2659,
- PetBattleQueueStatus = 0x265a,
- PetBattleReplacementsMade = 0x2617,
- PetBattleRequestFailed = 0x2611,
- PetBattleRoundResult = 0x2616,
- PetBattleSlotUpdates = 0x2604,
- PetCastFailed = 0x2c57,
+ PetitionShowList = 0x26bc,
+ PetitionShowSignatures = 0x26bd,
+ PetitionSignResults = 0x2750,
+ PetActionFeedback = 0x274d,
+ PetActionSound = 0x269e,
+ PetAdded = 0x259a,
+ PetBattleChatRestricted = 0x25ff,
+ PetBattleDebugQueueDumpResponse = 0x2673,
+ PetBattleFinalizeLocation = 0x25f8,
+ PetBattleFinalRound = 0x25fd,
+ PetBattleFinished = 0x25fe,
+ PetBattleFirstRound = 0x25fa,
+ PetBattleInitialUpdate = 0x25f9,
+ PetBattleMaxGameLengthWarning = 0x2600,
+ PetBattlePvpChallenge = 0x25f7,
+ PetBattleQueueProposeMatch = 0x2636,
+ PetBattleQueueStatus = 0x2637,
+ PetBattleReplacementsMade = 0x25fc,
+ PetBattleRequestFailed = 0x25f6,
+ PetBattleRoundResult = 0x25fb,
+ PetBattleSlotUpdates = 0x25e9,
+ PetCastFailed = 0x2c58,
PetClearSpells = 0x2c24,
- PetDismissSound = 0x26d0,
- PetGodMode = 0x26aa,
- PetGuids = 0x2747,
+ PetDismissSound = 0x269f,
+ PetGodMode = 0x2679,
+ PetGuids = 0x2707,
PetLearnedSpells = 0x2c4f,
PetMode = 0x258b,
- PetNameInvalid = 0x26f7,
+ PetNameInvalid = 0x26c1,
PetNewlyTamed = 0x2589,
PetSlotUpdated = 0x258a,
PetSpellsMessage = 0x2c25,
- PetStableList = 0x25ab,
- PetStableResult = 0x25ac,
- PetTameFailure = 0x26e6,
+ PetStableList = 0x259b,
+ PetStableResult = 0x259c,
+ PetTameFailure = 0x26b0,
PetUnlearnedSpells = 0x2c50,
PhaseShiftChange = 0x2578,
- PlayedTime = 0x2713,
- PlayerAzeriteItemEquippedStatusChanged = 0x2871,
- PlayerAzeriteItemGains = 0x2870,
- PlayerBonusRollFailed = 0x2877,
- PlayerBound = 0x257e,
- PlayerConditionResult = 0x2843,
- PlayerIsAdventureMapPoiValid = 0x2842,
+ PlayedTime = 0x26da,
+ PlayerAzeriteItemEquippedStatusChanged = 0x3015,
+ PlayerAzeriteItemGains = 0x3014,
+ PlayerBonusRollFailed = 0x3017,
+ PlayerBound = 0x2ff8,
+ PlayerChoiceClear = 0x2ffe,
+ PlayerChoiceDisplayError = 0x2ffd,
+ PlayerConditionResult = 0x300b,
+ PlayerIsAdventureMapPoiValid = 0x300a,
+ PlayerOpenSubscriptionInterstitial = 0x300f,
PlayerSaveGuildEmblem = 0x29f9,
- PlayerSkinned = 0x278c,
- PlayerTabardVendorActivate = 0x27a0,
- PlayerTutorialHighlightSpell = 0x2847,
- PlayerTutorialUnhighlightSpell = 0x2846,
- PlayMusic = 0x27b2,
- PlayObjectSound = 0x27b3,
- PlayOneShotAnimKit = 0x2776,
+ PlayerSkinned = 0x3007,
+ PlayerTabardVendorActivate = 0x3008,
+ PlayerTutorialHighlightSpell = 0x300e,
+ PlayerTutorialUnhighlightSpell = 0x300d,
+ PlayMusic = 0x276c,
+ PlayObjectSound = 0x276d,
+ PlayOneShotAnimKit = 0x2735,
PlayOrphanSpellVisual = 0x2c47,
- PlayScene = 0x2656,
- PlaySound = 0x27b1,
- PlaySpeakerbotSound = 0x27b4,
+ PlayScene = 0x2633,
+ PlaySound = 0x276b,
+ PlaySpeakerbotSound = 0x276e,
PlaySpellVisual = 0x2c45,
PlaySpellVisualKit = 0x2c49,
- PlayTimeWarning = 0x2740,
+ PlayTimeWarning = 0x2701,
Pong = 0x304e,
- PowerUpdate = 0x2707,
+ PowerUpdate = 0x26d1,
PreloadChildMap = 0x2579,
- PrepopulateNameCache = 0x28aa,
- PreRessurect = 0x27b0,
- PrintNotification = 0x25e2,
- ProcResist = 0x27a2,
+ PrepopulateNameCache = 0x285f,
+ PreRessurect = 0x276a,
+ PrintNotification = 0x25c9,
+ ProcResist = 0x275f,
PushSpellToActionBar = 0x2c51,
- PvpCredit = 0x271f,
- PvpMatchComplete = 0x28a7,
- PvpMatchInitialize = 0x28ac,
- PvpMatchStart = 0x28a6,
- PvpMatchStatistics = 0x25b4,
- PvpOptionsEnabled = 0x25b7,
- QueryBattlePetNameResponse = 0x270e,
- QueryCommunityNameResponse = 0x270a,
- QueryCreatureResponse = 0x2704,
- QueryGameObjectResponse = 0x2705,
- QueryGarrisonCreatureNameResponse = 0x292b,
+ PvpCredit = 0x2944,
+ PvpMatchComplete = 0x294e,
+ PvpMatchInitialize = 0x294f,
+ PvpMatchStart = 0x294d,
+ PvpMatchStatistics = 0x2931,
+ PvpOptionsEnabled = 0x2933,
+ QueryBattlePetNameResponse = 0x26d6,
+ QueryCreatureResponse = 0x26ce,
+ QueryGameObjectResponse = 0x26cf,
+ QueryGarrisonPetNameResponse = 0x2994,
QueryGuildInfoResponse = 0x29e5,
- QueryItemTextResponse = 0x280c,
- QueryNpcTextResponse = 0x2708,
- QueryPageTextResponse = 0x270b,
- QueryPetitionResponse = 0x270f,
- QueryPetNameResponse = 0x270d,
- QueryPlayerNameResponse = 0x2709,
+ QueryItemTextResponse = 0x27c6,
+ QueryNpcTextResponse = 0x26d2,
+ QueryPageTextResponse = 0x26d3,
+ QueryPetitionResponse = 0x26d7,
+ QueryPetNameResponse = 0x26d5,
+ QueryPlayerNameByCommunityIdResponse = 0x3003,
+ QueryPlayerNameResponse = 0x3002,
QueryQuestInfoResponse = 0x2a95,
- QueryTimeResponse = 0x2723,
+ QueryTimeResponse = 0x26e8,
QuestCompletionNpcResponse = 0x2a81,
QuestConfirmAccept = 0x2a8e,
QuestForceRemoved = 0x2a9b,
@@ -1567,16 +1645,14 @@ namespace Framework.Constants
QuestGiverRequestItems = 0x2a92,
QuestGiverStatus = 0x2a9a,
QuestGiverStatusMultiple = 0x2a90,
- QuestLinesForMapResponse = 0x2aa1,
QuestLogFull = 0x2a86,
- QuestPoiChanged = 0x2a9f,
QuestPoiQueryResponse = 0x2a9c,
+ QuestPoiUpdateResponse = 0x2a9e,
QuestPushResult = 0x2a8f,
- QuestSessionInfoResponse = 0x28ca,
- QuestSessionReadyCheck = 0x28bb,
- QuestSessionReadyCheckResponse = 0x28bc,
- QuestSessionResult = 0x28ba,
- QuestSpawnTrackingUpdate = 0x2a9e,
+ QuestSessionInfoResponse = 0x2882,
+ QuestSessionReadyCheck = 0x2870,
+ QuestSessionReadyCheckResponse = 0x2871,
+ QuestSessionResult = 0x286f,
QuestUpdateAddCredit = 0x2a8b,
QuestUpdateAddCreditSimple = 0x2a8c,
QuestUpdateAddPvpCredit = 0x2a8d,
@@ -1584,119 +1660,125 @@ namespace Framework.Constants
QuestUpdateCompleteBySpell = 0x2a87,
QuestUpdateFailed = 0x2a89,
QuestUpdateFailedTimer = 0x2a8a,
- QueueSummaryUpdate = 0x2859,
- RafAccountInfo = 0x28b8,
- RafActivityStateChanged = 0x28c6,
- RaidDifficultySet = 0x27f1,
- RaidGroupOnly = 0x27f3,
+ QueueSummaryUpdate = 0x2815,
+ RafAccountInfo = 0x286d,
+ RafActivityStateChanged = 0x287e,
+ RaidDifficultySet = 0x27ab,
+ RaidGroupOnly = 0x27ad,
RaidInstanceMessage = 0x2bb4,
- RaidMarkersChanged = 0x25ba,
- RandomRoll = 0x2650,
- RatedPvpInfo = 0x25a8,
- ReadyCheckCompleted = 0x2610,
- ReadyCheckResponse = 0x260f,
- ReadyCheckStarted = 0x260e,
- ReadItemResultFailed = 0x27ed,
- ReadItemResultOk = 0x27e7,
- RealmLookupInfo = 0x2812,
- RealmQueryResponse = 0x26ee,
- ReattachResurrect = 0x2792,
- RecruitAFriendFailure = 0x26f4,
- RefreshComponent = 0x267c,
+ RaidMarkersChanged = 0x25a7,
+ RandomRoll = 0x262d,
+ RatedPvpInfo = 0x2930,
+ ReadyCheckCompleted = 0x25f5,
+ ReadyCheckResponse = 0x25f4,
+ ReadyCheckStarted = 0x25f3,
+ ReadItemResultFailed = 0x27a7,
+ ReadItemResultOk = 0x279f,
+ RealmLookupInfo = 0x27cc,
+ RealmQueryResponse = 0x26b8,
+ ReattachResurrect = 0x274f,
+ RecruitAFriendFailure = 0x26be,
+ RefreshComponent = 0x264d,
RefreshSpellHistory = 0x2c2c,
- RemoveItemPassive = 0x25c1,
- RemoveLossOfControl = 0x269d,
- ReplaceTrophyResponse = 0x2809,
- ReportPvpPlayerAfkResult = 0x26e2,
- RequestCemeteryListResponse = 0x259f,
- RequestPvpRewardsResponse = 0x25d5,
- RequestScheduledPvpInfoResponse = 0x25d6,
+ RemoveItemPassive = 0x25ae,
+ RemoveLossOfControl = 0x266e,
+ RemoveSpellFromActionBar = 0x2c52,
+ ReplaceTrophyResponse = 0x27c3,
+ ReportPvpPlayerAfkResult = 0x3001,
+ RequestCemeteryListResponse = 0x2591,
+ RequestPvpRewardsResponse = 0x2934,
+ RequestScheduledPvpInfoResponse = 0x2935,
ResearchComplete = 0x2587,
ResetCompressionContext = 0x304f,
- ResetFailedNotify = 0x26ea,
- ResetRangedCombatTimer = 0x271c,
+ ResetFailedNotify = 0x26b4,
+ ResetQuestPoi = 0x2a9f,
+ ResetRangedCombatTimer = 0x2943,
ResetWeeklyCurrency = 0x2575,
- RespecWipeConfirm = 0x262a,
+ RespecWipeConfirm = 0x2610,
RespondInspectAchievements = 0x2572,
- RestrictedAccountWarning = 0x25cc,
+ RestrictedAccountWarning = 0x25ba,
ResumeCast = 0x2c3b,
ResumeCastBar = 0x2c3e,
ResumeComms = 0x304b,
- ResumeToken = 0x25bf,
- ResurrectRequest = 0x257f,
- ResyncRunes = 0x2743,
- ReturnApplicantList = 0x28ae,
- ReturnRecruitingClubs = 0x28ad,
- RoleChangedInform = 0x258e,
+ ResumeToken = 0x25ac,
+ ResurrectRequest = 0x257e,
+ ResyncRunes = 0x2c5f,
+ ReturnApplicantList = 0x2863,
+ ReturnRecruitingClubs = 0x2862,
+ RoleChangedInform = 0x258d,
RoleChosen = 0x2a39,
- RolePollInform = 0x258f,
- RuneRegenDebug = 0x25c9,
- ScenarioCompleted = 0x282f,
- ScenarioPois = 0x2653,
- ScenarioProgressUpdate = 0x264c,
- ScenarioShowCriteria = 0x2841,
- ScenarioState = 0x264b,
- ScenarioUiUpdate = 0x2840,
- ScenarioVacate = 0x27ee,
- SceneObjectEvent = 0x25f9,
- SceneObjectPetBattleFinalRound = 0x25fe,
- SceneObjectPetBattleFinished = 0x25ff,
- SceneObjectPetBattleFirstRound = 0x25fb,
- SceneObjectPetBattleInitialUpdate = 0x25fa,
- SceneObjectPetBattleReplacementsMade = 0x25fd,
- SceneObjectPetBattleRoundResult = 0x25fc,
- ScriptCast = 0x2c55,
- SeasonInfo = 0x25d4,
- SellResponse = 0x26f8,
- SendItemPassives = 0x25c2,
+ RolePollInform = 0x258e,
+ RuneforgeLegendaryCraftingOpenNpc = 0x2801,
+ RuneRegenDebug = 0x25b7,
+ ScenarioCompleted = 0x27ee,
+ ScenarioPois = 0x2630,
+ ScenarioProgressUpdate = 0x2629,
+ ScenarioShowCriteria = 0x2804,
+ ScenarioState = 0x2628,
+ ScenarioUiUpdate = 0x2803,
+ ScenarioVacate = 0x27a8,
+ SceneObjectEvent = 0x25de,
+ SceneObjectPetBattleFinalRound = 0x25e3,
+ SceneObjectPetBattleFinished = 0x25e4,
+ SceneObjectPetBattleFirstRound = 0x25e0,
+ SceneObjectPetBattleInitialUpdate = 0x25df,
+ SceneObjectPetBattleReplacementsMade = 0x25e2,
+ SceneObjectPetBattleRoundResult = 0x25e1,
+ ScriptCast = 0x2c56,
+ SeasonInfo = 0x25c2,
+ SellResponse = 0x26c2,
+ SendItemPassives = 0x25af,
SendKnownSpells = 0x2c2a,
- SendRaidTargetUpdateAll = 0x264e,
- SendRaidTargetUpdateSingle = 0x264f,
+ SendRaidTargetUpdateAll = 0x262b,
+ SendRaidTargetUpdateSingle = 0x262c,
SendSpellCharges = 0x2c2d,
SendSpellHistory = 0x2c2b,
SendUnlearnSpells = 0x2c2e,
- ServerFirstAchievements = 0x266d,
- ServerTime = 0x26b1,
- ServerTimeOffset = 0x2759,
+ ServerFirstAchievements = 0x264a,
+ ServerTime = 0x2680,
+ ServerTimeOffset = 0x2719,
SetupCurrency = 0x2573,
SetupResearchHistory = 0x2586,
- SetAiAnimKit = 0x2775,
- SetAllTaskProgress = 0x27d7,
- SetAnimTier = 0x2779,
- SetChrUpgradeTier = 0x25f6,
+ SetAiAnimKit = 0x2734,
+ SetAllTaskProgress = 0x278f,
+ SetAnimTier = 0x2738,
+ SetChrUpgradeTier = 0x25db,
SetCurrency = 0x2574,
SetDfFastLaunchResult = 0x2a2e,
- SetDungeonDifficulty = 0x26d3,
- SetFactionAtWar = 0x2742,
- SetFactionNotVisible = 0x2770,
- SetFactionStanding = 0x2771,
- SetFactionVisible = 0x276f,
+ SetDungeonDifficulty = 0x26a2,
+ SetFactionAtWar = 0x2703,
+ SetFactionNotVisible = 0x272f,
+ SetFactionStanding = 0x2730,
+ SetFactionVisible = 0x272e,
SetFlatSpellModifier = 0x2c36,
- SetForcedReactions = 0x2761,
- SetItemPurchaseData = 0x25b2,
- SetLootMethodFailed = 0x2818,
- SetMaxWeeklyQuantity = 0x25b8,
- SetMeleeAnimKit = 0x2778,
- SetMovementAnimKit = 0x2777,
+ SetForcedReactions = 0x2722,
+ SetItemPurchaseData = 0x25a2,
+ SetLootMethodFailed = 0x27d2,
+ SetMaxWeeklyQuantity = 0x25a5,
+ SetMeleeAnimKit = 0x2737,
+ SetMovementAnimKit = 0x2736,
SetPctSpellModifier = 0x2c37,
- SetPetSpecialization = 0x2645,
- SetPlayerDeclinedNamesResult = 0x2712,
- SetPlayHoverAnim = 0x25cd,
- SetProficiency = 0x277a,
- SetQuestReplayCooldownOverride = 0x28be,
+ SetPetSpecialization = 0x2622,
+ SetPlayerDeclinedNamesResult = 0x3004,
+ SetPlayHoverAnim = 0x25bb,
+ SetProficiency = 0x2739,
+ SetQuestReplayCooldownOverride = 0x2876,
+ SetShipmentReadyResponse = 0x298d,
SetSpellCharges = 0x2c29,
- SetTaskComplete = 0x27d8,
- SetTimeZoneInformation = 0x26a5,
- SetVehicleRecId = 0x2735,
- ShowBank = 0x26ae,
- ShowMailbox = 0x27ef,
- ShowNeutralPlayerFactionSelectUi = 0x25f2,
- ShowTaxiNodes = 0x2700,
- ShowTradeSkillResponse = 0x27b9,
- SocketGemsFailure = 0x276d,
- SocketGemsSuccess = 0x276c,
- SpecialMountAnim = 0x26ce,
- SpecInvoluntarilyChanged = 0x275d,
+ SetTaskComplete = 0x2790,
+ SetTimeZoneInformation = 0x2675,
+ SetVehicleRecId = 0x26fa,
+ ShipmentFactionUpdateResult = 0x298e,
+ ShowBank = 0x267d,
+ ShowMailbox = 0x27a9,
+ ShowNeutralPlayerFactionSelectUi = 0x25d7,
+ ShowQuestCompletionText = 0x2a94,
+ ShowTaxiNodes = 0x26ca,
+ ShowTradeSkillResponse = 0x2773,
+ SocketGemsFailure = 0x272c,
+ SocketGemsSuccess = 0x272b,
+ SpecialMountAnim = 0x269d,
+ SpecInvoluntarilyChanged = 0x271d,
SpellAbsorbLog = 0x2c1f,
SpellCategoryCooldown = 0x2c17,
SpellChannelStart = 0x2c34,
@@ -1707,9 +1789,9 @@ namespace Framework.Constants
SpellDispellLog = 0x2c1a,
SpellEnergizeLog = 0x2c1c,
SpellExecuteLog = 0x2c40,
- SpellFailedOther = 0x2c54,
- SpellFailure = 0x2c52,
- SpellFailureMessage = 0x2c59,
+ SpellFailedOther = 0x2c55,
+ SpellFailure = 0x2c53,
+ SpellFailureMessage = 0x2c5a,
SpellGo = 0x2c39,
SpellHealAbsorbLog = 0x2c1e,
SpellHealLog = 0x2c1d,
@@ -1721,116 +1803,122 @@ namespace Framework.Constants
SpellPeriodicAuraLog = 0x2c1b,
SpellPrepare = 0x2c38,
SpellStart = 0x2c3a,
- SpellVisualLoadScreen = 0x25e5,
- SpiritHealerConfirm = 0x275a,
- StandStateUpdate = 0x2760,
- StartElapsedTimer = 0x261c,
- StartElapsedTimers = 0x261e,
- StartLightningStorm = 0x26d6,
- StartLootRoll = 0x2634,
- StartMirrorTimer = 0x2754,
- StartTimer = 0x25bc,
- StopElapsedTimer = 0x261d,
- StopMirrorTimer = 0x2756,
- StopSpeakerbotSound = 0x27b5,
- StreamingMovies = 0x25bb,
- SummonCancel = 0x26e1,
- SummonRaidMemberValidateFailed = 0x2590,
- SummonRequest = 0x2765,
+ SpellVisualLoadScreen = 0x25cb,
+ SpiritHealerConfirm = 0x271a,
+ SplashScreenShowLatest = 0x2888,
+ StandStateUpdate = 0x2721,
+ StartElapsedTimer = 0x2601,
+ StartElapsedTimers = 0x2603,
+ StartLightningStorm = 0x26a5,
+ StartLootRoll = 0x261a,
+ StartMirrorTimer = 0x2714,
+ StartTimer = 0x25a9,
+ StopElapsedTimer = 0x2602,
+ StopMirrorTimer = 0x2716,
+ StopSpeakerbotSound = 0x276f,
+ StreamingMovies = 0x25a8,
+ SummonCancel = 0x26ae,
+ SummonRaidMemberValidateFailed = 0x258f,
+ SummonRequest = 0x2726,
SupercededSpells = 0x2c4c,
SuspendComms = 0x304a,
- SuspendToken = 0x25be,
- SyncWowEntitlements = 0x28c8,
- TalentsInvoluntarilyReset = 0x275c,
- TaxiNodeStatus = 0x26ab,
- TextEmote = 0x26a9,
- ThreatClear = 0x271a,
- ThreatRemove = 0x2719,
- ThreatUpdate = 0x2718,
- TimeAdjustment = 0x2da1,
- TimeSyncRequest = 0x2da0,
- TitleEarned = 0x2715,
- TitleLost = 0x2716,
- TotemCreated = 0x26fb,
- TotemDurationChanged = 0x26fc,
- TotemMoved = 0x26fd,
- TradeStatus = 0x2583,
- TradeUpdated = 0x2582,
- TrainerBuyFailed = 0x271e,
- TrainerList = 0x271d,
- TransferAborted = 0x2746,
- TransferPending = 0x25e6,
- TransmogrifyNpc = 0x283a,
- TreasurePickerResponse = 0x284d,
- TriggerCinematic = 0x2810,
- TriggerMovie = 0x26fe,
- TurnInPetitionResult = 0x2795,
- TutorialFlags = 0x2802,
- TwitterStatus = 0x2ffd,
- UiHealingRangeModified = 0x278a,
- UiItemInteractionNpc = 0x283c,
- UndeleteCharacterResponse = 0x2813,
- UndeleteCooldownStatusResponse = 0x2814,
+ SuspendToken = 0x25ab,
+ SyncWowEntitlements = 0x2880,
+ TalentsInvoluntarilyReset = 0x271c,
+ TaxiNodeStatus = 0x267a,
+ TextEmote = 0x2678,
+ ThreatClear = 0x26e1,
+ ThreatRemove = 0x26e0,
+ ThreatUpdate = 0x26df,
+ TimeAdjustment = 0x2dd3,
+ TimeSyncRequest = 0x2dd2,
+ TitleEarned = 0x26dc,
+ TitleLost = 0x26dd,
+ TotemCreated = 0x26c5,
+ TotemDurationChanged = 0x26c6,
+ TotemMoved = 0x26c7,
+ TradeStatus = 0x2582,
+ TradeUpdated = 0x2581,
+ TrainerBuyFailed = 0x26e4,
+ TrainerList = 0x26e3,
+ TransferAborted = 0x2706,
+ TransferPending = 0x25cc,
+ TransmogrifyNpc = 0x27f9,
+ TreasurePickerResponse = 0x280b,
+ TriggerCinematic = 0x27ca,
+ TriggerMovie = 0x26c8,
+ TurnInPetitionResult = 0x2752,
+ TutorialFlags = 0x27bc,
+ TwitterStatus = 0x3043,
+ UiHealingRangeModified = 0x2748,
+ UiItemInteractionNpc = 0x27fb,
+ UiMapQuestLinesResponse = 0x2aa1,
+ UndeleteCharacterResponse = 0x27cd,
+ UndeleteCooldownStatusResponse = 0x27ce,
UnlearnedSpells = 0x2c4e,
UnloadChildMap = 0x257a,
- UpdateAccountData = 0x274e,
- UpdateActionButtons = 0x25f7,
- UpdateBnetSessionKey = 0x286a,
- UpdateCapturePoint = 0x2598,
- UpdateCelestialBody = 0x2866,
- UpdateCharacterFlags = 0x2808,
- UpdateChargeCategoryCooldown = 0x27af,
- UpdateCooldown = 0x27ae,
- UpdateExpansionLevel = 0x2666,
- UpdateGameTimeState = 0x286d,
- UpdateInstanceOwnership = 0x26d8,
- UpdateLastInstance = 0x26b7,
- UpdateObject = 0x2811,
- UpdatePrimarySpec = 0x25ee,
- UpdateTalentData = 0x25ed,
- UpdateTaskProgress = 0x27d6,
+ UpdateAccountData = 0x270e,
+ UpdateActionButtons = 0x25dc,
+ UpdateBnetSessionKey = 0x2826,
+ UpdateCapturePoint = 0x2929,
+ UpdateCelestialBody = 0x2822,
+ UpdateCharacterFlags = 0x27c2,
+ UpdateChargeCategoryCooldown = 0x2769,
+ UpdateCooldown = 0x2768,
+ UpdateDailyMissionCounter = 0x2975,
+ UpdateExpansionLevel = 0x2643,
+ UpdateGameTimeState = 0x2829,
+ UpdateInstanceOwnership = 0x26a7,
+ UpdateLastInstance = 0x2686,
+ UpdateObject = 0x27cb,
+ UpdatePrimarySpec = 0x25d4,
+ UpdateTalentData = 0x25d3,
+ UpdateTaskProgress = 0x278e,
UpdateWeeklySpellUsage = 0x2c19,
- UpdateWorldState = 0x278f,
+ UpdateWorldState = 0x274c,
UserlistAdd = 0x2bb9,
UserlistRemove = 0x2bba,
UserlistUpdate = 0x2bbb,
- UseEquipmentSetResult = 0x2796,
- VasCheckTransferOkResponse = 0x2861,
- VasGetQueueMinutesResponse = 0x285f,
- VasGetServiceStatusResponse = 0x285e,
- VasPurchaseComplete = 0x2836,
- VasPurchaseStateUpdate = 0x2835,
- VendorInventory = 0x25cb,
- VignetteUpdate = 0x27b7,
- VoiceChannelInfoResponse = 0x2865,
- VoiceLoginResponse = 0x2864,
- VoidItemSwapResponse = 0x25e0,
- VoidStorageContents = 0x25dd,
- VoidStorageFailed = 0x25dc,
- VoidStorageTransferChanges = 0x25de,
- VoidTransferResult = 0x25df,
+ UseEquipmentSetResult = 0x2753,
+ VasCheckTransferOkResponse = 0x281d,
+ VasGetQueueMinutesResponse = 0x281b,
+ VasGetServiceStatusResponse = 0x281a,
+ VasPurchaseComplete = 0x27f5,
+ VasPurchaseStateUpdate = 0x27f4,
+ VendorInventory = 0x25b9,
+ VignetteUpdate = 0x3009,
+ VoiceChannelInfoResponse = 0x2821,
+ VoiceLoginResponse = 0x2820,
+ VoidItemSwapResponse = 0x2da4,
+ VoidStorageContents = 0x2da1,
+ VoidStorageFailed = 0x2da0,
+ VoidStorageTransferChanges = 0x2da2,
+ VoidTransferResult = 0x2da3,
WaitQueueFinish = 0x256f,
WaitQueueUpdate = 0x256e,
Warden3Data = 0x2577,
- Warden3Disabled = 0x2868,
- Warden3Enabled = 0x2867,
- WarfrontComplete = 0x27a8,
- WargameRequestSuccessfullySentToOpponent = 0x25b5,
- Weather = 0x26d5,
+ Warden3Disabled = 0x2824,
+ Warden3Enabled = 0x2823,
+ WarfrontComplete = 0x2762,
+ WargameRequestSuccessfullySentToOpponent = 0x2932,
+ Weather = 0x26a4,
+ WeeklyRewardsProgressResult = 0x288b,
+ WeeklyRewardsResult = 0x2889,
+ WeeklyRewardClaimResult = 0x288a,
WeeklySpellUsage = 0x2c18,
Who = 0x2bae,
- WhoIs = 0x26d4,
- WillBeKickedForAddedSubscriptionTime = 0x286c,
- WorldMapOpenNpc = 0x2839,
- WorldQuestUpdateResponse = 0x284e,
- WorldServerInfo = 0x25c3,
- WowEntitlementNotification = 0x28c9,
- XpGainAborted = 0x25e1,
- XpGainEnabled = 0x27f2,
+ WhoIs = 0x26a3,
+ WillBeKickedForAddedSubscriptionTime = 0x2828,
+ WorldMapOpenNpc = 0x27f8,
+ WorldQuestUpdateResponse = 0x3010,
+ WorldServerInfo = 0x25b0,
+ WowEntitlementNotification = 0x2881,
+ XpGainAborted = 0x25c8,
+ XpGainEnabled = 0x27ac,
ZoneUnderAttack = 0x2bb5,
// Opcodes that are not generated automatically
- AccountHeirloomUpdate = 0x25C6, // No Client Handler
+ AccountHeirloomUpdate = 0x25B3, // No Client Handler
CompressedPacket = 0x3052,
MultiplePackets = 0x3051,
diff --git a/Source/Framework/IO/ByteBuffer.cs b/Source/Framework/IO/ByteBuffer.cs
index d3ba1b9e4..7e8adf4cb 100644
--- a/Source/Framework/IO/ByteBuffer.cs
+++ b/Source/Framework/IO/ByteBuffer.cs
@@ -305,6 +305,14 @@ namespace Framework.IO
WriteBytes(buffer.GetData());
}
+ public void WriteVector4(Vector4 pos)
+ {
+ WriteFloat(pos.X);
+ WriteFloat(pos.Y);
+ WriteFloat(pos.Z);
+ WriteFloat(pos.W);
+ }
+
public void WriteVector3(Vector3 pos)
{
WriteFloat(pos.X);
diff --git a/Source/Game/AI/CoreAI/GameObjectAI.cs b/Source/Game/AI/CoreAI/GameObjectAI.cs
index b4e808fb7..521702298 100644
--- a/Source/Game/AI/CoreAI/GameObjectAI.cs
+++ b/Source/Game/AI/CoreAI/GameObjectAI.cs
@@ -65,7 +65,11 @@ namespace Game.AI
///
/// Called when a player completes a quest and is rewarded, opt is the selected item's index or 0
///
- public virtual void QuestReward(Player player, Quest quest, uint opt) { }
+ public virtual void QuestReward(Player player, Quest quest, uint opt)
+ {
+ QuestReward(player, quest, LootItemType.Item, opt);
+ }
+ public virtual void QuestReward(Player player, Quest quest, LootItemType type, uint opt) { }
///
/// Called when the dialog status between a player and the gameobject is requested.
diff --git a/Source/Game/AI/CoreAI/UnitAI.cs b/Source/Game/AI/CoreAI/UnitAI.cs
index 3407aef6e..803963593 100644
--- a/Source/Game/AI/CoreAI/UnitAI.cs
+++ b/Source/Game/AI/CoreAI/UnitAI.cs
@@ -516,12 +516,17 @@ namespace Game.AI
///
/// Called when a player completes a quest and is rewarded, opt is the selected item's index or 0
///
- public virtual void QuestReward(Player player, Quest quest, uint opt) { }
+ public virtual void QuestReward(Player player, Quest quest, uint opt)
+ {
+ QuestReward(player, quest, LootItemType.Item, opt);
+ }
+ public virtual void QuestReward(Player player, Quest quest, LootItemType type, uint opt) { }
- ///
- /// Called when a game event starts or ends
- ///
- public virtual void OnGameEvent(bool start, ushort eventId) { }
+
+ ///
+ /// Called when a game event starts or ends
+ ///
+ public virtual void OnGameEvent(bool start, ushort eventId) { }
// Called when the dialog status between a player and the creature is requested.
public virtual QuestGiverStatus GetDialogStatus(Player player) { return QuestGiverStatus.ScriptedNoStatus; }
diff --git a/Source/Game/Chat/Commands/GoCommands.cs b/Source/Game/Chat/Commands/GoCommands.cs
index f6d0bda70..8e354be92 100644
--- a/Source/Game/Chat/Commands/GoCommands.cs
+++ b/Source/Game/Chat/Commands/GoCommands.cs
@@ -257,12 +257,12 @@ namespace Game.Chat.Commands
var poiData = Global.ObjectMgr.GetQuestPOIData(questID);
if (poiData != null)
{
- var data = poiData.QuestPOIBlobDataStats[0];
+ var data = poiData.Blobs[0];
mapId = (uint)data.MapID;
- x = data.QuestPOIBlobPointStats[0].X;
- y = data.QuestPOIBlobPointStats[0].Y;
+ x = data.Points[0].X;
+ y = data.Points[0].Y;
}
else
{
diff --git a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs
index e90a8ae2b..8bd15c16d 100644
--- a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs
+++ b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs
@@ -175,6 +175,18 @@ namespace Game.Entities
public float ZOffset;
}
+ public struct AreaTriggerMovementScriptInfo
+ {
+ public uint SpellScriptID;
+ public Vector3 Center;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(SpellScriptID);
+ data.WriteVector3(Center);
+ }
+ }
+
public class AreaTriggerTemplate : AreaTriggerData
{
public unsafe void InitMaxSearchRadius()
diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs
index 7073c5aff..5d3d2668b 100644
--- a/Source/Game/Entities/Creature/Gossip.cs
+++ b/Source/Game/Entities/Creature/Gossip.cs
@@ -275,9 +275,8 @@ namespace Game.Misc
{
ClientGossipText text = new ClientGossipText();
text.QuestID = (int)questID;
+ text.ContentTuningID = quest.ContentTuningId;
text.QuestType = item.QuestIcon;
- text.QuestLevel = quest.Level;
- text.QuestMaxScalingLevel = quest.MaxScalingLevel;
text.QuestFlags = (int)quest.Flags;
text.QuestFlagsEx = (int)quest.FlagsEx;
text.Repeatable = quest.IsRepeatable();
@@ -365,24 +364,22 @@ namespace Game.Misc
Quest quest = Global.ObjectMgr.GetQuestTemplate(questID);
if (quest != null)
{
- string title = quest.LogTitle;
+ ClientGossipText text = new ClientGossipText();
+ text.QuestID = questID;
+ text.ContentTuningID = quest.ContentTuningId;
+ text.QuestType = questMenuItem.QuestIcon;
+ text.QuestFlags = (uint)quest.Flags;
+ text.QuestFlagsEx = (uint)quest.FlagsEx;
+ text.Repeatable = quest.IsRepeatable();
+ text.QuestTitle = quest.LogTitle;
if (localeConstant != Locale.enUS)
{
QuestTemplateLocale localeData = Global.ObjectMgr.GetQuestLocale(quest.Id);
if (localeData != null)
- ObjectManager.GetLocaleString(localeData.LogTitle, localeConstant, ref title);
+ ObjectManager.GetLocaleString(localeData.LogTitle, localeConstant, ref text.QuestTitle);
}
- GossipText text = new GossipText();
- text.QuestID = questID;
- text.QuestType = questMenuItem.QuestIcon;
- text.QuestLevel = (uint)quest.Level;
- text.QuestMaxScalingLevel = (uint)quest.MaxScalingLevel;
- text.QuestFlags = (uint)quest.Flags;
- text.QuestFlagsEx = (uint)quest.FlagsEx;
- text.Repeatable = false; // NYI
- text.QuestTitle = title;
questList.QuestDataText.Add(text);
}
}
diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs
index 24b926353..514043b84 100644
--- a/Source/Game/Entities/Object/WorldObject.cs
+++ b/Source/Game/Entities/Object/WorldObject.cs
@@ -323,11 +323,11 @@ namespace Game.Entities
data.WriteBits((uint)unit.GetUnitMovementFlags(), 30);
data.WriteBits((uint)unit.GetUnitMovementFlags2(), 18);
- data.WriteBit(!unit.m_movementInfo.transport.guid.IsEmpty()); // HasTransport
+ data.WriteBit(!unit.m_movementInfo.transport.guid.IsEmpty()); // HasTransport
data.WriteBit(HasFall); // HasFall
data.WriteBit(HasSpline); // HasSpline - marks that the unit uses spline movement
- data.WriteBit(0); // HeightChangeFailed
- data.WriteBit(0); // RemoteTimeValid
+ data.WriteBit(false); // HeightChangeFailed
+ data.WriteBit(false); // RemoteTimeValid
if (!unit.m_movementInfo.transport.guid.IsEmpty())
MovementExtensions.WriteTransportInfo(data, unit.m_movementInfo.transport);
@@ -467,6 +467,7 @@ namespace Game.Entities
bool hasAreaTriggerCylinder = areaTriggerTemplate.IsCylinder();
bool hasAreaTriggerSpline = areaTrigger.HasSplines();
bool hasOrbit = areaTrigger.HasOrbit();
+ bool hasMovementScript = false;
data.WriteBit(hasAbsoluteOrientation);
data.WriteBit(hasDynamicShape);
@@ -489,6 +490,7 @@ namespace Game.Entities
data.WriteBit(hasAreaTriggerCylinder);
data.WriteBit(hasAreaTriggerSpline);
data.WriteBit(hasOrbit);
+ data.WriteBit(hasMovementScript);
if (hasUnk3)
data.WriteBit(0);
@@ -571,6 +573,9 @@ namespace Game.Entities
data.WriteFloat(areaTriggerTemplate.CylinderDatas.LocationZOffsetTarget);
}
+ //if (hasMovementScript)
+ // *data << *areaTrigger->GetMovementScript(); // AreaTriggerMovementScriptInfo
+
if (hasOrbit)
areaTrigger.GetCircularMovementInfo().Value.Write(data);
}
diff --git a/Source/Game/Entities/Player/Player.Fields.cs b/Source/Game/Entities/Player/Player.Fields.cs
index 5d1c72eed..01b07a783 100644
--- a/Source/Game/Entities/Player/Player.Fields.cs
+++ b/Source/Game/Entities/Player/Player.Fields.cs
@@ -497,6 +497,8 @@ namespace Game.Entities
public Array Pieces = new Array(EquipmentSlot.End);
public Array Appearances = new Array(EquipmentSlot.End); // ItemModifiedAppearanceID
public Array Enchants = new Array(2); // SpellItemEnchantmentID
+ public int Unknown901_1;
+ public int Unknown901_2;
}
public enum EquipmentSetType
diff --git a/Source/Game/Entities/Unit/Unit.Movement.cs b/Source/Game/Entities/Unit/Unit.Movement.cs
index 98e3048bf..aa7c3aaeb 100644
--- a/Source/Game/Entities/Unit/Unit.Movement.cs
+++ b/Source/Game/Entities/Unit/Unit.Movement.cs
@@ -1335,10 +1335,6 @@ namespace Game.Entities
if (thisPlayer != null)
thisPlayer.SendMovementSetCollisionHeight(thisPlayer.GetCollisionHeight(false));
- Dismount data = new Dismount();
- data.Guid = GetGUID();
- SendMessageToSet(data, true);
-
// dismount as a vehicle
if (IsTypeId(TypeId.Player) && GetVehicleKit() != null)
{
diff --git a/Source/Game/Garrisons/Garrisons.cs b/Source/Game/Garrisons/Garrisons.cs
index c5ada77fd..23e2aba59 100644
--- a/Source/Game/Garrisons/Garrisons.cs
+++ b/Source/Game/Garrisons/Garrisons.cs
@@ -581,9 +581,9 @@ namespace Game.Garrisons
_owner.SendPacket(data);
}
- public void SendBuildingLandmarks(Player receiver)
+ public void SendMapData(Player receiver)
{
- GarrisonBuildingLandmarks buildingLandmarks = new GarrisonBuildingLandmarks();
+ GarrisonMapDataResponse mapData = new GarrisonMapDataResponse();
foreach (var plot in _plots.Values)
{
@@ -591,11 +591,11 @@ namespace Game.Garrisons
{
uint garrBuildingPlotInstId = Global.GarrisonMgr.GetGarrBuildingPlotInst(plot.BuildingInfo.PacketInfo.Value.GarrBuildingID, plot.GarrSiteLevelPlotInstId);
if (garrBuildingPlotInstId != 0)
- buildingLandmarks.Landmarks.Add(new GarrisonBuildingLandmark(garrBuildingPlotInstId, plot.PacketInfo.PlotPos));
+ mapData.Buildings.Add(new GarrisonBuildingMapData(garrBuildingPlotInstId, plot.PacketInfo.PlotPos));
}
}
- receiver.SendPacket(buildingLandmarks);
+ receiver.SendPacket(mapData);
}
Map FindMap()
diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs
index d2f55aea7..95ac16729 100644
--- a/Source/Game/Globals/ObjectManager.cs
+++ b/Source/Game/Globals/ObjectManager.cs
@@ -7544,7 +7544,7 @@ namespace Game
_questPOIStorage[questID] = new QuestPOIData(questID);
QuestPOIData poiData = _questPOIStorage[questID];
- poiData.QuestPOIBlobDataStats.Add(new QuestPOIBlobData(blobIndex, objectiveIndex, questObjectiveID, questObjectID, mapID, uiMapId, priority, flags, worldEffectID, playerConditionID, spawnTrackingID, POIs[questID][idx1], alwaysAllowMergingBlobs));
+ poiData.Blobs.Add(new QuestPOIBlobData(blobIndex, objectiveIndex, questObjectiveID, questObjectID, mapID, uiMapId, priority, flags, worldEffectID, playerConditionID, spawnTrackingID, POIs[questID][idx1], alwaysAllowMergingBlobs));
++count;
} while (result.NextRow());
@@ -10490,8 +10490,23 @@ namespace Game
public class QuestPOIBlobData
{
+ public int BlobIndex;
+ public int ObjectiveIndex;
+ public int QuestObjectiveID;
+ public int QuestObjectID;
+ public int MapID;
+ public int UiMapID;
+ public int Priority;
+ public int Flags;
+ public int WorldEffectID;
+ public int PlayerConditionID;
+ public int NavigationPlayerConditionID;
+ public int SpawnTrackingID;
+ public List Points;
+ public bool AlwaysAllowMergingBlobs;
+
public QuestPOIBlobData(int blobIndex, int objectiveIndex, int questObjectiveID, int questObjectID, int mapID, int uiMapID, int priority, int flags,
- int worldEffectID, int playerConditionID, int spawnTrackingID, List questPOIBlobPointStats, bool alwaysAllowMergingBlobs)
+ int worldEffectID, int playerConditionID, int spawnTrackingID, List points, bool alwaysAllowMergingBlobs)
{
BlobIndex = blobIndex;
ObjectiveIndex = objectiveIndex;
@@ -10504,46 +10519,36 @@ namespace Game
WorldEffectID = worldEffectID;
PlayerConditionID = playerConditionID;
SpawnTrackingID = spawnTrackingID;
- QuestPOIBlobPointStats = questPOIBlobPointStats;
+ Points = points;
AlwaysAllowMergingBlobs = alwaysAllowMergingBlobs;
- }
-
- public int BlobIndex;
- public int ObjectiveIndex;
- public int QuestObjectiveID;
- public int QuestObjectID;
- public int MapID;
- public int UiMapID;
- public int Priority;
- public int Flags;
- public int WorldEffectID;
- public int PlayerConditionID;
- public int SpawnTrackingID;
- public List QuestPOIBlobPointStats;
- public bool AlwaysAllowMergingBlobs;
+ }
}
public class QuestPOIBlobPoint
- {
- public QuestPOIBlobPoint(int _x, int _y)
- {
- X = _x;
- Y = _y;
- }
-
+ {
public int X;
public int Y;
+ public int Z;
+
+ public QuestPOIBlobPoint(int x, int y, int z)
+ {
+ X = x;
+ Y = y;
+ Z = z;
+ }
}
public class QuestPOIData
{
public uint QuestID;
- public List QuestPOIBlobDataStats = new List();
- public ByteBuffer QueryDataBuffer = new ByteBuffer();
+ public List Blobs;
+ public ByteBuffer QueryDataBuffer;
public QuestPOIData(uint questId)
{
QuestID = questId;
+ Blobs = new List();
+ QueryDataBuffer = new ByteBuffer();
}
public void InitializeQueryData()
@@ -10554,9 +10559,9 @@ namespace Game
public void Write(ByteBuffer data)
{
data.WriteUInt32(QuestID);
- data.WriteInt32(QuestPOIBlobDataStats.Count);
+ data.WriteInt32(Blobs.Count);
- foreach (QuestPOIBlobData questPOIBlobData in QuestPOIBlobDataStats)
+ foreach (QuestPOIBlobData questPOIBlobData in Blobs)
{
data.WriteInt32(questPOIBlobData.BlobIndex);
data.WriteInt32(questPOIBlobData.ObjectiveIndex);
@@ -10568,13 +10573,15 @@ namespace Game
data.WriteInt32(questPOIBlobData.Flags);
data.WriteInt32(questPOIBlobData.WorldEffectID);
data.WriteInt32(questPOIBlobData.PlayerConditionID);
+ data.WriteInt32(questPOIBlobData.NavigationPlayerConditionID);
data.WriteInt32(questPOIBlobData.SpawnTrackingID);
- data.WriteInt32(questPOIBlobData.QuestPOIBlobPointStats.Count);
+ data.WriteInt32(questPOIBlobData.Points.Count);
- foreach (QuestPOIBlobPoint questPOIBlobPoint in questPOIBlobData.QuestPOIBlobPointStats)
+ foreach (QuestPOIBlobPoint questPOIBlobPoint in questPOIBlobData.Points)
{
- data.WriteInt32(questPOIBlobPoint.X);
- data.WriteInt32(questPOIBlobPoint.Y);
+ data.WriteInt16((short)questPOIBlobPoint.X);
+ data.WriteInt16((short)questPOIBlobPoint.Y);
+ data.WriteInt16((short)questPOIBlobPoint.Z);
}
data.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs);
diff --git a/Source/Game/Guilds/Guild.cs b/Source/Game/Guilds/Guild.cs
index 2131078dd..10bc4501b 100644
--- a/Source/Game/Guilds/Guild.cs
+++ b/Source/Game/Guilds/Guild.cs
@@ -1107,11 +1107,11 @@ namespace Game.Guilds
else
member.RemoveFlag(GuildMemberFlags.DND);
- GuildEventAwayChange awayChange = new GuildEventAwayChange();
- awayChange.Guid = memberGuid;
- awayChange.AFK = afk;
- awayChange.DND = dnd;
- BroadcastPacket(awayChange);
+ GuildEventStatusChange statusChange = new GuildEventStatusChange();
+ statusChange.Guid = memberGuid;
+ statusChange.AFK = afk;
+ statusChange.DND = dnd;
+ BroadcastPacket(statusChange);
}
void SendEventBankMoneyChanged()
diff --git a/Source/Game/Handlers/BattleGroundHandler.cs b/Source/Game/Handlers/BattleGroundHandler.cs
index 5281ecf06..73776be7f 100644
--- a/Source/Game/Handlers/BattleGroundHandler.cs
+++ b/Source/Game/Handlers/BattleGroundHandler.cs
@@ -578,8 +578,8 @@ namespace Game
reportedPlayer.ReportedAfkBy(GetPlayer());
}
- [WorldPacketHandler(ClientOpcodes.RequestRatedBattlefieldInfo)]
- void HandleRequestRatedBattlefieldInfo(RequestRatedBattlefieldInfo packet)
+ [WorldPacketHandler(ClientOpcodes.RequestRatedPvpInfo)]
+ void HandleRequestRatedPvpInfo(RequestRatedPvpInfo packet)
{
RatedPvpInfo ratedPvpInfo = new RatedPvpInfo();
SendPacket(ratedPvpInfo);
diff --git a/Source/Game/Handlers/CalendarHandler.cs b/Source/Game/Handlers/CalendarHandler.cs
index 812c121bd..71d54732e 100644
--- a/Source/Game/Handlers/CalendarHandler.cs
+++ b/Source/Game/Handlers/CalendarHandler.cs
@@ -108,12 +108,12 @@ namespace Game
Global.CalendarMgr.SendCalendarCommandResult(GetPlayer().GetGUID(), CalendarError.EventInvalid);
}
- [WorldPacketHandler(ClientOpcodes.CalendarCommunityFilter)]
- void HandleCalendarCommunityFilter(CalendarCommunityFilter calendarCommunityFilter)
+ [WorldPacketHandler(ClientOpcodes.CalendarCommunityInviteRequest)]
+ void HandleCalendarCommunityInvite(CalendarCommunityInviteRequest calendarCommunityInvite)
{
Guild guild = Global.GuildMgr.GetGuildById(GetPlayer().GetGuildId());
if (guild)
- guild.MassInviteToEvent(this, calendarCommunityFilter.MinLevel, calendarCommunityFilter.MaxLevel, calendarCommunityFilter.MaxRankOrder);
+ guild.MassInviteToEvent(this, calendarCommunityInvite.MinLevel, calendarCommunityInvite.MaxLevel, calendarCommunityInvite.MaxRankOrder);
}
[WorldPacketHandler(ClientOpcodes.CalendarAddEvent)]
@@ -234,8 +234,8 @@ namespace Game
Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.EventInvalid);
}
- [WorldPacketHandler(ClientOpcodes.CalendarEventInvite)]
- void HandleCalendarEventInvite(CalendarEventInvite calendarEventInvite)
+ [WorldPacketHandler(ClientOpcodes.CalendarInvite)]
+ void HandleCalendarInvite(CalendarInvitePkt calendarInvite)
{
ObjectGuid playerGuid = GetPlayer().GetGUID();
@@ -243,10 +243,10 @@ namespace Game
Team inviteeTeam = 0;
ulong inviteeGuildId = 0;
- if (!ObjectManager.NormalizePlayerName(ref calendarEventInvite.Name))
+ if (!ObjectManager.NormalizePlayerName(ref calendarInvite.Name))
return;
- Player player = Global.ObjAccessor.FindPlayerByName(calendarEventInvite.Name);
+ Player player = Global.ObjAccessor.FindPlayerByName(calendarInvite.Name);
if (player)
{
// Invitee is online
@@ -257,7 +257,7 @@ namespace Game
else
{
// Invitee offline, get data from database
- ObjectGuid guid = Global.CharacterCacheStorage.GetCharacterGuidByName(calendarEventInvite.Name);
+ ObjectGuid guid = Global.CharacterCacheStorage.GetCharacterGuidByName(calendarInvite.Name);
if (!guid.IsEmpty())
{
CharacterCacheEntry characterInfo = Global.CharacterCacheStorage.GetCharacterCacheByGuid(guid);
@@ -288,14 +288,14 @@ namespace Game
if (Convert.ToBoolean(result1.Read(0) & (byte)SocialFlag.Ignored))
{
- Global.CalendarMgr.SendCalendarCommandResult(playerGuid, CalendarError.IgnoringYouS, calendarEventInvite.Name);
+ Global.CalendarMgr.SendCalendarCommandResult(playerGuid, CalendarError.IgnoringYouS, calendarInvite.Name);
return;
}
}
- if (!calendarEventInvite.Creating)
+ if (!calendarInvite.Creating)
{
- CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarEventInvite.EventID);
+ CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarInvite.EventID);
if (calendarEvent != null)
{
if (calendarEvent.IsGuildEvent() && calendarEvent.GuildId == inviteeGuildId)
@@ -305,7 +305,7 @@ namespace Game
return;
}
- CalendarInvite invite = new CalendarInvite(Global.CalendarMgr.GetFreeInviteId(), calendarEventInvite.EventID, inviteeGuid, playerGuid, SharedConst.CalendarDefaultResponseTime, CalendarInviteStatus.Invited, CalendarModerationRank.Player, "");
+ CalendarInvite invite = new CalendarInvite(Global.CalendarMgr.GetFreeInviteId(), calendarInvite.EventID, inviteeGuid, playerGuid, SharedConst.CalendarDefaultResponseTime, CalendarInviteStatus.Invited, CalendarModerationRank.Player, "");
Global.CalendarMgr.AddInvite(calendarEvent, invite);
}
else
@@ -313,13 +313,13 @@ namespace Game
}
else
{
- if (calendarEventInvite.IsSignUp && inviteeGuildId == GetPlayer().GetGuildId())
+ if (calendarInvite.IsSignUp && inviteeGuildId == GetPlayer().GetGuildId())
{
Global.CalendarMgr.SendCalendarCommandResult(playerGuid, CalendarError.NoGuildInvites);
return;
}
- CalendarInvite invite = new CalendarInvite(calendarEventInvite.EventID, 0, inviteeGuid, playerGuid, SharedConst.CalendarDefaultResponseTime, CalendarInviteStatus.Invited, CalendarModerationRank.Player, "");
+ CalendarInvite invite = new CalendarInvite(calendarInvite.EventID, 0, inviteeGuid, playerGuid, SharedConst.CalendarDefaultResponseTime, CalendarInviteStatus.Invited, CalendarModerationRank.Player, "");
Global.CalendarMgr.SendCalendarEventInvite(invite);
}
}
@@ -347,25 +347,25 @@ namespace Game
Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.EventInvalid);
}
- [WorldPacketHandler(ClientOpcodes.CalendarEventRsvp)]
- void HandleCalendarEventRsvp(CalendarEventRSVP calendarEventRSVP)
+ [WorldPacketHandler(ClientOpcodes.CalendarRsvp)]
+ void HandleCalendarRsvp(HandleCalendarRsvp calendarRSVP)
{
ObjectGuid guid = GetPlayer().GetGUID();
- CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarEventRSVP.EventID);
+ CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarRSVP.EventID);
if (calendarEvent != null)
{
// i think we still should be able to remove self from locked events
- if (calendarEventRSVP.Status != CalendarInviteStatus.Removed && calendarEvent.IsLocked())
+ if (calendarRSVP.Status != CalendarInviteStatus.Removed && calendarEvent.IsLocked())
{
Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.EventLocked);
return;
}
- CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarEventRSVP.InviteID);
+ CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarRSVP.InviteID);
if (invite != null)
{
- invite.Status = calendarEventRSVP.Status;
+ invite.Status = calendarRSVP.Status;
invite.ResponseTime = Time.UnixTime;
Global.CalendarMgr.UpdateInvite(invite);
@@ -399,22 +399,22 @@ namespace Game
Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.NoInvite);
}
- [WorldPacketHandler(ClientOpcodes.CalendarEventStatus)]
- void HandleCalendarEventStatus(CalendarEventStatus calendarEventStatus)
+ [WorldPacketHandler(ClientOpcodes.CalendarStatus)]
+ void HandleCalendarStatus(CalendarStatus calendarStatus)
{
ObjectGuid guid = GetPlayer().GetGUID();
- CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarEventStatus.EventID);
+ CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarStatus.EventID);
if (calendarEvent != null)
{
- CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarEventStatus.InviteID);
+ CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarStatus.InviteID);
if (invite != null)
{
- invite.Status = (CalendarInviteStatus)calendarEventStatus.Status;
+ invite.Status = (CalendarInviteStatus)calendarStatus.Status;
Global.CalendarMgr.UpdateInvite(invite);
Global.CalendarMgr.SendCalendarEventStatus(calendarEvent, invite);
- Global.CalendarMgr.SendCalendarClearPendingAction(calendarEventStatus.Guid);
+ Global.CalendarMgr.SendCalendarClearPendingAction(calendarStatus.Guid);
}
else
Global.CalendarMgr.SendCalendarCommandResult(guid, CalendarError.NoInvite); // correct?
@@ -424,17 +424,17 @@ namespace Game
}
[WorldPacketHandler(ClientOpcodes.CalendarEventModeratorStatus)]
- void HandleCalendarEventModeratorStatus(CalendarEventModeratorStatus calendarEventModeratorStatus)
+ void HandleCalendarModeratorStatus(CalendarModeratorStatusQuery calendarModeratorStatus)
{
ObjectGuid guid = GetPlayer().GetGUID();
- CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarEventModeratorStatus.EventID);
+ CalendarEvent calendarEvent = Global.CalendarMgr.GetEvent(calendarModeratorStatus.EventID);
if (calendarEvent != null)
{
- CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarEventModeratorStatus.InviteID);
+ CalendarInvite invite = Global.CalendarMgr.GetInvite(calendarModeratorStatus.InviteID);
if (invite != null)
{
- invite.Rank = (CalendarModerationRank)calendarEventModeratorStatus.Status;
+ invite.Rank = (CalendarModerationRank)calendarModeratorStatus.Status;
Global.CalendarMgr.UpdateInvite(invite);
Global.CalendarMgr.SendCalendarEventModeratorStatusAlert(calendarEvent, invite);
}
diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs
index 5687aee94..a768a0d8b 100644
--- a/Source/Game/Handlers/CharacterHandler.cs
+++ b/Source/Game/Handlers/CharacterHandler.cs
@@ -54,11 +54,6 @@ namespace Game
void HandleCharEnumCallback(SQLResult result)
{
- byte demonHunterCount = 0; // We use this counter to allow multiple demon hunter creations when allowed in config
- bool canAlwaysCreateDemonHunter = HasPermission(RBACPermissions.SkipCheckCharacterCreationDemonHunter);
- if (WorldConfig.GetIntValue(WorldCfg.CharacterCreatingMinLevelForDemonHunter) == 0) // char level = 0 means this check is disabled, so always true
- canAlwaysCreateDemonHunter = true;
-
EnumCharactersResult charResult = new EnumCharactersResult();
charResult.Success = true;
charResult.IsDeletedCharacters = false;
@@ -101,14 +96,6 @@ namespace Game
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.SexId, charInfo.RaceId, (byte)charInfo.ClassId, charInfo.ExperienceLevel, false);
- if (charInfo.ClassId == Class.DemonHunter)
- demonHunterCount++;
-
- if (demonHunterCount >= WorldConfig.GetIntValue(WorldCfg.DemonHuntersPerRealm) && !canAlwaysCreateDemonHunter)
- charResult.HasDemonHunterOnRealm = true;
- else
- charResult.HasDemonHunterOnRealm = false;
-
charResult.MaxCharacterLevel = Math.Max(charResult.MaxCharacterLevel, charInfo.ExperienceLevel);
charResult.Characters.Add(charInfo);
@@ -116,8 +103,6 @@ namespace Game
while (result.NextRow());
}
- charResult.IsTestDemonHunterCreationAllowed = canAlwaysCreateDemonHunter;
- charResult.IsDemonHunterCreationAllowed = GetAccountExpansion() >= Expansion.Legion || canAlwaysCreateDemonHunter;
charResult.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= Expansion.BattleForAzeroth;
foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
@@ -360,25 +345,10 @@ namespace Game
if (result1 != null && !result1.IsEmpty())
{
Team team = Player.TeamForRace(createInfo.RaceId);
- int freeDemonHunterSlots = WorldConfig.GetIntValue(WorldCfg.DemonHuntersPerRealm);
-
byte accRace = result1.Read(1);
if (checkDemonHunterReqs)
{
- byte accClass = result1.Read(2);
- if (accClass == (byte)Class.DemonHunter)
- {
- if (freeDemonHunterSlots > 0)
- --freeDemonHunterSlots;
-
- if (freeDemonHunterSlots == 0)
- {
- SendCharCreate(ResponseCodes.CharCreateFailed);
- return;
- }
- }
-
if (!hasDemonHunterReqLevel)
{
byte accLevel = result1.Read(0);
@@ -1079,6 +1049,40 @@ namespace Game
GetPlayer().GetReputationMgr().SetInactive(packet.Index, packet.State);
}
+ [WorldPacketHandler(ClientOpcodes.CheckCharacterNameAvailability)]
+ void HandleCheckCharacterNameAvailability(CheckCharacterNameAvailability checkCharacterNameAvailability)
+ {
+ // prevent character rename to invalid name
+ if (!ObjectManager.NormalizePlayerName(ref checkCharacterNameAvailability.Name))
+ {
+ SendPacket(new CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, ResponseCodes.CharNameNoName));
+ return;
+ }
+
+ ResponseCodes res = ObjectManager.CheckPlayerName(checkCharacterNameAvailability.Name, GetSessionDbcLocale(), true);
+ if (res != ResponseCodes.CharNameSuccess)
+ {
+ SendPacket(new CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, res));
+ return;
+ }
+
+ // check name limitations
+ if (!HasPermission(RBACPermissions.SkipCheckCharacterCreationReservedname) && Global.ObjectMgr.IsReservedName(checkCharacterNameAvailability.Name))
+ {
+ SendPacket(new CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, ResponseCodes.CharNameReserved));
+ return;
+ }
+
+ // Ensure that there is no character with the desired new name
+ PreparedStatement stmt = DB.Characters.GetPreparedStatement(CharStatements.SEL_CHECK_NAME);
+ stmt.AddValue(0, checkCharacterNameAvailability.Name);
+
+ _queryProcessor.AddCallback(DB.Characters.AsyncQuery(stmt).WithCallback(result =>
+ {
+ SendPacket(new CheckCharacterNameAvailabilityResult(checkCharacterNameAvailability.SequenceIndex, !result.IsEmpty() ? ResponseCodes.CharCreateNameInUse : ResponseCodes.Success));
+ }));
+ }
+
[WorldPacketHandler(ClientOpcodes.RequestForcedReactions)]
void HandleRequestForcedReactions(RequestForcedReactions requestForcedReactions)
{
@@ -2455,13 +2459,8 @@ namespace Game
packet.Display.HasValue = true;
packet.Display.Value.Name = factionChangeInfo.Name;
packet.Display.Value.SexID = (byte)factionChangeInfo.SexID;
- packet.Display.Value.SkinID = factionChangeInfo.SkinID;
- packet.Display.Value.HairColorID = factionChangeInfo.HairColorID;
- packet.Display.Value.HairStyleID = factionChangeInfo.HairStyleID;
- packet.Display.Value.FacialHairStyleID = factionChangeInfo.FacialHairStyleID;
- packet.Display.Value.FaceID = factionChangeInfo.FaceID;
+ packet.Display.Value.Customizations = factionChangeInfo.Customizations;
packet.Display.Value.RaceID = (byte)factionChangeInfo.RaceID;
- packet.Display.Value.CustomDisplay = factionChangeInfo.CustomDisplay;
}
SendPacket(packet);
diff --git a/Source/Game/Handlers/GarrisonHandler.cs b/Source/Game/Handlers/GarrisonHandler.cs
index d83941e7d..2de536122 100644
--- a/Source/Game/Handlers/GarrisonHandler.cs
+++ b/Source/Game/Handlers/GarrisonHandler.cs
@@ -62,12 +62,12 @@ namespace Game
garrison.SendBlueprintAndSpecializationData();
}
- [WorldPacketHandler(ClientOpcodes.GarrisonGetBuildingLandmarks)]
- void HandleGarrisonGetBuildingLandmarks(GarrisonGetBuildingLandmarks garrisonGetBuildingLandmarks)
+ [WorldPacketHandler(ClientOpcodes.GarrisonGetMapData)]
+ void HandleGarrisonGetMapData(GarrisonGetMapData garrisonGetMapData)
{
Garrison garrison = _player.GetGarrison();
if (garrison != null)
- garrison.SendBuildingLandmarks(_player);
+ garrison.SendMapData(_player);
}
}
}
diff --git a/Source/Game/Handlers/HotfixHandler.cs b/Source/Game/Handlers/HotfixHandler.cs
index 360974b8f..d7efba5d8 100644
--- a/Source/Game/Handlers/HotfixHandler.cs
+++ b/Source/Game/Handlers/HotfixHandler.cs
@@ -43,7 +43,7 @@ namespace Game
if (store.HasRecord(record.RecordID))
{
- dbReply.Allow = true;
+ dbReply.Status = 1;
dbReply.Timestamp = (uint)GameTime.GetGameTime();
store.WriteRecord(record.RecordID, GetSessionDbcLocale(), dbReply.Data);
}
diff --git a/Source/Game/Handlers/LFGHandler.cs b/Source/Game/Handlers/LFGHandler.cs
index fc6683520..5eb85d0b6 100644
--- a/Source/Game/Handlers/LFGHandler.cs
+++ b/Source/Game/Handlers/LFGHandler.cs
@@ -150,7 +150,7 @@ namespace Game
// Get player locked Dungeons
foreach (var locked in Global.LFGMgr.GetLockedDungeons(_player.GetGUID()))
- lfgPlayerInfo.BlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel));
+ lfgPlayerInfo.BlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel, 0));
foreach (var slot in randomDungeons)
{
@@ -231,7 +231,7 @@ namespace Game
LFGBlackList lfgBlackList = new LFGBlackList();
lfgBlackList.PlayerGuid.Set(pguid);
foreach (var locked in Global.LFGMgr.GetLockedDungeons(pguid))
- lfgBlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel));
+ lfgBlackList.Slot.Add(new LFGBlackListSlot(locked.Key, (uint)locked.Value.lockStatus, locked.Value.requiredItemLevel, (int)locked.Value.currentItemLevel, 0));
lfgPartyInfo.Player.Add(lfgBlackList);
}
@@ -353,7 +353,7 @@ namespace Game
foreach (var it in joinData.lockmap)
{
- var blackList = new LFGJoinBlackList();
+ var blackList = new LFGBlackListPkt();
blackList.PlayerGuid = it.Key;
foreach (var lockInfo in it.Value)
@@ -361,8 +361,10 @@ namespace Game
Log.outTrace(LogFilter.Lfg, "SendLfgJoinResult:: {0} DungeonID: {1} Lock status: {2} Required itemLevel: {3} Current itemLevel: {4}",
it.Key.ToString(), (lockInfo.Key & 0x00FFFFFF), lockInfo.Value.lockStatus, lockInfo.Value.requiredItemLevel, lockInfo.Value.currentItemLevel);
- blackList.Slots.Add(new LFGJoinBlackListSlot((int)lockInfo.Key, (int)lockInfo.Value.lockStatus, lockInfo.Value.requiredItemLevel, (int)lockInfo.Value.currentItemLevel));
+ blackList.Slot.Add(new LFGBlackListSlot(lockInfo.Key, (uint)lockInfo.Value.lockStatus, lockInfo.Value.requiredItemLevel, (int)lockInfo.Value.currentItemLevel, 0));
}
+
+ lfgJoinResult.BlackList.Add(blackList);
}
SendPacket(lfgJoinResult);
diff --git a/Source/Game/Handlers/MiscHandler.cs b/Source/Game/Handlers/MiscHandler.cs
index 50291fcec..e55f70f33 100644
--- a/Source/Game/Handlers/MiscHandler.cs
+++ b/Source/Game/Handlers/MiscHandler.cs
@@ -732,8 +732,8 @@ namespace Game
GetPlayer().SetPendingBind(0, 0);
}
- [WorldPacketHandler(ClientOpcodes.WardenData)]
- void HandleWardenDataOpcode(WardenData packet)
+ [WorldPacketHandler(ClientOpcodes.Warden3Data)]
+ void HandleWarden3Data(WardenData packet)
{
if (_warden == null || packet.Data.GetSize() == 0)
return;
diff --git a/Source/Game/Handlers/MovementHandler.cs b/Source/Game/Handlers/MovementHandler.cs
index d3f4d8edb..af97c051f 100644
--- a/Source/Game/Handlers/MovementHandler.cs
+++ b/Source/Game/Handlers/MovementHandler.cs
@@ -429,7 +429,7 @@ namespace Game
NewWorld packet = new NewWorld();
packet.MapID = loc.GetMapId();
- packet.Pos = loc;
+ packet.Loc.Pos = loc;
packet.Reason = (uint)(!_player.IsBeingTeleportedSeamlessly() ? NewWorldReason.Normal : NewWorldReason.Seamless);
SendPacket(packet);
diff --git a/Source/Game/Handlers/QuestHandler.cs b/Source/Game/Handlers/QuestHandler.cs
index 7729d2f94..f2478d651 100644
--- a/Source/Game/Handlers/QuestHandler.cs
+++ b/Source/Game/Handlers/QuestHandler.cs
@@ -242,10 +242,13 @@ namespace Game
if (quest == null)
return;
- // This is Real Item Entry, not slot id as pre 5.x
+ // TODO: currency choice items
+ if (packet.Choice.LootItemType != LootItemType.Item)
+ return;
+
if (packet.ItemChoiceID != 0)
{
- ItemTemplate rewardProto = Global.ObjectMgr.GetItemTemplate(packet.ItemChoiceID);
+ ItemTemplate rewardProto = Global.ObjectMgr.GetItemTemplate(packet.Choice.Item.ItemID);
if (rewardProto == null)
{
Log.outError(LogFilter.Network, "Error in CMSG_QUESTGIVER_CHOOSE_REWARD: player {0} ({1}) tried to get invalid reward item (Item Entry: {2}) for quest {3} (possible packet-hacking detected)", GetPlayer().GetName(), GetPlayer().GetGUID().ToString(), packet.ItemChoiceID, packet.QuestID);
@@ -255,7 +258,7 @@ namespace Game
bool itemValid = false;
for (uint i = 0; i < quest.GetRewChoiceItemsCount(); ++i)
{
- if (quest.RewardChoiceItemId[i] != 0 && quest.RewardChoiceItemId[i] == packet.ItemChoiceID)
+ if (quest.RewardChoiceItemId[i] != 0 && quest.RewardChoiceItemId[i] == packet.Choice.Item.ItemID)
{
itemValid = true;
break;
@@ -269,7 +272,7 @@ namespace Game
{
foreach (var questPackageItem in questPackageItems)
{
- if (questPackageItem.ItemID != packet.ItemChoiceID)
+ if (questPackageItem.ItemID != packet.Choice.Item.ItemID)
continue;
if (_player.CanSelectQuestPackageItem(questPackageItem))
@@ -287,7 +290,7 @@ namespace Game
{
foreach (var questPackageItem in questPackageItems1)
{
- if (questPackageItem.ItemID != packet.ItemChoiceID)
+ if (questPackageItem.ItemID != packet.Choice.Item.ItemID)
continue;
itemValid = true;
@@ -324,9 +327,9 @@ namespace Game
return;
}
- if (GetPlayer().CanRewardQuest(quest, packet.ItemChoiceID, true))
+ if (GetPlayer().CanRewardQuest(quest, packet.Choice.Item.ItemID, true))
{
- GetPlayer().RewardQuest(quest, packet.ItemChoiceID, obj);
+ GetPlayer().RewardQuest(quest, packet.Choice.Item.ItemID, obj);
switch (obj.GetTypeId())
{
@@ -350,7 +353,7 @@ namespace Game
}
_player.PlayerTalkClass.ClearMenus();
- creatureQGiver.GetAI().QuestReward(_player, quest, packet.ItemChoiceID);
+ creatureQGiver.GetAI().QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID);
break;
}
case TypeId.GameObject:
@@ -371,7 +374,7 @@ namespace Game
}
_player.PlayerTalkClass.ClearMenus();
- questGiver.GetAI().QuestReward(_player, quest, packet.ItemChoiceID);
+ questGiver.GetAI().QuestReward(_player, quest, packet.Choice.LootItemType, packet.Choice.Item.ItemID);
break;
}
default:
diff --git a/Source/Game/Handlers/SpellHandler.cs b/Source/Game/Handlers/SpellHandler.cs
index b9d7feee9..4edd9e706 100644
--- a/Source/Game/Handlers/SpellHandler.cs
+++ b/Source/Game/Handlers/SpellHandler.cs
@@ -531,13 +531,8 @@ namespace Game
Guild guild = player.GetGuild();
- mirrorImageComponentedData.SkinColor = player.m_playerData.SkinID;
- mirrorImageComponentedData.FaceVariation = player.m_playerData.FaceID;
- mirrorImageComponentedData.HairVariation = player.m_playerData.HairStyleID;
- mirrorImageComponentedData.HairColor = player.m_playerData.HairColorID;
- mirrorImageComponentedData.BeardVariation = player.m_playerData.FacialHairStyleID;
- for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i)
- mirrorImageComponentedData.CustomDisplay[i] = player.m_playerData.CustomDisplayOption[i];
+ foreach (var customization in player.m_playerData.Customizations)
+ mirrorImageComponentedData.Customizations.Add(new ChrCustomizationChoice(customization.ChrCustomizationOptionID, customization.ChrCustomizationChoiceID));
mirrorImageComponentedData.GuildGUID = (guild ? guild.GetGUID() : ObjectGuid.Empty);
byte[] itemSlots =
diff --git a/Source/Game/Handlers/TicketHandler.cs b/Source/Game/Handlers/TicketHandler.cs
index 8c4658500..7b42a4ed9 100644
--- a/Source/Game/Handlers/TicketHandler.cs
+++ b/Source/Game/Handlers/TicketHandler.cs
@@ -43,32 +43,33 @@ namespace Game
SendPacket(response);
}
- [WorldPacketHandler(ClientOpcodes.SupportTicketSubmitBug)]
- void HandleSupportTicketSubmitBug(SupportTicketSubmitBug packet)
+ [WorldPacketHandler(ClientOpcodes.SubmitUserFeedback)]
+ void HandleSubmitUserFeedback(SubmitUserFeedback userFeedback)
{
- if (!Global.SupportMgr.GetBugSystemStatus())
- return;
+ if (userFeedback.IsSuggestion)
+ {
+ if (!Global.SupportMgr.GetSuggestionSystemStatus())
+ return;
- BugTicket ticket = new BugTicket(GetPlayer());
- ticket.SetPosition(packet.Header.MapID, packet.Header.Position);
- ticket.SetFacing(packet.Header.Facing);
- ticket.SetNote(packet.Note);
+ SuggestionTicket ticket = new SuggestionTicket(GetPlayer());
+ ticket.SetPosition(userFeedback.Header.MapID, userFeedback.Header.Position);
+ ticket.SetFacing(userFeedback.Header.Facing);
+ ticket.SetNote(userFeedback.Note);
- Global.SupportMgr.AddTicket(ticket);
- }
+ Global.SupportMgr.AddTicket(ticket);
+ }
+ else
+ {
+ if (!Global.SupportMgr.GetBugSystemStatus())
+ return;
- [WorldPacketHandler(ClientOpcodes.SupportTicketSubmitSuggestion)]
- void HandleSupportTicketSubmitSuggestion(SupportTicketSubmitSuggestion packet)
- {
- if (!Global.SupportMgr.GetSuggestionSystemStatus())
- return;
+ BugTicket ticket = new BugTicket(GetPlayer());
+ ticket.SetPosition(userFeedback.Header.MapID, userFeedback.Header.Position);
+ ticket.SetFacing(userFeedback.Header.Facing);
+ ticket.SetNote(userFeedback.Note);
- SuggestionTicket ticket = new SuggestionTicket(GetPlayer());
- ticket.SetPosition(packet.Header.MapID, packet.Header.Position);
- ticket.SetFacing(packet.Header.Facing);
- ticket.SetNote(packet.Note);
-
- Global.SupportMgr.AddTicket(ticket);
+ Global.SupportMgr.AddTicket(ticket);
+ }
}
[WorldPacketHandler(ClientOpcodes.SupportTicketSubmitComplaint)]
diff --git a/Source/Game/Movement/MoveSpline.cs b/Source/Game/Movement/MoveSpline.cs
index 15459f9f7..acae7f8d4 100644
--- a/Source/Game/Movement/MoveSpline.cs
+++ b/Source/Game/Movement/MoveSpline.cs
@@ -51,6 +51,7 @@ namespace Game.Movement
vertical_acceleration = 0.0f;
effect_start_time = 0;
spell_effect_extra = args.spellEffectExtra;
+ anim_tier = args.animTier;
splineIsFacingOnly = args.path.Length == 2 && args.facing.type != MonsterMoveType.Normal && ((args.path[1] - args.path[0]).GetLength() < 0.1f);
// Check if its a stop spline
@@ -155,7 +156,7 @@ namespace Game.Movement
}
else
{
- if (!splineflags.HasFlag(SplineFlag.OrientationFixed | SplineFlag.Falling | SplineFlag.Unknown0))
+ if (!splineflags.HasFlag(SplineFlag.OrientationFixed | SplineFlag.Falling | SplineFlag.Unknown0x8))
{
Vector3 hermite;
spline.Evaluate_Derivative(point_Idx, u, out hermite);
@@ -309,6 +310,7 @@ namespace Game.Movement
public int point_Idx;
public int point_Idx_offset;
public Optional spell_effect_extra;
+ public Optional anim_tier;
#endregion
public class CommonInitializer : IInitializer
diff --git a/Source/Game/Movement/MoveSplineFlags.cs b/Source/Game/Movement/MoveSplineFlags.cs
index c95054f4b..bb7dc6f4b 100644
--- a/Source/Game/Movement/MoveSplineFlags.cs
+++ b/Source/Game/Movement/MoveSplineFlags.cs
@@ -29,7 +29,6 @@ namespace Game.Movement
public bool IsSmooth() { return Flags.HasAnyFlag(SplineFlag.Catmullrom); }
public bool IsLinear() { return !IsSmooth(); }
- public byte GetAnimTier() { return animTier; }
public bool HasAllFlags(SplineFlag f) { return (Flags & f) == f; }
public bool HasFlag(SplineFlag f) { return (Flags & f) != 0; }
@@ -41,10 +40,10 @@ namespace Game.Movement
Flags &= ~f;
}
- public void EnableAnimation(uint anim) { Flags = (Flags & ~(SplineFlag.MaskAnimations | SplineFlag.Falling | SplineFlag.Parabolic | SplineFlag.FallingSlow | SplineFlag.FadeObject)) | SplineFlag.Animation | ((SplineFlag)anim & SplineFlag.MaskAnimations); }
- public void EnableParabolic() { Flags = (Flags & ~(SplineFlag.MaskAnimations | SplineFlag.Falling | SplineFlag.Animation | SplineFlag.FallingSlow | SplineFlag.FadeObject)) | SplineFlag.Parabolic; }
+ public void EnableAnimation() { Flags = (Flags & ~(SplineFlag.Falling | SplineFlag.Parabolic | SplineFlag.FallingSlow | SplineFlag.FadeObject)) | SplineFlag.Animation; }
+ public void EnableParabolic() { Flags = (Flags & ~(SplineFlag.Falling | SplineFlag.Animation | SplineFlag.FallingSlow | SplineFlag.FadeObject)) | SplineFlag.Parabolic; }
public void EnableFlying() { Flags = (Flags & ~SplineFlag.Falling) | SplineFlag.Flying; }
- public void EnableFalling() { Flags = (Flags & ~(SplineFlag.MaskAnimations | SplineFlag.Parabolic | SplineFlag.Animation | SplineFlag.Flying)) | SplineFlag.Falling; }
+ public void EnableFalling() { Flags = (Flags & ~(SplineFlag.Parabolic | SplineFlag.Animation | SplineFlag.Flying)) | SplineFlag.Falling; }
public void EnableCatmullRom() { Flags = (Flags & ~SplineFlag.SmoothGroundPath) | SplineFlag.Catmullrom; }
public void EnableTransportEnter() { Flags = (Flags & ~SplineFlag.TransportExit) | SplineFlag.TransportEnter; }
public void EnableTransportExit() { Flags = (Flags & ~SplineFlag.TransportEnter) | SplineFlag.TransportExit; }
diff --git a/Source/Game/Movement/MoveSplineInit.cs b/Source/Game/Movement/MoveSplineInit.cs
index 093aa5e44..73717190e 100644
--- a/Source/Game/Movement/MoveSplineInit.cs
+++ b/Source/Game/Movement/MoveSplineInit.cs
@@ -285,7 +285,9 @@ namespace Game.Movement
public void SetAnimation(AnimType anim)
{
args.time_perc = 0.0f;
- args.flags.EnableAnimation((byte)anim);
+ args.animTier.emplace();
+ args.animTier.AnimTier = anim;
+ args.flags.EnableAnimation();
}
public void SetFacing(Vector3 spot)
diff --git a/Source/Game/Movement/MoveSplineInitArgs.cs b/Source/Game/Movement/MoveSplineInitArgs.cs
index 747bdeb59..75bc74731 100644
--- a/Source/Game/Movement/MoveSplineInitArgs.cs
+++ b/Source/Game/Movement/MoveSplineInitArgs.cs
@@ -47,6 +47,7 @@ namespace Game.Movement
public uint splineId;
public float initialOrientation;
public Optional spellEffectExtra;
+ public Optional animTier;
public bool walk;
public bool HasVelocity;
public bool TransformForTransport;
@@ -92,4 +93,10 @@ namespace Game.Movement
public uint ProgressCurveId;
public uint ParabolicCurveId;
}
+
+ public class AnimTierTransition
+ {
+ public uint TierTransitionId;
+ public byte AnimTier;
+ }
}
diff --git a/Source/Game/Networking/PacketUtilities.cs b/Source/Game/Networking/PacketUtilities.cs
deleted file mode 100644
index f1c222fdf..000000000
--- a/Source/Game/Networking/PacketUtilities.cs
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2012-2020 CypherCore
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-
-using System;
-
-namespace Game.Networking
-{
- public class CompactArray
- {
- public void Insert(int index, int value)
- {
- Cypher.Assert(index < 0x20);
-
- _mask |= 1u << index;
- if (_contents.Length <= index)
- Array.Resize(ref _contents, index + 1);
- _contents[index] = value;
- }
-
- void Clear()
- {
- _mask = 0;
- _contents = new int[1];
- }
-
- public void Read(WorldPacket data)
- {
- uint mask = data.ReadUInt32();
-
- for (int index = 0; mask != 0; mask >>= 1, ++index)
- {
- if ((mask & 1) != 0)
- {
- int value = data.ReadInt32();
- Insert(index, value);
- }
- }
- }
-
- public void Write(WorldPacket data)
- {
- uint mask = GetMask();
- data.WriteUInt32(mask);
- for (int i = 0; i < GetSize(); ++i)
- {
- if (Convert.ToBoolean(mask & (1 << i)))
- data.WriteInt32(this[i]);
- }
- }
-
- public override int GetHashCode()
- {
- return _mask.GetHashCode() ^ _contents.GetHashCode();
- }
-
- public override bool Equals(object obj)
- {
- if (obj is CompactArray)
- return (CompactArray)obj == this;
-
- return false;
- }
-
- public static bool operator ==(CompactArray left, CompactArray right)
- {
- if (left._mask != right._mask)
- return false;
-
- return left._contents == right._contents;
- }
-
- public static bool operator !=(CompactArray left, CompactArray right)
- {
- return !(left == right);
- }
-
- uint GetMask() { return _mask; }
- public int this[int index] { get { return _contents[index]; } }
- int GetSize() { return _contents.Length; }
-
- uint _mask;
- int[] _contents = new int[1];
- }
-}
diff --git a/Source/Game/Networking/Packets/AreaTriggerPackets.cs b/Source/Game/Networking/Packets/AreaTriggerPackets.cs
index de20e7dc0..643e203fd 100644
--- a/Source/Game/Networking/Packets/AreaTriggerPackets.cs
+++ b/Source/Game/Networking/Packets/AreaTriggerPackets.cs
@@ -72,17 +72,22 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(AreaTriggerSpline.HasValue);
_worldPacket.WriteBit(AreaTriggerOrbit.HasValue);
+ _worldPacket.WriteBit(AreaTriggerMovementScript.HasValue);
_worldPacket.FlushBits();
if (AreaTriggerSpline.HasValue)
AreaTriggerSpline.Value.Write(_worldPacket);
+ if (AreaTriggerMovementScript.HasValue)
+ AreaTriggerMovementScript.Value.Write(_worldPacket);
+
if (AreaTriggerOrbit.HasValue)
AreaTriggerOrbit.Value.Write(_worldPacket);
}
public Optional AreaTriggerSpline;
public Optional AreaTriggerOrbit;
+ public Optional AreaTriggerMovementScript;
public ObjectGuid TriggerGUID;
}
diff --git a/Source/Game/Networking/Packets/AuctionHousePackets.cs b/Source/Game/Networking/Packets/AuctionHousePackets.cs
index 897e92848..23f8af43c 100644
--- a/Source/Game/Networking/Packets/AuctionHousePackets.cs
+++ b/Source/Game/Networking/Packets/AuctionHousePackets.cs
@@ -616,6 +616,9 @@ namespace Game.Networking.Packets
foreach (AuctionItem item in Items)
item.Write(_worldPacket);
+
+ foreach (AuctionItem item in SoldItems)
+ item.Write(_worldPacket);
}
}
@@ -857,10 +860,12 @@ namespace Game.Networking.Packets
public AuctionBucketKey Key;
public int TotalQuantity;
public ulong MinPrice;
+ public int RequiredLevel;
public List ItemModifiedAppearanceIDs = new List();
public Optional MaxBattlePetQuality;
public Optional MaxBattlePetLevel;
public Optional BattlePetBreedID;
+ public Optional Unk901_1;
public bool ContainsOwnerItem;
public bool ContainsOnlyCollectedAppearances;
@@ -868,6 +873,7 @@ namespace Game.Networking.Packets
{
Key.Write(data);
data.WriteInt32(TotalQuantity);
+ data.WriteInt32(RequiredLevel);
data.WriteUInt64(MinPrice);
data.WriteInt32(ItemModifiedAppearanceIDs.Count);
if (!ItemModifiedAppearanceIDs.Empty())
@@ -879,6 +885,7 @@ namespace Game.Networking.Packets
data.WriteBit(MaxBattlePetQuality.HasValue);
data.WriteBit(MaxBattlePetLevel.HasValue);
data.WriteBit(BattlePetBreedID.HasValue);
+ data.WriteBit(Unk901_1.HasValue);
data.WriteBit(ContainsOwnerItem);
data.WriteBit(ContainsOnlyCollectedAppearances);
data.FlushBits();
@@ -891,6 +898,9 @@ namespace Game.Networking.Packets
if (BattlePetBreedID.HasValue)
data.WriteUInt8(BattlePetBreedID.Value);
+
+ if (Unk901_1.HasValue)
+ data.WriteUInt32(Unk901_1.Value);
}
}
diff --git a/Source/Game/Networking/Packets/AuthenticationPackets.cs b/Source/Game/Networking/Packets/AuthenticationPackets.cs
index 123caeb3a..169d59222 100644
--- a/Source/Game/Networking/Packets/AuthenticationPackets.cs
+++ b/Source/Game/Networking/Packets/AuthenticationPackets.cs
@@ -153,13 +153,13 @@ namespace Game.Networking.Packets
_worldPacket.FlushBits();
{
- _worldPacket.WriteUInt32(SuccessInfo.Value.Billing.BillingPlan);
- _worldPacket.WriteUInt32(SuccessInfo.Value.Billing.TimeRemain);
- _worldPacket.WriteUInt32(SuccessInfo.Value.Billing.Unknown735);
+ _worldPacket.WriteUInt32(SuccessInfo.Value.GameTimeInfo.BillingPlan);
+ _worldPacket.WriteUInt32(SuccessInfo.Value.GameTimeInfo.TimeRemain);
+ _worldPacket.WriteUInt32(SuccessInfo.Value.GameTimeInfo.Unknown735);
// 3x same bit is not a mistake - preserves legacy client behavior of BillingPlanFlags::SESSION_IGR
- _worldPacket.WriteBit(SuccessInfo.Value.Billing.InGameRoom); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG
- _worldPacket.WriteBit(SuccessInfo.Value.Billing.InGameRoom); // inGameRoom lua return from Script_GetBillingPlan
- _worldPacket.WriteBit(SuccessInfo.Value.Billing.InGameRoom); // not used anywhere in the client
+ _worldPacket.WriteBit(SuccessInfo.Value.GameTimeInfo.InGameRoom); // inGameRoom check in function checking which lua event to fire when remaining time is near end - BILLING_NAG_DIALOG vs IGR_BILLING_NAG_DIALOG
+ _worldPacket.WriteBit(SuccessInfo.Value.GameTimeInfo.InGameRoom); // inGameRoom lua return from Script_GetBillingPlan
+ _worldPacket.WriteBit(SuccessInfo.Value.GameTimeInfo.InGameRoom); // not used anywhere in the client
_worldPacket.FlushBits();
}
@@ -213,7 +213,7 @@ namespace Game.Networking.Packets
public uint CurrencyID; // this is probably used for the ingame shop. @todo implement
public uint Time;
- public BillingInfo Billing;
+ public GameTime GameTimeInfo;
public List VirtualRealms = new List(); // list of realms connected to this one (inclusive) @todo implement
public List Templates = new List(); // list of pre-made character templates. @todo implement
@@ -226,7 +226,7 @@ namespace Game.Networking.Packets
public Optional NumPlayersAlliance; // number of alliance players in this realm. @todo implement
public Optional ExpansionTrialExpiration; // expansion trial expiration unix timestamp
- public struct BillingInfo
+ public struct GameTime
{
public uint BillingPlan;
public uint TimeRemain;
diff --git a/Source/Game/Networking/Packets/BattleGroundPackets.cs b/Source/Game/Networking/Packets/BattleGroundPackets.cs
index eefb1f146..312d8da6e 100644
--- a/Source/Game/Networking/Packets/BattleGroundPackets.cs
+++ b/Source/Game/Networking/Packets/BattleGroundPackets.cs
@@ -33,13 +33,18 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(MythicPlusSeasonID);
_worldPacket.WriteInt32(CurrentSeason);
_worldPacket.WriteInt32(PreviousSeason);
+ _worldPacket.WriteInt32(ConquestWeeklyProgressCurrencyID);
_worldPacket.WriteInt32(PvpSeasonID);
+ _worldPacket.WriteBit(WeeklyRewardChestsEnabled);
+ _worldPacket.FlushBits();
}
public int MythicPlusSeasonID;
public int PreviousSeason;
public int CurrentSeason;
public int PvpSeasonID;
+ public int ConquestWeeklyProgressCurrencyID;
+ public bool WeeklyRewardChestsEnabled;
}
public class AreaSpiritHealerQuery : ClientPacket
@@ -435,9 +440,9 @@ namespace Game.Networking.Packets
public uint RandomMaxRewardPointsThisWeek;
}
- class RequestRatedBattlefieldInfo : ClientPacket
+ class RequestRatedPvpInfo : ClientPacket
{
- public RequestRatedBattlefieldInfo(WorldPacket packet) : base(packet) { }
+ public RequestRatedPvpInfo(WorldPacket packet) : base(packet) { }
public override void Read() { }
}
diff --git a/Source/Game/Networking/Packets/CalendarPackets.cs b/Source/Game/Networking/Packets/CalendarPackets.cs
index 1e627d4b0..2f58a8162 100644
--- a/Source/Game/Networking/Packets/CalendarPackets.cs
+++ b/Source/Game/Networking/Packets/CalendarPackets.cs
@@ -42,9 +42,9 @@ namespace Game.Networking.Packets
public ulong EventID;
}
- class CalendarCommunityFilter : ClientPacket
+ class CalendarCommunityInviteRequest : ClientPacket
{
- public CalendarCommunityFilter(WorldPacket packet) : base(packet) { }
+ public CalendarCommunityInviteRequest(WorldPacket packet) : base(packet) { }
public override void Read()
{
@@ -260,9 +260,9 @@ namespace Game.Networking.Packets
public string EventName;
}
- class CalendarEventInvite : ClientPacket
+ class CalendarInvitePkt : ClientPacket
{
- public CalendarEventInvite(WorldPacket packet) : base(packet) { }
+ public CalendarInvitePkt(WorldPacket packet) : base(packet) { }
public override void Read()
{
@@ -285,9 +285,9 @@ namespace Game.Networking.Packets
public string Name;
}
- class CalendarEventRSVP : ClientPacket
+ class HandleCalendarRsvp : ClientPacket
{
- public CalendarEventRSVP(WorldPacket packet) : base(packet) { }
+ public HandleCalendarRsvp(WorldPacket packet) : base(packet) { }
public override void Read()
{
@@ -502,9 +502,9 @@ namespace Game.Networking.Packets
public ulong InviteID;
}
- class CalendarEventStatus : ClientPacket
+ class CalendarStatus : ClientPacket
{
- public CalendarEventStatus(WorldPacket packet) : base(packet) { }
+ public CalendarStatus(WorldPacket packet) : base(packet) { }
public override void Read()
{
@@ -538,9 +538,9 @@ namespace Game.Networking.Packets
public uint DifficultyID;
}
- class CalendarEventModeratorStatus : ClientPacket
+ class CalendarModeratorStatusQuery : ClientPacket
{
- public CalendarEventModeratorStatus(WorldPacket packet) : base(packet) { }
+ public CalendarModeratorStatusQuery(WorldPacket packet) : base(packet) { }
public override void Read()
{
diff --git a/Source/Game/Networking/Packets/ChannelPackets.cs b/Source/Game/Networking/Packets/ChannelPackets.cs
index f5b3d4549..74f98d253 100644
--- a/Source/Game/Networking/Packets/ChannelPackets.cs
+++ b/Source/Game/Networking/Packets/ChannelPackets.cs
@@ -115,7 +115,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(ChannelWelcomeMsg.GetByteCount(), 11);
_worldPacket.WriteUInt32((uint)ChannelFlags);
_worldPacket.WriteInt32(ChatChannelID);
- _worldPacket.WriteUInt64((ulong)InstanceID);
+ _worldPacket.WriteUInt64(InstanceID);
_worldPacket.WritePackedGuid(ChannelGUID);
_worldPacket.WriteString(Channel);
_worldPacket.WriteString(ChannelWelcomeMsg);
@@ -123,7 +123,7 @@ namespace Game.Networking.Packets
public string ChannelWelcomeMsg = "";
public int ChatChannelID;
- public int InstanceID;
+ public ulong InstanceID;
public ChannelFlags ChannelFlags;
public string Channel = "";
public ObjectGuid ChannelGUID;
diff --git a/Source/Game/Networking/Packets/CharacterPackets.cs b/Source/Game/Networking/Packets/CharacterPackets.cs
index e43f08c35..fd59fafb8 100644
--- a/Source/Game/Networking/Packets/CharacterPackets.cs
+++ b/Source/Game/Networking/Packets/CharacterPackets.cs
@@ -41,9 +41,8 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteBit(Success);
_worldPacket.WriteBit(IsDeletedCharacters);
- _worldPacket.WriteBit(IsTestDemonHunterCreationAllowed);
- _worldPacket.WriteBit(HasDemonHunterOnRealm);
- _worldPacket.WriteBit(IsDemonHunterCreationAllowed);
+ _worldPacket.WriteBit(IsNewPlayerRestrictionSkipped);
+ _worldPacket.WriteBit(IsNewPlayer);
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
_worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
_worldPacket.WriteInt32(Characters.Count);
@@ -66,9 +65,8 @@ namespace Game.Networking.Packets
public bool Success;
public bool IsDeletedCharacters; // used for character undelete list
- public bool IsTestDemonHunterCreationAllowed = false; //allows client to skip 1 per realm and level 70 requirements
- public bool HasDemonHunterOnRealm = false;
- public bool IsDemonHunterCreationAllowed = false; //used for demon hunter early access
+ public bool IsNewPlayerRestrictionSkipped = false; // allows client to skip new player restrictions
+ public bool IsNewPlayer = false; // forbids hero classes and allied races
public bool IsAlliedRacesCreationAllowed = false;
public int MaxCharacterLevel = 1;
@@ -187,14 +185,7 @@ namespace Game.Networking.Packets
data.WriteUInt8(RaceId);
data.WriteUInt8((byte)ClassId);
data.WriteUInt8(SexId);
- data.WriteUInt8(SkinId);
- data.WriteUInt8(FaceId);
- data.WriteUInt8(HairStyle);
- data.WriteUInt8(HairColor);
- data.WriteUInt8(FacialHair);
-
- foreach (var display in CustomDisplay)
- data.WriteUInt8(display);
+ data.WriteInt32(Customizations.Count);
data.WriteUInt8(ExperienceLevel);
data.WriteUInt32(ZoneId);
@@ -219,18 +210,23 @@ namespace Game.Networking.Packets
data.WriteUInt32(Unknown703);
data.WriteUInt32(LastLoginVersion);
data.WriteUInt32(Flags4);
- data.WriteInt32(Unknown830.Count);
+ data.WriteInt32(MailSenders.Count);
+ data.WriteUInt32(OverrideSelectScreenFileDataID);
+
+ foreach (ChrCustomizationChoice customization in Customizations)
+ customization.Write(data);
+
data.WriteBits(Name.GetByteCount(), 6);
data.WriteBit(FirstLogin);
data.WriteBit(BoostInProgress);
data.WriteBits(unkWod61x, 5);
- foreach (string str in Unknown830)
+ foreach (string str in MailSenders)
data.WriteBits(str.GetByteCount() + 1, 6);
data.FlushBits();
- foreach (string str in Unknown830)
+ foreach (string str in MailSenders)
if (!str.IsEmpty())
data.WriteCString(str);
@@ -244,12 +240,7 @@ namespace Game.Networking.Packets
public byte RaceId;
public Class ClassId;
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 Array Customizations = new Array(50);
public byte ExperienceLevel;
public uint ZoneId;
public uint MapId;
@@ -265,14 +256,14 @@ namespace Game.Networking.Packets
public ushort SpecID;
public uint Unknown703;
public uint LastLoginVersion;
+ public uint OverrideSelectScreenFileDataID;
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];
- public List Unknown830 = new List(); // Something with character names, same length limit as name,
- // client accepts unlimited number of these in packet but only uses first 3
+ public List MailSenders = new List();
public struct VisualItemInfo
{
@@ -280,12 +271,14 @@ namespace Game.Networking.Packets
{
data.WriteUInt32(DisplayId);
data.WriteUInt32(DisplayEnchantId);
+ data.WriteInt32(ItemModifiedAppearanceID);
data.WriteUInt8(InvType);
data.WriteUInt8(Subclass);
}
public uint DisplayId;
public uint DisplayEnchantId;
+ public int ItemModifiedAppearanceID; // also -1 is some special value
public byte InvType;
public byte Subclass;
}
@@ -328,6 +321,38 @@ namespace Game.Networking.Packets
}
}
+ class CheckCharacterNameAvailability : ClientPacket
+ {
+ public uint SequenceIndex;
+ public string Name;
+
+ public CheckCharacterNameAvailability(WorldPacket packet) : base(packet) { }
+
+ public override void Read()
+ {
+ SequenceIndex = _worldPacket.ReadUInt32();
+ Name = _worldPacket.ReadString(_worldPacket.ReadBits(6));
+ }
+ }
+
+ class CheckCharacterNameAvailabilityResult : ServerPacket
+ {
+ public uint SequenceIndex;
+ public ResponseCodes Result;
+
+ public CheckCharacterNameAvailabilityResult(uint sequenceIndex, ResponseCodes result) : base(ServerOpcodes.SMSG_CHECK_CHARACTER_NAME_AVAILABILITY_RESULT)
+ {
+ SequenceIndex = sequenceIndex;
+ Result = result;
+ }
+
+ public override void Write()
+ {
+ _worldPacket.WriteUInt32(SequenceIndex);
+ _worldPacket.WriteUInt32((uint)Result);
+ }
+ }
+
public class CreateCharacter : ClientPacket
{
public CreateCharacter(WorldPacket packet) : base(packet) { }
@@ -338,23 +363,19 @@ namespace Game.Networking.Packets
uint nameLength = _worldPacket.ReadBits(6);
bool hasTemplateSet = _worldPacket.HasBit();
CreateInfo.IsTrialBoost = _worldPacket.HasBit();
+ CreateInfo.UseNPE = _worldPacket.HasBit();
CreateInfo.RaceId = (Race)_worldPacket.ReadUInt8();
CreateInfo.ClassId = (Class)_worldPacket.ReadUInt8();
CreateInfo.Sex = (Gender)_worldPacket.ReadUInt8();
- CreateInfo.Skin = _worldPacket.ReadUInt8();
- CreateInfo.Face = _worldPacket.ReadUInt8();
- CreateInfo.HairStyle = _worldPacket.ReadUInt8();
- CreateInfo.HairColor = _worldPacket.ReadUInt8();
- CreateInfo.FacialHairStyle = _worldPacket.ReadUInt8();
- CreateInfo.OutfitId = _worldPacket.ReadUInt8();
-
- for (var i = 0; i < CreateInfo.CustomDisplay.GetLimit(); ++i)
- CreateInfo.CustomDisplay[i] = _worldPacket.ReadUInt8();
+ var customizationCount = _worldPacket.ReadUInt32();
CreateInfo.Name = _worldPacket.ReadString(nameLength);
if (CreateInfo.TemplateSet.HasValue)
CreateInfo.TemplateSet.Set(_worldPacket.ReadUInt32());
+
+ for (var i = 0; i < customizationCount; ++i)
+ CreateInfo.Customizations[i].Read(_worldPacket);
}
public CharacterCreateInfo CreateInfo;
@@ -446,14 +467,10 @@ namespace Game.Networking.Packets
CustomizeInfo = new CharCustomizeInfo();
CustomizeInfo.CharGUID = _worldPacket.ReadPackedGuid();
CustomizeInfo.SexID = (Gender)_worldPacket.ReadUInt8();
- CustomizeInfo.SkinID = _worldPacket.ReadUInt8();
- CustomizeInfo.HairColorID = _worldPacket.ReadUInt8();
- CustomizeInfo.HairStyleID = _worldPacket.ReadUInt8();
- CustomizeInfo.FacialHairStyleID = _worldPacket.ReadUInt8();
- CustomizeInfo.FaceID = _worldPacket.ReadUInt8();
+ var customizationCount = _worldPacket.ReadUInt32();
- for (var i = 0; i < CustomizeInfo.CustomDisplay.GetLimit(); ++i)
- CustomizeInfo.CustomDisplay[i] = _worldPacket.ReadUInt8();
+ for (var i = 0; i < customizationCount; ++i)
+ CustomizeInfo.Customizations[i].Read(_worldPacket);
CustomizeInfo.CharName = _worldPacket.ReadString(_worldPacket.ReadBits(6));
}
@@ -478,17 +495,11 @@ namespace Game.Networking.Packets
RaceOrFactionChangeInfo.Guid = _worldPacket.ReadPackedGuid();
RaceOrFactionChangeInfo.SexID = (Gender)_worldPacket.ReadUInt8();
RaceOrFactionChangeInfo.RaceID = (Race)_worldPacket.ReadUInt8();
-
- RaceOrFactionChangeInfo.SkinID = _worldPacket.ReadUInt8();
- RaceOrFactionChangeInfo.HairColorID = _worldPacket.ReadUInt8();
- RaceOrFactionChangeInfo.HairStyleID = _worldPacket.ReadUInt8();
- RaceOrFactionChangeInfo.FacialHairStyleID = _worldPacket.ReadUInt8();
- RaceOrFactionChangeInfo.FaceID = _worldPacket.ReadUInt8();
-
- for (var i = 0; i < RaceOrFactionChangeInfo.CustomDisplay.GetLimit(); ++i)
- RaceOrFactionChangeInfo.CustomDisplay[i] = _worldPacket.ReadUInt8();
-
+ var customizationCount = _worldPacket.ReadUInt32();
RaceOrFactionChangeInfo.Name = _worldPacket.ReadString(nameLength);
+
+ for (var i = 0; i < customizationCount; ++i)
+ RaceOrFactionChangeInfo.Customizations[i].Read(_worldPacket);
}
public CharRaceOrFactionChangeInfo RaceOrFactionChangeInfo;
@@ -512,14 +523,11 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteBits(Display.Value.Name.GetByteCount(), 6);
_worldPacket.WriteUInt8(Display.Value.SexID);
- _worldPacket.WriteUInt8(Display.Value.SkinID);
- _worldPacket.WriteUInt8(Display.Value.HairColorID);
- _worldPacket.WriteUInt8(Display.Value.HairStyleID);
- _worldPacket.WriteUInt8(Display.Value.FacialHairStyleID);
- _worldPacket.WriteUInt8(Display.Value.FaceID);
_worldPacket.WriteUInt8(Display.Value.RaceID);
- Display.Value.CustomDisplay.ForEach(id => _worldPacket.WriteUInt8(id));
_worldPacket.WriteString(Display.Value.Name);
+
+ foreach (ChrCustomizationChoice customization in Display.Value.Customizations)
+ customization.Write(_worldPacket);
}
}
@@ -531,13 +539,8 @@ namespace Game.Networking.Packets
{
public string Name;
public byte SexID;
- public byte SkinID;
- public byte HairColorID;
- public byte HairStyleID;
- public byte FacialHairStyleID;
- public byte FaceID;
public byte RaceID;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public Array Customizations = new Array(50);
}
}
@@ -587,7 +590,7 @@ namespace Game.Networking.Packets
}
}
- public ReorderInfo[] Entries = new ReorderInfo[WorldConfig.GetIntValue(WorldCfg.CharactersPerRealm)];
+ public ReorderInfo[] Entries = new ReorderInfo[200];
public struct ReorderInfo
{
@@ -660,7 +663,7 @@ namespace Game.Networking.Packets
}
public ObjectGuid Guid; // Guid of the player that is logging in
- float FarClip; // Visibility distance (for terrain)
+ public float FarClip; // Visibility distance (for terrain)
}
public class LoginVerifyWorld : ServerPacket
@@ -706,7 +709,7 @@ namespace Game.Networking.Packets
IdleLogout = _worldPacket.HasBit();
}
- bool IdleLogout;
+ public bool IdleLogout;
}
public class LogoutResponse : ServerPacket
@@ -755,8 +758,8 @@ namespace Game.Networking.Packets
Showing = _worldPacket.HasBit();
}
- int MapID = -1;
- bool Showing;
+ public int MapID = -1;
+ public bool Showing;
}
public class InitialSetup : ServerPacket
@@ -832,22 +835,15 @@ namespace Game.Networking.Packets
public override void Read()
{
- NewHairStyle = _worldPacket.ReadUInt32();
- NewHairColor = _worldPacket.ReadUInt32();
- NewFacialHair = _worldPacket.ReadUInt32();
- NewSkinColor = _worldPacket.ReadUInt32();
- NewFace = _worldPacket.ReadUInt32();
+ var customizationCount = _worldPacket.ReadUInt32();
+ NewSex = _worldPacket.ReadUInt8();
- for (var i = 0; i < NewCustomDisplay.GetLimit(); ++i)
- NewCustomDisplay[i] = _worldPacket.ReadUInt32();
+ for (var i = 0; i < customizationCount; ++i)
+ Customizations[i].Read(_worldPacket);
}
- public uint NewHairStyle;
- public uint NewHairColor;
- public uint NewFacialHair;
- public uint NewSkinColor;
- public uint NewFace;
- public Array NewCustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public byte NewSex;
+ public Array Customizations = new Array(50);
}
public class BarberShopResult : ServerPacket
@@ -975,25 +971,18 @@ namespace Game.Networking.Packets
{
CharGUID = customizeInfo.CharGUID;
SexID = (byte)customizeInfo.SexID;
- SkinID = customizeInfo.SkinID;
- HairColorID = customizeInfo.HairColorID;
- HairStyleID = customizeInfo.HairStyleID;
- FacialHairStyleID = customizeInfo.FacialHairStyleID;
- FaceID = customizeInfo.FaceID;
CharName = customizeInfo.CharName;
- CustomDisplay = customizeInfo.CustomDisplay;
+ Customizations = customizeInfo.Customizations;
}
public override void Write()
{
_worldPacket.WritePackedGuid(CharGUID);
_worldPacket.WriteUInt8(SexID);
- _worldPacket.WriteUInt8(SkinID);
- _worldPacket.WriteUInt8(HairColorID);
- _worldPacket.WriteUInt8(HairStyleID);
- _worldPacket.WriteUInt8(FacialHairStyleID);
- _worldPacket.WriteUInt8(FaceID);
- CustomDisplay.ForEach(id => _worldPacket.WriteUInt8(id));
+ _worldPacket.WriteInt32(Customizations.Count);
+ foreach (ChrCustomizationChoice customization in Customizations)
+ customization.Write(_worldPacket);
+
_worldPacket.WriteBits(CharName.GetByteCount(), 6);
_worldPacket.FlushBits();
_worldPacket.WriteString(CharName);
@@ -1002,12 +991,7 @@ namespace Game.Networking.Packets
ObjectGuid CharGUID;
string CharName = "";
byte SexID;
- byte SkinID;
- byte HairColorID;
- byte HairStyleID;
- byte FacialHairStyleID;
- byte FaceID;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ Array Customizations = new Array(50);
}
class CharCustomizeFailure : ServerPacket
@@ -1063,21 +1047,40 @@ namespace Game.Networking.Packets
}
//Structs
+ public struct ChrCustomizationChoice
+ {
+ public uint ChrCustomizationOptionID;
+ public uint ChrCustomizationChoiceID;
+
+ public ChrCustomizationChoice(uint chrCustomizationOptionID, uint chrCustomizationChoiceID)
+ {
+ ChrCustomizationOptionID = chrCustomizationOptionID;
+ ChrCustomizationChoiceID = chrCustomizationChoiceID;
+ }
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(ChrCustomizationOptionID);
+ data.WriteUInt32(ChrCustomizationChoiceID);
+ }
+
+ public void Read(WorldPacket data)
+ {
+ ChrCustomizationOptionID = data.ReadUInt32();
+ ChrCustomizationChoiceID = data.ReadUInt32();
+ }
+ }
+
public class CharacterCreateInfo
{
// User specified variables
public Race RaceId = Race.None;
public Class ClassId = Class.None;
public Gender Sex = Gender.None;
- public byte Skin;
- public byte Face;
- public byte HairStyle;
- public byte HairColor;
- public byte FacialHairStyle;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
- public byte OutfitId;
+ public Array Customizations = new Array(50);
public Optional TemplateSet = new Optional();
public bool IsTrialBoost;
+ public bool UseNPE;
public string Name;
// Server side data
@@ -1092,30 +1095,20 @@ namespace Game.Networking.Packets
public class CharCustomizeInfo
{
- public byte HairStyleID;
- public byte FaceID;
public ObjectGuid CharGUID;
public Gender SexID = Gender.None;
public string CharName;
- public byte HairColorID;
- public byte FacialHairStyleID;
- public byte SkinID;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public Array Customizations = new Array(50);
}
public class CharRaceOrFactionChangeInfo
{
- public byte HairColorID;
public Race RaceID = Race.None;
public Gender SexID = Gender.None;
- public byte SkinID;
- public byte FacialHairStyleID;
public ObjectGuid Guid;
public bool FactionChange;
public string Name;
- public byte FaceID;
- public byte HairStyleID;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public Array Customizations = new Array(50);
}
public class CharacterUndeleteInfo
diff --git a/Source/Game/Networking/Packets/ChatPackets.cs b/Source/Game/Networking/Packets/ChatPackets.cs
index 970a9bb62..44fdec984 100644
--- a/Source/Game/Networking/Packets/ChatPackets.cs
+++ b/Source/Game/Networking/Packets/ChatPackets.cs
@@ -224,7 +224,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(Prefix.GetByteCount(), 5);
_worldPacket.WriteBits(Channel.GetByteCount(), 7);
_worldPacket.WriteBits(ChatText.GetByteCount(), 12);
- _worldPacket.WriteBits((byte)_ChatFlags, 11);
+ _worldPacket.WriteBits((byte)_ChatFlags, 14);
_worldPacket.WriteBit(HideChatLog);
_worldPacket.WriteBit(FakeSenderName);
_worldPacket.WriteBit(Unused_801.HasValue);
diff --git a/Source/Game/Networking/Packets/ClientConfigPackets.cs b/Source/Game/Networking/Packets/ClientConfigPackets.cs
index 0daf51a8f..ef35b638d 100644
--- a/Source/Game/Networking/Packets/ClientConfigPackets.cs
+++ b/Source/Game/Networking/Packets/ClientConfigPackets.cs
@@ -18,6 +18,7 @@
using Framework.Constants;
using Framework.IO;
using Game.Entities;
+using System.Collections.Generic;
namespace Game.Networking.Packets
{
@@ -29,13 +30,13 @@ namespace Game.Networking.Packets
{
_worldPacket.WritePackedGuid(PlayerGuid);
_worldPacket.WriteUInt32(ServerTime);
- for (int i = 0; i < (int)AccountDataTypes.Max; ++i)
- _worldPacket.WriteUInt32(AccountTimes[i]);
+ foreach (var accounttime in AccountTimes)
+ _worldPacket.WriteUInt32(accounttime);
}
public ObjectGuid PlayerGuid;
public uint ServerTime = 0;
- public uint[] AccountTimes = new uint[(int)AccountDataTypes.Max];
+ public Array AccountTimes = new Array((int)AccountDataTypes.Max);
}
public class ClientCacheVersion : ServerPacket
diff --git a/Source/Game/Networking/Packets/CombatLogPackets.cs b/Source/Game/Networking/Packets/CombatLogPackets.cs
index 9e5016de0..057987b11 100644
--- a/Source/Game/Networking/Packets/CombatLogPackets.cs
+++ b/Source/Game/Networking/Packets/CombatLogPackets.cs
@@ -66,7 +66,7 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(CasterGUID);
_worldPacket.WritePackedGuid(CastID);
_worldPacket.WriteInt32(SpellID);
- _worldPacket.WriteInt32(SpellXSpellVisualID);
+ Visual.Write(_worldPacket);
_worldPacket.WriteInt32(Damage);
_worldPacket.WriteInt32(OriginalDamage);
_worldPacket.WriteInt32(Overkill);
@@ -90,7 +90,7 @@ namespace Game.Networking.Packets
public ObjectGuid CasterGUID;
public ObjectGuid CastID;
public int SpellID;
- public int SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public int Damage;
public int OriginalDamage;
public int Overkill = -1;
@@ -578,8 +578,8 @@ namespace Game.Networking.Packets
attackRoundInfo.WriteUInt8(ContentTuning.TargetMaxScalingLevel);
attackRoundInfo.WriteInt16(ContentTuning.PlayerLevelDelta);
attackRoundInfo.WriteInt8(ContentTuning.TargetScalingLevelDelta);
- attackRoundInfo.WriteUInt16(ContentTuning.PlayerItemLevel);
- attackRoundInfo.WriteUInt16(ContentTuning.TargetItemLevel);
+ attackRoundInfo.WriteFloat(ContentTuning.PlayerItemLevel);
+ attackRoundInfo.WriteFloat(ContentTuning.TargetItemLevel);
attackRoundInfo.WriteUInt16(ContentTuning.ScalingHealthItemLevelCurveID);
attackRoundInfo.WriteUInt8((byte)(ContentTuning.ScalesWithItemLevel ? 1 : 0));
diff --git a/Source/Game/Networking/Packets/EquipmentPackets.cs b/Source/Game/Networking/Packets/EquipmentPackets.cs
index c51e6391a..9dac10268 100644
--- a/Source/Game/Networking/Packets/EquipmentPackets.cs
+++ b/Source/Game/Networking/Packets/EquipmentPackets.cs
@@ -62,6 +62,9 @@ namespace Game.Networking.Packets
foreach (var id in equipSet.Enchants)
_worldPacket.WriteInt32(id);
+ _worldPacket.WriteInt32(equipSet.Unknown901_1);
+ _worldPacket.WriteInt32(equipSet.Unknown901_2);
+
_worldPacket.WriteBit(equipSet.AssignedSpecIndex != -1);
_worldPacket.WriteBits(equipSet.SetName.GetByteCount(), 8);
_worldPacket.WriteBits(equipSet.SetIcon.GetByteCount(), 9);
@@ -100,6 +103,9 @@ namespace Game.Networking.Packets
Set.Enchants[0] = _worldPacket.ReadInt32();
Set.Enchants[1] = _worldPacket.ReadInt32();
+ Set.Unknown901_1 = _worldPacket.ReadInt32();
+ Set.Unknown901_2 = _worldPacket.ReadInt32();
+
bool hasSpecIndex = _worldPacket.HasBit();
uint setNameLength = _worldPacket.ReadBits(8);
diff --git a/Source/Game/Networking/Packets/GarrisonPackets.cs b/Source/Game/Networking/Packets/GarrisonPackets.cs
index ba4f4e7df..9f7cb1f4b 100644
--- a/Source/Game/Networking/Packets/GarrisonPackets.cs
+++ b/Source/Game/Networking/Packets/GarrisonPackets.cs
@@ -20,6 +20,7 @@ using Game.DataStorage;
using Game.Entities;
using System;
using System.Collections.Generic;
+using Framework.Dynamic;
namespace Game.Networking.Packets
{
@@ -223,25 +224,25 @@ namespace Game.Networking.Packets
public List BlueprintsKnown = null;
}
- class GarrisonGetBuildingLandmarks : ClientPacket
+ class GarrisonGetMapData : ClientPacket
{
- public GarrisonGetBuildingLandmarks(WorldPacket packet) : base(packet) { }
+ public GarrisonGetMapData(WorldPacket packet) : base(packet) { }
public override void Read() { }
}
- class GarrisonBuildingLandmarks : ServerPacket
+ class GarrisonMapDataResponse : ServerPacket
{
- public GarrisonBuildingLandmarks() : base(ServerOpcodes.GarrisonBuildingLandmarks, ConnectionType.Instance) { }
+ public GarrisonMapDataResponse() : base(ServerOpcodes.GarrisonBuildingLandmarks, ConnectionType.Instance) { }
public override void Write()
{
- _worldPacket.WriteInt32(Landmarks.Count);
- foreach (GarrisonBuildingLandmark landmark in Landmarks)
+ _worldPacket.WriteInt32(Buildings.Count);
+ foreach (GarrisonBuildingMapData landmark in Buildings)
landmark.Write(_worldPacket);
}
- public List Landmarks = new List();
+ public List Buildings = new List();
}
class GarrisonPlotPlaced : ServerPacket
@@ -369,6 +370,9 @@ namespace Game.Networking.Packets
data.WriteInt32(AbilityID.Count);
data.WriteUInt32(ZoneSupportSpellID);
data.WriteUInt32(FollowerStatus);
+ data.WriteInt32(Health);
+ data .WriteInt8(BoardIndex);
+ data .WriteInt32(HealingTimestamp);
AbilityID.ForEach(ability => data.WriteUInt32(ability.Id));
@@ -390,6 +394,9 @@ namespace Game.Networking.Packets
public List AbilityID = new List();
public uint ZoneSupportSpellID;
public uint FollowerStatus;
+ public int Health;
+ public int HealingTimestamp;
+ public sbyte BoardIndex;
public string CustomName = "";
}
@@ -405,8 +412,9 @@ namespace Game.Networking.Packets
data.WriteUInt32(TravelDuration);
data.WriteUInt32(MissionDuration);
data.WriteUInt32(MissionState);
- data.WriteUInt32(Unknown1);
- data.WriteUInt32(Unknown2);
+ data.WriteUInt32(SuccessChance);
+ data.WriteUInt32(Flags);
+ data.WriteFloat(MissionScalar);
}
public ulong DbID;
@@ -417,8 +425,9 @@ namespace Game.Networking.Packets
public uint TravelDuration;
public uint MissionDuration;
public uint MissionState;
- public uint Unknown1 = 0;
- public uint Unknown2 = 0;
+ public uint SuccessChance;
+ public uint Flags;
+ public float MissionScalar = 1.0f;
}
struct GarrisonMissionReward
@@ -455,6 +464,18 @@ namespace Game.Networking.Packets
public long StartTime;
}
+ struct GarrisonTalentSocketData
+ {
+ public int SoulbindConduitID;
+ public int SoulbindConduitRank;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(SoulbindConduitID);
+ data.WriteInt32(SoulbindConduitRank);
+ }
+ }
+
struct GarrisonTalent
{
public void Write(WorldPacket data)
@@ -463,12 +484,70 @@ namespace Game.Networking.Packets
data.WriteInt32(Rank);
data.WriteUInt32((uint)ResearchStartTime);
data.WriteInt32(Flags);
+ data.WriteBit(Socket.HasValue);
+ data.FlushBits();
+
+ if (Socket.HasValue)
+ Socket.Value.Write(data);
}
public int GarrTalentID;
public int Rank;
public long ResearchStartTime;
public int Flags;
+ public Optional Socket;
+ }
+
+ struct GarrisonCollectionEntry
+ {
+ public int EntryID;
+ public int Rank;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(EntryID);
+ data.WriteInt32(Rank);
+ }
+ }
+
+ class GarrisonCollection
+ {
+ public int Type;
+ public List Entries = new List();
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(Type);
+ data.WriteInt32(Entries.Count);
+ foreach (GarrisonCollectionEntry collectionEntry in Entries)
+ collectionEntry.Write(data);
+ }
+ }
+
+ struct GarrisonEventEntry
+ {
+ public int EntryID;
+ public int EventValue;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(EntryID);
+ data.WriteInt32(EventValue);
+ }
+ }
+
+ class GarrisonEventList
+ {
+ public int Type;
+ public List Events = new List();
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(Type);
+ data.WriteInt32(Events.Count);
+ foreach (GarrisonEventEntry eventEntry in Events)
+ eventEntry.Write(data);
+ }
}
class GarrisonInfo
@@ -481,11 +560,14 @@ namespace Game.Networking.Packets
data.WriteInt32(Buildings.Count);
data.WriteInt32(Plots.Count);
data.WriteInt32(Followers.Count);
+ data.WriteInt32(AutoTroops.Count);
data.WriteInt32(Missions.Count);
data.WriteInt32(MissionRewards.Count);
data.WriteInt32(MissionOvermaxRewards.Count);
data.WriteInt32(MissionAreaBonuses.Count);
data.WriteInt32(Talents.Count);
+ data.WriteInt32(Collections.Count);
+ data.WriteInt32(EventLists.Count);
data.WriteInt32(CanStartMission.Count);
data.WriteInt32(ArchivedMissions.Count);
data.WriteUInt32(NumFollowerActivationsRemaining);
@@ -514,11 +596,14 @@ namespace Game.Networking.Packets
foreach (GarrisonMissionBonusAbility areaBonus in MissionAreaBonuses)
areaBonus.Write(data);
- foreach (GarrisonTalent talent in Talents)
- talent.Write(data);
+ foreach (GarrisonCollection collection in Collections)
+ collection.Write(data);
- foreach(var id in ArchivedMissions)
- data.WriteInt32(id);
+ foreach (GarrisonEventList eventList in EventLists)
+ eventList.Write(data);
+
+ foreach (var id in ArchivedMissions)
+ data.WriteInt32(id);
foreach (GarrisonBuildingInfo building in Buildings)
building.Write(data);
@@ -530,6 +615,12 @@ namespace Game.Networking.Packets
foreach (GarrisonFollower follower in Followers)
follower.Write(data);
+
+ foreach (GarrisonFollower follower in AutoTroops)
+ follower.Write(data);
+
+ foreach (GarrisonTalent talent in Talents)
+ talent.Write(data);
}
public GarrisonType GarrTypeID;
@@ -540,11 +631,14 @@ namespace Game.Networking.Packets
public List Plots = new List();
public List Buildings = new List();
public List Followers = new List();
+ public List AutoTroops = new List();
public List Missions = new List();
public List> MissionRewards = new List>();
public List> MissionOvermaxRewards = new List>();
public List MissionAreaBonuses = new List();
public List Talents = new List();
+ public List Collections = new List();
+ public List EventLists = new List();
public List CanStartMission = new List();
public List ArchivedMissions = new List();
}
@@ -593,9 +687,9 @@ namespace Game.Networking.Packets
public List Buildings = new List();
}
- struct GarrisonBuildingLandmark
+ struct GarrisonBuildingMapData
{
- public GarrisonBuildingLandmark(uint buildingPlotInstId, Position pos)
+ public GarrisonBuildingMapData(uint buildingPlotInstId, Position pos)
{
GarrBuildingPlotInstID = buildingPlotInstId;
Pos = pos;
diff --git a/Source/Game/Networking/Packets/GuildPackets.cs b/Source/Game/Networking/Packets/GuildPackets.cs
index ee5dba1ed..5cd7c68e2 100644
--- a/Source/Game/Networking/Packets/GuildPackets.cs
+++ b/Source/Game/Networking/Packets/GuildPackets.cs
@@ -278,9 +278,9 @@ namespace Game.Networking.Packets
public string OldGuildName;
}
- public class GuildEventAwayChange : ServerPacket
+ public class GuildEventStatusChange : ServerPacket
{
- public GuildEventAwayChange() : base(ServerOpcodes.GuildEventAwayChange) { }
+ public GuildEventStatusChange() : base(ServerOpcodes.GuildEventAwayChange) { }
public override void Write()
{
@@ -426,7 +426,6 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteBit(Removed);
_worldPacket.WriteBits(LeaverName.GetByteCount(), 6);
- _worldPacket.FlushBits();
if (Removed)
{
diff --git a/Source/Game/Networking/Packets/HotfixPackets.cs b/Source/Game/Networking/Packets/HotfixPackets.cs
index 6f060507f..1613325f0 100644
--- a/Source/Game/Networking/Packets/HotfixPackets.cs
+++ b/Source/Game/Networking/Packets/HotfixPackets.cs
@@ -63,7 +63,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(TableHash);
_worldPacket.WriteUInt32(RecordID);
_worldPacket.WriteUInt32(Timestamp);
- _worldPacket.WriteBit(Allow);
+ _worldPacket.WriteBits(Status, 2);
_worldPacket.WriteUInt32(Data.GetSize());
_worldPacket.WriteBytes(Data.GetData());
}
@@ -71,7 +71,7 @@ namespace Game.Networking.Packets
public uint TableHash;
public uint Timestamp;
public uint RecordID;
- public bool Allow;
+ public byte Status = 3;
public ByteBuffer Data = new ByteBuffer();
}
@@ -147,12 +147,12 @@ namespace Game.Networking.Packets
if (Size.HasValue)
{
data.WriteUInt32(Size.Value);
- data.WriteBit(true);
+ data.WriteBits(1, 2);
}
else
{
data.WriteUInt32(0);
- data.WriteBit(false);
+ data.WriteBits(3, 2);
}
data.FlushBits();
}
diff --git a/Source/Game/Networking/Packets/InspectPackets.cs b/Source/Game/Networking/Packets/InspectPackets.cs
index f4161f862..27e7c49e2 100644
--- a/Source/Game/Networking/Packets/InspectPackets.cs
+++ b/Source/Game/Networking/Packets/InspectPackets.cs
@@ -224,14 +224,9 @@ namespace Game.Networking.Packets
public string Name;
public uint SpecializationID;
public byte GenderID;
- public byte Skin;
- public byte HairColor;
- public byte HairStyle;
- public byte FacialHairStyle;
- public byte Face;
public byte Race;
public byte ClassID;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public List Customizations = new List();
public void Initialize(Player player)
{
@@ -239,14 +234,11 @@ namespace Game.Networking.Packets
SpecializationID = player.GetPrimarySpecialization();
Name = player.GetName();
GenderID = player.m_playerData.NativeSex;
- Skin = player.m_playerData.SkinID;
- HairColor = player.m_playerData.HairColorID;
- HairStyle = player.m_playerData.HairStyleID;
- FacialHairStyle = player.m_playerData.FacialHairStyleID;
- Face = player.m_playerData.FaceID;
Race = (byte)player.GetRace();
ClassID = (byte)player.GetClass();
- CustomDisplay.AddRange(player.m_playerData.CustomDisplayOption._values);
+
+ foreach (var customization in player.m_playerData.Customizations)
+ Customizations.Add(new ChrCustomizationChoice(customization.ChrCustomizationOptionID, customization.ChrCustomizationChoiceID));
for (byte i = 0; i < EquipmentSlot.End; ++i)
{
@@ -263,17 +255,14 @@ namespace Game.Networking.Packets
data.WriteInt32(Items.Count);
data.WriteBits(Name.GetByteCount(), 6);
data.WriteUInt8(GenderID);
- data.WriteUInt8(Skin);
- data.WriteUInt8(HairColor);
- data.WriteUInt8(HairStyle);
- data.WriteUInt8(FacialHairStyle);
- data.WriteUInt8(Face);
data.WriteUInt8(Race);
data.WriteUInt8(ClassID);
- CustomDisplay.ForEach(id => data.WriteUInt8(id));
-
+ data.WriteInt32(Customizations.Count);
data.WriteString(Name);
+ foreach (var customization in Customizations)
+ customization.Write(data);
+
foreach (InspectItemData item in Items)
item.Write(data);
}
diff --git a/Source/Game/Networking/Packets/ItemPackets.cs b/Source/Game/Networking/Packets/ItemPackets.cs
index d580eb35f..9d31cf3ee 100644
--- a/Source/Game/Networking/Packets/ItemPackets.cs
+++ b/Source/Game/Networking/Packets/ItemPackets.cs
@@ -52,7 +52,7 @@ namespace Game.Networking.Packets
Muid = _worldPacket.ReadUInt32();
Slot = _worldPacket.ReadUInt32();
Item.Read(_worldPacket);
- ItemType = (ItemVendorType)_worldPacket.ReadBits(2);
+ ItemType = (ItemVendorType)_worldPacket.ReadBits(3);
}
public ObjectGuid VendorGUID;
@@ -678,7 +678,7 @@ namespace Game.Networking.Packets
}
//Structs
- public class ItemBonusInstanceData
+ public class ItemBonuses
{
public void Write(WorldPacket data)
{
@@ -708,13 +708,13 @@ namespace Game.Networking.Packets
public override bool Equals(object obj)
{
- if (obj is ItemBonusInstanceData)
- return (ItemBonusInstanceData)obj == this;
+ if (obj is ItemBonuses)
+ return (ItemBonuses)obj == this;
return false;
}
- public static bool operator ==(ItemBonusInstanceData left, ItemBonusInstanceData right)
+ public static bool operator ==(ItemBonuses left, ItemBonuses right)
{
if (left.Context != right.Context)
return false;
@@ -725,7 +725,7 @@ namespace Game.Networking.Packets
return left.BonusListIDs.SequenceEqual(right.BonusListIDs);
}
- public static bool operator !=(ItemBonusInstanceData left, ItemBonusInstanceData right)
+ public static bool operator !=(ItemBonuses left, ItemBonuses right)
{
return !(left == right);
}
@@ -734,8 +734,118 @@ namespace Game.Networking.Packets
public List BonusListIDs = new List();
}
+ public class ItemMod
+ {
+ public uint Value;
+ public ItemModifier Type;
+
+ public ItemMod()
+ {
+ Type = ItemModifier.Max;
+ }
+ public ItemMod(uint value, ItemModifier type)
+ {
+ Value = value;
+ Type = type;
+ }
+
+ public void Read(WorldPacket data)
+ {
+ Value = data.ReadUInt32();
+ Type = (ItemModifier)data.ReadUInt8();
+ }
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(Value);
+ data.WriteUInt8((byte)Type);
+ }
+
+ public override int GetHashCode()
+ {
+ return Value.GetHashCode() ^ Type.GetHashCode();
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is ItemMod)
+ return (ItemMod)obj == this;
+
+ return false;
+ }
+
+ public static bool operator ==(ItemMod left, ItemMod right)
+ {
+ if (left.Value != right.Value)
+ return false;
+
+ return left.Type != right.Type;
+ }
+
+ public static bool operator !=(ItemMod left, ItemMod right)
+ {
+ return !(left == right);
+ }
+ }
+
+ public class ItemModList
+ {
+ public Array Values = new Array(ItemModifier.Max);
+
+ public void Read(WorldPacket data)
+ {
+ var itemModListCount = data.ReadBits(6);
+
+ for (var i = 0; i < itemModListCount; ++i)
+ {
+ var itemMod = new ItemMod();
+ itemMod.Read(data);
+ Values[i] = itemMod;
+ }
+ }
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteBits(Values.Count, 6);
+ data.FlushBits();
+
+ foreach (ItemMod itemMod in Values)
+ itemMod.Write(data);
+ }
+
+ public override int GetHashCode()
+ {
+ return Values.GetHashCode();
+ }
+
+ public override bool Equals(object obj)
+ {
+ if (obj is ItemModList)
+ return (ItemModList)obj == this;
+
+ return false;
+ }
+
+ public static bool operator ==(ItemModList left, ItemModList right)
+ {
+ if (left.Values.Count != right.Values.Count)
+ return false;
+
+ return !left.Values.Except(right.Values).Any();
+ }
+
+ public static bool operator !=(ItemModList left, ItemModList right)
+ {
+ return !(left == right);
+ }
+ }
+
public class ItemInstance
{
+ public uint ItemID;
+ public Optional ItemBonus;
+ public ItemModList Modifications = new ItemModList();
+
public ItemInstance() { }
public ItemInstance(Item item)
@@ -749,17 +859,8 @@ namespace Game.Networking.Packets
ItemBonus.Value.Context = item.GetContext();
}
- uint mask = item.m_itemData.ModifiersMask;
- if (mask != 0)
- {
- Modifications.HasValue = true;
-
- for (int i = 0; mask != 0; mask >>= 1, ++i)
- {
- if ((mask & 1) != 0)
- Modifications.Value.Insert(i, (int)item.GetModifier((ItemModifier)i));
- }
- }
+ foreach (var mod in item.m_itemData.Modifiers.Values)
+ Modifications.Values.Add(mod.Value, (ItemModifier)mod.Type);
}
public ItemInstance(Loots.LootItem lootItem)
@@ -780,14 +881,11 @@ namespace Game.Networking.Packets
{
ItemID = voidItem.ItemEntry;
- if (voidItem.FixedScalingLevel != 0 || voidItem.ArtifactKnowledgeLevel != 0)
- {
- Modifications.HasValue = true;
- if (voidItem.FixedScalingLevel != 0)
- Modifications.Value.Insert((int)ItemModifier.TimewalkerLevel, (int)voidItem.FixedScalingLevel);
- if (voidItem.ArtifactKnowledgeLevel != 0)
- Modifications.Value.Insert((int)ItemModifier.ArtifactKnowledgeLevel, (int)voidItem.ArtifactKnowledgeLevel);
- }
+ if (voidItem.FixedScalingLevel != 0)
+ Modifications.Values.Add(new ItemMod(voidItem.FixedScalingLevel, ItemModifier.TimewalkerLevel));
+
+ if (voidItem.ArtifactKnowledgeLevel != 0)
+ Modifications.Values.Add(new ItemMod(voidItem.ArtifactKnowledgeLevel, ItemModifier.ArtifactKnowledgeLevel));
if (!voidItem.BonusListIDs.Empty())
{
@@ -801,7 +899,7 @@ namespace Game.Networking.Packets
{
ItemID = gem.ItemId;
- ItemBonusInstanceData bonus = new ItemBonusInstanceData();
+ ItemBonuses bonus = new ItemBonuses();
bonus.Context = (ItemContext)(byte)gem.Context;
foreach (ushort bonusListId in gem.BonusListIDs)
if (bonusListId != 0)
@@ -816,14 +914,12 @@ namespace Game.Networking.Packets
data.WriteUInt32(ItemID);
data.WriteBit(ItemBonus.HasValue);
- data.WriteBit(Modifications.HasValue);
data.FlushBits();
+ Modifications.Write(data);
+
if (ItemBonus.HasValue)
ItemBonus.Value.Write(data);
-
- if (Modifications.HasValue)
- Modifications.Value.Write(data);
}
public void Read(WorldPacket data)
@@ -831,14 +927,12 @@ namespace Game.Networking.Packets
ItemID = data.ReadUInt32();
ItemBonus.HasValue = data.HasBit();
- Modifications.HasValue = data.HasBit();
data.ResetBitPos();
+ Modifications.Read(data);
+
if (ItemBonus.HasValue)
ItemBonus.Value.Read(data);
-
- if (Modifications.HasValue)
- Modifications.Value.Read(data);
}
public override int GetHashCode()
@@ -859,10 +953,10 @@ namespace Game.Networking.Packets
if (left.ItemID != right.ItemID)
return false;
- if (left.ItemBonus.HasValue != right.ItemBonus.HasValue || left.Modifications.HasValue != right.Modifications.HasValue)
+ if (left.ItemBonus.HasValue != right.ItemBonus.HasValue)
return false;
- if (left.Modifications.HasValue && left.Modifications.Value != right.Modifications.Value)
+ if (left.Modifications != right.Modifications)
return false;
if (left.ItemBonus.HasValue && left.ItemBonus.Value != right.ItemBonus.Value)
@@ -875,10 +969,6 @@ namespace Game.Networking.Packets
{
return !(left == right);
}
-
- public uint ItemID;
- public Optional ItemBonus;
- public Optional Modifications;
}
public class ItemEnchantData
diff --git a/Source/Game/Networking/Packets/LFGPackets.cs b/Source/Game/Networking/Packets/LFGPackets.cs
index e2a54e6e4..c52cc3e25 100644
--- a/Source/Game/Networking/Packets/LFGPackets.cs
+++ b/Source/Game/Networking/Packets/LFGPackets.cs
@@ -278,7 +278,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(BlackList.Count);
_worldPacket.WriteInt32(BlackListNames.Count);
- foreach (LFGJoinBlackList blackList in BlackList)
+ foreach (LFGBlackListPkt blackList in BlackList)
blackList.Write(_worldPacket);
foreach (string str in BlackListNames)
@@ -292,7 +292,7 @@ namespace Game.Networking.Packets
public RideTicket Ticket = new RideTicket();
public byte Result;
public byte ResultDetail;
- public List BlackList = new List();
+ public List BlackList = new List();
public List BlackListNames = new List();
}
@@ -440,23 +440,37 @@ namespace Game.Networking.Packets
//Structs
public class LFGBlackListSlot
- {
- public LFGBlackListSlot(uint slot, uint reason, int subReason1, int subReason2)
+ {
+ public uint Slot;
+ public uint Reason;
+ public int SubReason1;
+ public int SubReason2;
+ public uint SoftLock;
+
+ public LFGBlackListSlot(uint slot, uint reason, int subReason1, int subReason2, uint softLock)
{
Slot = slot;
Reason = reason;
SubReason1 = subReason1;
SubReason2 = subReason2;
+ SoftLock = softLock;
}
- public uint Slot { get; set; }
- public uint Reason { get; set; }
- public int SubReason1 { get; set; }
- public int SubReason2 { get; set; }
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(Slot);
+ data.WriteUInt32(Reason);
+ data.WriteInt32(SubReason1);
+ data.WriteInt32(SubReason2);
+ data.WriteUInt32(SoftLock);
+ }
}
public class LFGBlackList
- {
+ {
+ public Optional PlayerGuid;
+ public List Slot = new List();
+
public void Write(WorldPacket data)
{
data.WriteBit(PlayerGuid.HasValue);
@@ -464,17 +478,9 @@ namespace Game.Networking.Packets
if (PlayerGuid.HasValue)
data.WritePackedGuid(PlayerGuid.Value);
- foreach (LFGBlackListSlot lfgBlackListSlot in Slot)
- {
- data.WriteUInt32(lfgBlackListSlot.Slot);
- data.WriteUInt32(lfgBlackListSlot.Reason);
- data.WriteInt32(lfgBlackListSlot.SubReason1);
- data.WriteInt32(lfgBlackListSlot.SubReason2);
- }
+ foreach (LFGBlackListSlot slot in Slot)
+ slot.Write(data);
}
-
- public Optional PlayerGuid;
- public List Slot = new List();
}
public struct LfgPlayerQuestRewardItem
@@ -639,40 +645,22 @@ namespace Game.Networking.Packets
public bool RoleCheckComplete;
}
- public struct LFGJoinBlackListSlot
- {
- public LFGJoinBlackListSlot(int slot, int reason, int subReason1, int subReason2)
- {
- Slot = slot;
- Reason = reason;
- SubReason1 = subReason1;
- SubReason2 = subReason2;
- }
-
- public int Slot { get; set; }
- public int Reason { get; set; }
- public int SubReason1 { get; set; }
- public int SubReason2 { get; set; }
- }
-
- public class LFGJoinBlackList
+ public class LFGBlackListPkt
{
public void Write(WorldPacket data)
{
- data.WritePackedGuid(PlayerGuid);
- data.WriteInt32(Slots.Count);
+ data.WriteBit(PlayerGuid.HasValue);
+ data.WriteInt32(Slot.Count);
- foreach (LFGJoinBlackListSlot lfgBlackListSlot in Slots)
- {
- data.WriteInt32(lfgBlackListSlot.Slot);
- data.WriteInt32(lfgBlackListSlot.Reason);
- data.WriteInt32(lfgBlackListSlot.SubReason1);
- data.WriteInt32(lfgBlackListSlot.SubReason2);
- }
+ if (PlayerGuid.HasValue)
+ data.WritePackedGuid(PlayerGuid.Value);
+
+ foreach (LFGBlackListSlot slot in Slot)
+ slot.Write(data);
}
- public ObjectGuid PlayerGuid;
- public List Slots = new List();
+ public Optional PlayerGuid;
+ public List Slot = new List();
}
public struct LFGPlayerRewards
diff --git a/Source/Game/Networking/Packets/MiscPackets.cs b/Source/Game/Networking/Packets/MiscPackets.cs
index 9e63fa089..2152871a1 100644
--- a/Source/Game/Networking/Packets/MiscPackets.cs
+++ b/Source/Game/Networking/Packets/MiscPackets.cs
@@ -124,6 +124,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(WeeklyQuantity.HasValue);
_worldPacket.WriteBit(TrackedQuantity.HasValue);
_worldPacket.WriteBit(MaxQuantity.HasValue);
+ _worldPacket.WriteBit(Unused901.HasValue);
_worldPacket.WriteBit(SuppressChatLog);
_worldPacket.WriteBit(QuantityChange.HasValue);
_worldPacket.WriteBit(QuantityGainSource.HasValue);
@@ -139,6 +140,9 @@ namespace Game.Networking.Packets
if (MaxQuantity.HasValue)
_worldPacket.WriteInt32(MaxQuantity.Value);
+ if (Unused901.HasValue)
+ _worldPacket.WriteInt32(Unused901.Value);
+
if (QuantityChange.HasValue)
_worldPacket.WriteInt32(QuantityChange.Value);
@@ -155,6 +159,7 @@ namespace Game.Networking.Packets
public Optional WeeklyQuantity;
public Optional TrackedQuantity;
public Optional MaxQuantity;
+ public Optional Unused901;
public Optional QuantityChange;
public Optional QuantityGainSource;
public Optional QuantityLostSource;
@@ -204,6 +209,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(data.MaxWeeklyQuantity.HasValue);
_worldPacket.WriteBit(data.TrackedQuantity.HasValue);
_worldPacket.WriteBit(data.MaxQuantity.HasValue);
+ _worldPacket.WriteBit(data.Unused901.HasValue);
_worldPacket.WriteBits(data.Flags, 5);
_worldPacket.FlushBits();
@@ -215,6 +221,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(data.TrackedQuantity.Value);
if (data.MaxQuantity.HasValue)
_worldPacket.WriteInt32(data.MaxQuantity.Value);
+ if (data.Unused901.HasValue)
+ _worldPacket.WriteInt32(data.Unused901.Value);
}
}
@@ -228,6 +236,7 @@ namespace Game.Networking.Packets
public Optional MaxWeeklyQuantity; // Weekly Currency cap.
public Optional TrackedQuantity;
public Optional MaxQuantity;
+ public Optional Unused901;
public byte Flags; // 0 = none,
}
}
@@ -366,7 +375,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(RestrictedAccountMaxLevel.Value);
if (RestrictedAccountMaxMoney.HasValue)
- _worldPacket.WriteUInt32(RestrictedAccountMaxMoney.Value);
+ _worldPacket.WriteUInt64(RestrictedAccountMaxMoney.Value);
if (InstanceGroupSize.HasValue)
_worldPacket.WriteUInt32(InstanceGroupSize.Value);
@@ -378,7 +387,7 @@ namespace Game.Networking.Packets
public bool BlockExitingLoadingScreen; // when set to true, sending SMSG_UPDATE_OBJECT with CreateObject Self bit = true will not hide loading screen
// instead it will be done after this packet is sent again with false in this bit and SMSG_UPDATE_OBJECT Values for player
public Optional RestrictedAccountMaxLevel;
- public Optional RestrictedAccountMaxMoney;
+ public Optional RestrictedAccountMaxMoney;
public Optional InstanceGroupSize;
}
@@ -864,12 +873,14 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(SourceObjectGUID);
_worldPacket.WritePackedGuid(TargetObjectGUID);
_worldPacket.WriteVector3(Position);
+ _worldPacket.WriteInt32(BroadcastTextID);
}
- ObjectGuid TargetObjectGUID;
- ObjectGuid SourceObjectGUID;
- uint SoundKitID;
- Vector3 Position;
+ public ObjectGuid TargetObjectGUID;
+ public ObjectGuid SourceObjectGUID;
+ public uint SoundKitID;
+ public Vector3 Position;
+ public int BroadcastTextID;
}
class PlaySound : ServerPacket
@@ -884,10 +895,12 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteUInt32(SoundKitID);
_worldPacket.WritePackedGuid(SourceObjectGuid);
+ _worldPacket.WriteInt32(BroadcastTextID);
}
- ObjectGuid SourceObjectGuid;
- uint SoundKitID;
+ public ObjectGuid SourceObjectGuid;
+ public uint SoundKitID;
+ public int BroadcastTextID;
}
class PlaySpeakerBoxSound : ServerPacket
@@ -948,18 +961,6 @@ namespace Game.Networking.Packets
public bool Enable;
}
- class Dismount : ServerPacket
- {
- public Dismount() : base(ServerOpcodes.Dismount) { }
-
- public override void Write()
- {
- _worldPacket.WritePackedGuid(Guid);
- }
-
- public ObjectGuid Guid;
- }
-
class SaveCUFProfiles : ClientPacket
{
public SaveCUFProfiles(WorldPacket packet) : base(packet) { }
diff --git a/Source/Game/Networking/Packets/MovementPackets.cs b/Source/Game/Networking/Packets/MovementPackets.cs
index db9a80fd1..b27d7e3df 100644
--- a/Source/Game/Networking/Packets/MovementPackets.cs
+++ b/Source/Game/Networking/Packets/MovementPackets.cs
@@ -161,8 +161,8 @@ namespace Game.Networking.Packets
data.WriteBit(hasTransportData);
data.WriteBit(hasFallData);
data.WriteBit(hasSpline);
- data.WriteBit(0); // HeightChangeFailed
- data.WriteBit(0); // RemoteTimeValid
+ data.WriteBit(false); // HeightChangeFailed
+ data.WriteBit(false); // RemoteTimeValid
data.FlushBits();
if (hasTransportData)
@@ -206,10 +206,11 @@ namespace Game.Networking.Packets
data.WriteBits((byte)moveSpline.facing.type, 2); // Face
bool hasFadeObjectTime = data.WriteBit(moveSpline.splineflags.HasFlag(SplineFlag.FadeObject) && moveSpline.effect_start_time < moveSpline.Duration());
data.WriteBits(moveSpline.GetPath().Length, 16);
- data.WriteBits((byte)moveSpline.spline.m_mode, 2); // Mode
- data.WriteBit(0); // HasSplineFilter
+ data.WriteBit(false); // HasSplineFilter
data.WriteBit(moveSpline.spell_effect_extra.HasValue); // HasSpellEffectExtraData
data.WriteBit(moveSpline.splineflags.HasFlag(SplineFlag.Parabolic)); // HasJumpExtraData
+ data.WriteBit(moveSpline.anim_tier.HasValue); // HasAnimationTierTransition
+ data.WriteBit(false); // HasUnknown901
data.FlushBits();
//if (HasSplineFilterKey)
@@ -258,6 +259,25 @@ namespace Game.Networking.Packets
data.WriteInt32(moveSpline.effect_start_time);
data.WriteUInt32(0); // Duration (override)
}
+
+ if (moveSpline.anim_tier.HasValue)
+ {
+ data.WriteUInt32(moveSpline.anim_tier.Value.TierTransitionId);
+ data.WriteInt32(moveSpline.effect_start_time);
+ data.WriteUInt32(0);
+ data.WriteUInt8(moveSpline.anim_tier.Value.AnimTier);
+ }
+
+ //if (HasUnknown901)
+ //{
+ // for (WorldPackets::Movement::MonsterSplineUnknown901::Inner const& unkInner : unk.Data) size = 16
+ // {
+ // data << int32(unkInner.Unknown_1);
+ // data << int32(unkInner.Unknown_2);
+ // data << int32(unkInner.Unknown_3);
+ // data << uint32(unkInner.Unknown_4);
+ // }
+ //}
}
}
@@ -353,8 +373,10 @@ namespace Game.Networking.Packets
if (splineFlags.HasFlag(SplineFlag.Animation))
{
- movementSpline.AnimTier = splineFlags.GetAnimTier();
- movementSpline.TierTransStartTime = (uint)moveSpline.effect_start_time;
+ movementSpline.AnimTierTransition.HasValue = true;
+ movementSpline.AnimTierTransition.Value.TierTransitionID = (int)moveSpline.anim_tier.Value.TierTransitionId;
+ movementSpline.AnimTierTransition.Value.StartTime = (uint)moveSpline.effect_start_time;
+ movementSpline.AnimTierTransition.Value.AnimTier = moveSpline.anim_tier.Value.AnimTier;
}
movementSpline.MoveTime = (uint)moveSpline.Duration();
@@ -562,14 +584,14 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32(MapID);
- _worldPacket.WriteXYZO(Pos);
+ Loc.Write(_worldPacket);
_worldPacket.WriteUInt32(Reason);
_worldPacket.WriteXYZ(MovementOffset);
}
public uint MapID;
public uint Reason;
- public Position Pos;
+ public TeleportLocation Loc = new TeleportLocation();
public Position MovementOffset; // Adjusts all pending movement events by this offset
}
@@ -894,10 +916,9 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(SequenceIndex);
_worldPacket.WriteFloat(Height);
_worldPacket.WriteFloat(Scale);
+ _worldPacket.WriteUInt8((byte)Reason);
_worldPacket.WriteUInt32(MountDisplayID);
_worldPacket.WriteInt32(ScaleDuration);
- _worldPacket.WriteBits((uint)Reason, 2);
- _worldPacket.FlushBits();
}
public float Scale = 1.0f;
@@ -934,7 +955,7 @@ namespace Game.Networking.Packets
Data.Read(_worldPacket);
Height = _worldPacket.ReadFloat();
MountDisplayID = _worldPacket.ReadUInt32();
- Reason = (UpdateCollisionHeightReason)_worldPacket.ReadBits(2);
+ Reason = (UpdateCollisionHeightReason)_worldPacket.ReadUInt8();
}
public MovementAck Data;
@@ -1118,13 +1139,10 @@ namespace Game.Networking.Packets
data.WriteBit(MovementForceGUID.HasValue);
data.FlushBits();
- if (CollisionHeight.HasValue)
- {
- data.WriteFloat(CollisionHeight.Value.Height);
- data.WriteFloat(CollisionHeight.Value.Scale);
- data.WriteBits(CollisionHeight.Value.Reason, 2);
- data.FlushBits();
- }
+ if (MovementForce_.HasValue)
+ MovementForce_.Value.Write(data);
+
+
if (Speed.HasValue)
data.WriteFloat(Speed.Value);
@@ -1139,11 +1157,16 @@ namespace Game.Networking.Packets
if (VehicleRecID.HasValue)
data.WriteInt32(VehicleRecID.Value);
+ if (CollisionHeight.HasValue)
+ {
+ data.WriteFloat(CollisionHeight.Value.Height);
+ data.WriteFloat(CollisionHeight.Value.Scale);
+ data.WriteBits(CollisionHeight.Value.Reason, 2);
+ data.FlushBits();
+ }
+
if (MovementForceGUID.HasValue)
data.WritePackedGuid(MovementForceGUID.Value);
-
- if (MovementForce_.HasValue)
- MovementForce_.Value.Write(data);
}
public ServerOpcodes MessageID;
@@ -1238,26 +1261,81 @@ namespace Game.Networking.Packets
}
}
+ struct MonsterSplineAnimTierTransition
+ {
+ public int TierTransitionID;
+ public uint StartTime;
+ public uint EndTime;
+ public byte AnimTier;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(TierTransitionID);
+ data .WriteUInt32(StartTime);
+ data.WriteUInt32(EndTime);
+ data.WriteUInt8(AnimTier);
+ }
+ }
+
+ class MonsterSplineUnknown901
+ {
+ public Array Data = new Array(16);
+
+ public void Write(WorldPacket data)
+ {
+ foreach (var unkInner in Data)
+ {
+ data.WriteInt32(unkInner.Unknown_1);
+ data.WriteInt32(unkInner.Unknown_2);
+ data.WriteInt32(unkInner.Unknown_3);
+ data.WriteUInt32(unkInner.Unknown_4);
+ }
+ }
+
+ public struct Inner
+ {
+ public int Unknown_1;
+ public int Unknown_2;
+ public int Unknown_3;
+ public uint Unknown_4;
+ }
+ }
+
+ public class TeleportLocation
+ {
+ public Vector4 Pos;
+ public int Unused901_1 = -1;
+ public int Unused901_2 = -1;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteVector4(Pos);
+ data.WriteInt32(Unused901_1);
+ data.WriteInt32(Unused901_2);
+ }
+ }
+
public class MovementSpline
{
public void Write(WorldPacket data)
{
data.WriteUInt32(Flags);
- data.WriteUInt8(AnimTier);
- data.WriteUInt32(TierTransStartTime);
data.WriteInt32(Elapsed);
data.WriteUInt32(MoveTime);
data.WriteUInt32(FadeObjectTime);
data.WriteUInt8(Mode);
- data.WriteUInt8(VehicleExitVoluntary);
data.WritePackedGuid(TransportGUID);
data.WriteInt8(VehicleSeat);
data.WriteBits((byte)Face, 2);
data.WriteBits(Points.Count, 16);
+ data.WriteBit(VehicleExitVoluntary);
+ data.WriteBit(Interpolate);
data.WriteBits(PackedDeltas.Count, 16);
data.WriteBit(SplineFilter.HasValue);
data.WriteBit(SpellEffectExtraData.HasValue);
data.WriteBit(JumpExtraData.HasValue);
+ data.WriteBit(AnimTierTransition.HasValue);
+ data.WriteBit(Unknown901.HasValue);
data.FlushBits();
if (SplineFilter.HasValue)
@@ -1288,24 +1366,31 @@ namespace Game.Networking.Packets
if (JumpExtraData.HasValue)
JumpExtraData.Value.Write(data);
+
+ if (AnimTierTransition.HasValue)
+ AnimTierTransition.Value.Write(data);
+
+ if (Unknown901.HasValue)
+ Unknown901.Value.Write(data);
}
public uint Flags; // Spline flags
public MonsterMoveType Face; // Movement direction (see MonsterMoveType enum)
- public byte AnimTier;
- public uint TierTransStartTime;
public int Elapsed;
public uint MoveTime;
public uint FadeObjectTime;
public List Points = new List(); // Spline path
public byte Mode; // Spline mode - actually always 0 in this packet - Catmullrom mode appears only in SMSG_UPDATE_OBJECT. In this packet it is determined by flags
- public byte VehicleExitVoluntary;
+ public bool VehicleExitVoluntary;
+ public bool Interpolate;
public ObjectGuid TransportGUID;
public sbyte VehicleSeat = -1;
public List PackedDeltas = new List();
public Optional SplineFilter;
public Optional SpellEffectExtraData;
public Optional JumpExtraData;
+ public Optional AnimTierTransition;
+ public Optional Unknown901;
public float FaceDirection;
public ObjectGuid FaceGUID;
public Vector3 FaceSpot;
diff --git a/Source/Game/Networking/Packets/NPCPackets.cs b/Source/Game/Networking/Packets/NPCPackets.cs
index 7acaca5c8..ddd2b905e 100644
--- a/Source/Game/Networking/Packets/NPCPackets.cs
+++ b/Source/Game/Networking/Packets/NPCPackets.cs
@@ -65,27 +65,17 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(options.Text.GetByteCount(), 12);
_worldPacket.WriteBits(options.Confirm.GetByteCount(), 12);
+ _worldPacket.WriteBits((byte)options.Status, 2);
_worldPacket.FlushBits();
+ options.Treasure.Write(_worldPacket);
+
_worldPacket.WriteString(options.Text);
_worldPacket.WriteString(options.Confirm);
}
foreach (ClientGossipText text in GossipText)
- {
- _worldPacket.WriteInt32(text.QuestID);
- _worldPacket.WriteInt32(text.QuestType);
- _worldPacket.WriteInt32(text.QuestLevel);
- _worldPacket.WriteInt32(text.QuestMaxScalingLevel);
- _worldPacket.WriteInt32(text.QuestFlags);
- _worldPacket.WriteInt32(text.QuestFlagsEx);
-
- _worldPacket.WriteBit(text.Repeatable);
- _worldPacket.WriteBits(text.QuestTitle.GetByteCount(), 9);
- _worldPacket.FlushBits();
-
- _worldPacket.WriteString(text.QuestTitle);
- }
+ text.Write(_worldPacket);
}
public List GossipOptions = new List();
@@ -297,26 +287,68 @@ namespace Game.Networking.Packets
}
//Structs
+ public struct TreasureItem
+ {
+ public GossipOptionRewardType Type;
+ public int ID;
+ public int Quantity;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteBits((byte)Type, 1);
+ data.WriteInt32(ID);
+ data.WriteInt32(Quantity);
+ }
+ }
+
+ public class TreasureLootList
+ {
+ public List Items = new List();
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(Items.Count);
+ foreach (TreasureItem treasureItem in Items)
+ treasureItem.Write(data);
+ }
+ }
+
public struct ClientGossipOptions
{
public int ClientOption;
public byte OptionNPC;
public byte OptionFlags;
public int OptionCost;
+ public GossipOptionStatus Status;
public string Text;
public string Confirm;
+ public TreasureLootList Treasure;
}
public class ClientGossipText
{
- public int QuestID;
+ public uint QuestID;
+ public int ContentTuningID;
public int QuestType;
- public int QuestLevel;
- public int QuestMaxScalingLevel;
public bool Repeatable;
public string QuestTitle;
- public int QuestFlags;
- public int QuestFlagsEx;
+ public uint QuestFlags;
+ public uint QuestFlagsEx;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(QuestID);
+ data.WriteInt32(ContentTuningID);
+ data.WriteInt32(QuestType);
+ data.WriteUInt32(QuestFlags);
+ data.WriteUInt32(QuestFlagsEx);
+
+ data.WriteBit(Repeatable);
+ data.WriteBits(QuestTitle.GetByteCount(), 9);
+ data.FlushBits();
+
+ data.WriteString(QuestTitle);
+ }
}
public class VendorItemPkt
@@ -332,6 +364,7 @@ namespace Game.Networking.Packets
data.WriteInt32(ExtendedCostID);
data.WriteInt32(PlayerConditionFailed);
Item.Write(data);
+ data.WriteBit(Locked);
data.WriteBit(DoNotFilterOnVendor);
data.WriteBit(Refundable);
data.FlushBits();
@@ -346,6 +379,7 @@ namespace Game.Networking.Packets
public int StackCount;
public int ExtendedCostID;
public int PlayerConditionFailed;
+ public bool Locked;
public bool DoNotFilterOnVendor;
public bool Refundable;
}
diff --git a/Source/Game/Networking/Packets/PartyPackets.cs b/Source/Game/Networking/Packets/PartyPackets.cs
index 4e48062f0..d24df372e 100644
--- a/Source/Game/Networking/Packets/PartyPackets.cs
+++ b/Source/Game/Networking/Packets/PartyPackets.cs
@@ -85,9 +85,8 @@ namespace Game.Networking.Packets
ProposedRoles = proposedRoles;
- InviterVirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
- InviterRealmNameActual = Global.WorldMgr.GetRealm().Name;
- InviterRealmNameNormalized = Global.WorldMgr.GetRealm().NormalizedName;
+ var realm = Global.WorldMgr.GetRealm();
+ InviterRealm = new VirtualRealmInfo(realm.Id.GetAddress(), true, false, realm.Name, realm.NormalizedName);
}
public override void Write()
@@ -97,15 +96,10 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(IsXRealm);
_worldPacket.WriteBit(MustBeBNetFriend);
_worldPacket.WriteBit(AllowMultipleRoles);
+ _worldPacket.WriteBit(QuestSessionActive);
_worldPacket.WriteBits(InviterName.GetByteCount(), 6);
- _worldPacket.WriteUInt32(InviterVirtualRealmAddress);
- _worldPacket.WriteBit(IsLocal);
- _worldPacket.WriteBit(Unk2);
- _worldPacket.WriteBits(InviterRealmNameActual.GetByteCount(), 8);
- _worldPacket.WriteBits(InviterRealmNameNormalized.GetByteCount(), 8);
- _worldPacket.WriteString(InviterRealmNameActual);
- _worldPacket.WriteString(InviterRealmNameNormalized);
+ InviterRealm.Write(_worldPacket);
_worldPacket.WritePackedGuid(InviterGUID);
_worldPacket.WritePackedGuid(InviterBNetAccountId);
@@ -123,22 +117,19 @@ namespace Game.Networking.Packets
public bool MightCRZYou;
public bool MustBeBNetFriend;
public bool AllowMultipleRoles;
- public bool Unk2;
+ public bool QuestSessionActive;
public ushort Unk1;
public bool CanAccept;
// Inviter
+ public VirtualRealmInfo InviterRealm;
public ObjectGuid InviterGUID;
public ObjectGuid InviterBNetAccountId;
public string InviterName;
// Realm
public bool IsXRealm;
- public bool IsLocal = true;
- public uint InviterVirtualRealmAddress;
- public string InviterRealmNameActual;
- public string InviterRealmNameNormalized;
// Lfg
public uint ProposedRoles;
@@ -919,21 +910,21 @@ namespace Game.Networking.Packets
}
class PartyMemberAuraStates
- {
+ {
+ public int SpellID;
+ public ushort Flags;
+ public uint ActiveFlags;
+ public List Points = new List();
+
public void Write(WorldPacket data)
{
data.WriteInt32(SpellID);
- data.WriteUInt8(Flags);
+ data.WriteUInt16(Flags);
data.WriteUInt32(ActiveFlags);
data.WriteInt32(Points.Count);
foreach (float points in Points)
data.WriteFloat(points);
}
-
- public int SpellID;
- public byte Flags;
- public uint ActiveFlags;
- public List Points = new List();
}
class PartyMemberPetStats
@@ -962,6 +953,20 @@ namespace Game.Networking.Packets
public List Auras = new List();
}
+ public struct CTROptions
+ {
+ public uint ContentTuningConditionMask;
+ public int Unused901;
+ public uint ExpansionLevelMask;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(ContentTuningConditionMask);
+ data.WriteInt32(Unused901);
+ data.WriteUInt32(ExpansionLevelMask);
+ }
+ }
+
class PartyMemberStats
{
public void Write(WorldPacket data)
@@ -988,6 +993,7 @@ namespace Game.Networking.Packets
data.WriteInt32(Auras.Count);
Phases.Write(data);
+ ChromieTime.Write(data);
foreach (PartyMemberAuraStates aura in Auras)
aura.Write(data);
@@ -1025,6 +1031,7 @@ namespace Game.Networking.Packets
public ushort WmoGroupID;
public uint WmoDoodadPlacementID;
public sbyte[] PartyType = new sbyte[2];
+ public CTROptions ChromieTime;
}
struct PartyPlayerInfo
diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs
index d25a2a0cb..927be41d0 100644
--- a/Source/Game/Networking/Packets/QueryPackets.cs
+++ b/Source/Game/Networking/Packets/QueryPackets.cs
@@ -132,7 +132,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Stats.RequiredExpansion);
_worldPacket.WriteUInt32(Stats.VignetteID);
_worldPacket.WriteInt32(Stats.Class);
- _worldPacket.WriteFloat(Stats.FadeRegionRadius);
_worldPacket.WriteInt32(Stats.WidgetSetID);
_worldPacket.WriteInt32(Stats.WidgetSetUnitConditionID);
@@ -722,7 +721,6 @@ namespace Game.Networking.Packets
public uint RequiredExpansion;
public uint VignetteID;
public int Class;
- public float FadeRegionRadius;
public int WidgetSetID;
public int WidgetSetUnitConditionID;
public uint[] Flags = new uint[2];
diff --git a/Source/Game/Networking/Packets/QuestPackets.cs b/Source/Game/Networking/Packets/QuestPackets.cs
index 4c3cc605a..c91039594 100644
--- a/Source/Game/Networking/Packets/QuestPackets.cs
+++ b/Source/Game/Networking/Packets/QuestPackets.cs
@@ -108,7 +108,6 @@ namespace Game.Networking.Packets
public override void Write()
{
_worldPacket.WriteUInt32(QuestID);
-
_worldPacket.WriteBit(Allow);
_worldPacket.FlushBits();
@@ -116,11 +115,8 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteUInt32(Info.QuestID);
_worldPacket.WriteInt32(Info.QuestType);
- _worldPacket.WriteInt32(Info.QuestLevel);
- _worldPacket.WriteInt32(Info.QuestScalingFactionGroup);
- _worldPacket.WriteInt32(Info.QuestMaxScalingLevel);
_worldPacket.WriteUInt32(Info.QuestPackageID);
- _worldPacket.WriteInt32(Info.QuestMinLevel);
+ _worldPacket.WriteInt32(Info.ContentTuningID);
_worldPacket.WriteInt32(Info.QuestSortID);
_worldPacket.WriteUInt32(Info.QuestInfoID);
_worldPacket.WriteUInt32(Info.SuggestedGroupNum);
@@ -131,10 +127,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(Info.RewardMoneyDifficulty);
_worldPacket.WriteFloat(Info.RewardMoneyMultiplier);
_worldPacket.WriteUInt32(Info.RewardBonusMoney);
-
- foreach (uint id in Info.RewardDisplaySpell)
- _worldPacket.WriteUInt32(id);
-
+ _worldPacket.WriteInt32(Info.RewardDisplaySpell.Count);
_worldPacket.WriteUInt32(Info.RewardSpell);
_worldPacket.WriteUInt32(Info.RewardHonor);
_worldPacket.WriteFloat(Info.RewardKillHonor);
@@ -204,6 +197,9 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(Info.ManagedWorldStateID);
_worldPacket.WriteInt32(Info.QuestSessionBonus);
+ foreach (QuestCompleteDisplaySpell rewardDisplaySpell in Info.RewardDisplaySpell)
+ rewardDisplaySpell.Write(_worldPacket);
+
_worldPacket.WriteBits(Info.LogTitle.GetByteCount(), 9);
_worldPacket.WriteBits(Info.LogDescription.GetByteCount(), 12);
_worldPacket.WriteBits(Info.QuestDescription.GetByteCount(), 12);
@@ -213,6 +209,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(Info.PortraitTurnInText.GetByteCount(), 10);
_worldPacket.WriteBits(Info.PortraitTurnInName.GetByteCount(), 8);
_worldPacket.WriteBits(Info.QuestCompletionLog.GetByteCount(), 11);
+ _worldPacket.WriteBit(Info.ReadyForTranslation);
_worldPacket.FlushBits();
foreach (QuestObjective questObjective in Info.Objectives)
@@ -358,7 +355,7 @@ namespace Game.Networking.Packets
public ObjectGuid QuestGiverGUID;
public uint QuestID;
- public uint ItemChoiceID;
+ public QuestChoiceItem Choice;
}
public class QuestGiverQuestComplete : ServerPacket
@@ -627,21 +624,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(Greeting.GetByteCount(), 11);
_worldPacket.FlushBits();
- foreach (GossipText gossip in QuestDataText)
- {
- _worldPacket.WriteUInt32(gossip.QuestID);
- _worldPacket.WriteUInt32(gossip.QuestType);
- _worldPacket.WriteUInt32(gossip.QuestLevel);
- _worldPacket.WriteUInt32(gossip.QuestMaxScalingLevel);
- _worldPacket.WriteUInt32(gossip.QuestFlags);
- _worldPacket.WriteUInt32(gossip.QuestFlagsEx);
-
- _worldPacket.WriteBit(gossip.Repeatable);
- _worldPacket.WriteBits(gossip.QuestTitle.GetByteCount(), 9);
- _worldPacket.FlushBits();
-
- _worldPacket.WriteString(gossip.QuestTitle);
- }
+ foreach (ClientGossipText gossip in QuestDataText)
+ gossip.Write(_worldPacket);
_worldPacket.WriteString(Greeting);
}
@@ -649,7 +633,7 @@ namespace Game.Networking.Packets
public ObjectGuid QuestGiverGUID;
public uint GreetEmoteDelay;
public uint GreetEmoteType;
- public List QuestDataText = new List();
+ public List QuestDataText = new List();
public string Greeting = "";
}
@@ -901,6 +885,18 @@ namespace Game.Networking.Packets
public uint DisplayID;
}
+ public struct QuestCompleteDisplaySpell
+ {
+ public int SpellID;
+ public int PlayerConditionID;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(SpellID);
+ data.WriteInt32(PlayerConditionID);
+ }
+ }
+
public class QuestInfo
{
public QuestInfo()
@@ -918,11 +914,8 @@ namespace Game.Networking.Packets
public uint QuestID;
public int QuestType; // Accepted values: 0, 1 or 2. 0 == IsAutoComplete() (skip objectives/details)
- public int QuestLevel; // may be -1, static data, in other cases must be used dynamic level: Player.GetQuestLevel (0 is not known, but assuming this is no longer valid for quest intended for client)
- public int QuestScalingFactionGroup;
- public int QuestMaxScalingLevel = 255;
+ public int ContentTuningID;
public uint QuestPackageID;
- public int QuestMinLevel;
public int QuestSortID; // zone or sort to display in quest log
public uint QuestInfoID;
public uint SuggestedGroupNum;
@@ -933,7 +926,7 @@ namespace Game.Networking.Packets
public uint RewardMoneyDifficulty;
public float RewardMoneyMultiplier = 1.0f;
public uint RewardBonusMoney;
- public uint[] RewardDisplaySpell = new uint[SharedConst.QuestRewardDisplaySpellCount]; // reward spell, this spell will be displayed (icon)
+ public List RewardDisplaySpell = new List(); // reward spell, this spell will be displayed (icon)
public uint RewardSpell;
public uint RewardHonor;
public float RewardKillHonor;
@@ -986,16 +979,59 @@ namespace Game.Networking.Packets
public int[] RewardFactionCapIn = new int[SharedConst.QuestRewardReputationsCount];
public uint[] RewardCurrencyID = new uint[SharedConst.QuestRewardCurrencyCount];
public uint[] RewardCurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount];
+ public bool ReadyForTranslation;
}
public struct QuestChoiceItem
{
+ public LootItemType LootItemType;
public ItemInstance Item;
public uint Quantity;
+
+ public void Read(WorldPacket data)
+ {
+ data.ResetBitPos();
+ LootItemType = (LootItemType)data.ReadBits(2);
+ Item = new ItemInstance();
+ Item.Read(data);
+ Quantity = data.ReadUInt32();
+ }
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteBits((byte)LootItemType, 2);
+ Item.Write(data);
+ data.WriteUInt32(Quantity);
+ }
}
public class QuestRewards
- {
+ {
+ public uint ChoiceItemCount;
+ public uint ItemCount;
+ public uint Money;
+ public uint XP;
+ public uint ArtifactXP;
+ public uint ArtifactCategoryID;
+ public uint Honor;
+ public uint Title;
+ public uint FactionFlags;
+ public Array SpellCompletionDisplayID = new Array(SharedConst.QuestRewardDisplaySpellCount);
+ public uint SpellCompletionID;
+ public uint SkillLineID;
+ public uint NumSkillUps;
+ public uint TreasurePickerID;
+ public Array ChoiceItems = new Array(SharedConst.QuestRewardChoicesCount);
+ public Array ItemID = new Array(SharedConst.QuestRewardItemCount);
+ public Array ItemQty = new Array(SharedConst.QuestRewardItemCount);
+ public Array FactionID = new Array(SharedConst.QuestRewardReputationsCount);
+ public Array FactionValue = new Array(SharedConst.QuestRewardReputationsCount);
+ public Array FactionOverride = new Array(SharedConst.QuestRewardReputationsCount);
+ public Array FactionCapIn = new Array(SharedConst.QuestRewardReputationsCount);
+ public Array CurrencyID = new Array(SharedConst.QuestRewardCurrencyCount);
+ public Array CurrencyQty = new Array(SharedConst.QuestRewardCurrencyCount);
+ public bool IsBoostSpell;
+
public void Write(WorldPacket data)
{
data.WriteUInt32(ChoiceItemCount);
@@ -1038,40 +1074,12 @@ namespace Game.Networking.Packets
data.WriteUInt32(NumSkillUps);
data.WriteUInt32(TreasurePickerID);
- for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
- {
- ChoiceItems[i].Item.Write(data);
- data.WriteUInt32(ChoiceItems[i].Quantity);
- }
+ foreach (var choice in ChoiceItems)
+ choice.Write(data);
data.WriteBit(IsBoostSpell);
data.FlushBits();
}
-
- public uint ChoiceItemCount;
- public uint ItemCount;
- public uint Money;
- public uint XP;
- public uint ArtifactXP;
- public uint ArtifactCategoryID;
- public uint Honor;
- public uint Title;
- public uint FactionFlags;
- public int[] SpellCompletionDisplayID = new int[SharedConst.QuestRewardDisplaySpellCount];
- public uint SpellCompletionID;
- public uint SkillLineID;
- public uint NumSkillUps;
- public uint TreasurePickerID;
- public QuestChoiceItem[] ChoiceItems = new QuestChoiceItem[SharedConst.QuestRewardChoicesCount];
- public uint[] ItemID = new uint[SharedConst.QuestRewardItemCount];
- public uint[] ItemQty = new uint[SharedConst.QuestRewardItemCount];
- public uint[] FactionID = new uint[SharedConst.QuestRewardReputationsCount];
- public int[] FactionValue = new int[SharedConst.QuestRewardReputationsCount];
- public int[] FactionOverride = new int[SharedConst.QuestRewardReputationsCount];
- public int[] FactionCapIn = new int[SharedConst.QuestRewardReputationsCount];
- public uint[] CurrencyID = new uint[SharedConst.QuestRewardCurrencyCount];
- public uint[] CurrencyQty = new uint[SharedConst.QuestRewardCurrencyCount];
- public bool IsBoostSpell;
}
public struct QuestDescEmote
@@ -1105,6 +1113,7 @@ namespace Game.Networking.Packets
}
data.WriteBit(AutoLaunched);
+ data.WriteBit(false); // Unused
data.FlushBits();
Rewards.Write(data);
@@ -1154,30 +1163,6 @@ namespace Game.Networking.Packets
public int Amount;
}
- public struct GossipText
- {
- public GossipText(uint questID, uint questType, uint questLevel, uint questMaxScalingLevel, uint questFlags, uint questFlagsEx, bool repeatable, string questTitle)
- {
- QuestID = questID;
- QuestType = questType;
- QuestLevel = questLevel;
- QuestMaxScalingLevel = questMaxScalingLevel;
- QuestFlags = questFlags;
- QuestFlagsEx = questFlagsEx;
- Repeatable = repeatable;
- QuestTitle = questTitle;
- }
-
- public uint QuestID;
- public uint QuestType;
- public uint QuestLevel;
- public uint QuestMaxScalingLevel;
- public uint QuestFlags;
- public uint QuestFlagsEx;
- public bool Repeatable;
- public string QuestTitle;
- }
-
struct WorldQuestUpdateInfo
{
public WorldQuestUpdateInfo(int lastUpdate, uint questID, uint timer, int variableID, int value)
@@ -1255,17 +1240,60 @@ namespace Game.Networking.Packets
public List ItemChoices = new List();
}
- class PlayerChoiceResponse
+ struct PlayerChoiceResponseMawPower
{
+ public int Unused901_1;
+ public int TypeArtFileID;
+ public int Rarity;
+ public uint RarityColor;
+ public int Unused901_2;
+ public int SpellID;
+ public int MaxStacks;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteInt32(Unused901_1);
+ data.WriteInt32(TypeArtFileID);
+ data.WriteInt32(Rarity);
+ data.WriteUInt32(RarityColor);
+ data.WriteInt32(Unused901_2);
+ data.WriteInt32(SpellID);
+ data.WriteInt32(MaxStacks);
+ }
+ }
+
+ class PlayerChoiceResponse
+ {
+ public int ResponseID;
+ public ushort ResponseIdentifier;
+ public int ChoiceArtFileID;
+ public int Flags;
+ public uint WidgetSetID;
+ public uint UiTextureAtlasElementID;
+ public uint SoundKitID;
+ public byte GroupID;
+ public int UiTextureKitID;
+ public string Answer;
+ public string Header;
+ public string SubHeader;
+ public string ButtonTooltip;
+ public string Description;
+ public string Confirmation;
+ public Optional Reward;
+ public Optional RewardQuestID;
+ public Optional MawPower;
+
public void Write(WorldPacket data)
{
data.WriteInt32(ResponseID);
+ data.WriteUInt16(ResponseIdentifier);
data.WriteInt32(ChoiceArtFileID);
data.WriteInt32(Flags);
data.WriteUInt32(WidgetSetID);
data.WriteUInt32(UiTextureAtlasElementID);
data.WriteUInt32(SoundKitID);
data.WriteUInt8(GroupID);
+ data.WriteInt32(UiTextureKitID);
data.WriteBits(Answer.GetByteCount(), 9);
data.WriteBits(Header.GetByteCount(), 9);
@@ -1276,6 +1304,7 @@ namespace Game.Networking.Packets
data.WriteBit(RewardQuestID.HasValue);
data.WriteBit(Reward.HasValue);
+ data.WriteBit(MawPower.HasValue);
data.FlushBits();
if (Reward.HasValue)
@@ -1290,22 +1319,9 @@ namespace Game.Networking.Packets
if (RewardQuestID.HasValue)
data.WriteUInt32(RewardQuestID.Value);
- }
- public int ResponseID;
- public int ChoiceArtFileID;
- public int Flags;
- public uint WidgetSetID;
- public uint UiTextureAtlasElementID;
- public uint SoundKitID;
- public byte GroupID;
- public string Answer;
- public string Header;
- public string SubHeader;
- public string ButtonTooltip;
- public string Description;
- public string Confirmation;
- public Optional Reward;
- public Optional RewardQuestID;
+ if (MawPower.HasValue)
+ MawPower.Value.Write(data);
+ }
}
}
\ No newline at end of file
diff --git a/Source/Game/Networking/Packets/ReputationPackets.cs b/Source/Game/Networking/Packets/ReputationPackets.cs
index 18ad7dd15..45c8cd753 100644
--- a/Source/Game/Networking/Packets/ReputationPackets.cs
+++ b/Source/Game/Networking/Packets/ReputationPackets.cs
@@ -22,7 +22,7 @@ namespace Game.Networking.Packets
{
public class InitializeFactions : ServerPacket
{
- const ushort FactionCount = 350;
+ const ushort FactionCount = 400;
public InitializeFactions() : base(ServerOpcodes.InitializeFactions, ConnectionType.Instance) { }
diff --git a/Source/Game/Networking/Packets/ScenarioPackets.cs b/Source/Game/Networking/Packets/ScenarioPackets.cs
index 99acfa461..601cd6207 100644
--- a/Source/Game/Networking/Packets/ScenarioPackets.cs
+++ b/Source/Game/Networking/Packets/ScenarioPackets.cs
@@ -147,12 +147,14 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(scenarioPOI.Flags);
_worldPacket.WriteInt32(scenarioPOI.WorldEffectID);
_worldPacket.WriteInt32(scenarioPOI.PlayerConditionID);
+ _worldPacket.WriteInt32(scenarioPOI.NavigationPlayerConditionID);
_worldPacket.WriteInt32(scenarioPOI.Points.Count);
foreach (var scenarioPOIBlobPoint in scenarioPOI.Points)
{
_worldPacket.WriteInt32((int)scenarioPOIBlobPoint.X);
_worldPacket.WriteInt32((int)scenarioPOIBlobPoint.Y);
+ _worldPacket.WriteInt32((int)scenarioPOIBlobPoint.Z);
}
}
}
diff --git a/Source/Game/Networking/Packets/SocialPackets.cs b/Source/Game/Networking/Packets/SocialPackets.cs
index ab7d5e0ea..28c18c6c4 100644
--- a/Source/Game/Networking/Packets/SocialPackets.cs
+++ b/Source/Game/Networking/Packets/SocialPackets.cs
@@ -47,7 +47,8 @@ namespace Game.Networking.Packets
_worldPacket.WriteBits(Contacts.Count, 8);
_worldPacket.FlushBits();
- Contacts.ForEach(p => p.Write(_worldPacket));
+ foreach (ContactInfo contact in Contacts)
+ contact.Write(_worldPacket);
}
public List Contacts;
diff --git a/Source/Game/Networking/Packets/SpellPackets.cs b/Source/Game/Networking/Packets/SpellPackets.cs
index 5f74324e2..b10801808 100644
--- a/Source/Game/Networking/Packets/SpellPackets.cs
+++ b/Source/Game/Networking/Packets/SpellPackets.cs
@@ -332,6 +332,7 @@ namespace Game.Networking.Packets
{
_worldPacket.WriteInt32(SpellID.Count);
_worldPacket.WriteInt32(FavoriteSpellID.Count);
+ _worldPacket.WriteUInt32(SpecializationID);
foreach (uint spell in SpellID)
_worldPacket.WriteUInt32(spell);
@@ -345,6 +346,7 @@ namespace Game.Networking.Packets
public List SpellID = new List();
public List FavoriteSpellID = new List();
+ public uint SpecializationID;
public bool SuppressMessaging;
}
@@ -357,13 +359,15 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(CasterUnit);
_worldPacket.WritePackedGuid(CastID);
_worldPacket.WriteUInt32(SpellID);
- _worldPacket.WriteUInt32(SpellXSpellVisualID);
+
+ Visual.Write(_worldPacket);
+
_worldPacket.WriteUInt16(Reason);
}
public ObjectGuid CasterUnit;
public uint SpellID;
- public uint SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public ushort Reason;
public ObjectGuid CastID;
}
@@ -377,49 +381,51 @@ namespace Game.Networking.Packets
_worldPacket.WritePackedGuid(CasterUnit);
_worldPacket.WritePackedGuid(CastID);
_worldPacket.WriteUInt32(SpellID);
- _worldPacket.WriteUInt32(SpellXSpellVisualID);
+
+ Visual.Write(_worldPacket);
+
_worldPacket.WriteUInt16(Reason);
}
public ObjectGuid CasterUnit;
public uint SpellID;
- public uint SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public ushort Reason;
public ObjectGuid CastID;
}
- class CastFailedBase : ServerPacket
+ class CastFailed : ServerPacket
{
- public CastFailedBase(ServerOpcodes serverOpcodes, ConnectionType connectionType) : base(serverOpcodes, connectionType) { }
-
- public override void Write() { throw new NotImplementedException(); }
-
public ObjectGuid CastID;
public int SpellID;
+ public SpellCastVisual Visual;
public SpellCastResult Reason;
public int FailedArg1 = -1;
public int FailedArg2 = -1;
- }
- class CastFailed : CastFailedBase
- {
public CastFailed() : base(ServerOpcodes.CastFailed, ConnectionType.Instance) { }
public override void Write()
{
_worldPacket.WritePackedGuid(CastID);
_worldPacket.WriteInt32(SpellID);
- _worldPacket.WriteInt32(SpellXSpellVisualID);
+
+ Visual.Write(_worldPacket);
+
_worldPacket.WriteInt32((int)Reason);
_worldPacket.WriteInt32(FailedArg1);
_worldPacket.WriteInt32(FailedArg2);
}
-
- public int SpellXSpellVisualID;
}
- class PetCastFailed : CastFailedBase
+ class PetCastFailed : ServerPacket
{
+ public ObjectGuid CastID;
+ public int SpellID;
+ public SpellCastResult Reason;
+ public int FailedArg1 = -1;
+ public int FailedArg2 = -1;
+
public PetCastFailed() : base(ServerOpcodes.PetCastFailed, ConnectionType.Instance) { }
public override void Write()
@@ -673,10 +679,13 @@ namespace Game.Networking.Packets
{
_worldPacket.WritePackedGuid(Source);
_worldPacket.WriteUInt32(SpellVisualKitID);
+ _worldPacket.WriteBit(MountedVisual);
+ _worldPacket.FlushBits();
}
public ObjectGuid Source;
public uint SpellVisualKitID;
+ public bool MountedVisual;
}
class PlayOrphanSpellVisual : ServerPacket
@@ -753,12 +762,15 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(KitRecID);
_worldPacket.WriteUInt32(KitType);
_worldPacket.WriteUInt32(Duration);
+ _worldPacket.WriteBit(MountedVisual);
+ _worldPacket.FlushBits();
}
public ObjectGuid Unit;
public uint KitRecID;
public uint KitType;
public uint Duration;
+ public bool MountedVisual;
}
public class CancelCast : ClientPacket
@@ -797,7 +809,9 @@ namespace Game.Networking.Packets
{
_worldPacket.WritePackedGuid(CasterGUID);
_worldPacket.WriteInt32(SpellID);
- _worldPacket.WriteInt32(SpellXSpellVisualID);
+
+ Visual.Write(_worldPacket);
+
_worldPacket.WriteUInt32(ChannelDuration);
_worldPacket.WriteBit(InterruptImmunities.HasValue);
_worldPacket.WriteBit(HealPrediction.HasValue);
@@ -811,7 +825,7 @@ namespace Game.Networking.Packets
}
public int SpellID;
- public int SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public Optional InterruptImmunities;
public ObjectGuid CasterGUID;
public Optional HealPrediction;
@@ -905,35 +919,28 @@ namespace Game.Networking.Packets
{
_worldPacket.WritePackedGuid(UnitGUID);
_worldPacket.WriteInt32(DisplayID);
+ _worldPacket.WriteInt32(SpellVisualKitID);
_worldPacket.WriteUInt8(RaceID);
_worldPacket.WriteUInt8(Gender);
_worldPacket.WriteUInt8(ClassID);
- _worldPacket.WriteUInt8(SkinColor);
- _worldPacket.WriteUInt8(FaceVariation);
- _worldPacket.WriteUInt8(HairVariation);
- _worldPacket.WriteUInt8(HairColor);
- _worldPacket.WriteUInt8(BeardVariation);
-
- CustomDisplay.ForEach(id => _worldPacket.WriteUInt8(id));
-
+ _worldPacket.WriteInt32(Customizations.Count);
_worldPacket.WritePackedGuid(GuildGUID);
_worldPacket.WriteInt32(ItemDisplayID.Count);
+ foreach (ChrCustomizationChoice customization in Customizations)
+ customization.Write(_worldPacket);
+
foreach (var itemDisplayId in ItemDisplayID)
_worldPacket.WriteInt32(itemDisplayId);
}
public ObjectGuid UnitGUID;
public int DisplayID;
+ public int SpellVisualKitID;
public byte RaceID;
public byte Gender;
public byte ClassID;
- public byte SkinColor;
- public byte FaceVariation;
- public byte HairVariation;
- public byte HairColor;
- public byte BeardVariation;
- public Array CustomDisplay = new Array(PlayerConst.CustomDisplaySize);
+ public List Customizations = new List();
public ObjectGuid GuildGUID;
public List ItemDisplayID = new List();
@@ -947,10 +954,12 @@ namespace Game.Networking.Packets
{
_worldPacket.WritePackedGuid(UnitGUID);
_worldPacket.WriteInt32(DisplayID);
+ _worldPacket.WriteInt32(SpellVisualKitID);
}
public ObjectGuid UnitGUID;
public int DisplayID;
+ public int SpellVisualKitID;
}
class SpellClick : ClientPacket
@@ -1299,10 +1308,10 @@ namespace Game.Networking.Packets
}
public void Write(WorldPacket data)
- {
+ {
+ data.WriteFloat(PlayerItemLevel);
+ data.WriteFloat(TargetItemLevel);
data.WriteInt16(PlayerLevelDelta);
- data.WriteUInt16(PlayerItemLevel);
- data.WriteUInt16(TargetItemLevel);
data.WriteUInt16(ScalingHealthItemLevelCurveID);
data.WriteUInt8(TargetLevel);
data.WriteUInt8(Expansion);
@@ -1316,8 +1325,8 @@ namespace Game.Networking.Packets
public ContentTuningType TuningType;
public short PlayerLevelDelta;
- public ushort PlayerItemLevel;
- public ushort TargetItemLevel;
+ public float PlayerItemLevel;
+ public float TargetItemLevel;
public ushort ScalingHealthItemLevelCurveID;
public byte TargetLevel;
public byte Expansion;
@@ -1335,14 +1344,34 @@ namespace Game.Networking.Packets
}
}
+ public struct SpellCastVisual
+ {
+ public uint SpellXSpellVisualID;
+ public int ScriptVisualID;
+
+ public void Read(WorldPacket data)
+ {
+ SpellXSpellVisualID = data.ReadUInt32();
+ ScriptVisualID = data.ReadInt32();
+ }
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(SpellXSpellVisualID);
+ data.WriteInt32(ScriptVisualID);
+ }
+ }
+
public class AuraDataInfo
{
public void Write(WorldPacket data)
{
data.WritePackedGuid(CastID);
data.WriteInt32(SpellID);
- data.WriteInt32(SpellXSpellVisualID);
- data.WriteUInt8((byte)Flags);
+
+ Visual.Write(data);
+
+ data.WriteUInt16((ushort)Flags);
data.WriteUInt32(ActiveFlags);
data.WriteUInt16(CastLevel);
data.WriteUInt8(Applications);
@@ -1379,7 +1408,7 @@ namespace Game.Networking.Packets
public ObjectGuid CastID;
public int SpellID;
- public int SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public AuraFlags Flags;
public uint ActiveFlags;
public ushort CastLevel = 1;
@@ -1519,17 +1548,68 @@ namespace Game.Networking.Packets
public uint Quantity;
}
- public class SpellCastRequest
+ public struct SpellOptionalReagent
{
+ public int ItemID;
+ public int Slot;
+ public int Count;
+
+ public void Read(WorldPacket data)
+ {
+ ItemID = data.ReadInt32();
+ Slot = data.ReadInt32();
+ Count = data.ReadInt32();
+ }
+ }
+
+ public struct SpellExtraCurrencyCost
+ {
+ public int CurrencyID;
+ public int Count;
+
+ public void Read(WorldPacket data)
+ {
+ CurrencyID = data.ReadInt32();
+ Count = data.ReadInt32();
+ }
+ }
+
+ public class SpellCastRequest
+ {
+ public ObjectGuid CastID;
+ public uint SpellID;
+ public SpellCastVisual Visual;
+ public uint SendCastFlags;
+ public SpellTargetData Target = new SpellTargetData();
+ public MissileTrajectoryRequest MissileTrajectory;
+ public Optional MoveUpdate;
+ public List Weight = new List();
+ public Array OptionalReagents = new Array(3);
+ public Array OptionalCurrencies = new Array(5 /*MAX_ITEM_EXT_COST_CURRENCIES*/);
+ public ObjectGuid CraftingNPC;
+ public uint[] Misc = new uint[2];
+
public void Read(WorldPacket data)
{
CastID = data.ReadPackedGuid();
Misc[0] = data.ReadUInt32();
Misc[1] = data.ReadUInt32();
SpellID = data.ReadUInt32();
- SpellXSpellVisualID = data.ReadUInt32();
+
+ Visual.Read(data);
+
MissileTrajectory.Read(data);
CraftingNPC = data.ReadPackedGuid();
+
+ var optionalReagents = data.ReadUInt32();
+ var optionalCurrencies = data.ReadUInt32();
+
+ for (var i = 0; i < optionalReagents; ++i)
+ OptionalReagents[i].Read(data);
+
+ for (var i = 0; i < optionalCurrencies; ++i)
+ OptionalCurrencies[i].Read(data);
+
SendCastFlags = data.ReadBits(5);
MoveUpdate.HasValue = data.HasBit();
var weightCount = data.ReadBits(2);
@@ -1548,17 +1628,6 @@ namespace Game.Networking.Packets
Weight.Add(weight);
}
}
-
- public ObjectGuid CastID;
- public uint SpellID;
- public uint SpellXSpellVisualID;
- public uint SendCastFlags;
- public SpellTargetData Target = new SpellTargetData();
- public MissileTrajectoryRequest MissileTrajectory;
- public Optional MoveUpdate;
- public List Weight = new List();
- public ObjectGuid CraftingNPC;
- public uint[] Misc = new uint[2];
}
public struct SpellHitStatus
@@ -1685,7 +1754,9 @@ namespace Game.Networking.Packets
data.WritePackedGuid(CastID);
data.WritePackedGuid(OriginalCastID);
data.WriteInt32(SpellID);
- data.WriteUInt32(SpellXSpellVisualID);
+
+ Visual.Read(data);
+
data.WriteUInt32((uint)CastFlags);
data.WriteUInt32((uint)CastFlagsEx);
data.WriteUInt32(CastTime);
@@ -1736,7 +1807,7 @@ namespace Game.Networking.Packets
public ObjectGuid CastID;
public ObjectGuid OriginalCastID;
public int SpellID;
- public uint SpellXSpellVisualID;
+ public SpellCastVisual Visual;
public SpellCastFlags CastFlags;
public SpellCastFlagsEx CastFlagsEx;
public uint CastTime;
diff --git a/Source/Game/Networking/Packets/SystemPackets.cs b/Source/Game/Networking/Packets/SystemPackets.cs
index 2fdc81357..ea8456985 100644
--- a/Source/Game/Networking/Packets/SystemPackets.cs
+++ b/Source/Game/Networking/Packets/SystemPackets.cs
@@ -50,6 +50,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteUInt32(TwitterPostThrottleCooldown);
_worldPacket.WriteUInt32(TokenPollTimeSeconds);
+ _worldPacket.WriteUInt32(KioskSessionMinutes);
_worldPacket.WriteInt64(TokenBalanceAmount);
_worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay);
@@ -71,7 +72,6 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(RestrictedAccount);
_worldPacket.WriteBit(CommerceSystemEnabled);
_worldPacket.WriteBit(TutorialsEnabled);
- _worldPacket.WriteBit(NPETutorialsEnabled);
_worldPacket.WriteBit(TwitterEnabled);
_worldPacket.WriteBit(Unk67);
_worldPacket.WriteBit(WillKickFromWorld);
@@ -88,6 +88,7 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(QuestSessionEnabled);
_worldPacket.WriteBit(IsMuted);
_worldPacket.WriteBit(ClubFinderEnabled);
+ _worldPacket.WriteBit(Unknown901CheckoutRelated);
_worldPacket.FlushBits();
{
@@ -123,22 +124,12 @@ namespace Game.Networking.Packets
_worldPacket.WriteInt32(SessionAlert.Value.DisplayTime);
}
- _worldPacket.WriteBit(VoiceChatManagerSettings.IsSquelched);
- _worldPacket.WritePackedGuid(VoiceChatManagerSettings.BnetAccountGuid);
- _worldPacket.WritePackedGuid(VoiceChatManagerSettings.GuildGuid);
+ _worldPacket.WriteBit(Squelch.IsSquelched);
+ _worldPacket.WritePackedGuid(Squelch.BnetAccountGuid);
+ _worldPacket.WritePackedGuid(Squelch.GuildGuid);
if (EuropaTicketSystemStatus.HasValue)
- {
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.TicketsEnabled);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.BugsEnabled);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.ComplaintsEnabled);
- _worldPacket.WriteBit(EuropaTicketSystemStatus.Value.SuggestionsEnabled);
-
- _worldPacket.WriteUInt32(EuropaTicketSystemStatus.Value.ThrottleState.MaxTries);
- _worldPacket.WriteUInt32(EuropaTicketSystemStatus.Value.ThrottleState.PerMilliseconds);
- _worldPacket.WriteUInt32(EuropaTicketSystemStatus.Value.ThrottleState.TryCount);
- _worldPacket.WriteUInt32(EuropaTicketSystemStatus.Value.ThrottleState.LastResetTimeBeforeNow);
- }
+ EuropaTicketSystemStatus.Value.Write(_worldPacket);
}
public bool VoiceEnabled;
@@ -160,6 +151,7 @@ namespace Game.Networking.Packets
public uint BpayStoreProductDeliveryDelay;
public uint ClubsPresenceUpdateTimer;
public uint HiddenUIClubsPresenceUpdateTimer; // Timer for updating club presence when communities ui frame is hidden
+ public uint KioskSessionMinutes;
public bool ItemRestorationButtonEnabled;
public bool CharUndeleteEnabled; // Implemented
public bool BpayStoreDisabledByParentalControls;
@@ -183,29 +175,12 @@ namespace Game.Networking.Packets
public bool QuestSessionEnabled;
public bool IsMuted;
public bool ClubFinderEnabled;
+ public bool Unknown901CheckoutRelated;
public SocialQueueConfig QuickJoinConfig;
- public VoiceChatProxySettings VoiceChatManagerSettings;
+ public SquelchInfo Squelch;
public RafSystemFeatureInfo RAFSystem;
- public struct SavedThrottleObjectState
- {
- public uint MaxTries;
- public uint PerMilliseconds;
- public uint TryCount;
- public uint LastResetTimeBeforeNow;
- }
-
- public struct EuropaTicketConfig
- {
- public bool TicketsEnabled;
- public bool BugsEnabled;
- public bool ComplaintsEnabled;
- public bool SuggestionsEnabled;
-
- public SavedThrottleObjectState ThrottleState;
- }
-
public struct SessionAlertConfig
{
public int Delay;
@@ -240,7 +215,7 @@ namespace Game.Networking.Packets
public float ThrottleDfBestPriority;
}
- public struct VoiceChatProxySettings
+ public struct SquelchInfo
{
public bool IsSquelched;
public ObjectGuid BnetAccountGuid;
@@ -279,16 +254,28 @@ namespace Game.Networking.Packets
_worldPacket.WriteBit(LiveRegionCharacterListEnabled);
_worldPacket.WriteBit(LiveRegionCharacterCopyEnabled);
_worldPacket.WriteBit(LiveRegionAccountCopyEnabled);
+ _worldPacket.WriteBit(LiveRegionKeyBindingsCopyEnabled);
+ _worldPacket.WriteBit(Unknown901CheckoutRelated);
+ _worldPacket.WriteBit(EuropaTicketSystemStatus.HasValue);
_worldPacket.FlushBits();
+ if (EuropaTicketSystemStatus.HasValue)
+ EuropaTicketSystemStatus.Value.Write(_worldPacket);
+
_worldPacket.WriteUInt32(TokenPollTimeSeconds);
+ _worldPacket.WriteUInt32(KioskSessionMinutes);
_worldPacket.WriteInt64(TokenBalanceAmount);
_worldPacket.WriteInt32(MaxCharactersPerRealm);
+ _worldPacket.WriteInt32(LiveRegionCharacterCopySourceRegions.Count);
_worldPacket.WriteUInt32(BpayStoreProductDeliveryDelay);
_worldPacket.WriteInt32(ActiveCharacterUpgradeBoostType);
_worldPacket.WriteInt32(ActiveClassTrialBoostType);
_worldPacket.WriteInt32(MinimumExpansionLevel);
_worldPacket.WriteInt32(MaximumExpansionLevel);
+
+ foreach (var sourceRegion in LiveRegionCharacterCopySourceRegions)
+ _worldPacket.WriteInt32(sourceRegion);
+
}
public bool BpayStoreAvailable; // NYI
@@ -306,6 +293,10 @@ namespace Game.Networking.Packets
public bool LiveRegionCharacterListEnabled; // NYI
public bool LiveRegionCharacterCopyEnabled; // NYI
public bool LiveRegionAccountCopyEnabled; // NYI
+ public bool LiveRegionKeyBindingsCopyEnabled = false;
+ public bool Unknown901CheckoutRelated = false; // NYI
+ public Optional EuropaTicketSystemStatus;
+ public List LiveRegionCharacterCopySourceRegions = new List();
public uint TokenPollTimeSeconds; // NYI
public long TokenBalanceAmount; // NYI
public int MaxCharactersPerRealm;
@@ -314,6 +305,7 @@ namespace Game.Networking.Packets
public int ActiveClassTrialBoostType; // NYI
public int MinimumExpansionLevel;
public int MaximumExpansionLevel;
+ public uint KioskSessionMinutes;
}
public class MOTD : ServerPacket
@@ -351,4 +343,40 @@ namespace Game.Networking.Packets
public string ServerTimeTZ;
public string GameTimeTZ;
}
+
+ public struct SavedThrottleObjectState
+ {
+ public uint MaxTries;
+ public uint PerMilliseconds;
+ public uint TryCount;
+ public uint LastResetTimeBeforeNow;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(MaxTries);
+ data.WriteUInt32(PerMilliseconds);
+ data.WriteUInt32(TryCount);
+ data.WriteUInt32(LastResetTimeBeforeNow);
+ }
+ }
+
+ public struct EuropaTicketConfig
+ {
+ public bool TicketsEnabled;
+ public bool BugsEnabled;
+ public bool ComplaintsEnabled;
+ public bool SuggestionsEnabled;
+
+ public SavedThrottleObjectState ThrottleState;
+
+ public void Write(WorldPacket data)
+ {
+ data.WriteBit(TicketsEnabled);
+ data.WriteBit(BugsEnabled);
+ data.WriteBit(ComplaintsEnabled);
+ data.WriteBit(SuggestionsEnabled);
+
+ ThrottleState.Write(data);
+ }
+ }
}
diff --git a/Source/Game/Networking/Packets/TicketPackets.cs b/Source/Game/Networking/Packets/TicketPackets.cs
index 0975516fc..bdd455be6 100644
--- a/Source/Game/Networking/Packets/TicketPackets.cs
+++ b/Source/Game/Networking/Packets/TicketPackets.cs
@@ -102,31 +102,22 @@ namespace Game.Networking.Packets
int CaseID;
}
- public class SupportTicketSubmitBug : ClientPacket
+ public class SubmitUserFeedback : ClientPacket
{
public SupportTicketHeader Header;
public string Note;
+ public bool IsSuggestion;
- public SupportTicketSubmitBug(WorldPacket packet) : base(packet) { }
+ public SubmitUserFeedback(WorldPacket packet) : base(packet) { }
public override void Read()
{
Header.Read(_worldPacket);
- Note = _worldPacket.ReadString(_worldPacket.ReadBits(10));
- }
- }
+ uint noteLength = _worldPacket.ReadBits(24);
+ IsSuggestion = _worldPacket.HasBit();
- public class SupportTicketSubmitSuggestion : ClientPacket
- {
- public SupportTicketHeader Header;
- public string Note;
-
- public SupportTicketSubmitSuggestion(WorldPacket packet) : base(packet) { }
-
- public override void Read()
- {
- Header.Read(_worldPacket);
- Note = _worldPacket.ReadString(_worldPacket.ReadBits(10));
+ if (noteLength != 0)
+ Note = _worldPacket.ReadString(noteLength - 1);
}
}
diff --git a/Source/Game/Networking/Packets/TransmogrificationPackets.cs b/Source/Game/Networking/Packets/TransmogrificationPackets.cs
index 64688aef2..57cdee8bc 100644
--- a/Source/Game/Networking/Packets/TransmogrificationPackets.cs
+++ b/Source/Game/Networking/Packets/TransmogrificationPackets.cs
@@ -91,10 +91,12 @@ namespace Game.Networking.Packets
ItemModifiedAppearanceID = data.ReadInt32();
Slot = data.ReadUInt32();
SpellItemEnchantmentID = data.ReadInt32();
+ SecondaryItemModifiedAppearanceID = data.ReadInt32();
}
public int ItemModifiedAppearanceID;
public uint Slot;
public int SpellItemEnchantmentID;
+ public int SecondaryItemModifiedAppearanceID;
}
}
diff --git a/Source/Game/Scenarios/ScenarioManager.cs b/Source/Game/Scenarios/ScenarioManager.cs
index a0e3a070d..a1cc46a88 100644
--- a/Source/Game/Scenarios/ScenarioManager.cs
+++ b/Source/Game/Scenarios/ScenarioManager.cs
@@ -242,6 +242,16 @@ namespace Game.Scenarios
public class ScenarioPOI
{
+ public int BlobIndex;
+ public int MapID;
+ public int UiMapID;
+ public int Priority;
+ public int Flags;
+ public int WorldEffectID;
+ public int PlayerConditionID;
+ public int NavigationPlayerConditionID;
+ public List Points = new List();
+
public ScenarioPOI(int blobIndex, int mapID, int uiMapID, int priority, int flags, int worldEffectID, int playerConditionID, List