diff --git a/Source/Framework/Constants/Authentication/AuthConst.cs b/Source/Framework/Constants/Authentication/AuthConst.cs
index 4a9803ce1..76f02c6c5 100644
--- a/Source/Framework/Constants/Authentication/AuthConst.cs
+++ b/Source/Framework/Constants/Authentication/AuthConst.cs
@@ -75,50 +75,54 @@ namespace Framework.Constants
CharCreateTimeout = 48,
CharCreateThrottle = 49,
- CharDeleteInProgress = 50,
- CharDeleteSuccess = 51,
- CharDeleteFailed = 52,
- CharDeleteFailedLockedForTransfer = 53,
- CharDeleteFailedGuildLeader = 54,
- CharDeleteFailedArenaCaptain = 55,
- CharDeleteFailedHasHeirloomOrMail = 56,
- CharDeleteFailedUpgradeInProgress = 57,
- CharDeleteFailedHasWowToken = 58,
- CharDeleteFailedVasTransactionInProgress = 59,
+ CharCreateAlliedRaceAchievement = 50,
+ CharCreateLevelRequirementDemonHunter = 51,
- CharLoginInProgress = 60,
- CharLoginSuccess = 61,
- CharLoginNoWorld = 62,
- CharLoginDuplicateCharacter = 63,
- CharLoginNoInstances = 64,
- CharLoginFailed = 65,
- CharLoginDisabled = 66,
- CharLoginNoCharacter = 67,
- CharLoginLockedForTransfer = 68,
- CharLoginLockedByBilling = 69,
- CharLoginLockedByMobileAh = 70,
- CharLoginTemporaryGmLock = 71,
- CharLoginLockedByCharacterUpgrade = 72,
- CharLoginLockedByRevokedCharacterUpgrade = 73,
- CharLoginLockedByRevokedVasTransaction = 74,
+ CharDeleteInProgress = 52,
+ CharDeleteSuccess = 53,
+ CharDeleteFailed = 54,
+ CharDeleteFailedLockedForTransfer = 55,
+ CharDeleteFailedGuildLeader = 56,
+ CharDeleteFailedArenaCaptain = 57,
+ CharDeleteFailedHasHeirloomOrMail = 58,
+ CharDeleteFailedUpgradeInProgress = 59,
+ CharDeleteFailedHasWowToken = 60,
+ CharDeleteFailedVasTransactionInProgress = 61,
- CharNameSuccess = 75,
- CharNameFailure = 76,
- CharNameNoName = 77,
- CharNameTooShort = 78,
- CharNameTooLong = 79,
- CharNameInvalidCharacter = 80,
- CharNameMixedLanguages = 81,
- CharNameProfane = 82,
- CharNameReserved = 83,
- CharNameInvalidApostrophe = 84,
- CharNameMultipleApostrophes = 85,
- CharNameThreeConsecutive = 86,
- CharNameInvalidSpace = 87,
- CharNameConsecutiveSpaces = 88,
- CharNameRussianConsecutiveSilentCharacters = 89,
- CharNameRussianSilentCharacterAtBeginningOrEnd = 90,
- CharNameDeclensionDoesntMatchBaseName = 91
+ CharLoginInProgress = 62,
+ CharLoginSuccess = 63,
+ CharLoginNoWorld = 64,
+ CharLoginDuplicateCharacter = 65,
+ CharLoginNoInstances = 66,
+ CharLoginFailed = 67,
+ CharLoginDisabled = 68,
+ CharLoginNoCharacter = 69,
+ CharLoginLockedForTransfer = 70,
+ CharLoginLockedByBilling = 71,
+ CharLoginLockedByMobileAh = 72,
+ CharLoginTemporaryGmLock = 73,
+ CharLoginLockedByCharacterUpgrade = 74,
+ CharLoginLockedByRevokedCharacterUpgrade = 75,
+ CharLoginLockedByRevokedVasTransaction = 76,
+ CharLoginLockedByRestriction = 77,
+
+ CharNameSuccess = 78,
+ CharNameFailure = 79,
+ CharNameNoName = 80,
+ CharNameTooShort = 81,
+ CharNameTooLong = 82,
+ CharNameInvalidCharacter = 83,
+ CharNameMixedLanguages = 84,
+ CharNameProfane = 85,
+ CharNameReserved = 86,
+ CharNameInvalidApostrophe = 87,
+ CharNameMultipleApostrophes = 88,
+ CharNameThreeConsecutive = 89,
+ CharNameInvalidSpace = 90,
+ CharNameConsecutiveSpaces = 91,
+ CharNameRussianConsecutiveSilentCharacters = 92,
+ CharNameRussianSilentCharacterAtBeginningOrEnd = 93,
+ CharNameDeclensionDoesntMatchBaseName = 94
}
public enum CharacterUndeleteResult
diff --git a/Source/Framework/Constants/ItemConst.cs b/Source/Framework/Constants/ItemConst.cs
index 463d996a8..277fe4737 100644
--- a/Source/Framework/Constants/ItemConst.cs
+++ b/Source/Framework/Constants/ItemConst.cs
@@ -108,21 +108,22 @@ namespace Framework.Constants
public const byte BagStart = 19;
public const byte BagEnd = 23;
public const byte ItemStart = 23;
- public const byte ItemEnd = 39;
+ public const byte ItemEnd = 47;
- public const byte BankItemStart = 39;
- public const byte BankItemEnd = 67;
- public const byte BankBagStart = 67;
- public const byte BankBagEnd = 74;
+ public const byte BankItemStart = 47;
+ public const byte BankItemEnd = 75;
+ public const byte BankBagStart = 75;
+ public const byte BankBagEnd = 82;
- public const byte BuyBackStart = 74;
- public const byte BuyBackEnd = 86;
- public const byte ReagentStart = 87;
- public const byte ReagentEnd = 184;
- public const byte ChildEquipmentStart = 184;
- public const byte ChildEquipmentEnd = 187;
+ public const byte BuyBackStart = 82;
+ public const byte BuyBackEnd = 94;
+ public const byte ReagentStart = 94;
+ public const byte ReagentEnd = 192;
+ public const byte ChildEquipmentStart = 192;
+ public const byte ChildEquipmentEnd = 195;
public const byte Bag0 = 255;
+ public const byte DefaultSize = 16;
}
public struct EquipmentSlot
@@ -975,6 +976,7 @@ namespace Framework.Constants
CantUseItem = 98, // You can't use that item.
CantBeObliterated = 99, // You can't obliterate that item
GuildBankConjuredItem = 100,// You cannot store conjured items in the guild bank
+ CantDoThatRightNow = 101,// You can't do that right now.
}
public enum BuyResult
diff --git a/Source/Framework/Constants/MapConst.cs b/Source/Framework/Constants/MapConst.cs
index 82d23b844..0e2adaa70 100644
--- a/Source/Framework/Constants/MapConst.cs
+++ b/Source/Framework/Constants/MapConst.cs
@@ -14,6 +14,7 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
+using System;
namespace Framework.Constants
{
@@ -99,6 +100,7 @@ namespace Framework.Constants
RespawnDelay
}
+ [Flags]
public enum GridMapTypeMask
{
None = 0x00,
diff --git a/Source/Framework/Constants/Network/Opcodes.cs b/Source/Framework/Constants/Network/Opcodes.cs
index 4c5bbe597..8dc307c83 100644
--- a/Source/Framework/Constants/Network/Opcodes.cs
+++ b/Source/Framework/Constants/Network/Opcodes.cs
@@ -25,24 +25,24 @@ namespace Framework.Constants
AcceptWargameInvite = 0x35e0,
ActivateTaxi = 0x34ae,
AddonList = 0x35d8,
- AddBattlenetFriend = 0x365c,
- AddFriend = 0x36d1,
- AddIgnore = 0x36d5,
- AddToy = 0x3287,
- AdventureJournalOpenQuest = 0x31f7,
- AdventureJournalStartQuest = 0x332b,
+ AddBattlenetFriend = 0x365a,
+ AddFriend = 0x36cf,
+ AddIgnore = 0x36d3,
+ AddToy = 0x328b,
+ AdventureJournalOpenQuest = 0x31f9,
+ AdventureJournalStartQuest = 0x332e,
AlterAppearance = 0x34f9,
AreaSpiritHealerQuery = 0x34b3,
AreaSpiritHealerQueue = 0x34b4,
- AreaTrigger = 0x31cc,
+ AreaTrigger = 0x31cd,
ArtifactAddPower = 0x31a5,
ArtifactAddRelicTalent = 0x31a8,
ArtifactAttunePreviewRelic = 0x31a9,
ArtifactAttuneSocketedRelic = 0x31aa,
ArtifactSetAppearance = 0x31a7,
- AssignEquipmentSetSpec = 0x31fe,
- AttackStop = 0x3249,
- AttackSwing = 0x3248,
+ AssignEquipmentSetSpec = 0x3200,
+ AttackStop = 0x324d,
+ AttackSwing = 0x324c,
AuctionHelloRequest = 0x34cf,
AuctionListBidderItems = 0x34d5,
AuctionListItems = 0x34d2,
@@ -65,90 +65,91 @@ namespace Framework.Constants
BattlefieldLeave = 0x3171,
BattlefieldList = 0x317d,
BattlefieldPort = 0x3529,
- BattlemasterHello = 0x329d,
+ BattlemasterHello = 0x32a1,
BattlemasterJoin = 0x3524,
BattlemasterJoinArena = 0x3525,
BattlemasterJoinBrawl = 0x3527,
BattlemasterJoinSkirmish = 0x3526,
- BattlenetChallengeResponse = 0x36d4,
- BattlenetRequest = 0x36f8,
- BattlenetRequestRealmListTicket = 0x36f9,
- BattlePayAckFailedResponse = 0x36cc,
- BattlePayConfirmPurchaseResponse = 0x36cb,
- BattlePayDistributionAssignToTarget = 0x36c2,
- BattlePayGetProductList = 0x36bc,
- BattlePayGetPurchaseList = 0x36bd,
- BattlePayQueryClassTrialBoostResult = 0x36c5,
- BattlePayRequestCharacterBoostUnrevoke = 0x36c3,
- BattlePayRequestCurrentVasTransferQueues = 0x370a,
- BattlePayRequestPriceInfo = 0x3709,
- BattlePayRequestVasCharacterQueueTime = 0x370b,
- BattlePayStartPurchase = 0x36f4,
- BattlePayStartVasPurchase = 0x36f5,
- BattlePayTrialBoostCharacter = 0x36c4,
- BattlePayValidateBnetVasTransfer = 0x370c,
+ BattlenetChallengeResponse = 0x36d2,
+ BattlenetRequest = 0x36f6,
+ BattlenetRequestRealmListTicket = 0x36f7,
+ BattlePayAckFailedResponse = 0x36ca,
+ BattlePayConfirmPurchaseResponse = 0x36c9,
+ BattlePayDistributionAssignToTarget = 0x36c0,
+ BattlePayGetProductList = 0x36ba,
+ BattlePayGetPurchaseList = 0x36bb,
+ BattlePayQueryClassTrialBoostResult = 0x36c3,
+ BattlePayRequestCharacterBoostUnrevoke = 0x36c1,
+ BattlePayRequestCurrentVasTransferQueues = 0x3708,
+ BattlePayRequestPriceInfo = 0x3707,
+ BattlePayRequestVasCharacterQueueTime = 0x3709,
+ BattlePayStartPurchase = 0x36f2,
+ BattlePayStartVasPurchase = 0x36f3,
+ BattlePayTrialBoostCharacter = 0x36c2,
+ BattlePayValidateBnetVasTransfer = 0x370a,
BattlePetClearFanfare = 0x312c,
- BattlePetDeletePet = 0x3626,
- BattlePetDeletePetCheat = 0x3627,
- BattlePetModifyName = 0x3629,
- BattlePetRequestJournal = 0x3625,
- BattlePetRequestJournalLock = 0x3624,
- BattlePetSetBattleSlot = 0x362d,
- BattlePetSetFlags = 0x3631,
- BattlePetSummon = 0x362a,
- BattlePetUpdateNotify = 0x31d5,
+ BattlePetDeletePet = 0x3624,
+ BattlePetDeletePetCheat = 0x3625,
+ BattlePetModifyName = 0x3627,
+ BattlePetRequestJournal = 0x3623,
+ BattlePetRequestJournalLock = 0x3622,
+ BattlePetSetBattleSlot = 0x362b,
+ BattlePetSetFlags = 0x362f,
+ BattlePetSummon = 0x3628,
+ BattlePetUpdateDisplayNotify = 0x31d7,
+ BattlePetUpdateNotify = 0x31d6,
BeginTrade = 0x3157,
BinderActivate = 0x34b5,
BlackMarketBidOnItem = 0x3531,
BlackMarketOpen = 0x352f,
BlackMarketRequestItems = 0x3530,
- BugReport = 0x3688,
+ BugReport = 0x3686,
BusyTrade = 0x3158,
BuyBackItem = 0x34a7,
BuyBankSlot = 0x34b7,
BuyItem = 0x34a6,
BuyReagentBank = 0x34b8,
- BuyWowTokenConfirm = 0x36ed,
- BuyWowTokenStart = 0x36ec,
- CageBattlePet = 0x31e6,
- CalendarAddEvent = 0x367f,
- CalendarComplain = 0x367b,
- CalendarCopyEvent = 0x367a,
- CalendarEventInvite = 0x3674,
- CalendarEventModeratorStatus = 0x3678,
- CalendarEventRsvp = 0x3676,
- CalendarEventSignUp = 0x367d,
- CalendarEventStatus = 0x3677,
- CalendarGet = 0x3671,
- CalendarGetEvent = 0x3672,
- CalendarGetNumPending = 0x367c,
- CalendarGuildFilter = 0x3673,
- CalendarRemoveEvent = 0x3679,
- CalendarRemoveInvite = 0x3675,
- CalendarUpdateEvent = 0x3680,
+ BuyWowTokenConfirm = 0x36eb,
+ BuyWowTokenStart = 0x36ea,
+ CageBattlePet = 0x31e8,
+ CalendarAddEvent = 0x367d,
+ CalendarComplain = 0x3679,
+ CalendarCopyEvent = 0x3678,
+ CalendarEventInvite = 0x3672,
+ CalendarEventModeratorStatus = 0x3676,
+ CalendarEventRsvp = 0x3674,
+ CalendarEventSignUp = 0x367b,
+ CalendarEventStatus = 0x3675,
+ CalendarGet = 0x366f,
+ CalendarGetEvent = 0x3670,
+ CalendarGetNumPending = 0x367a,
+ CalendarGuildFilter = 0x3671,
+ CalendarRemoveEvent = 0x3677,
+ CalendarRemoveInvite = 0x3673,
+ CalendarUpdateEvent = 0x367e,
CancelAura = 0x31ac,
CancelAutoRepeatSpell = 0x34eb,
- CancelCast = 0x328d,
- CancelChannelling = 0x3258,
- CancelGrowthAura = 0x325d,
- CancelMasterLootRoll = 0x3206,
+ CancelCast = 0x3291,
+ CancelChannelling = 0x325c,
+ CancelGrowthAura = 0x3261,
+ CancelMasterLootRoll = 0x3208,
CancelModSpeedNoControlAuras = 0x31ab,
- CancelMountAura = 0x326e,
+ CancelMountAura = 0x3272,
CancelQueuedSpell = 0x317e,
CancelTempEnchantment = 0x34f6,
CancelTrade = 0x315c,
- CanDuel = 0x3664,
- CanRedeemWowTokenForBalance = 0x3708,
- CastSpell = 0x328a,
+ CanDuel = 0x3662,
+ CanRedeemWowTokenForBalance = 0x3706,
+ CastSpell = 0x328e,
ChallengeModeRequestLeaders = 0x308f,
ChallengeModeRequestMapStats = 0x308e,
- ChangeBagSlotFlag = 0x330e,
- ChangeMonumentAppearance = 0x32f0,
- ChangeSubGroup = 0x364e,
- CharacterRenameRequest = 0x36c0,
- CharCustomize = 0x3690,
- CharDelete = 0x369d,
- CharRaceOrFactionChange = 0x3696,
+ ChangeBagSlotFlag = 0x3312,
+ ChangeMonumentAppearance = 0x32f4,
+ ChangeSubGroup = 0x364c,
+ CharacterRenameRequest = 0x36be,
+ CharCustomize = 0x368e,
+ CharDelete = 0x369b,
+ CharRaceOrFactionChange = 0x3694,
ChatAddonMessageChannel = 0x37d0,
ChatAddonMessageGuild = 0x37d4,
ChatAddonMessageInstanceChat = 0x37f3,
@@ -193,14 +194,14 @@ namespace Framework.Constants
ChatReportFiltered = 0x37cc,
ChatReportIgnored = 0x37cb,
ChatUnregisterAllAddonPrefixes = 0x37ce,
- CheckRafEmailEnabled = 0x36cd,
- CheckWowTokenVeteranEligibility = 0x36eb,
- ChoiceResponse = 0x328f,
+ CheckRafEmailEnabled = 0x36cb,
+ CheckWowTokenVeteranEligibility = 0x36e9,
+ ChoiceResponse = 0x3293,
ClearRaidMarker = 0x31a1,
ClearTradeItem = 0x315e,
ClientPortGraveyard = 0x352b,
CloseInteraction = 0x3496,
- CollectionItemSetFavorite = 0x3634,
+ CollectionItemSetFavorite = 0x3632,
CommentatorEnable = 0x35f0,
CommentatorEnterInstance = 0x35f4,
CommentatorExitInstance = 0x35f5,
@@ -208,87 +209,87 @@ namespace Framework.Constants
CommentatorGetPlayerCooldowns = 0x35f3,
CommentatorGetPlayerInfo = 0x35f2,
CommentatorStartWargame = 0x35ef,
- Complaint = 0x366e,
+ Complaint = 0x366c,
CompleteCinematic = 0x3549,
CompleteMovie = 0x34e1,
ConfirmArtifactRespec = 0x31a6,
- ConfirmRespecWipe = 0x3200,
+ ConfirmRespecWipe = 0x3202,
ConnectToFailed = 0x35d4,
ContributionContribute = 0x3558,
ContributionGetState = 0x3559,
- ConvertConsumptionTime = 0x36fb,
- ConvertRaid = 0x3650,
- CreateCharacter = 0x3645,
- CreateShipment = 0x32dc,
+ ConvertConsumptionTime = 0x36f9,
+ ConvertRaid = 0x364e,
+ CreateCharacter = 0x3643,
+ CreateShipment = 0x32e0,
DbQueryBulk = 0x35e4,
DeclineGuildInvites = 0x3522,
DeclinePetition = 0x3538,
DeleteEquipmentSet = 0x3510,
- DelFriend = 0x36d2,
- DelIgnore = 0x36d6,
- DepositReagentBank = 0x3317,
- DestroyItem = 0x3281,
- DfBootPlayerVote = 0x3617,
- DfGetJoinStatus = 0x3615,
- DfGetSystemInfo = 0x3614,
+ DelFriend = 0x36d0,
+ DelIgnore = 0x36d4,
+ DepositReagentBank = 0x331b,
+ DestroyItem = 0x3285,
+ DfBootPlayerVote = 0x3615,
+ DfGetJoinStatus = 0x3613,
+ DfGetSystemInfo = 0x3612,
DfJoin = 0x3608,
- DfLeave = 0x3613,
+ DfLeave = 0x3611,
DfProposalResponse = 0x3607,
- DfReadyCheckResponse = 0x361a,
- DfSetRoles = 0x3616,
- DfTeleport = 0x3618,
+ DfReadyCheckResponse = 0x3618,
+ DfSetRoles = 0x3614,
+ DfTeleport = 0x3616,
DiscardedTimeSyncAcks = 0x3a3c,
DismissCritter = 0x34ff,
- DoMasterLootRoll = 0x3205,
- DoReadyCheck = 0x3635,
+ DoMasterLootRoll = 0x3207,
+ DoReadyCheck = 0x3633,
DuelResponse = 0x34e6,
- EjectPassenger = 0x322e,
+ EjectPassenger = 0x3230,
Emote = 0x3545,
EnableEncryptionAck = 0x3767,
EnableNagle = 0x376b,
EnableTaxiNode = 0x34ac,
- EngineSurvey = 0x36e5,
+ EngineSurvey = 0x36e3,
EnumCharacters = 0x35e8,
- EnumCharactersDeletedByClient = 0x36df,
+ EnumCharactersDeletedByClient = 0x36dd,
FarSight = 0x34ec,
GameObjReportUse = 0x34f3,
GameObjUse = 0x34f2,
- GarrisonAssignFollowerToBuilding = 0x32c7,
- GarrisonCancelConstruction = 0x32b8,
- GarrisonCheckUpgradeable = 0x330a,
- GarrisonCompleteMission = 0x32fd,
- GarrisonGenerateRecruits = 0x32ca,
- GarrisonGetBuildingLandmarks = 0x32d8,
- GarrisonGetMissionReward = 0x3331,
- GarrisonMissionBonusRoll = 0x32ff,
- GarrisonPurchaseBuilding = 0x32b4,
- GarrisonRecruitFollower = 0x32cc,
- GarrisonRemoveFollower = 0x32f4,
- GarrisonRemoveFollowerFromBuilding = 0x32c8,
- GarrisonRenameFollower = 0x32c9,
- GarrisonRequestBlueprintAndSpecializationData = 0x32b3,
- GarrisonRequestClassSpecCategoryInfo = 0x32d1,
- GarrisonRequestLandingPageShipmentInfo = 0x32db,
- GarrisonRequestShipmentInfo = 0x32da,
- GarrisonResearchTalent = 0x32cd,
- GarrisonSetBuildingActive = 0x32b5,
- GarrisonSetFollowerFavorite = 0x32c5,
- GarrisonSetFollowerInactive = 0x32c1,
- GarrisonSetRecruitmentPreferences = 0x32cb,
- GarrisonStartMission = 0x32fc,
- GarrisonSwapBuildings = 0x32b9,
+ GarrisonAssignFollowerToBuilding = 0x32cb,
+ GarrisonCancelConstruction = 0x32bc,
+ GarrisonCheckUpgradeable = 0x330e,
+ GarrisonCompleteMission = 0x3301,
+ GarrisonGenerateRecruits = 0x32ce,
+ GarrisonGetBuildingLandmarks = 0x32dc,
+ GarrisonGetMissionReward = 0x3334,
+ GarrisonMissionBonusRoll = 0x3303,
+ GarrisonPurchaseBuilding = 0x32b8,
+ GarrisonRecruitFollower = 0x32d0,
+ GarrisonRemoveFollower = 0x32f8,
+ GarrisonRemoveFollowerFromBuilding = 0x32cc,
+ GarrisonRenameFollower = 0x32cd,
+ GarrisonRequestBlueprintAndSpecializationData = 0x32b7,
+ GarrisonRequestClassSpecCategoryInfo = 0x32d5,
+ GarrisonRequestLandingPageShipmentInfo = 0x32df,
+ GarrisonRequestShipmentInfo = 0x32de,
+ GarrisonResearchTalent = 0x32d1,
+ GarrisonSetBuildingActive = 0x32b9,
+ GarrisonSetFollowerFavorite = 0x32c9,
+ GarrisonSetFollowerInactive = 0x32c5,
+ GarrisonSetRecruitmentPreferences = 0x32cf,
+ GarrisonStartMission = 0x3300,
+ GarrisonSwapBuildings = 0x32bd,
GenerateRandomCharacterName = 0x35e7,
- GetChallengeModeRewards = 0x3685,
- GetGarrisonInfo = 0x32ae,
+ GetChallengeModeRewards = 0x3683,
+ GetGarrisonInfo = 0x32b2,
GetItemPurchaseData = 0x3533,
- GetMirrorImageData = 0x3285,
+ GetMirrorImageData = 0x3289,
GetPvpOptionsEnabled = 0x35ee,
- GetRemainingGameTime = 0x36ee,
- GetTrophyList = 0x32ed,
- GetUndeleteCharacterCooldownStatus = 0x36e1,
- GmTicketAcknowledgeSurvey = 0x3694,
- GmTicketGetCaseStatus = 0x3693,
- GmTicketGetSystemStatus = 0x3692,
+ GetRemainingGameTime = 0x36ec,
+ GetTrophyList = 0x32f1,
+ GetUndeleteCharacterCooldownStatus = 0x36df,
+ GmTicketAcknowledgeSurvey = 0x3692,
+ GmTicketGetCaseStatus = 0x3691,
+ GmTicketGetSystemStatus = 0x3690,
GossipSelectOption = 0x3497,
GrantLevel = 0x34fb,
GuildAddBattlenetFriend = 0x308d,
@@ -330,7 +331,7 @@ namespace Framework.Constants
GuildReplaceGuildMaster = 0x3088,
GuildSetAchievementTracking = 0x306f,
GuildSetFocusedAchievement = 0x3070,
- GuildSetGuildMaster = 0x36c7,
+ GuildSetGuildMaster = 0x36c5,
GuildSetMemberNote = 0x3072,
GuildSetRankPermissions = 0x3067,
GuildShiftRank = 0x3066,
@@ -342,67 +343,67 @@ namespace Framework.Constants
InitiateRolePoll = 0x35da,
InitiateTrade = 0x3156,
Inspect = 0x352d,
- InspectPvp = 0x36a3,
+ InspectPvp = 0x36a1,
InstanceLockResponse = 0x3511,
ItemPurchaseRefund = 0x3534,
- ItemTextQuery = 0x330b,
- JoinPetBattleQueue = 0x31d3,
+ ItemTextQuery = 0x330f,
+ JoinPetBattleQueue = 0x31d4,
JoinRatedBattleground = 0x3176,
- KeepAlive = 0x3681,
- KeyboundOverride = 0x3217,
+ KeepAlive = 0x367f,
+ KeyboundOverride = 0x3219,
LearnPvpTalents = 0x3557,
LearnTalents = 0x3556,
- LeaveGroup = 0x364b,
- LeavePetBattleQueue = 0x31d4,
- LfgListApplyToGroup = 0x360e,
- LfgListCancelApplication = 0x360f,
- LfgListDeclineApplicant = 0x3610,
- LfgListGetStatus = 0x360c,
- LfgListInviteApplicant = 0x3611,
- LfgListInviteResponse = 0x3612,
- LfgListJoin = 0x3609,
- LfgListLeave = 0x360b,
- LfgListSearch = 0x360d,
- LfgListUpdateRequest = 0x360a,
- LfGuildAddRecruit = 0x361d,
- LfGuildBrowse = 0x361f,
+ LeaveGroup = 0x3649,
+ LeavePetBattleQueue = 0x31d5,
+ LfgListApplyToGroup = 0x360c,
+ LfgListCancelApplication = 0x360d,
+ LfgListDeclineApplicant = 0x360e,
+ LfgListGetStatus = 0x360a,
+ LfgListInviteApplicant = 0x360f,
+ LfgListInviteResponse = 0x3610,
+ LfgListJoin = 0x3345,
+ LfgListLeave = 0x3609,
+ LfgListSearch = 0x360b,
+ LfgListUpdateRequest = 0x3346,
+ LfGuildAddRecruit = 0x361b,
+ LfGuildBrowse = 0x361d,
LfGuildDeclineRecruit = 0x3078,
LfGuildGetApplications = 0x3079,
LfGuildGetGuildPost = 0x3076,
LfGuildGetRecruits = 0x3077,
LfGuildRemoveRecruit = 0x307a,
- LfGuildSetGuildPost = 0x361e,
+ LfGuildSetGuildPost = 0x361c,
ListInventory = 0x34a4,
- LiveRegionAccountRestore = 0x36bb,
- LiveRegionCharacterCopy = 0x36ba,
- LiveRegionGetAccountCharacterList = 0x36b9,
+ LiveRegionAccountRestore = 0x36b9,
+ LiveRegionCharacterCopy = 0x36b8,
+ LiveRegionGetAccountCharacterList = 0x36b7,
LoadingScreenNotify = 0x35f8,
- LoadSelectedTrophy = 0x32ee,
+ LoadSelectedTrophy = 0x32f2,
LogoutCancel = 0x34dc,
LogoutInstant = 0x34dd,
LogoutRequest = 0x34db,
LogDisconnect = 0x3769,
LogStreamingError = 0x376d,
- LootItem = 0x3203,
- LootMoney = 0x3202,
- LootRelease = 0x3207,
- LootRoll = 0x3208,
- LootUnit = 0x3201,
- LowLevelRaid1 = 0x36a1,
+ LootItem = 0x3205,
+ LootMoney = 0x3204,
+ LootRelease = 0x3209,
+ LootRoll = 0x320a,
+ LootUnit = 0x3203,
+ LowLevelRaid1 = 0x369f,
LowLevelRaid2 = 0x3518,
MailCreateTextItem = 0x353f,
- MailDelete = 0x3219,
+ MailDelete = 0x321b,
MailGetList = 0x353a,
MailMarkAsRead = 0x353e,
- MailReturnToSender = 0x3657,
+ MailReturnToSender = 0x3655,
MailTakeItem = 0x353c,
MailTakeMoney = 0x353b,
- MasterLootItem = 0x3204,
- MinimapPing = 0x364d,
+ MasterLootItem = 0x3206,
+ MinimapPing = 0x364b,
MissileTrajectoryCollision = 0x3189,
MountClearFanfare = 0x312d,
- MountSetFavorite = 0x3633,
- MountSpecialAnim = 0x326f,
+ MountSetFavorite = 0x3631,
+ MountSpecialAnim = 0x3273,
MoveApplyMovementForceAck = 0x3a12,
MoveChangeTransport = 0x3a2c,
MoveChangeVehicleSeats = 0x3a31,
@@ -464,39 +465,39 @@ namespace Framework.Constants
MoveTimeSkipped = 0x3a18,
MoveToggleCollisionCheat = 0x3a05,
MoveWaterWalkAck = 0x3a1a,
- NeutralPlayerSelectFaction = 0x31c9,
+ NeutralPlayerSelectFaction = 0x31ca,
NextCinematicCamera = 0x3548,
ObjectUpdateFailed = 0x317f,
ObjectUpdateRescued = 0x3180,
- OfferPetition = 0x36b1,
+ OfferPetition = 0x36af,
OpeningCinematic = 0x3547,
- OpenItem = 0x330c,
- OpenMissionNpc = 0x32d3,
- OpenShipmentNpc = 0x32d9,
- OpenTradeskillNpc = 0x32e4,
+ OpenItem = 0x3310,
+ OpenMissionNpc = 0x32d7,
+ OpenShipmentNpc = 0x32dd,
+ OpenTradeskillNpc = 0x32e8,
OptOutOfLoot = 0x34fa,
PartyInvite = 0x3602,
PartyInviteResponse = 0x3603,
- PartyUninvite = 0x3649,
+ PartyUninvite = 0x3647,
PetitionBuy = 0x34cd,
- PetitionRenameGuild = 0x36c8,
+ PetitionRenameGuild = 0x36c6,
PetitionShowList = 0x34cc,
PetitionShowSignatures = 0x34ce,
PetAbandon = 0x3490,
PetAction = 0x348e,
- PetBattleFinalNotify = 0x31d7,
- PetBattleInput = 0x3642,
- PetBattleQueueProposeMatchResult = 0x3218,
- PetBattleQuitNotify = 0x31d6,
- PetBattleReplaceFrontPet = 0x3643,
- PetBattleRequestPvp = 0x31d1,
- PetBattleRequestUpdate = 0x31d2,
- PetBattleRequestWild = 0x31cf,
- PetBattleScriptErrorNotify = 0x31d8,
- PetBattleWildLocationFail = 0x31d0,
+ PetBattleFinalNotify = 0x31d9,
+ PetBattleInput = 0x3640,
+ PetBattleQueueProposeMatchResult = 0x321a,
+ PetBattleQuitNotify = 0x31d8,
+ PetBattleReplaceFrontPet = 0x3641,
+ PetBattleRequestPvp = 0x31d2,
+ PetBattleRequestUpdate = 0x31d3,
+ PetBattleRequestWild = 0x31d0,
+ PetBattleScriptErrorNotify = 0x31da,
+ PetBattleWildLocationFail = 0x31d1,
PetCancelAura = 0x3491,
- PetCastSpell = 0x3289,
- PetRename = 0x3687,
+ PetCastSpell = 0x328d,
+ PetRename = 0x3685,
PetSetAction = 0x348d,
PetSpellAutocast = 0x3492,
PetStopAttack = 0x348f,
@@ -505,27 +506,27 @@ namespace Framework.Constants
ProtocolMismatch = 0x376e,
PushQuestToParty = 0x34a2,
PvpLogData = 0x317a,
- PvpPrestigeRankUp = 0x332f,
- QueryBattlePetName = 0x3264,
- QueryCorpseLocationFromClient = 0x3662,
- QueryCorpseTransport = 0x3663,
+ PvpPrestigeRankUp = 0x3332,
+ QueryBattlePetName = 0x3268,
+ QueryCorpseLocationFromClient = 0x3660,
+ QueryCorpseTransport = 0x3661,
QueryCountdownTimer = 0x31a4,
- QueryCreature = 0x325e,
- QueryGameObject = 0x325f,
- QueryGarrisonCreatureName = 0x3265,
- QueryGuildInfo = 0x368f,
+ QueryCreature = 0x3262,
+ QueryGameObject = 0x3263,
+ QueryGarrisonCreatureName = 0x3269,
+ QueryGuildInfo = 0x368d,
QueryInspectAchievements = 0x3506,
QueryNextMailTime = 0x353d,
- QueryNpcText = 0x3260,
- QueryPageText = 0x3262,
- QueryPetition = 0x3266,
- QueryPetName = 0x3263,
- QueryPlayerName = 0x368d,
+ QueryNpcText = 0x3264,
+ QueryPageText = 0x3266,
+ QueryPetition = 0x326a,
+ QueryPetName = 0x3267,
+ QueryPlayerName = 0x368b,
QueryQuestCompletionNpcs = 0x3173,
- QueryQuestInfo = 0x3261,
- QueryQuestRewards = 0x3333,
- QueryRealmName = 0x368e,
- QueryScenarioPoi = 0x3658,
+ QueryQuestInfo = 0x3265,
+ QueryQuestRewards = 0x3336,
+ QueryRealmName = 0x368c,
+ QueryScenarioPoi = 0x3656,
QueryTime = 0x34da,
QueryVoidStorage = 0x319d,
QuestConfirmAccept = 0x34a1,
@@ -538,126 +539,126 @@ namespace Framework.Constants
QuestGiverStatusMultipleQuery = 0x34a0,
QuestGiverStatusQuery = 0x349f,
QuestLogRemoveQuest = 0x3532,
- QuestPoiQuery = 0x36b2,
+ QuestPoiQuery = 0x36b0,
QuestPushResult = 0x34a3,
QueuedMessagesEnd = 0x376c,
- QuickJoinAutoAcceptRequests = 0x3707,
- QuickJoinRequestInvite = 0x3706,
- QuickJoinRespondToInvite = 0x3705,
- QuickJoinSignalToastDisplayed = 0x3704,
- RaidOrBattlegroundEngineSurvey = 0x36e6,
- RandomRoll = 0x3656,
- ReadyCheckResponse = 0x3636,
- ReadItem = 0x330d,
+ QuickJoinAutoAcceptRequests = 0x3705,
+ QuickJoinRequestInvite = 0x3704,
+ QuickJoinRespondToInvite = 0x3703,
+ QuickJoinSignalToastDisplayed = 0x3702,
+ RaidOrBattlegroundEngineSurvey = 0x36e4,
+ RandomRoll = 0x3654,
+ ReadyCheckResponse = 0x3634,
+ ReadItem = 0x3311,
ReclaimCorpse = 0x34df,
- RecruitAFriend = 0x36ce,
- RedeemWowTokenConfirm = 0x36f0,
- RedeemWowTokenStart = 0x36ef,
- RemoveNewItem = 0x3336,
+ RecruitAFriend = 0x36cc,
+ RedeemWowTokenConfirm = 0x36ee,
+ RedeemWowTokenStart = 0x36ed,
+ RemoveNewItem = 0x3339,
ReorderCharacters = 0x35e9,
RepairItem = 0x34f0,
- ReplaceTrophy = 0x32ef,
+ ReplaceTrophy = 0x32f3,
RepopRequest = 0x352a,
- ReportClientVariables = 0x3701,
- ReportEnabledAddons = 0x3700,
- ReportKeybindingExecutionCounts = 0x3702,
+ ReportClientVariables = 0x36ff,
+ ReportEnabledAddons = 0x36fe,
+ ReportKeybindingExecutionCounts = 0x3700,
ReportPvpPlayerAfk = 0x34f8,
- RequestAccountData = 0x3697,
- RequestAreaPoiUpdate = 0x3335,
+ RequestAccountData = 0x3695,
+ RequestAreaPoiUpdate = 0x3338,
RequestBattlefieldStatus = 0x35dc,
RequestCategoryCooldowns = 0x317c,
RequestCemeteryList = 0x3174,
- RequestConquestFormulaConstants = 0x32a0,
- RequestConsumptionConversionInfo = 0x36fa,
+ RequestConquestFormulaConstants = 0x32a4,
+ RequestConsumptionConversionInfo = 0x36f8,
RequestCrowdControlSpell = 0x352e,
- RequestForcedReactions = 0x31fc,
+ RequestForcedReactions = 0x31fe,
RequestGuildPartyState = 0x31a3,
RequestGuildRewardsList = 0x31a2,
RequestHonorStats = 0x3179,
- RequestLfgListBlacklist = 0x3291,
+ RequestLfgListBlacklist = 0x3295,
RequestPartyJoinUpdates = 0x35f7,
- RequestPartyMemberStats = 0x3655,
+ RequestPartyMemberStats = 0x3653,
RequestPetInfo = 0x3493,
- RequestPlayedTime = 0x3269,
+ RequestPlayedTime = 0x326d,
RequestPvpBrawlInfo = 0x3191,
RequestPvpRewards = 0x3190,
- RequestRaidInfo = 0x36c9,
+ RequestRaidInfo = 0x36c7,
RequestRatedBattlefieldInfo = 0x35e3,
RequestResearchHistory = 0x3167,
RequestStabledPets = 0x3494,
- RequestVehicleExit = 0x3229,
- RequestVehicleNextSeat = 0x322b,
- RequestVehiclePrevSeat = 0x322a,
- RequestVehicleSwitchSeat = 0x322c,
- RequestWorldQuestUpdate = 0x3334,
- RequestWowTokenMarketPrice = 0x36e8,
- ResetChallengeMode = 0x31f9,
- ResetChallengeModeCheat = 0x31fa,
- ResetInstances = 0x366a,
- ResurrectResponse = 0x3686,
- RevertMonumentAppearance = 0x32f1,
- RideVehicleInteract = 0x322d,
+ RequestVehicleExit = 0x322b,
+ RequestVehicleNextSeat = 0x322d,
+ RequestVehiclePrevSeat = 0x322c,
+ RequestVehicleSwitchSeat = 0x322e,
+ RequestWorldQuestUpdate = 0x3337,
+ RequestWowTokenMarketPrice = 0x36e6,
+ ResetChallengeMode = 0x31fb,
+ ResetChallengeModeCheat = 0x31fc,
+ ResetInstances = 0x3668,
+ ResurrectResponse = 0x3684,
+ RevertMonumentAppearance = 0x32f5,
+ RideVehicleInteract = 0x322f,
SaveCufProfiles = 0x318a,
SaveEquipmentSet = 0x350f,
- SaveGuildEmblem = 0x3295,
- ScenePlaybackCanceled = 0x3214,
- ScenePlaybackComplete = 0x3213,
- SceneTriggerEvent = 0x3215,
+ SaveGuildEmblem = 0x3299,
+ ScenePlaybackCanceled = 0x3216,
+ ScenePlaybackComplete = 0x3215,
+ SceneTriggerEvent = 0x3217,
SelfRes = 0x3535,
SellItem = 0x34a5,
- SellWowTokenConfirm = 0x36ea,
- SellWowTokenStart = 0x36e9,
- SendContactList = 0x36d0,
+ SellWowTokenConfirm = 0x36e8,
+ SellWowTokenStart = 0x36e7,
+ SendContactList = 0x36ce,
SendMail = 0x35fa,
- SendSorRequestViaAddress = 0x3622,
+ SendSorRequestViaAddress = 0x3620,
SendTextEmote = 0x348a,
- SetAchievementsHidden = 0x321a,
+ SetAchievementsHidden = 0x321c,
SetActionBarToggles = 0x3536,
- SetActionButton = 0x3637,
+ SetActionButton = 0x3635,
SetActiveMover = 0x3a37,
- SetAdvancedCombatLogging = 0x32a1,
- SetAssistantLeader = 0x3651,
- SetBackpackAutosortDisabled = 0x3310,
- SetBankAutosortDisabled = 0x3311,
- SetBankBagSlotFlag = 0x330f,
- SetContactNotes = 0x36d3,
+ SetAdvancedCombatLogging = 0x32a5,
+ SetAssistantLeader = 0x364f,
+ SetBackpackAutosortDisabled = 0x3314,
+ SetBankAutosortDisabled = 0x3315,
+ SetBankBagSlotFlag = 0x3313,
+ SetContactNotes = 0x36d1,
SetCurrencyFlags = 0x3169,
- SetDifficultyId = 0x3216,
- SetDungeonDifficulty = 0x3684,
- SetEveryoneIsAssistant = 0x3619,
+ SetDifficultyId = 0x3218,
+ SetDungeonDifficulty = 0x3682,
+ SetEveryoneIsAssistant = 0x3617,
SetFactionAtWar = 0x34e2,
SetFactionInactive = 0x34e4,
SetFactionNotAtWar = 0x34e3,
- SetInsertItemsLeftToRight = 0x3313,
- SetLfgBonusFactionId = 0x3290,
- SetLootMethod = 0x364a,
+ SetInsertItemsLeftToRight = 0x3317,
+ SetLfgBonusFactionId = 0x3294,
+ SetLootMethod = 0x3648,
SetLootSpecialization = 0x3543,
- SetPartyAssignment = 0x3653,
- SetPartyLeader = 0x364c,
+ SetPartyAssignment = 0x3651,
+ SetPartyLeader = 0x364a,
SetPetSlot = 0x3168,
- SetPlayerDeclinedNames = 0x368c,
+ SetPlayerDeclinedNames = 0x368a,
SetPreferredCemetery = 0x3175,
- SetPvp = 0x3299,
- SetRaidDifficulty = 0x36dd,
+ SetPvp = 0x329d,
+ SetRaidDifficulty = 0x36db,
SetRole = 0x35d9,
- SetSavedInstanceExtend = 0x368a,
+ SetSavedInstanceExtend = 0x3688,
SetSelection = 0x352c,
SetSheathed = 0x348b,
- SetSortBagsRightToLeft = 0x3312,
+ SetSortBagsRightToLeft = 0x3316,
SetTaxiBenchmarkMode = 0x34f7,
- SetTitle = 0x326d,
+ SetTitle = 0x3271,
SetTradeCurrency = 0x3160,
SetTradeGold = 0x315f,
SetTradeItem = 0x315d,
- SetUsingPartyGarrison = 0x32d5,
+ SetUsingPartyGarrison = 0x32d9,
SetWatchedFaction = 0x34e5,
- ShowTradeSkill = 0x36c1,
+ ShowTradeSkill = 0x36bf,
SignPetition = 0x3537,
- SilencePartyTalker = 0x3654,
+ SilencePartyTalker = 0x3652,
SocketGems = 0x34ef,
- SortBags = 0x3314,
- SortBankBags = 0x3315,
- SortReagentBankBags = 0x3316,
+ SortBags = 0x3318,
+ SortBankBags = 0x3319,
+ SortReagentBankBags = 0x331a,
SpellClick = 0x3498,
SpiritHealerActivate = 0x34b2,
SplitItem = 0x399e,
@@ -665,18 +666,18 @@ namespace Framework.Constants
StartChallengeMode = 0x354e,
StartSpectatorWarGame = 0x35df,
StartWarGame = 0x35de,
- SummonResponse = 0x366c,
- SupportTicketSubmitBug = 0x3647,
- SupportTicketSubmitComplaint = 0x3646,
- SupportTicketSubmitSuggestion = 0x3648,
+ SummonResponse = 0x366a,
+ SupportTicketSubmitBug = 0x3645,
+ SupportTicketSubmitComplaint = 0x3644,
+ SupportTicketSubmitSuggestion = 0x3646,
SurrenderArena = 0x3172,
SuspendCommsAck = 0x3764,
SuspendTokenResponse = 0x376a,
SwapInvItem = 0x399d,
SwapItem = 0x399c,
- SwapSubGroups = 0x364f,
+ SwapSubGroups = 0x364d,
SwapVoidItem = 0x319f,
- TabardVendorActivate = 0x3296,
+ TabardVendorActivate = 0x329a,
TalkToGossip = 0x3495,
TaxiNodeStatusQuery = 0x34ab,
TaxiQueryAvailableNodes = 0x34ad,
@@ -685,46 +686,46 @@ namespace Framework.Constants
TimeSyncResponse = 0x3a38,
TimeSyncResponseDropped = 0x3a3a,
TimeSyncResponseFailed = 0x3a39,
- ToggleDifficulty = 0x3659,
- TogglePvp = 0x3298,
+ ToggleDifficulty = 0x3657,
+ TogglePvp = 0x329c,
TotemDestroyed = 0x34fe,
- TradeSkillSetFavorite = 0x3332,
+ TradeSkillSetFavorite = 0x3335,
TrainerBuySpell = 0x34b1,
TrainerList = 0x34b0,
TransmogrifyItems = 0x3192,
TurnInPetition = 0x3539,
- Tutorial = 0x36de,
+ Tutorial = 0x36dc,
TwitterCheckStatus = 0x312a,
TwitterConnect = 0x3127,
TwitterDisconnect = 0x312b,
- TwitterPost = 0x3318,
- UiTimeRequest = 0x369c,
+ TwitterPost = 0x331c,
+ UiTimeRequest = 0x369a,
UnacceptTrade = 0x315b,
- UndeleteCharacter = 0x36e0,
+ UndeleteCharacter = 0x36de,
UnlearnSkill = 0x34e9,
UnlearnSpecialization = 0x31a0,
UnlockVoidStorage = 0x319c,
- UpdateAccountData = 0x3698,
- UpdateAreaTriggerVisual = 0x328c,
- UpdateClientSettings = 0x3666,
+ UpdateAccountData = 0x3696,
+ UpdateAreaTriggerVisual = 0x3290,
+ UpdateClientSettings = 0x3664,
UpdateMissileTrajectory = 0x3a3e,
- UpdateRaidTarget = 0x3652,
- UpdateSpellVisual = 0x328b,
- UpdateVasPurchaseStates = 0x36f6,
- UpdateWowTokenAuctionableList = 0x36f1,
- UpdateWowTokenCount = 0x36e7,
- UpgradeGarrison = 0x32a9,
- UpgradeItem = 0x321b,
+ UpdateRaidTarget = 0x3650,
+ UpdateSpellVisual = 0x328f,
+ UpdateVasPurchaseStates = 0x36f4,
+ UpdateWowTokenAuctionableList = 0x36ef,
+ UpdateWowTokenCount = 0x36e5,
+ UpgradeGarrison = 0x32ad,
+ UpgradeItem = 0x321d,
UsedFollow = 0x3185,
- UseCritterItem = 0x3234,
+ UseCritterItem = 0x3235,
UseEquipmentSet = 0x3995,
- UseItem = 0x3286,
- UseToy = 0x3288,
+ UseItem = 0x328a,
+ UseToy = 0x328c,
ViolenceLevel = 0x3183,
VoidStorageTransfer = 0x319e,
WardenData = 0x35ec,
- Who = 0x3683,
- WhoIs = 0x3682,
+ Who = 0x3681,
+ WhoIs = 0x3680,
WorldPortResponse = 0x35f9,
WrapItem = 0x3994,
@@ -735,63 +736,63 @@ namespace Framework.Constants
public enum ServerOpcodes : uint
{
AbortNewWorld = 0x25ad,
- AccountCriteriaUpdate = 0x2653,
- AccountDataTimes = 0x274a,
+ AccountCriteriaUpdate = 0x2652,
+ AccountDataTimes = 0x2749,
AccountMountUpdate = 0x25c3,
AccountToysUpdate = 0x25c4,
- AchievementDeleted = 0x271f,
- AchievementEarned = 0x2661,
- ActivateTaxiReply = 0x26a7,
- ActiveGlyphs = 0x2c52,
- AddBattlenetFriendResponse = 0x265b,
+ AchievementDeleted = 0x271e,
+ AchievementEarned = 0x2660,
+ ActivateTaxiReply = 0x26a6,
+ ActiveGlyphs = 0x2c53,
+ AddBattlenetFriendResponse = 0x265a,
AddItemPassive = 0x25bf,
- AddLossOfControl = 0x2697,
- AddRunePower = 0x26e3,
+ AddLossOfControl = 0x2696,
+ AddRunePower = 0x26e2,
AdjustSplineDuration = 0x25e8,
AeLootTargets = 0x262c,
AeLootTargetAck = 0x262d,
- AiReaction = 0x26e0,
+ AiReaction = 0x26df,
AllAccountCriteria = 0x2570,
AllAchievementData = 0x256f,
AllGuildAchievements = 0x29b8,
ArchaeologySurveryCast = 0x2586,
AreaPoiUpdate = 0x2848,
- AreaSpiritHealerTime = 0x2783,
- AreaTriggerDenied = 0x269e,
- AreaTriggerNoCorpse = 0x2756,
- AreaTriggerRePath = 0x2640,
- AreaTriggerReShape = 0x263d,
- ArenaCrowdControlSpells = 0x264f,
- ArenaError = 0x2712,
- ArenaPrepOpponentSpecializations = 0x2666,
- ArtifactForgeOpened = 0x27e3,
- ArtifactKnowledge = 0x27eb,
- ArtifactRespecConfirm = 0x27e6,
- ArtifactTraitsRefunded = 0x27e7,
- ArtifactXpGain = 0x282e,
- AttackerStateUpdate = 0x27d0,
- AttackStart = 0x266e,
- AttackStop = 0x266f,
- AttackSwingError = 0x2734,
- AttackSwingLandedLog = 0x2735,
- AuctionClosedNotification = 0x2729,
- AuctionCommandResult = 0x2726,
- AuctionHelloResponse = 0x2724,
- AuctionListBidderItemsResult = 0x272d,
- AuctionListItemsResult = 0x272b,
- AuctionListOwnerItemsResult = 0x272c,
- AuctionListPendingSalesResult = 0x272e,
- AuctionOutbidNotification = 0x2728,
- AuctionOwnerBidNotification = 0x272a,
- AuctionReplicateResponse = 0x2725,
- AuctionWonNotification = 0x2727,
+ AreaSpiritHealerTime = 0x2782,
+ AreaTriggerDenied = 0x269d,
+ AreaTriggerNoCorpse = 0x2755,
+ AreaTriggerRePath = 0x263f,
+ AreaTriggerReShape = 0x263c,
+ ArenaCrowdControlSpells = 0x264e,
+ ArenaError = 0x2711,
+ ArenaPrepOpponentSpecializations = 0x2665,
+ ArtifactForgeOpened = 0x27e2,
+ ArtifactKnowledge = 0x27ea,
+ ArtifactRespecConfirm = 0x27e5,
+ ArtifactTraitsRefunded = 0x27e6,
+ ArtifactXpGain = 0x282d,
+ AttackerStateUpdate = 0x27cf,
+ AttackStart = 0x266d,
+ AttackStop = 0x266e,
+ AttackSwingError = 0x2733,
+ AttackSwingLandedLog = 0x2734,
+ AuctionClosedNotification = 0x2728,
+ AuctionCommandResult = 0x2725,
+ AuctionHelloResponse = 0x2723,
+ AuctionListBidderItemsResult = 0x272c,
+ AuctionListItemsResult = 0x272a,
+ AuctionListOwnerItemsResult = 0x272b,
+ AuctionListPendingSalesResult = 0x272d,
+ AuctionOutbidNotification = 0x2727,
+ AuctionOwnerBidNotification = 0x2729,
+ AuctionReplicateResponse = 0x2724,
+ AuctionWonNotification = 0x2726,
AuraPointsDepleted = 0x2c23,
AuraUpdate = 0x2c22,
AuthChallenge = 0x3048,
AuthResponse = 0x256c,
AvailableHotfixes = 0x25a1,
- BanReason = 0x26b3,
- BarberShopResult = 0x26e9,
+ BanReason = 0x26b2,
+ BarberShopResult = 0x26e8,
BattlefieldList = 0x2594,
BattlefieldPortDenied = 0x259a,
BattlefieldStatusActive = 0x2590,
@@ -801,43 +802,44 @@ namespace Framework.Constants
BattlefieldStatusQueued = 0x2591,
BattlefieldStatusWaitForGroups = 0x25a5,
BattlegroundInfoThrottled = 0x259b,
- BattlegroundInit = 0x27a1,
+ BattlegroundInit = 0x27a0,
BattlegroundPlayerJoined = 0x2598,
BattlegroundPlayerLeft = 0x2599,
BattlegroundPlayerPositions = 0x2595,
- BattlegroundPoints = 0x27a0,
- BattlenetChallengeAbort = 0x27cf,
- BattlenetChallengeStart = 0x27ce,
+ BattlegroundPoints = 0x279f,
+ BattlenetChallengeAbort = 0x27ce,
+ BattlenetChallengeStart = 0x27cd,
BattlenetNotification = 0x2843,
BattlenetRealmListTicket = 0x2845,
BattlenetResponse = 0x2842,
BattlenetSetSessionState = 0x2844,
- BattlePayAckFailed = 0x27c7,
- BattlePayBattlePetDelivered = 0x27bc,
- BattlePayConfirmPurchase = 0x27c6,
- BattlePayDeliveryEnded = 0x27ba,
- BattlePayDeliveryStarted = 0x27b9,
- BattlePayDistributionUpdate = 0x27b8,
- BattlePayGetDistributionListResponse = 0x27b6,
- BattlePayGetProductListResponse = 0x27b4,
- BattlePayGetPurchaseListResponse = 0x27b5,
- BattlePayMountDelivered = 0x27bb,
- BattlePayPurchaseUpdate = 0x27c5,
- BattlePayStartDistributionAssignToTargetResponse = 0x27c3,
- BattlePayStartPurchaseResponse = 0x27c2,
+ BattlePayAckFailed = 0x27c6,
+ BattlePayBattlePetDelivered = 0x27bb,
+ BattlePayConfirmPurchase = 0x27c5,
+ BattlePayDeliveryEnded = 0x27b9,
+ BattlePayDeliveryStarted = 0x27b8,
+ BattlePayDistributionUpdate = 0x27b7,
+ BattlePayGetDistributionListResponse = 0x27b5,
+ BattlePayGetProductListResponse = 0x27b3,
+ BattlePayGetPurchaseListResponse = 0x27b4,
+ BattlePayMountDelivered = 0x27ba,
+ BattlePayPurchaseUpdate = 0x27c4,
+ BattlePayStartDistributionAssignToTargetResponse = 0x27c2,
+ BattlePayStartPurchaseResponse = 0x27c1,
+ BattlePaySubscriptionChanged = 0x2864,
BattlePayVasBnetTransferValidationResult = 0x285b,
- BattlePayVasBoostConsumed = 0x27b7,
- BattlePayVasCharacterList = 0x2831,
+ BattlePayVasBoostConsumed = 0x27b6,
+ BattlePayVasCharacterList = 0x2830,
BattlePayVasCharacterQueueStatus = 0x2859,
- BattlePayVasPurchaseComplete = 0x2834,
- BattlePayVasPurchaseList = 0x2835,
- BattlePayVasPurchaseStarted = 0x2833,
- BattlePayVasRealmList = 0x2832,
+ BattlePayVasPurchaseComplete = 0x2833,
+ BattlePayVasPurchaseList = 0x2834,
+ BattlePayVasPurchaseStarted = 0x2832,
+ BattlePayVasRealmList = 0x2831,
BattlePayVasTransferQueueStatus = 0x2858,
BattlePetsHealed = 0x2609,
- BattlePetCageDateError = 0x26a1,
+ BattlePetCageDateError = 0x26a0,
BattlePetDeleted = 0x2606,
- BattlePetError = 0x2656,
+ BattlePetError = 0x2655,
BattlePetJournal = 0x2605,
BattlePetJournalLockAcquired = 0x2603,
BattlePetJournalLockDenied = 0x2604,
@@ -847,49 +849,49 @@ namespace Framework.Constants
BattlePetRevoked = 0x2607,
BattlePetTrapLevel = 0x2600,
BattlePetUpdates = 0x25ff,
- BinderConfirm = 0x273a,
+ BinderConfirm = 0x2739,
BindPointUpdate = 0x257c,
- BlackMarketBidOnItemResult = 0x2645,
- BlackMarketOpenResult = 0x2643,
- BlackMarketOutbid = 0x2646,
- BlackMarketRequestItemsResult = 0x2644,
- BlackMarketWon = 0x2647,
- BonusRollEmpty = 0x2663,
- BossKillCredit = 0x27c1,
- BreakTarget = 0x266d,
- BuyFailed = 0x26f2,
- BuySucceeded = 0x26f1,
- CacheInfo = 0x2744,
- CacheVersion = 0x2743,
- CalendarClearPendingAction = 0x26c7,
- CalendarCommandResult = 0x26c8,
- CalendarEventInitialInvites = 0x26b7,
- CalendarEventInvite = 0x26b8,
- CalendarEventInviteAlert = 0x26b9,
- CalendarEventInviteModeratorStatus = 0x26bc,
- CalendarEventInviteNotes = 0x26c1,
- CalendarEventInviteNotesAlert = 0x26c2,
- CalendarEventInviteRemoved = 0x26bd,
- CalendarEventInviteRemovedAlert = 0x26be,
- CalendarEventInviteStatus = 0x26ba,
- CalendarEventInviteStatusAlert = 0x26bb,
- CalendarEventRemovedAlert = 0x26bf,
- CalendarEventUpdatedAlert = 0x26c0,
- CalendarRaidLockoutAdded = 0x26c3,
- CalendarRaidLockoutRemoved = 0x26c4,
- CalendarRaidLockoutUpdated = 0x26c5,
- CalendarSendCalendar = 0x26b5,
- CalendarSendEvent = 0x26b6,
- CalendarSendNumPending = 0x26c6,
- CameraEffect = 0x2768,
- CancelAutoRepeat = 0x2713,
- CancelCombat = 0x2732,
- CancelOrphanSpellVisual = 0x2c45,
- CancelScene = 0x2655,
- CancelSpellVisual = 0x2c43,
- CancelSpellVisualKit = 0x2c47,
- CanDuelResult = 0x2677,
- CastFailed = 0x2c55,
+ BlackMarketBidOnItemResult = 0x2644,
+ BlackMarketOpenResult = 0x2642,
+ BlackMarketOutbid = 0x2645,
+ BlackMarketRequestItemsResult = 0x2643,
+ BlackMarketWon = 0x2646,
+ BonusRollEmpty = 0x2662,
+ BossKillCredit = 0x27c0,
+ BreakTarget = 0x266c,
+ BuyFailed = 0x26f1,
+ BuySucceeded = 0x26f0,
+ CacheInfo = 0x2743,
+ CacheVersion = 0x2742,
+ CalendarClearPendingAction = 0x26c6,
+ CalendarCommandResult = 0x26c7,
+ CalendarEventInitialInvites = 0x26b6,
+ CalendarEventInvite = 0x26b7,
+ CalendarEventInviteAlert = 0x26b8,
+ CalendarEventInviteModeratorStatus = 0x26bb,
+ CalendarEventInviteNotes = 0x26c0,
+ CalendarEventInviteNotesAlert = 0x26c1,
+ CalendarEventInviteRemoved = 0x26bc,
+ CalendarEventInviteRemovedAlert = 0x26bd,
+ CalendarEventInviteStatus = 0x26b9,
+ CalendarEventInviteStatusAlert = 0x26ba,
+ CalendarEventRemovedAlert = 0x26be,
+ CalendarEventUpdatedAlert = 0x26bf,
+ CalendarRaidLockoutAdded = 0x26c2,
+ CalendarRaidLockoutRemoved = 0x26c3,
+ CalendarRaidLockoutUpdated = 0x26c4,
+ CalendarSendCalendar = 0x26b4,
+ CalendarSendEvent = 0x26b5,
+ CalendarSendNumPending = 0x26c5,
+ CameraEffect = 0x2767,
+ CancelAutoRepeat = 0x2712,
+ CancelCombat = 0x2731,
+ CancelOrphanSpellVisual = 0x2c46,
+ CancelScene = 0x2654,
+ CancelSpellVisual = 0x2c44,
+ CancelSpellVisualKit = 0x2c48,
+ CanDuelResult = 0x2676,
+ CastFailed = 0x2c56,
CategoryCooldown = 0x2c16,
ChallengeModeAllMapStats = 0x2622,
ChallengeModeComplete = 0x2620,
@@ -900,24 +902,25 @@ namespace Framework.Constants
ChallengeModeRewards = 0x2621,
ChallengeModeStart = 0x261d,
ChallengeModeUpdateDeathCount = 0x261e,
- ChangePlayerDifficultyResult = 0x2736,
+ ChangePlayerDifficultyResult = 0x2735,
ChannelList = 0x2bc3,
ChannelNotify = 0x2bc0,
ChannelNotifyJoined = 0x2bc1,
ChannelNotifyLeft = 0x2bc2,
- CharacterClassTrialCreate = 0x2805,
+ CharacterClassTrialCreate = 0x2804,
+ CharacterInventoryOverflowWarning = 0x2863,
CharacterItemFixup = 0x2854,
- CharacterLoginFailed = 0x2745,
- CharacterObjectTestResponse = 0x27cd,
- CharacterRenameResult = 0x27a6,
- CharacterUpgradeComplete = 0x2804,
- CharacterUpgradeQueued = 0x2803,
+ CharacterLoginFailed = 0x2744,
+ CharacterObjectTestResponse = 0x27cc,
+ CharacterRenameResult = 0x27a5,
+ CharacterUpgradeComplete = 0x2803,
+ CharacterUpgradeQueued = 0x2802,
CharacterUpgradeSpellTierSet = 0x25f4,
- CharacterUpgradeStarted = 0x2802,
- CharacterUpgradeUnrevokeResult = 0x2806,
- CharCustomize = 0x271a,
- CharCustomizeFailed = 0x2719,
- CharFactionChangeResult = 0x27ef,
+ CharacterUpgradeStarted = 0x2801,
+ CharacterUpgradeUnrevokeResult = 0x2805,
+ CharCustomize = 0x2719,
+ CharCustomizeFailed = 0x2718,
+ CharFactionChangeResult = 0x27ee,
Chat = 0x2bad,
ChatAutoResponded = 0x2bb8,
ChatDown = 0x2bbd,
@@ -933,97 +936,97 @@ namespace Framework.Constants
CheckWargameEntry = 0x259e,
ClearAllSpellCharges = 0x2c27,
ClearBossEmotes = 0x25cd,
- ClearCooldown = 0x26e5,
+ ClearCooldown = 0x26e4,
ClearCooldowns = 0x2c26,
- ClearLossOfControl = 0x2699,
+ ClearLossOfControl = 0x2698,
ClearSpellCharges = 0x2c28,
- ClearTarget = 0x26dc,
+ ClearTarget = 0x26db,
CoinRemoved = 0x262b,
- CombatEventFailed = 0x2670,
- CommentatorMapInfo = 0x2747,
- CommentatorPlayerInfo = 0x2748,
- CommentatorStateChanged = 0x2746,
- ComplaintResult = 0x26d4,
- CompleteShipmentResponse = 0x27df,
+ CombatEventFailed = 0x266f,
+ CommentatorMapInfo = 0x2746,
+ CommentatorPlayerInfo = 0x2747,
+ CommentatorStateChanged = 0x2745,
+ ComplaintResult = 0x26d3,
+ CompleteShipmentResponse = 0x27de,
ConnectTo = 0x304d,
- ConquestFormulaConstants = 0x27c8,
- ConsoleWrite = 0x2652,
+ ConquestFormulaConstants = 0x27c7,
+ ConsoleWrite = 0x2651,
ConsumptionConversionInfoResponse = 0x2849,
ConsumptionConversionResult = 0x284a,
- ContactList = 0x27cb,
- ControlUpdate = 0x2665,
- CooldownCheat = 0x277c,
- CooldownEvent = 0x26e4,
- CorpseLocation = 0x266c,
- CorpseReclaimDelay = 0x278f,
- CorpseTransportQuery = 0x2752,
- CreateChar = 0x273f,
- CreateShipmentResponse = 0x27de,
- CriteriaDeleted = 0x271e,
- CriteriaUpdate = 0x2718,
- CrossedInebriationThreshold = 0x26ed,
+ ContactList = 0x27ca,
+ ControlUpdate = 0x2664,
+ CooldownCheat = 0x277b,
+ CooldownEvent = 0x26e3,
+ CorpseLocation = 0x266b,
+ CorpseReclaimDelay = 0x278e,
+ CorpseTransportQuery = 0x2751,
+ CreateChar = 0x273e,
+ CreateShipmentResponse = 0x27dd,
+ CriteriaDeleted = 0x271d,
+ CriteriaUpdate = 0x2717,
+ CrossedInebriationThreshold = 0x26ec,
CustomLoadScreen = 0x25e3,
DailyQuestsReset = 0x2a80,
- DamageCalcLog = 0x280d,
+ DamageCalcLog = 0x280c,
DbReply = 0x25a0,
- DeathReleaseLoc = 0x2706,
+ DeathReleaseLoc = 0x2705,
DefenseMessage = 0x2bb6,
- DeleteChar = 0x2740,
- DestroyArenaUnit = 0x2785,
- DestructibleBuildingDamage = 0x2733,
+ DeleteChar = 0x273f,
+ DestroyArenaUnit = 0x2784,
+ DestructibleBuildingDamage = 0x2732,
DifferentInstanceFromParty = 0x258a,
DisenchantCredit = 0x25bc,
- Dismount = 0x26db,
+ Dismount = 0x26da,
DismountResult = 0x257b,
DispelFailed = 0x2c30,
DisplayGameError = 0x25b5,
- DisplayPlayerChoice = 0x26a2,
- DisplayPromotion = 0x2669,
+ DisplayPlayerChoice = 0x26a1,
+ DisplayPromotion = 0x2668,
DisplayQuestPopup = 0x2a9d,
- DisplayToast = 0x2639,
+ DisplayToast = 0x2638,
DontAutoPushSpellsToActionBar = 0x25f6,
DropNewConnection = 0x304c,
- DuelComplete = 0x2675,
- DuelCountdown = 0x2674,
- DuelInBounds = 0x2673,
- DuelOutOfBounds = 0x2672,
- DuelRequested = 0x2671,
- DuelWinner = 0x2676,
- DurabilityDamageDeath = 0x278b,
- Emote = 0x280e,
- EnableBarberShop = 0x26e8,
+ DuelComplete = 0x2674,
+ DuelCountdown = 0x2673,
+ DuelInBounds = 0x2672,
+ DuelOutOfBounds = 0x2671,
+ DuelRequested = 0x2670,
+ DuelWinner = 0x2675,
+ DurabilityDamageDeath = 0x278a,
+ Emote = 0x280d,
+ EnableBarberShop = 0x26e7,
EnableEncryption = 0x3049,
- EnchantmentLog = 0x2753,
- EncounterEnd = 0x27c0,
- EncounterStart = 0x27bf,
+ EnchantmentLog = 0x2752,
+ EncounterEnd = 0x27bf,
+ EncounterStart = 0x27be,
EnumCharactersResult = 0x2582,
EnvironmentalDamageLog = 0x2c21,
- EquipmentSetId = 0x26dd,
+ EquipmentSetId = 0x26dc,
ExpectedSpamRecords = 0x2bb1,
- ExplorationExperience = 0x27a3,
- FactionBonusInfo = 0x2767,
+ ExplorationExperience = 0x27a2,
+ FactionBonusInfo = 0x2766,
FailedPlayerCondition = 0x25e2,
FeatureSystemStatus = 0x25d1,
FeatureSystemStatusGlueScreen = 0x25d2,
- FeignDeathResisted = 0x2788,
- FishEscaped = 0x26fa,
- FishNotHooked = 0x26f9,
+ FeignDeathResisted = 0x2787,
+ FishEscaped = 0x26f9,
+ FishNotHooked = 0x26f8,
FlightSplineSync = 0x2df7,
- ForcedDeathUpdate = 0x2707,
- ForceAnim = 0x2795,
- ForceObjectRelink = 0x2668,
- FriendStatus = 0x27cc,
+ ForcedDeathUpdate = 0x2706,
+ ForceAnim = 0x2794,
+ ForceObjectRelink = 0x2667,
+ FriendStatus = 0x27cb,
GameObjectActivateAnimKit = 0x25d6,
GameObjectCustomAnim = 0x25d7,
GameObjectDespawn = 0x25d8,
- GameObjectPlaySpellVisual = 0x2c4a,
- GameObjectPlaySpellVisualKit = 0x2c49,
- GameObjectResetState = 0x275e,
+ GameObjectPlaySpellVisual = 0x2c4b,
+ GameObjectPlaySpellVisualKit = 0x2c4a,
+ GameObjectResetState = 0x275d,
GameObjectSetState = 0x2841,
- GameObjectUiAction = 0x275b,
- GameSpeedSet = 0x26ab,
- GameTimeSet = 0x274c,
- GameTimeUpdate = 0x274b,
+ GameObjectUiAction = 0x275a,
+ GameSpeedSet = 0x26aa,
+ GameTimeSet = 0x274b,
+ GameTimeUpdate = 0x274a,
GarrisonAddFollowerResult = 0x2902,
GarrisonAddMissionResult = 0x2906,
GarrisonAssignFollowerToBuildingResult = 0x2918,
@@ -1041,7 +1044,7 @@ namespace Framework.Constants
GarrisonFollowerChangedStatus = 0x2915,
GarrisonFollowerChangedXp = 0x2912,
GarrisonIsUpgradeableResult = 0x2929,
- GarrisonLandingPageShipmentInfo = 0x27e1,
+ GarrisonLandingPageShipmentInfo = 0x27e0,
GarrisonLearnBlueprintResult = 0x28f7,
GarrisonLearnSpecializationResult = 0x28f5,
GarrisonListFollowersCheatResult = 0x2905,
@@ -1071,26 +1074,26 @@ namespace Framework.Constants
GarrisonUnlearnBlueprintResult = 0x28f8,
GarrisonUpgradeResult = 0x28fd,
GenerateRandomCharacterNameResult = 0x2583,
- GetAccountCharacterListResult = 0x27a4,
+ GetAccountCharacterListResult = 0x27a3,
GetDisplayedTrophyListResponse = 0x2928,
GetGarrisonInfoResult = 0x28f0,
- GetShipmentsOfTypeResponse = 0x27e0,
- GetShipmentInfoResponse = 0x27dc,
- GetTrophyListResponse = 0x2809,
- GmPlayerInfo = 0x277b,
+ GetShipmentsOfTypeResponse = 0x27df,
+ GetShipmentInfoResponse = 0x27db,
+ GetTrophyListResponse = 0x2808,
+ GmPlayerInfo = 0x277a,
GmRequestPlayerInfo = 0x25ed,
- GmTicketCaseStatus = 0x26cd,
- GmTicketSystemStatus = 0x26cc,
- GodMode = 0x2739,
+ GmTicketCaseStatus = 0x26cc,
+ GmTicketSystemStatus = 0x26cb,
+ GodMode = 0x2738,
GossipComplete = 0x2a96,
GossipMessage = 0x2a97,
- GossipPoi = 0x27d9,
+ GossipPoi = 0x27d8,
GroupActionThrottled = 0x259c,
- GroupDecline = 0x27d4,
- GroupDestroyed = 0x27d6,
+ GroupDecline = 0x27d3,
+ GroupDestroyed = 0x27d5,
GroupInviteConfirmation = 0x2855,
- GroupNewLeader = 0x264a,
- GroupUninvite = 0x27d5,
+ GroupNewLeader = 0x2649,
+ GroupUninvite = 0x27d4,
GuildAchievementDeleted = 0x29c5,
GuildAchievementEarned = 0x29c4,
GuildAchievementMembers = 0x29c7,
@@ -1143,55 +1146,55 @@ namespace Framework.Constants
GuildRoster = 0x29bb,
GuildRosterUpdate = 0x29bc,
GuildSendRankChange = 0x29b9,
- HealthUpdate = 0x26fd,
- HighestThreatUpdate = 0x270d,
+ HealthUpdate = 0x26fc,
+ HighestThreatUpdate = 0x270c,
HotfixMessage = 0x25a2,
HotfixResponse = 0x25a3,
- InitializeFactions = 0x2766,
+ InitializeFactions = 0x2765,
InitialSetup = 0x257f,
- InitWorldStates = 0x278c,
+ InitWorldStates = 0x278b,
InspectHonorStats = 0x25b2,
- InspectPvp = 0x2762,
- InspectResult = 0x264e,
- InstanceEncounterChangePriority = 0x27f5,
- InstanceEncounterDisengageUnit = 0x27f4,
- InstanceEncounterEnd = 0x27fd,
- InstanceEncounterEngageUnit = 0x27f3,
- InstanceEncounterGainCombatResurrectionCharge = 0x27ff,
- InstanceEncounterInCombatResurrection = 0x27fe,
- InstanceEncounterObjectiveComplete = 0x27f8,
- InstanceEncounterObjectiveStart = 0x27f7,
- InstanceEncounterObjectiveUpdate = 0x27fc,
- InstanceEncounterPhaseShiftChanged = 0x2800,
- InstanceEncounterSetAllowingRelease = 0x27fb,
- InstanceEncounterSetSuppressingRelease = 0x27fa,
- InstanceEncounterStart = 0x27f9,
- InstanceEncounterTimerStart = 0x27f6,
- InstanceGroupSizeChanged = 0x2737,
- InstanceInfo = 0x2651,
- InstanceReset = 0x26b0,
- InstanceResetFailed = 0x26b1,
- InstanceSaveCreated = 0x27be,
- InvalidatePageText = 0x2702,
- InvalidatePlayer = 0x26d3,
- InvalidPromotionCode = 0x2796,
- InventoryChangeFailure = 0x2764,
+ InspectPvp = 0x2761,
+ InspectResult = 0x264d,
+ InstanceEncounterChangePriority = 0x27f4,
+ InstanceEncounterDisengageUnit = 0x27f3,
+ InstanceEncounterEnd = 0x27fc,
+ InstanceEncounterEngageUnit = 0x27f2,
+ InstanceEncounterGainCombatResurrectionCharge = 0x27fe,
+ InstanceEncounterInCombatResurrection = 0x27fd,
+ InstanceEncounterObjectiveComplete = 0x27f7,
+ InstanceEncounterObjectiveStart = 0x27f6,
+ InstanceEncounterObjectiveUpdate = 0x27fb,
+ InstanceEncounterPhaseShiftChanged = 0x27ff,
+ InstanceEncounterSetAllowingRelease = 0x27fa,
+ InstanceEncounterSetSuppressingRelease = 0x27f9,
+ InstanceEncounterStart = 0x27f8,
+ InstanceEncounterTimerStart = 0x27f5,
+ InstanceGroupSizeChanged = 0x2736,
+ InstanceInfo = 0x2650,
+ InstanceReset = 0x26af,
+ InstanceResetFailed = 0x26b0,
+ InstanceSaveCreated = 0x27bd,
+ InvalidatePageText = 0x2701,
+ InvalidatePlayer = 0x26d2,
+ InvalidPromotionCode = 0x2795,
+ InventoryChangeFailure = 0x2763,
IsQuestCompleteResponse = 0x2a83,
- ItemChanged = 0x2721,
- ItemCooldown = 0x280c,
- ItemEnchantTimeUpdate = 0x2798,
+ ItemChanged = 0x2720,
+ ItemCooldown = 0x280b,
+ ItemEnchantTimeUpdate = 0x2797,
ItemExpirePurchaseRefund = 0x25b1,
ItemPurchaseRefundResult = 0x25af,
- ItemPushResult = 0x2638,
- ItemTimeUpdate = 0x2797,
- KickReason = 0x2830,
- LearnedSpells = 0x2c4c,
+ ItemPushResult = 0x2637,
+ ItemTimeUpdate = 0x2796,
+ KickReason = 0x282f,
+ LearnedSpells = 0x2c4d,
LearnPvpTalentsFailed = 0x25ea,
LearnTalentsFailed = 0x25e9,
LevelUpdate = 0x2587,
- LevelUpInfo = 0x2720,
- LfgBootPlayer = 0x2a36,
- LfgDisabled = 0x2a34,
+ LevelUpInfo = 0x271f,
+ LfgBootPlayer = 0x2a35,
+ LfgDisabled = 0x2a33,
LfgInstanceShutdownCountdown = 0x2a25,
LfgJoinResult = 0x2a1c,
LfgListJoinResult = 0x2a1d,
@@ -1199,17 +1202,17 @@ namespace Framework.Constants
LfgListSearchStatus = 0x2a1f,
LfgListUpdateBlacklist = 0x2a2a,
LfgListUpdateStatus = 0x2a26,
- LfgOfferContinue = 0x2a35,
- LfgPartyInfo = 0x2a37,
- LfgPlayerInfo = 0x2a38,
- LfgPlayerReward = 0x2a39,
+ LfgOfferContinue = 0x2a34,
+ LfgPartyInfo = 0x2a36,
+ LfgPlayerInfo = 0x2a37,
+ LfgPlayerReward = 0x2a38,
LfgProposalUpdate = 0x2a2d,
LfgQueueStatus = 0x2a20,
- LfgReadyCheckResult = 0x2a3b,
+ LfgReadyCheckResult = 0x2a3a,
LfgReadyCheckUpdate = 0x2a22,
LfgRoleCheckUpdate = 0x2a21,
LfgSlotInvalid = 0x2a30,
- LfgTeleportDenied = 0x2a33,
+ LfgTeleportDenied = 0x2a32,
LfgUpdateStatus = 0x2a24,
LfGuildApplicantListChanged = 0x29d5,
LfGuildApplications = 0x29d1,
@@ -1218,45 +1221,44 @@ namespace Framework.Constants
LfGuildCommandResult = 0x29d0,
LfGuildPost = 0x29cd,
LfGuildRecruits = 0x29cf,
- LiveRegionAccountRestoreResult = 0x27b2,
- LiveRegionCharacterCopyResult = 0x27b0,
- LiveRegionGetAccountCharacterListResult = 0x27a5,
+ LiveRegionAccountRestoreResult = 0x27b1,
+ LiveRegionCharacterCopyResult = 0x27af,
+ LiveRegionGetAccountCharacterListResult = 0x27a4,
LoadCufProfiles = 0x25ce,
- LoadEquipmentSet = 0x274e,
- LoadSelectedTrophyResult = 0x280a,
- LoginSetTimeSpeed = 0x274d,
+ LoadEquipmentSet = 0x274d,
+ LoadSelectedTrophyResult = 0x2809,
+ LoginSetTimeSpeed = 0x274c,
LoginVerifyWorld = 0x25ac,
- LogoutCancelAck = 0x26af,
- LogoutComplete = 0x26ae,
- LogoutResponse = 0x26ad,
- LogXpGain = 0x271c,
- LootAllPassed = 0x2636,
- LootItemList = 0x2634,
- LootList = 0x2784,
+ LogoutCancelAck = 0x26ae,
+ LogoutComplete = 0x26ad,
+ LogoutResponse = 0x26ac,
+ LogXpGain = 0x271b,
+ LootAllPassed = 0x2635,
+ LootList = 0x2783,
LootMoneyNotify = 0x2630,
LootRelease = 0x262f,
LootReleaseAll = 0x262e,
LootRemoved = 0x2629,
LootResponse = 0x2628,
LootRoll = 0x2632,
- LootRollsComplete = 0x2635,
- LootRollWon = 0x2637,
- LossOfControlAuraUpdate = 0x2696,
- MailCommandResult = 0x2659,
- MailListResult = 0x2799,
- MailQueryNextTimeResult = 0x279a,
- MapObjectivesInit = 0x27a2,
+ LootRollsComplete = 0x2634,
+ LootRollWon = 0x2636,
+ LossOfControlAuraUpdate = 0x2695,
+ MailCommandResult = 0x2658,
+ MailListResult = 0x2798,
+ MailQueryNextTimeResult = 0x2799,
+ MapObjectivesInit = 0x27a1,
MapObjEvents = 0x25d9,
MasterLootCandidateList = 0x2633,
MessageBox = 0x2575,
- MinimapPing = 0x26f8,
+ MinimapPing = 0x26f7,
MirrorImageComponentedData = 0x2c14,
MirrorImageCreatureData = 0x2c13,
MissileCancel = 0x25da,
- ModifyChargeRecoverySpeed = 0x27a9,
- ModifyCooldown = 0x27a7,
- ModifyCooldownRecoverySpeed = 0x27a8,
- ModifyPartyRange = 0x2787,
+ ModifyChargeRecoverySpeed = 0x27a8,
+ ModifyCooldown = 0x27a6,
+ ModifyCooldownRecoverySpeed = 0x27a7,
+ ModifyPartyRange = 0x2786,
Motd = 0x2baf,
MountResult = 0x257a,
MoveApplyMovementForce = 0x2de1,
@@ -1342,40 +1344,41 @@ namespace Framework.Constants
MoveUpdateTurnRate = 0x2dab,
MoveUpdateWalkSpeed = 0x2da6,
NeutralPlayerFactionSelectResult = 0x25f1,
- NewTaxiPath = 0x26a8,
+ NewTaxiPath = 0x26a7,
NewWorld = 0x25ab,
- NotifyDestLocSpellCast = 0x2c42,
- NotifyMissileTrajectoryCollision = 0x26d2,
+ NotifyDestLocSpellCast = 0x2c43,
+ NotifyMissileTrajectoryCollision = 0x26d1,
NotifyMoney = 0x25ae,
- NotifyReceivedMail = 0x265a,
- OfferPetitionError = 0x26e1,
- OnCancelExpectedRideVehicleAura = 0x271d,
+ NotifyReceivedMail = 0x2659,
+ OfferPetitionError = 0x26e0,
+ OnCancelExpectedRideVehicleAura = 0x271c,
OnMonsterMove = 0x2da2,
- OpenContainer = 0x2765,
- OpenLfgDungeonFinder = 0x2a32,
- OpenShipmentNpcFromGossip = 0x27db,
- OpenShipmentNpcResult = 0x27dd,
- OpenTransmogrifier = 0x2837,
- OverrideLight = 0x26e7,
- PageText = 0x275a,
- PartyCommandResult = 0x27d8,
+ OpenAlliedRaceDetailsGiver = 0x2837,
+ OpenContainer = 0x2764,
+ OpenLfgDungeonFinder = 0x2a31,
+ OpenShipmentNpcFromGossip = 0x27da,
+ OpenShipmentNpcResult = 0x27dc,
+ OpenTransmogrifier = 0x2836,
+ OverrideLight = 0x26e6,
+ PageText = 0x2759,
+ PartyCommandResult = 0x27d7,
PartyInvite = 0x25cf,
- PartyKillLog = 0x279e,
- PartyMemberState = 0x279c,
- PartyMemberStateUpdate = 0x279b,
+ PartyKillLog = 0x279d,
+ PartyMemberState = 0x279b,
+ PartyMemberStateUpdate = 0x279a,
PartyUpdate = 0x260b,
- PauseMirrorTimer = 0x2750,
- PendingRaidLock = 0x2731,
+ PauseMirrorTimer = 0x274f,
+ PendingRaidLock = 0x2730,
PetitionAlreadySigned = 0x25b8,
PetitionRenameGuildResponse = 0x29f7,
- PetitionShowList = 0x26ea,
- PetitionShowSignatures = 0x26eb,
- PetitionSignResults = 0x2790,
- PetActionFeedback = 0x278e,
- PetActionSound = 0x26ca,
+ PetitionShowList = 0x26e9,
+ PetitionShowSignatures = 0x26ea,
+ PetitionSignResults = 0x278f,
+ PetActionFeedback = 0x278d,
+ PetActionSound = 0x26c9,
PetAdded = 0x25a8,
PetBattleChatRestricted = 0x2618,
- PetBattleDebugQueueDumpResponse = 0x269d,
+ PetBattleDebugQueueDumpResponse = 0x269c,
PetBattleFinalizeLocation = 0x2611,
PetBattleFinalRound = 0x2616,
PetBattleFinished = 0x2617,
@@ -1383,68 +1386,68 @@ namespace Framework.Constants
PetBattleInitialUpdate = 0x2612,
PetBattleMaxGameLengthWarning = 0x2619,
PetBattlePvpChallenge = 0x2610,
- PetBattleQueueProposeMatch = 0x2657,
- PetBattleQueueStatus = 0x2658,
+ PetBattleQueueProposeMatch = 0x2656,
+ PetBattleQueueStatus = 0x2657,
PetBattleReplacementsMade = 0x2615,
PetBattleRequestFailed = 0x260f,
PetBattleRoundResult = 0x2614,
PetBattleSlotUpdates = 0x2602,
- PetCastFailed = 0x2c56,
+ PetCastFailed = 0x2c57,
PetClearSpells = 0x2c24,
- PetDismissSound = 0x26cb,
- PetGodMode = 0x26a5,
- PetGuids = 0x2742,
- PetLearnedSpells = 0x2c4e,
+ PetDismissSound = 0x26ca,
+ PetGodMode = 0x26a4,
+ PetGuids = 0x2741,
+ PetLearnedSpells = 0x2c4f,
PetMode = 0x2589,
- PetNameInvalid = 0x26ef,
+ PetNameInvalid = 0x26ee,
PetSlotUpdated = 0x2588,
PetSpellsMessage = 0x2c25,
PetStableList = 0x25a9,
PetStableResult = 0x25aa,
- PetTameFailure = 0x26de,
- PetUnlearnedSpells = 0x2c4f,
+ PetTameFailure = 0x26dd,
+ PetUnlearnedSpells = 0x2c50,
PhaseShiftChange = 0x2577,
- PlayedTime = 0x2709,
+ PlayedTime = 0x2708,
PlayerBound = 0x257d,
PlayerSaveGuildEmblem = 0x29f6,
- PlayerSkinned = 0x2789,
- PlayerTabardVendorActivate = 0x279d,
- PlayMusic = 0x27ac,
- PlayObjectSound = 0x27ad,
- PlayOneShotAnimKit = 0x2773,
- PlayOrphanSpellVisual = 0x2c46,
- PlayScene = 0x2654,
- PlaySound = 0x27ab,
- PlaySpeakerbotSound = 0x27ae,
- PlaySpellVisual = 0x2c44,
- PlaySpellVisualKit = 0x2c48,
- PlayTimeWarning = 0x273b,
+ PlayerSkinned = 0x2788,
+ PlayerTabardVendorActivate = 0x279c,
+ PlayMusic = 0x27ab,
+ PlayObjectSound = 0x27ac,
+ PlayOneShotAnimKit = 0x2772,
+ PlayOrphanSpellVisual = 0x2c47,
+ PlayScene = 0x2653,
+ PlaySound = 0x27aa,
+ PlaySpeakerbotSound = 0x27ad,
+ PlaySpellVisual = 0x2c45,
+ PlaySpellVisualKit = 0x2c49,
+ PlayTimeWarning = 0x273a,
Pong = 0x304e,
- PowerUpdate = 0x26fe,
- PrestigeAndHonorInvoluntarilyChanged = 0x2759,
- PreRessurect = 0x27aa,
+ PowerUpdate = 0x26fd,
+ PrestigeAndHonorInvoluntarilyChanged = 0x2758,
+ PreRessurect = 0x27a9,
PrintNotification = 0x25e1,
- ProcResist = 0x279f,
- ProposeLevelGrant = 0x2711,
- PushSpellToActionBar = 0x2c50,
- PvpCredit = 0x2717,
+ ProcResist = 0x279e,
+ ProposeLevelGrant = 0x2710,
+ PushSpellToActionBar = 0x2c51,
+ PvpCredit = 0x2716,
PvpLogData = 0x25b3,
PvpOptionsEnabled = 0x25b6,
PvpSeason = 0x25d3,
- QueryBattlePetNameResponse = 0x2704,
- QueryCreatureResponse = 0x26fb,
- QueryGameObjectResponse = 0x26fc,
+ QueryBattlePetNameResponse = 0x2703,
+ QueryCreatureResponse = 0x26fa,
+ QueryGameObjectResponse = 0x26fb,
QueryGarrisonCreatureNameResponse = 0x292b,
QueryGuildInfoResponse = 0x29e5,
- QueryItemTextResponse = 0x280b,
- QueryNpcTextResponse = 0x26ff,
- QueryPageTextResponse = 0x2701,
- QueryPetitionResponse = 0x2705,
- QueryPetNameResponse = 0x2703,
- QueryPlayerNameResponse = 0x2700,
+ QueryItemTextResponse = 0x280a,
+ QueryNpcTextResponse = 0x26fe,
+ QueryPageTextResponse = 0x2700,
+ QueryPetitionResponse = 0x2704,
+ QueryPetNameResponse = 0x2702,
+ QueryPlayerNameResponse = 0x26ff,
QueryQuestInfoResponse = 0x2a95,
QueryQuestRewardResponse = 0x2846,
- QueryTimeResponse = 0x271b,
+ QueryTimeResponse = 0x271a,
QuestCompletionNpcResponse = 0x2a81,
QuestConfirmAccept = 0x2a8e,
QuestForceRemoved = 0x2a9b,
@@ -1470,56 +1473,57 @@ namespace Framework.Constants
QuestUpdateCompleteBySpell = 0x2a87,
QuestUpdateFailed = 0x2a89,
QuestUpdateFailedTimer = 0x2a8a,
- RafEmailEnabledResponse = 0x27c9,
- RaidDifficultySet = 0x27f0,
- RaidGroupOnly = 0x27f2,
+ RafEmailEnabledResponse = 0x27c8,
+ RaidDifficultySet = 0x27ef,
+ RaidGroupOnly = 0x27f1,
RaidInstanceMessage = 0x2bb4,
RaidMarkersChanged = 0x25b9,
- RandomRoll = 0x264d,
+ RandomRoll = 0x264c,
RatedBattlefieldInfo = 0x25a6,
ReadyCheckCompleted = 0x260e,
ReadyCheckResponse = 0x260d,
ReadyCheckStarted = 0x260c,
- ReadItemResultFailed = 0x27ec,
- ReadItemResultOk = 0x27e2,
- RealmQueryResponse = 0x26e6,
- RecruitAFriendResponse = 0x27ca,
- ReferAFriendExpired = 0x2763,
- ReferAFriendFailure = 0x26ec,
- RefreshComponent = 0x2679,
+ ReadItemResultFailed = 0x27eb,
+ ReadItemResultOk = 0x27e1,
+ RealmLookupInformation = 0x2810,
+ RealmQueryResponse = 0x26e5,
+ RecruitAFriendResponse = 0x27c9,
+ ReferAFriendExpired = 0x2762,
+ ReferAFriendFailure = 0x26eb,
+ RefreshComponent = 0x2678,
RefreshSpellHistory = 0x2c2c,
RemoveItemPassive = 0x25c0,
- RemoveLossOfControl = 0x2698,
- ReplaceTrophyResponse = 0x2808,
- ReportPvpPlayerAfkResult = 0x26da,
- RequestAddonList = 0x2660,
+ RemoveLossOfControl = 0x2697,
+ ReplaceTrophyResponse = 0x2807,
+ ReportPvpPlayerAfkResult = 0x26d9,
+ RequestAddonList = 0x265f,
RequestCemeteryListResponse = 0x259d,
RequestPvpBrawlInfoResponse = 0x25d5,
RequestPvpRewardsResponse = 0x25d4,
ResearchComplete = 0x2585,
- ResetAreaTrigger = 0x2641,
+ ResetAreaTrigger = 0x2640,
ResetCompressionContext = 0x304f,
- ResetFailedNotify = 0x26e2,
- ResetRangedCombatTimer = 0x2714,
+ ResetFailedNotify = 0x26e1,
+ ResetRangedCombatTimer = 0x2713,
ResetWeeklyCurrency = 0x2574,
RespecWipeConfirm = 0x2626,
RespondInspectAchievements = 0x2571,
- ResumeCastBar = 0x2c3d,
+ ResumeCastBar = 0x2c3e,
ResumeComms = 0x304b,
ResumeToken = 0x25be,
ResurrectRequest = 0x257e,
- ResyncRunes = 0x273e,
+ ResyncRunes = 0x273d,
RoleChangedInform = 0x258c,
- RoleChosen = 0x2a3a,
+ RoleChosen = 0x2a39,
RolePollInform = 0x258d,
RuneRegenDebug = 0x25c8,
- ScenarioBoot = 0x27ed,
- ScenarioCompleted = 0x282d,
- ScenarioPois = 0x2650,
- ScenarioProgressUpdate = 0x2649,
+ ScenarioBoot = 0x27ec,
+ ScenarioCompleted = 0x282c,
+ ScenarioPois = 0x264f,
+ ScenarioProgressUpdate = 0x2648,
ScenarioSetShouldShowCriteria = 0x283a,
ScenarioSpellUpdate = 0x2839,
- ScenarioState = 0x2648,
+ ScenarioState = 0x2647,
SceneObjectEvent = 0x25f7,
SceneObjectPetBattleFinalRound = 0x25fc,
SceneObjectPetBattleFinished = 0x25fd,
@@ -1527,149 +1531,150 @@ namespace Framework.Constants
SceneObjectPetBattleInitialUpdate = 0x25f8,
SceneObjectPetBattleReplacementsMade = 0x25fb,
SceneObjectPetBattleRoundResult = 0x25fa,
- ScriptCast = 0x2c54,
- SellResponse = 0x26f0,
+ ScriptCast = 0x2c55,
+ SellResponse = 0x26ef,
SendItemPassives = 0x25c1,
SendKnownSpells = 0x2c2a,
- SendRaidTargetUpdateAll = 0x264b,
- SendRaidTargetUpdateSingle = 0x264c,
+ SendRaidTargetUpdateAll = 0x264a,
+ SendRaidTargetUpdateSingle = 0x264b,
SendSpellCharges = 0x2c2d,
SendSpellHistory = 0x2c2b,
SendUnlearnSpells = 0x2c2e,
ServerFirstAchievement = 0x2bbc,
- ServerFirstAchievements = 0x266b,
- ServerTime = 0x26ac,
+ ServerFirstAchievements = 0x266a,
+ ServerTime = 0x26ab,
SetupCurrency = 0x2572,
SetupResearchHistory = 0x2584,
- SetAiAnimKit = 0x2772,
- SetAllTaskProgress = 0x27d2,
- SetAnimTier = 0x2776,
+ SetAiAnimKit = 0x2771,
+ SetAllTaskProgress = 0x27d1,
+ SetAnimTier = 0x2775,
SetCurrency = 0x2573,
SetDfFastLaunchResult = 0x2a2e,
- SetDungeonDifficulty = 0x26ce,
- SetFactionAtWar = 0x273d,
- SetFactionNotVisible = 0x276d,
- SetFactionStanding = 0x276e,
- SetFactionVisible = 0x276c,
+ SetDungeonDifficulty = 0x26cd,
+ SetFactionAtWar = 0x273c,
+ SetFactionNotVisible = 0x276c,
+ SetFactionStanding = 0x276d,
+ SetFactionVisible = 0x276b,
SetFlatSpellModifier = 0x2c36,
- SetForcedReactions = 0x275d,
+ SetForcedReactions = 0x275c,
SetItemPurchaseData = 0x25b0,
- SetLootMethodFailed = 0x2817,
+ SetLootMethodFailed = 0x2816,
SetMaxWeeklyQuantity = 0x25b7,
- SetMeleeAnimKit = 0x2775,
- SetMovementAnimKit = 0x2774,
+ SetMeleeAnimKit = 0x2774,
+ SetMovementAnimKit = 0x2773,
SetPctSpellModifier = 0x2c37,
- SetPetSpecialization = 0x2642,
- SetPlayerDeclinedNamesResult = 0x2708,
+ SetPetSpecialization = 0x2641,
+ SetPlayerDeclinedNamesResult = 0x2707,
SetPlayHoverAnim = 0x25cc,
- SetProficiency = 0x2777,
+ SetProficiency = 0x2776,
SetSpellCharges = 0x2c29,
- SetTaskComplete = 0x27d3,
- SetTimeZoneInformation = 0x26a0,
- SetVehicleRecId = 0x2730,
- ShowAdventureMap = 0x2836,
- ShowBank = 0x26a9,
- ShowMailbox = 0x27ee,
+ SetTaskComplete = 0x27d2,
+ SetTimeZoneInformation = 0x269f,
+ SetVehicleRecId = 0x272f,
+ ShowAdventureMap = 0x2835,
+ ShowBank = 0x26a8,
+ ShowMailbox = 0x27ed,
ShowNeutralPlayerFactionSelectUi = 0x25f0,
- ShowTaxiNodes = 0x26f7,
- ShowTradeSkillResponse = 0x27b3,
- SocketGems = 0x2769,
- SocketGemsFailure = 0x276a,
- SortBagsResult = 0x2825,
+ ShowTaxiNodes = 0x26f6,
+ ShowTradeSkillResponse = 0x27b2,
+ SocketGems = 0x2768,
+ SocketGemsFailure = 0x2769,
+ SortBagsResult = 0x2824,
SorStartExperienceIncomplete = 0x25f2,
SpecializationChanged = 0x25ec,
- SpecialMountAnim = 0x26c9,
- SpecInvoluntarilyChanged = 0x2758,
+ SpecialMountAnim = 0x26c8,
+ SpecInvoluntarilyChanged = 0x2757,
SpellAbsorbLog = 0x2c1f,
SpellCategoryCooldown = 0x2c17,
SpellChannelStart = 0x2c34,
SpellChannelUpdate = 0x2c35,
SpellCooldown = 0x2c15,
SpellDamageShield = 0x2c31,
- SpellDelayed = 0x2c3e,
+ SpellDelayed = 0x2c3f,
SpellDispellLog = 0x2c1a,
SpellEnergizeLog = 0x2c1c,
- SpellExecuteLog = 0x2c3f,
- SpellFailedOther = 0x2c53,
- SpellFailure = 0x2c51,
- SpellFailureMessage = 0x2c58,
+ SpellExecuteLog = 0x2c40,
+ SpellFailedOther = 0x2c54,
+ SpellFailure = 0x2c52,
+ SpellFailureMessage = 0x2c59,
SpellGo = 0x2c39,
SpellHealAbsorbLog = 0x2c1e,
SpellHealLog = 0x2c1d,
SpellInstakillLog = 0x2c33,
SpellInterruptLog = 0x2c20,
- SpellMissLog = 0x2c40,
+ SpellMissLog = 0x2c41,
SpellNonMeleeDamageLog = 0x2c32,
SpellOrDamageImmune = 0x2c2f,
SpellPeriodicAuraLog = 0x2c1b,
SpellPrepare = 0x2c38,
SpellStart = 0x2c3a,
- SpiritHealerConfirm = 0x2755,
- StandStateUpdate = 0x275c,
+ SpiritHealerConfirm = 0x2754,
+ StandStateUpdate = 0x275b,
StartElapsedTimer = 0x261a,
StartElapsedTimers = 0x261c,
StartLootRoll = 0x2631,
- StartMirrorTimer = 0x274f,
+ StartMirrorTimer = 0x274e,
StartTimer = 0x25bb,
StopElapsedTimer = 0x261b,
- StopMirrorTimer = 0x2751,
- StopSpeakerbotSound = 0x27af,
+ StopMirrorTimer = 0x2750,
+ StopSpeakerbotSound = 0x27ae,
StreamingMovies = 0x25ba,
- SummonCancel = 0x26d9,
+ SummonCancel = 0x26d8,
SummonRaidMemberValidateFailed = 0x258e,
- SummonRequest = 0x2761,
- SupercededSpells = 0x2c4b,
+ SummonRequest = 0x2760,
+ SupercededSpells = 0x2c4c,
SuspendComms = 0x304a,
SuspendToken = 0x25bd,
- TalentsInvoluntarilyReset = 0x2757,
- TaxiNodeStatus = 0x26a6,
- TextEmote = 0x26a4,
- ThreatClear = 0x2710,
- ThreatRemove = 0x270f,
- ThreatUpdate = 0x270e,
+ TalentsInvoluntarilyReset = 0x2756,
+ TaxiNodeStatus = 0x26a5,
+ TextEmote = 0x26a3,
+ ThreatClear = 0x270f,
+ ThreatRemove = 0x270e,
+ ThreatUpdate = 0x270d,
TimeAdjustment = 0x2da1,
TimeSyncRequest = 0x2da0,
- TitleEarned = 0x270b,
- TitleLost = 0x270c,
- TotemCreated = 0x26f3,
- TotemMoved = 0x26f4,
+ TitleEarned = 0x270a,
+ TitleLost = 0x270b,
+ TotemCreated = 0x26f2,
+ TotemMoved = 0x26f3,
TradeStatus = 0x2581,
TradeUpdated = 0x2580,
- TrainerBuyFailed = 0x2716,
- TrainerList = 0x2715,
- TransferAborted = 0x2741,
+ TrainerBuyFailed = 0x2715,
+ TrainerList = 0x2714,
+ TransferAborted = 0x2740,
TransferPending = 0x25e5,
TransmogCollectionUpdate = 0x25c6,
TransmogSetCollectionUpdate = 0x25c7,
- TriggerCinematic = 0x280f,
- TriggerMovie = 0x26f5,
- TurnInPetitionResult = 0x2792,
- TutorialFlags = 0x2801,
+ TriggerCinematic = 0x280e,
+ TriggerMovie = 0x26f4,
+ TurnInPetitionResult = 0x2791,
+ TutorialFlags = 0x2800,
TutorialHighlightSpell = 0x2840,
TutorialUnhighlightSpell = 0x283f,
TwitterStatus = 0x2ffd,
- UiTime = 0x2754,
- UndeleteCharacterResponse = 0x2812,
- UndeleteCooldownStatusResponse = 0x2813,
- UnlearnedSpells = 0x2c4d,
- UpdateAccountData = 0x2749,
+ UiTime = 0x2753,
+ UndeleteCharacterResponse = 0x2811,
+ UndeleteCooldownStatusResponse = 0x2812,
+ UnlearnedSpells = 0x2c4e,
+ UpdateAccountData = 0x2748,
UpdateActionButtons = 0x25f5,
- UpdateCharacterFlags = 0x2807,
- UpdateDungeonEncounterForLoot = 0x2a31,
- UpdateExpansionLevel = 0x2664,
- UpdateInstanceOwnership = 0x26d1,
- UpdateLastInstance = 0x26b2,
- UpdateObject = 0x2810,
+ UpdateCelestialBody = 0x285e,
+ UpdateCharacterFlags = 0x2806,
+ UpdateExpansionLevel = 0x2663,
+ UpdateGameTimeState = 0x2865,
+ UpdateInstanceOwnership = 0x26d0,
+ UpdateLastInstance = 0x26b1,
+ UpdateObject = 0x280f,
UpdateTalentData = 0x25eb,
- UpdateTaskProgress = 0x27d1,
+ UpdateTaskProgress = 0x27d0,
UpdateWeeklySpellUsage = 0x2c19,
- UpdateWorldState = 0x278d,
+ UpdateWorldState = 0x278c,
UserlistAdd = 0x2bb9,
UserlistRemove = 0x2bba,
UserlistUpdate = 0x2bbb,
- UseEquipmentSetResult = 0x2793,
+ UseEquipmentSetResult = 0x2792,
VendorInventory = 0x25ca,
- VignetteUpdate = 0x27b1,
+ VignetteUpdate = 0x27b0,
VoidItemSwapResponse = 0x25df,
VoidStorageContents = 0x25dc,
VoidStorageFailed = 0x25db,
@@ -1679,29 +1684,29 @@ namespace Framework.Constants
WaitQueueUpdate = 0x256d,
WardenData = 0x2576,
WargameRequestSuccessfullySentToOpponent = 0x25b4,
- Weather = 0x26d0,
+ Weather = 0x26cf,
WeeklySpellUsage = 0x2c18,
Who = 0x2bae,
- WhoIs = 0x26cf,
+ WhoIs = 0x26ce,
WorldQuestUpdate = 0x2847,
WorldServerInfo = 0x25c2,
- WorldText = 0x282f,
- WowTokenAuctionSold = 0x281d,
- WowTokenBuyRequestConfirmation = 0x281f,
- WowTokenBuyResultConfirmation = 0x2820,
+ WorldText = 0x282e,
+ WowTokenAuctionSold = 0x281c,
+ WowTokenBuyRequestConfirmation = 0x281e,
+ WowTokenBuyResultConfirmation = 0x281f,
WowTokenCanRedeemForBalanceResult = 0x2856,
- WowTokenCanVeteranBuyResult = 0x281e,
- WowTokenDistributionGlueUpdate = 0x2818,
- WowTokenDistributionUpdate = 0x2819,
- WowTokenMarketPriceResponse = 0x281a,
- WowTokenRedeemGameTimeUpdated = 0x2821,
- WowTokenRedeemRequestConfirmation = 0x2822,
- WowTokenRedeemResult = 0x2823,
- WowTokenSellRequestConfirmation = 0x281b,
- WowTokenSellResultConfirmation = 0x281c,
- WowTokenUpdateAuctionableListResponse = 0x2824,
+ WowTokenCanVeteranBuyResult = 0x281d,
+ WowTokenDistributionGlueUpdate = 0x2817,
+ WowTokenDistributionUpdate = 0x2818,
+ WowTokenMarketPriceResponse = 0x2819,
+ WowTokenRedeemGameTimeUpdated = 0x2820,
+ WowTokenRedeemRequestConfirmation = 0x2821,
+ WowTokenRedeemResult = 0x2822,
+ WowTokenSellRequestConfirmation = 0x281a,
+ WowTokenSellResultConfirmation = 0x281b,
+ WowTokenUpdateAuctionableListResponse = 0x2823,
XpGainAborted = 0x25e0,
- XpGainEnabled = 0x27f1,
+ XpGainEnabled = 0x27f0,
ZoneUnderAttack = 0x2bb5,
// Opcodes that are not generated automatically
diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs
index af004a457..4a87b6083 100644
--- a/Source/Framework/Constants/PlayerConst.cs
+++ b/Source/Framework/Constants/PlayerConst.cs
@@ -101,6 +101,7 @@ namespace Framework.Constants
public const byte FieldBytes2OffsetIgnorePowerRegenPredictionMask = 0;
public const byte FieldBytes2OffsetAuraVision = 1;
+ public const byte FieldBytes2OffsetNumBackpackSlots = 2;
public const byte FieldBytes3OffsetOverrideSpellsId = 2; // Uint16!
public const byte FieldBytes3OffsetOverrideSpellsIdUint16Offset = FieldBytes3OffsetOverrideSpellsId / 2;
@@ -485,14 +486,17 @@ namespace Framework.Constants
public enum PlayerLocalFlags
{
+ ControllingPet = 0x01, // Displays "You have an active summon already" when trying to tame new pet
TrackStealthed = 0x02,
ReleaseTimer = 0x08, // Display time till auto release spirit
NoReleaseWindow = 0x10, // Display no "release spirit" window at all
- NoPetBar = 0x00000020, // CGPetInfo::IsPetBarUsed
- OverrideCameraMinHeight = 0x00000040,
- UsingPartGarrison = 0x00000100,
- CanUseObjectsMounted = 0x00000200,
- CanVisitPartyGarrison = 0x00000400
+ NoPetBar = 0x20, // CGPetInfo::IsPetBarUsed
+ OverrideCameraMinHeight = 0x40,
+ NewlyBosstedCharacter = 0x80,
+ UsingPartGarrison = 0x100,
+ CanUseObjectsMounted = 0x200,
+ CanVisitPartyGarrison = 0x400,
+ AccountSecured = 0x1000 // Script_IsAccountSecured
}
public enum PlayerFieldByte2Flags
@@ -572,7 +576,7 @@ namespace Framework.Constants
// first slot for item stored (in any way in player items data)
Start = 0,
// last+1 slot for item stored (in any way in player items data)
- End = 187,
+ End = 195,
Count = (End - Start)
}
diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs
index 112d97cc4..e0321caea 100644
--- a/Source/Framework/Constants/SharedConst.cs
+++ b/Source/Framework/Constants/SharedConst.cs
@@ -526,7 +526,12 @@ namespace Framework.Constants
MistsOfPandaria = 4,
WarlordsOfDraenor = 5,
Legion = 6,
- Max
+ Max,
+
+ // future expansion
+ BattleForAzeroth = 7,
+
+ MaxAccountExpansions
}
public enum PowerType : byte
{
@@ -2302,7 +2307,8 @@ namespace Framework.Constants
QuestTurnInFailReason = 983,
ClaimedChallengeModeRewardOld = 984,
TalentGrantedByAura = 985,
- ChallengeModeAlreadyComplete = 986
+ ChallengeModeAlreadyComplete = 986,
+ GlyphTargetNotAvailable = 987
}
public enum SceneFlags
diff --git a/Source/Framework/Constants/Spells/SpellConst.cs b/Source/Framework/Constants/Spells/SpellConst.cs
index 1651bab39..9081038f7 100644
--- a/Source/Framework/Constants/Spells/SpellConst.cs
+++ b/Source/Framework/Constants/Spells/SpellConst.cs
@@ -1051,6 +1051,19 @@ namespace Framework.Constants
MustBeStandingNearInjuredChromieInMountHyjal = 340, // Must Be Standing Near The Injured Chromie In Mount Hyjal.
RemoveCannonsHeavyIronPlatingFirst = 342, // You Should Remove The Cannon'S Heavy Iron Plating First.
RemoveCannonsElectrokineticDefenseGridFirst = 343, // You Should Remove The Cannon'S Electrokinetic Defense Grid First.
+ RequiresTheArmoryKeyAndDendriteClusters = 344, // You Are Missing Pieces Of The Armory Key Or Do Not Have Enough Dendrite Clusters.
+ ThisItemRequiresBasicObliterumToUpgrade = 345, // This Item Requires Basic Obliterum To Upgrade.
+ ThisItemRequiresPrimalObliterumToUpgrade = 346, // This Item Requires Primal Obliterum To Upgrade.
+ ThisItemRequiresFlightMastersWhistle = 347, // This Item Requires A Flight Master'S Whistle.
+ RequiresPowerThatEchoesThatOfTheAugari = 349, // Will Only Open To One Wielding The Power That Echoes That Of The Augari.
+ ThatPlayerHasAPendingTotemicRevival = 350, // That Player Has A Pending Totemic Revival.
+ YouHaveNoFireMinesDeployed = 351, // You Have No Fire Mines Deployed.
+ YouAreBlockedByAStructureAboveYou = 353, // You Are Blocked By A Structure Above You.
+ Requires100ImpMeat = 354, // Requires 100 Imp Meat.
+ YouHaveNotObtainedAnyBackgroundFilters = 355, // You Have Not Obtained Any Background Filters.
+ NothingInterestingPostedHereRightNow = 356, // There Is Nothing Interesting Posted Here Right Now.
+ ParagonReputationRequiresHigherLevel = 357, // Paragon Reputation Is Not Available Until A Higher Level.
+ UunaIsMissing = 358, // Uuna Is Missing.
}
public enum SpellMissInfo
diff --git a/Source/Framework/Constants/Update/UpdateFieldFlags.cs b/Source/Framework/Constants/Update/UpdateFieldFlags.cs
index 87bc4d0c4..7984c883b 100644
--- a/Source/Framework/Constants/Update/UpdateFieldFlags.cs
+++ b/Source/Framework/Constants/Update/UpdateFieldFlags.cs
@@ -363,6 +363,7 @@ namespace Framework.Constants
Private | Owner | UnitAll, // UNIT_FIELD_POWER_REGEN_INTERRUPTED_FLAT_MODIFIER+5
Public, // UNIT_FIELD_LEVEL
Public, // UNIT_FIELD_EFFECTIVE_LEVEL
+ Public, // UNIT_FIELD_SANDBOX_SCALING_ID
Public, // UNIT_FIELD_SCALING_LEVEL_MIN
Public, // UNIT_FIELD_SCALING_LEVEL_MAX
Public, // UNIT_FIELD_SCALING_LEVEL_DELTA
@@ -2110,6 +2111,39 @@ namespace Framework.Constants
Private, // PLAYER_FIELD_INV_SLOT_HEAD+745
Private, // PLAYER_FIELD_INV_SLOT_HEAD+746
Private, // PLAYER_FIELD_INV_SLOT_HEAD+747
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+748
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+749
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+750
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+751
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+752
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+753
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+754
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+755
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+756
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+757
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+758
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+759
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+760
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+761
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+762
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+763
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+764
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+765
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+766
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+767
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+768
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+769
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+770
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+771
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+772
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+773
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+774
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+775
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+776
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+777
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+778
+ Private, // PLAYER_FIELD_INV_SLOT_HEAD+779
+
Private, // PLAYER_FARSIGHT
Private, // PLAYER_FARSIGHT+1
Private, // PLAYER_FARSIGHT+2
@@ -2134,6 +2168,7 @@ namespace Framework.Constants
Private, // PLAYER_FIELD_COINAGE+1
Private, // PLAYER_XP
Private, // PLAYER_NEXT_LEVEL_XP
+ Private, // PLAYER_TRIAL_XP
Private, // PLAYER_SKILL_LINEID
Private, // PLAYER_SKILL_LINEID+1
Private, // PLAYER_SKILL_LINEID+2
@@ -2973,7 +3008,6 @@ namespace Framework.Constants
Private, // PLAYER_FIELD_MOD_TARGET_PHYSICAL_RESISTANCE
Private, // PLAYER_FIELD_LOCAL_FLAGS
Private, // PLAYER_FIELD_BYTES
- Private, // PLAYER_SELF_RES_SPELL
Private, // PLAYER_FIELD_PVP_MEDALS
Private, // PLAYER_FIELD_BUYBACK_PRICE_1
Private, // PLAYER_FIELD_BUYBACK_PRICE_1+1
@@ -4885,6 +4919,7 @@ namespace Framework.Constants
Private, // PLAYER_DYNAMIC_FIELD_TOYS
Private, // PLAYER_DYNAMIC_FIELD_TRANSMOG
Private, // PLAYER_DYNAMIC_FIELD_CONDITIONAL_TRANSMOG
+ Private, // PLAYER_DYNAMIC_FIELD_SELF_RES_SPELLS
Private, // PLAYER_DYNAMIC_FIELD_CHARACTER_RESTRICTIONS
Private, // PLAYER_DYNAMIC_FIELD_SPELL_PCT_MOD_BY_LABEL
Private, // PLAYER_DYNAMIC_FIELD_SPELL_FLAT_MOD_BY_LABEL
diff --git a/Source/Framework/Constants/Update/UpdateFields.cs b/Source/Framework/Constants/Update/UpdateFields.cs
index a85ece4b0..aa7ecb316 100644
--- a/Source/Framework/Constants/Update/UpdateFields.cs
+++ b/Source/Framework/Constants/Update/UpdateFields.cs
@@ -93,81 +93,83 @@ namespace Framework.Constants
PowerRegenInterruptedFlatModifier = ObjectFields.End + 0x042, // Size: 6, Flags: Private, Owner, UnitAll
Level = ObjectFields.End + 0x048, // Size: 1, Flags: Public
EffectiveLevel = ObjectFields.End + 0x049, // Size: 1, Flags: Public
- ScalingLevelMin = ObjectFields.End + 0x04a, // Size: 1, Flags: Public
- ScalingLevelMax = ObjectFields.End + 0x04b, // Size: 1, Flags: Public
- ScalingLevelDelta = ObjectFields.End + 0x04c, // Size: 1, Flags: Public
- FactionTemplate = ObjectFields.End + 0x04d, // Size: 1, Flags: Public
- VirtualItemSlotId = ObjectFields.End + 0x04e, // Size: 6, Flags: Public
- Flags = ObjectFields.End + 0x054, // Size: 1, Flags: Public, Urgent
- Flags2 = ObjectFields.End + 0x055, // Size: 1, Flags: Public, Urgent
- Flags3 = ObjectFields.End + 0x056, // Size: 1, Flags: Public, Urgent
- AuraState = ObjectFields.End + 0x057, // Size: 1, Flags: Public
- BaseAttackTime = ObjectFields.End + 0x058, // Size: 2, Flags: Public
- RangedAttackTime = ObjectFields.End + 0x05a, // Size: 1, Flags: Private
- BoundingRadius = ObjectFields.End + 0x05b, // Size: 1, Flags: Public
- CombatReach = ObjectFields.End + 0x05c, // Size: 1, Flags: Public
- DisplayId = ObjectFields.End + 0x05d, // Size: 1, Flags: Dynamic, Urgent
- NativeDisplayId = ObjectFields.End + 0x05e, // Size: 1, Flags: Public, Urgent
- MountDisplayId = ObjectFields.End + 0x05f, // Size: 1, Flags: Public, Urgent
- MinDamage = ObjectFields.End + 0x060, // Size: 1, Flags: Private, Owner, SpecialInfo
- MaxDamage = ObjectFields.End + 0x061, // Size: 1, Flags: Private, Owner, SpecialInfo
- MinOffHandDamage = ObjectFields.End + 0x062, // Size: 1, Flags: Private, Owner, SpecialInfo
- MaxOffHandDamage = ObjectFields.End + 0x063, // Size: 1, Flags: Private, Owner, SpecialInfo
- Bytes1 = ObjectFields.End + 0x064, // Size: 1, Flags: Public
- PetNumber = ObjectFields.End + 0x065, // Size: 1, Flags: Public
- PetNameTimestamp = ObjectFields.End + 0x066, // Size: 1, Flags: Public
- PetExperience = ObjectFields.End + 0x067, // Size: 1, Flags: Owner
- PetNextLevelExp = ObjectFields.End + 0x068, // Size: 1, Flags: Owner
- ModCastSpeed = ObjectFields.End + 0x069, // Size: 1, Flags: Public
- ModCastHaste = ObjectFields.End + 0x06a, // Size: 1, Flags: Public
- ModHaste = ObjectFields.End + 0x06b, // Size: 1, Flags: Public
- ModRangedHaste = ObjectFields.End + 0x06c, // Size: 1, Flags: Public
- ModHasteRegen = ObjectFields.End + 0x06d, // Size: 1, Flags: Public
- ModTimeRate = ObjectFields.End + 0x06e, // Size: 1, Flags: Public
- CreatedBySpell = ObjectFields.End + 0x06f, // Size: 1, Flags: Public
- NpcFlags = ObjectFields.End + 0x070, // Size: 2, Flags: Public, Dynamic
- NpcEmotestate = ObjectFields.End + 0x072, // Size: 1, Flags: Public
- Stat = ObjectFields.End + 0x073, // Size: 4, Flags: Private, Owner
- PosStat = ObjectFields.End + 0x077, // Size: 4, Flags: Private, Owner
- NegStat = ObjectFields.End + 0x07b, // Size: 4, Flags: Private, Owner
- Resistances = ObjectFields.End + 0x07f, // Size: 7, Flags: Private, Owner, SpecialInfo
- ResistanceBuffModsPositive = ObjectFields.End + 0x086, // Size: 7, Flags: Private, Owner
- ResistanceBuffModsNegative = ObjectFields.End + 0x08d, // Size: 7, Flags: Private, Owner
- ModBonusArmor = ObjectFields.End + 0x094, // Size: 1, Flags: Private, Owner
- BaseMana = ObjectFields.End + 0x095, // Size: 1, Flags: Public
- BaseHealth = ObjectFields.End + 0x096, // Size: 1, Flags: Private, Owner
- Bytes2 = ObjectFields.End + 0x097, // Size: 1, Flags: Public
- AttackPower = ObjectFields.End + 0x098, // Size: 1, Flags: Private, Owner
- AttackPowerModPos = ObjectFields.End + 0x099, // Size: 1, Flags: Private, Owner
- AttackPowerModNeg = ObjectFields.End + 0x09a, // Size: 1, Flags: Private, Owner
- AttackPowerMultiplier = ObjectFields.End + 0x09b, // Size: 1, Flags: Private, Owner
- RangedAttackPower = ObjectFields.End + 0x09c, // Size: 1, Flags: Private, Owner
- RangedAttackPowerModPos = ObjectFields.End + 0x09d, // Size: 1, Flags: Private, Owner
- RangedAttackPowerModNeg = ObjectFields.End + 0x09e, // Size: 1, Flags: Private, Owner
- RangedAttackPowerMultiplier = ObjectFields.End + 0x09f, // Size: 1, Flags: Private, Owner
- AttackSpeedAura = ObjectFields.End + 0x0a0, // Size: 1, Flags: Private, Owner
- MinRangedDamage = ObjectFields.End + 0x0a1, // Size: 1, Flags: Private, Owner
- MaxRangedDamage = ObjectFields.End + 0x0a2, // Size: 1, Flags: Private, Owner
- PowerCostModifier = ObjectFields.End + 0x0a3, // Size: 7, Flags: Private, Owner
- PowerCostMultiplier = ObjectFields.End + 0x0aa, // Size: 7, Flags: Private, Owner
- Maxhealthmodifier = ObjectFields.End + 0x0b1, // Size: 1, Flags: Private, Owner
- HoverHeight = ObjectFields.End + 0x0b2, // Size: 1, Flags: Public
- MinItemLevelCutoff = ObjectFields.End + 0x0b3, // Size: 1, Flags: Public
- MinItemLevel = ObjectFields.End + 0x0b4, // Size: 1, Flags: Public
- Maxitemlevel = ObjectFields.End + 0x0b5, // Size: 1, Flags: Public
- WildBattlepetLevel = ObjectFields.End + 0x0b6, // Size: 1, Flags: Public
- BattlepetCompanionNameTimestamp = ObjectFields.End + 0x0b7, // Size: 1, Flags: Public
- InteractSpellid = ObjectFields.End + 0x0b8, // Size: 1, Flags: Public
- StateSpellVisualId = ObjectFields.End + 0x0b9, // Size: 1, Flags: Dynamic, Urgent
- StateAnimId = ObjectFields.End + 0x0ba, // Size: 1, Flags: Dynamic, Urgent
- StateAnimKitId = ObjectFields.End + 0x0bb, // Size: 1, Flags: Dynamic, Urgent
- StateWorldEffectId = ObjectFields.End + 0x0bc, // Size: 4, Flags: Dynamic, Urgent
- ScaleDuration = ObjectFields.End + 0x0c0, // Size: 1, Flags: Public
- LooksLikeMountId = ObjectFields.End + 0x0c1, // Size: 1, Flags: Public
- LooksLikeCreatureId = ObjectFields.End + 0x0c2, // Size: 1, Flags: Public
- LookAtControllerId = ObjectFields.End + 0x0c3, // Size: 1, Flags: Public
- LookAtControllerTarget = ObjectFields.End + 0x0c4, // Size: 4, Flags: Public
- End = ObjectFields.End + 0x0c8
+
+ SandboxScalingId = ObjectFields.End + 0x04a, // Size: 1, Flags: Public
+ ScalingLevelMin = ObjectFields.End + 0x04b, // Size: 1, Flags: Public
+ ScalingLevelMax = ObjectFields.End + 0x04c, // Size: 1, Flags: Public
+ ScalingLevelDelta = ObjectFields.End + 0x04d, // Size: 1, Flags: Public
+ FactionTemplate = ObjectFields.End + 0x04e, // Size: 1, Flags: Public
+ VirtualItemSlotId = ObjectFields.End + 0x04f, // Size: 6, Flags: Public
+ Flags = ObjectFields.End + 0x055, // Size: 1, Flags: Public, Urgent
+ Flags2 = ObjectFields.End + 0x056, // Size: 1, Flags: Public, Urgent
+ Flags3 = ObjectFields.End + 0x057, // Size: 1, Flags: Public, Urgent
+ AuraState = ObjectFields.End + 0x058, // Size: 1, Flags: Public
+ BaseAttackTime = ObjectFields.End + 0x059, // Size: 2, Flags: Public
+ RangedAttackTime = ObjectFields.End + 0x05b, // Size: 1, Flags: Private
+ BoundingRadius = ObjectFields.End + 0x05c, // Size: 1, Flags: Public
+ CombatReach = ObjectFields.End + 0x05d, // Size: 1, Flags: Public
+ DisplayId = ObjectFields.End + 0x05e, // Size: 1, Flags: Dynamic, Urgent
+ NativeDisplayId = ObjectFields.End + 0x05f, // Size: 1, Flags: Public, Urgent
+ MountDisplayId = ObjectFields.End + 0x060, // Size: 1, Flags: Public, Urgent
+ MinDamage = ObjectFields.End + 0x061, // Size: 1, Flags: Private, Owner, SpecialInfo
+ MaxDamage = ObjectFields.End + 0x062, // Size: 1, Flags: Private, Owner, SpecialInfo
+ MinOffHandDamage = ObjectFields.End + 0x063, // Size: 1, Flags: Private, Owner, SpecialInfo
+ MaxOffHandDamage = ObjectFields.End + 0x064, // Size: 1, Flags: Private, Owner, SpecialInfo
+ Bytes1 = ObjectFields.End + 0x065, // Size: 1, Flags: Public
+ PetNumber = ObjectFields.End + 0x066, // Size: 1, Flags: Public
+ PetNameTimestamp = ObjectFields.End + 0x067, // Size: 1, Flags: Public
+ PetExperience = ObjectFields.End + 0x068, // Size: 1, Flags: Owner
+ PetNextLevelExp = ObjectFields.End + 0x069, // Size: 1, Flags: Owner
+ ModCastSpeed = ObjectFields.End + 0x06a, // Size: 1, Flags: Public
+ ModCastHaste = ObjectFields.End + 0x06b, // Size: 1, Flags: Public
+ ModHaste = ObjectFields.End + 0x06c, // Size: 1, Flags: Public
+ ModRangedHaste = ObjectFields.End + 0x06d, // Size: 1, Flags: Public
+ ModHasteRegen = ObjectFields.End + 0x06e, // Size: 1, Flags: Public
+ ModTimeRate = ObjectFields.End + 0x06f, // Size: 1, Flags: Public
+ CreatedBySpell = ObjectFields.End + 0x070, // Size: 1, Flags: Public
+ NpcFlags = ObjectFields.End + 0x071, // Size: 2, Flags: Public, Dynamic
+ NpcEmotestate = ObjectFields.End + 0x073, // Size: 1, Flags: Public
+ Stat = ObjectFields.End + 0x074, // Size: 4, Flags: Private, Owner
+ PosStat = ObjectFields.End + 0x078, // Size: 4, Flags: Private, Owner
+ NegStat = ObjectFields.End + 0x07c, // Size: 4, Flags: Private, Owner
+ Resistances = ObjectFields.End + 0x080, // Size: 7, Flags: Private, Owner, SpecialInfo
+ ResistanceBuffModsPositive = ObjectFields.End + 0x087, // Size: 7, Flags: Private, Owner
+ ResistanceBuffModsNegative = ObjectFields.End + 0x08e, // Size: 7, Flags: Private, Owner
+ ModBonusArmor = ObjectFields.End + 0x095, // Size: 1, Flags: Private, Owner
+ BaseMana = ObjectFields.End + 0x096, // Size: 1, Flags: Public
+ BaseHealth = ObjectFields.End + 0x097, // Size: 1, Flags: Private, Owner
+ Bytes2 = ObjectFields.End + 0x098, // Size: 1, Flags: Public
+ AttackPower = ObjectFields.End + 0x099, // Size: 1, Flags: Private, Owner
+ AttackPowerModPos = ObjectFields.End + 0x09a, // Size: 1, Flags: Private, Owner
+ AttackPowerModNeg = ObjectFields.End + 0x09b, // Size: 1, Flags: Private, Owner
+ AttackPowerMultiplier = ObjectFields.End + 0x09c, // Size: 1, Flags: Private, Owner
+ RangedAttackPower = ObjectFields.End + 0x09d, // Size: 1, Flags: Private, Owner
+ RangedAttackPowerModPos = ObjectFields.End + 0x09e, // Size: 1, Flags: Private, Owner
+ RangedAttackPowerModNeg = ObjectFields.End + 0x09f, // Size: 1, Flags: Private, Owner
+ RangedAttackPowerMultiplier = ObjectFields.End + 0x0a0, // Size: 1, Flags: Private, Owner
+ AttackSpeedAura = ObjectFields.End + 0x0a1, // Size: 1, Flags: Private, Owner
+ MinRangedDamage = ObjectFields.End + 0x0a2, // Size: 1, Flags: Private, Owner
+ MaxRangedDamage = ObjectFields.End + 0x0a3, // Size: 1, Flags: Private, Owner
+ PowerCostModifier = ObjectFields.End + 0x0a4, // Size: 7, Flags: Private, Owner
+ PowerCostMultiplier = ObjectFields.End + 0x0ab, // Size: 7, Flags: Private, Owner
+ MaxHealthModifier = ObjectFields.End + 0x0b2, // Size: 1, Flags: Private, Owner
+ HoverHeight = ObjectFields.End + 0x0b3, // Size: 1, Flags: Public
+ MinItemLevelCutoff = ObjectFields.End + 0x0b4, // Size: 1, Flags: Public
+ MinItemLevel = ObjectFields.End + 0x0b5, // Size: 1, Flags: Public
+ Maxitemlevel = ObjectFields.End + 0x0b6, // Size: 1, Flags: Public
+ WildBattlepetLevel = ObjectFields.End + 0x0b7, // Size: 1, Flags: Public
+ BattlepetCompanionNameTimestamp = ObjectFields.End + 0x0b8, // Size: 1, Flags: Public
+ InteractSpellid = ObjectFields.End + 0x0b9, // Size: 1, Flags: Public
+ StateSpellVisualId = ObjectFields.End + 0x0ba, // Size: 1, Flags: Dynamic, Urgent
+ StateAnimId = ObjectFields.End + 0x0bb, // Size: 1, Flags: Dynamic, Urgent
+ StateAnimKitId = ObjectFields.End + 0x0bc, // Size: 1, Flags: Dynamic, Urgent
+ StateWorldEffectId = ObjectFields.End + 0x0bd, // Size: 4, Flags: Dynamic, Urgent
+ ScaleDuration = ObjectFields.End + 0x0c1, // Size: 1, Flags: Public
+ LooksLikeMountId = ObjectFields.End + 0x0c2, // Size: 1, Flags: Public
+ LooksLikeCreatureId = ObjectFields.End + 0x0c3, // Size: 1, Flags: Public
+ LookAtControllerId = ObjectFields.End + 0x0c4, // Size: 1, Flags: Public
+ LookAtControllerTarget = ObjectFields.End + 0x0c5, // Size: 4, Flags: Public
+ End = ObjectFields.End + 0x0c9
}
public enum UnitDynamicFields
@@ -205,101 +207,101 @@ namespace Framework.Constants
CurrentBattlePetBreedQuality = UnitFields.End + 0x366, // Size: 1, Flags: Public
Prestige = UnitFields.End + 0x367, // Size: 1, Flags: Public
HonorLevel = UnitFields.End + 0x368, // Size: 1, Flags: Public
- InvSlotHead = UnitFields.End + 0x369, // Size: 748, Flags: Private
+ InvSlotHead = UnitFields.End + 0x369, // Size: 780, Flags: Private
EndNotSelf = UnitFields.End + 0x369,
- Farsight = UnitFields.End + 0x655, // Size: 4, Flags: Private
- SummonedBattlePetId = UnitFields.End + 0x659, // Size: 4, Flags: Private
- KnownTitles = UnitFields.End + 0x65d, // Size: 12, Flags: Private
- Coinage = UnitFields.End + 0x669, // Size: 2, Flags: Private
- Xp = UnitFields.End + 0x66b, // Size: 1, Flags: Private
- NextLevelXp = UnitFields.End + 0x66c, // Size: 1, Flags: Private
- SkillLineId = UnitFields.End + 0x66d, // Size: 448, Flags: Private
- SkillLineStep = UnitFields.End + 0x6AD,
- SkillLineRank = UnitFields.End + 0x6ED,
- SkillLineSubStartRank = UnitFields.End + 0x72D,
- SkillLineMaxRank = UnitFields.End + 0x76D,
- SkillLineTempBonus = UnitFields.End + 0x7AD,
- SkillLinePermBonus = UnitFields.End + 0x7ED,
- CharacterPoints = UnitFields.End + 0x82d, // Size: 1, Flags: Private
- MaxTalentTiers = UnitFields.End + 0x82e, // Size: 1, Flags: Private
- TrackCreatures = UnitFields.End + 0x82f, // Size: 1, Flags: Private
- TrackResources = UnitFields.End + 0x830, // Size: 1, Flags: Private
- Expertise = UnitFields.End + 0x831, // Size: 1, Flags: Private
- OffhandExpertise = UnitFields.End + 0x832, // Size: 1, Flags: Private
- RangedExpertise = UnitFields.End + 0x833, // Size: 1, Flags: Private
- CombatRatingExpertise = UnitFields.End + 0x834, // Size: 1, Flags: Private
- BlockPercentage = UnitFields.End + 0x835, // Size: 1, Flags: Private
- DodgePercentage = UnitFields.End + 0x836, // Size: 1, Flags: Private
- DodgePercentageFromAttribute = UnitFields.End + 0x837, // Size: 1, Flags: Private
- ParryPercentage = UnitFields.End + 0x838, // Size: 1, Flags: Private
- ParryPercentageFromAttribute = UnitFields.End + 0x839, // Size: 1, Flags: Private
- CritPercentage = UnitFields.End + 0x83a, // Size: 1, Flags: Private
- RangedCritPercentage = UnitFields.End + 0x83b, // Size: 1, Flags: Private
- OffhandCritPercentage = UnitFields.End + 0x83c, // Size: 1, Flags: Private
- SpellCritPercentage1 = UnitFields.End + 0x83d, // Size: 1, Flags: Private
- ShieldBlock = UnitFields.End + 0x83e, // Size: 1, Flags: Private
- ShieldBlockCritPercentage = UnitFields.End + 0x83f, // Size: 1, Flags: Private
- Mastery = UnitFields.End + 0x840, // Size: 1, Flags: Private
- Speed = UnitFields.End + 0x841, // Size: 1, Flags: Private
- Lifesteal = UnitFields.End + 0x842, // Size: 1, Flags: Private
- Avoidance = UnitFields.End + 0x843, // Size: 1, Flags: Private
- Sturdiness = UnitFields.End + 0x844, // Size: 1, Flags: Private
- Versatility = UnitFields.End + 0x845, // Size: 1, Flags: Private
- VersatilityBonus = UnitFields.End + 0x846, // Size: 1, Flags: Private
- FieldPvpPowerDamage = UnitFields.End + 0x847, // Size: 1, Flags: Private
- FieldPvpPowerHealing = UnitFields.End + 0x848, // Size: 1, Flags: Private
- ExploredZones1 = UnitFields.End + 0x849, // Size: 320, Flags: PRIVATE
- RestInfo = UnitFields.End + 0x989, // Size: 4, Flags: Private
- ModDamageDonePos = UnitFields.End + 0x98d, // Size: 7, Flags: Private
- ModDamageDoneNeg = UnitFields.End + 0x994, // Size: 7, Flags: Private
- ModDamageDonePct = UnitFields.End + 0x99b, // Size: 7, Flags: Private
- ModHealingDonePos = UnitFields.End + 0x9a2, // Size: 1, Flags: Private
- ModHealingPct = UnitFields.End + 0x9a3, // Size: 1, Flags: Private
- ModHealingDonePct = UnitFields.End + 0x9a4, // Size: 1, Flags: Private
- ModPeriodicHealingDonePercent = UnitFields.End + 0x9a5, // Size: 1, Flags: Private
- WeaponDmgMultipliers = UnitFields.End + 0x9a6, // Size: 3, Flags: Private
- WeaponAtkSpeedMultipliers = UnitFields.End + 0x9a9, // Size: 3, Flags: Private
- ModSpellPowerPct = UnitFields.End + 0x9ac, // Size: 1, Flags: Private
- ModResiliencePercent = UnitFields.End + 0x9ad, // Size: 1, Flags: Private
- OverrideSpellPowerByApPct = UnitFields.End + 0x9ae, // Size: 1, Flags: Private
- OverrideApBySpellPowerPercent = UnitFields.End + 0x9af, // Size: 1, Flags: Private
- ModTargetResistance = UnitFields.End + 0x9b0, // Size: 1, Flags: Private
- ModTargetPhysicalResistance = UnitFields.End + 0x9b1, // Size: 1, Flags: Private
- LocalFlags = UnitFields.End + 0x9b2, // Size: 1, Flags: Private
- FieldBytes = UnitFields.End + 0x9b3, // Size: 1, Flags: Private
- SelfResSpell = UnitFields.End + 0x9b4, // Size: 1, Flags: Private
- PvpMedals = UnitFields.End + 0x9b5, // Size: 1, Flags: Private
- BuyBackPrice1 = UnitFields.End + 0x9b6, // Size: 12, Flags: Private
- BuyBackTimestamp1 = UnitFields.End + 0x9c2, // Size: 12, Flags: Private
- Kills = UnitFields.End + 0x9ce, // Size: 1, Flags: Private
- LifetimeHonorableKills = UnitFields.End + 0x9cf, // Size: 1, Flags: Private
- WatchedFactionIndex = UnitFields.End + 0x9d0, // Size: 1, Flags: Private
- CombatRating1 = UnitFields.End + 0x9d1, // Size: 32, Flags: Private
- ArenaTeamInfo11 = UnitFields.End + 0x9f1, // Size: 42, Flags: Private
- MaxLevel = UnitFields.End + 0xa1b, // Size: 1, Flags: Private
- ScalingLevelDelta = UnitFields.End + 0xa1c, // Size: 1, Flags: Private
- MaxCreatureScalingLevel = UnitFields.End + 0xa1d, // Size: 1, Flags: Private
- NoReagentCost1 = UnitFields.End + 0xa1e, // Size: 4, Flags: Private
- PetSpellPower = UnitFields.End + 0xa22, // Size: 1, Flags: Private
- Researching1 = UnitFields.End + 0xa23, // Size: 10, Flags: Private
- ProfessionSkillLine1 = UnitFields.End + 0xa2d, // Size: 2, Flags: Private
- UiHitModifier = UnitFields.End + 0xa2f, // Size: 1, Flags: Private
- UiSpellHitModifier = UnitFields.End + 0xa30, // Size: 1, Flags: Private
- HomeRealmTimeOffset = UnitFields.End + 0xa31, // Size: 1, Flags: Private
- ModPetHaste = UnitFields.End + 0xa32, // Size: 1, Flags: Private
- FieldBytes2 = UnitFields.End + 0xa33, // Size: 1, Flags: Private
- FieldBytes3 = UnitFields.End + 0xa34, // Size: 1, Flags: Private, UrgentSelfOnly
- LfgBonusFactionId = UnitFields.End + 0xa35, // Size: 1, Flags: Private
- LootSpecId = UnitFields.End + 0xa36, // Size: 1, Flags: Private
- OverrideZonePvpType = UnitFields.End + 0xa37, // Size: 1, Flags: Private, UrgentSelfOnly
- BagSlotFlags = UnitFields.End + 0xa38, // Size: 4, Flags: Private
- BankBagSlotFlags = UnitFields.End + 0xa3c, // Size: 7, Flags: Private
- InsertItemsLeftToRight = UnitFields.End + 0xa43, // Size: 1, Flags: Private
- QuestCompleted = UnitFields.End + 0xa44, // Size: 1750, Flags: Private
- Honor = UnitFields.End + 0x111a, // Size: 1, Flags: Private
- HonorNextLevel = UnitFields.End + 0x111b, // Size: 1, Flags: Private
- End = UnitFields.End + 0x111C
+ Farsight = UnitFields.End + 0x675, // Size: 4, Flags: Private
+ SummonedBattlePetId = UnitFields.End + 0x679, // Size: 4, Flags: Private
+ KnownTitles = UnitFields.End + 0x67d, // Size: 12, Flags: Private
+ Coinage = UnitFields.End + 0x689, // Size: 2, Flags: Private
+ Xp = UnitFields.End + 0x68b, // Size: 1, Flags: Private
+ NextLevelXp = UnitFields.End + 0x68c, // Size: 1, Flags: Private
+ TrialXp = UnitFields.End + 0x68d, // Size: 1, Flags: Private
+ SkillLineId = UnitFields.End + 0x68e, // Size: 448, Flags: Private
+ SkillLineStep = UnitFields.End + 0x6ce,
+ SkillLineRank = UnitFields.End + 0x70e,
+ SkillLineSubRank = UnitFields.End + 0x74e,
+ SkillLineMaxRank = UnitFields.End + 0x78c,
+ SkillLineTempBonus = UnitFields.End + 0x7ce,
+ SkillLinePermBonus = UnitFields.End + 0x80e,
+ CharacterPoints = UnitFields.End + 0x84e, // Size: 1, Flags: Private
+ MaxTalentTiers = UnitFields.End + 0x84f, // Size: 1, Flags: Private
+ TrackCreatures = UnitFields.End + 0x850, // Size: 1, Flags: Private
+ TrackResources = UnitFields.End + 0x851, // Size: 1, Flags: Private
+ Expertise = UnitFields.End + 0x852, // Size: 1, Flags: Private
+ OffhandExpertise = UnitFields.End + 0x853, // Size: 1, Flags: Private
+ RangedExpertise = UnitFields.End + 0x854, // Size: 1, Flags: Private
+ CombatRatingExpertise = UnitFields.End + 0x855, // Size: 1, Flags: Private
+ BlockPercentage = UnitFields.End + 0x856, // Size: 1, Flags: Private
+ DodgePercentage = UnitFields.End + 0x857, // Size: 1, Flags: Private
+ DodgePercentageFromAttribute = UnitFields.End + 0x858, // Size: 1, Flags: Private
+ ParryPercentage = UnitFields.End + 0x859, // Size: 1, Flags: Private
+ ParryPercentageFromAttribute = UnitFields.End + 0x85a, // Size: 1, Flags: Private
+ CritPercentage = UnitFields.End + 0x85b, // Size: 1, Flags: Private
+ RangedCritPercentage = UnitFields.End + 0x85c, // Size: 1, Flags: Private
+ OffhandCritPercentage = UnitFields.End + 0x85d, // Size: 1, Flags: Private
+ SpellCritPercentage1 = UnitFields.End + 0x85e, // Size: 1, Flags: Private
+ ShieldBlock = UnitFields.End + 0x85f, // Size: 1, Flags: Private
+ ShieldBlockCritPercentage = UnitFields.End + 0x860, // Size: 1, Flags: Private
+ Mastery = UnitFields.End + 0x861, // Size: 1, Flags: Private
+ Speed = UnitFields.End + 0x862, // Size: 1, Flags: Private
+ Lifesteal = UnitFields.End + 0x863, // Size: 1, Flags: Private
+ Avoidance = UnitFields.End + 0x864, // Size: 1, Flags: Private
+ Sturdiness = UnitFields.End + 0x865, // Size: 1, Flags: Private
+ Versatility = UnitFields.End + 0x866, // Size: 1, Flags: Private
+ VersatilityBonus = UnitFields.End + 0x867, // Size: 1, Flags: Private
+ PvpPowerDamage = UnitFields.End + 0x868, // Size: 1, Flags: Private
+ PvpPowerHealing = UnitFields.End + 0x869, // Size: 1, Flags: Private
+ ExploredZones1 = UnitFields.End + 0x86a, // Size: 320, Flags: Private
+ RestInfo = UnitFields.End + 0x9aa, // Size: 4, Flags: Private
+ ModDamageDonePos = UnitFields.End + 0x9ae, // Size: 7, Flags: Private
+ ModDamageDoneNeg = UnitFields.End + 0x9b5, // Size: 7, Flags: Private
+ ModDamageDonePct = UnitFields.End + 0x9bc, // Size: 7, Flags: Private
+ ModHealingDonePos = UnitFields.End + 0x9c3, // Size: 1, Flags: Private
+ ModHealingPct = UnitFields.End + 0x9c4, // Size: 1, Flags: Private
+ ModHealingDonePct = UnitFields.End + 0x9c5, // Size: 1, Flags: Private
+ ModPeriodicHealingDonePercent = UnitFields.End + 0x9c6, // Size: 1, Flags: Private
+ WeaponDmgMultipliers = UnitFields.End + 0x9c7, // Size: 3, Flags: Private
+ WeaponAtkSpeedMultipliers = UnitFields.End + 0x9ca, // Size: 3, Flags: Private
+ ModSpellPowerPct = UnitFields.End + 0x9cd, // Size: 1, Flags: Private
+ ModResiliencePercent = UnitFields.End + 0x9ce, // Size: 1, Flags: Private
+ OverrideSpellPowerByApPct = UnitFields.End + 0x9cf, // Size: 1, Flags: Private
+ OverrideApBySpellPowerPercent = UnitFields.End + 0x9d0, // Size: 1, Flags: Private
+ ModTargetResistance = UnitFields.End + 0x9d1, // Size: 1, Flags: Private
+ ModTargetPhysicalResistance = UnitFields.End + 0x9d2, // Size: 1, Flags: Private
+ LocalFlags = UnitFields.End + 0x9d3, // Size: 1, Flags: Private
+ FieldBytes = UnitFields.End + 0x9d4, // Size: 1, Flags: Private
+ PvpMedals = UnitFields.End + 0x9d5, // Size: 1, Flags: Private
+ BuyBackPrice1 = UnitFields.End + 0x9d6, // Size: 12, Flags: Private
+ BuyBackTimestamp1 = UnitFields.End + 0x9e2, // Size: 12, Flags: Private
+ Kills = UnitFields.End + 0x9ee, // Size: 1, Flags: Private
+ LifetimeHonorableKills = UnitFields.End + 0x9ef, // Size: 1, Flags: Private
+ WatchedFactionIndex = UnitFields.End + 0x9f0, // Size: 1, Flags: Private
+ CombatRating1 = UnitFields.End + 0x9f1, // Size: 32, Flags: Private
+ ArenaTeamInfo11 = UnitFields.End + 0xa11, // Size: 42, Flags: Private
+ MaxLevel = UnitFields.End + 0xa3b, // Size: 1, Flags: Private
+ ScalingLevelDelta = UnitFields.End + 0xa3c, // Size: 1, Flags: Private
+ MaxCreatureScalingLevel = UnitFields.End + 0xa3d, // Size: 1, Flags: Private
+ NoReagentCost1 = UnitFields.End + 0xa3e, // Size: 4, Flags: Private
+ PetSpellPower = UnitFields.End + 0xa42, // Size: 1, Flags: Private
+ Researching1 = UnitFields.End + 0xa43, // Size: 10, Flags: Private
+ ProfessionSkillLine1 = UnitFields.End + 0xa4d, // Size: 2, Flags: Private
+ UiHitModifier = UnitFields.End + 0xa4f, // Size: 1, Flags: Private
+ UiSpellHitModifier = UnitFields.End + 0xa50, // Size: 1, Flags: Private
+ HomeRealmTimeOffset = UnitFields.End + 0xa51, // Size: 1, Flags: Private
+ ModPetHaste = UnitFields.End + 0xa52, // Size: 1, Flags: Private
+ FieldBytes2 = UnitFields.End + 0xa53, // Size: 1, Flags: Private
+ FieldBytes3 = UnitFields.End + 0xa54, // Size: 1, Flags: Private, UrgentSelfOnly
+ LfgBonusFactionId = UnitFields.End + 0xa55, // Size: 1, Flags: Private
+ LootSpecId = UnitFields.End + 0xa56, // Size: 1, Flags: Private
+ OverrideZonePvpType = UnitFields.End + 0xa57, // Size: 1, Flags: Private, UrgentSelfOnly
+ BagSlotFlags = UnitFields.End + 0xa58, // Size: 4, Flags: Private
+ BankBagSlotFlags = UnitFields.End + 0xa5c, // Size: 7, Flags: Private
+ InsertItemsLeftToRight = UnitFields.End + 0xa63, // Size: 1, Flags: Private
+ QuestCompleted = UnitFields.End + 0xa64, // Size: 1750, Flags: Private
+ Honor = UnitFields.End + 0x113a, // Size: 1, Flags: Private
+ HonorNextLevel = UnitFields.End + 0x113b, // Size: 1, Flags: Private
+ End = UnitFields.End + 0x113c,
}
public enum PlayerDynamicFields
@@ -313,11 +315,12 @@ namespace Framework.Constants
Toys = UnitDynamicFields.End + 0x006, // Flags: Private
Transmog = UnitDynamicFields.End + 0x007, // Flags: PRIVATE
ConditionalTransmog = UnitDynamicFields.End + 0x008, // Flags: PRIVATE
- CharacterRestrictions = UnitDynamicFields.End + 0x009, // Flags: PRIVATE
- SpellPctModByLabel = UnitDynamicFields.End + 0x00A, // Flags: PRIVATE
- SpellFlatModByLabel = UnitDynamicFields.End + 0x00B, // Flags: PRIVATE
- ArenaCooldowns = UnitDynamicFields.End + 0x00C, // Flags: PUBLIC
- End = UnitDynamicFields.End + 0x00D
+ SelfResSpells = UnitDynamicFields.End + 0x009, // Flags: Private
+ CharacterRestrictions = UnitDynamicFields.End + 0x00a, // Flags: Private
+ SpellPctModByLabel = UnitDynamicFields.End + 0x00b, // Flags: Private
+ SpellFlatModByLabel = UnitDynamicFields.End + 0x00c, // Flags: Private
+ ArenaCooldowns = UnitDynamicFields.End + 0x00d, // Flags: Public
+ End = UnitDynamicFields.End + 0x00e,
}
public enum GameObjectFields
diff --git a/Source/Framework/Database/Databases/CharacterDatabase.cs b/Source/Framework/Database/Databases/CharacterDatabase.cs
index c0b2bfd0d..434d7c45c 100644
--- a/Source/Framework/Database/Databases/CharacterDatabase.cs
+++ b/Source/Framework/Database/Databases/CharacterDatabase.cs
@@ -49,21 +49,21 @@ namespace Framework.Database
"subject, deliver_time, expire_time, money, has_items FROM mail WHERE receiver = ? ");
PrepareStatement(CharStatements.SEL_MAIL_LIST_ITEMS, "SELECT itemEntry,count FROM item_instance WHERE guid = ?");
PrepareStatement(CharStatements.SEL_ENUM, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
- "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup " +
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " +
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
PrepareStatement(CharStatements.SEL_ENUM_DECLINED_NAME, "SELECT c.guid, c.name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, " +
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " +
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " +
+ "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " +
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.account = ? AND c.deleteInfos_Name IS NULL");
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, c.position_x, c.position_y, c.position_z, " +
- "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup " +
+ "gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild " +
"FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
PrepareStatement(CharStatements.SEL_UNDELETE_ENUM_DECLINED_NAME, "SELECT c.guid, c.deleteInfos_Name, c.race, c.class, c.gender, c.skin, c.face, c.hairStyle, c.hairColor, c.facialStyle, c.customDisplay1, c.customDisplay2, c.customDisplay3, c.level, c.zone, c.map, " +
"c.position_x, c.position_y, c.position_z, gm.guildid, c.playerFlags, c.at_login, cp.entry, cp.modelid, cp.level, c.equipmentCache, " +
- "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " +
+ "cb.guid, c.slot, c.logout_time, c.activeTalentGroup, c.lastLoginBuild, cd.genitive FROM characters AS c LEFT JOIN character_pet AS cp ON c.guid = cp.owner AND cp.slot = ? " +
"LEFT JOIN character_declinedname AS cd ON c.guid = cd.guid LEFT JOIN guild_member AS gm ON c.guid = gm.guid " +
"LEFT JOIN character_banned AS cb ON c.guid = cb.guid AND cb.active = 1 WHERE c.deleteInfos_Account = ? AND c.deleteInfos_Name IS NOT NULL");
PrepareStatement(CharStatements.SEL_FREE_NAME, "SELECT name, at_login FROM characters WHERE guid = ? AND NOT EXISTS (SELECT NULL FROM characters WHERE name = ?)");
@@ -77,7 +77,7 @@ namespace Framework.Database
PrepareStatement(CharStatements.DEL_BATTLEGROUND_RANDOM, "DELETE FROM character_battleground_random WHERE guid = ?");
PrepareStatement(CharStatements.INS_BATTLEGROUND_RANDOM, "INSERT INTO character_battleground_random (guid) VALUES (?)");
- PrepareStatement(CharStatements.SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, bankSlots, restState, playerFlags, playerFlagsEx, " +
+ PrepareStatement(CharStatements.SEL_CHARACTER, "SELECT c.guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " +
"position_x, position_y, position_z, map, orientation, taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, " +
"resettalents_time, primarySpecialization, trans_x, trans_y, trans_z, trans_o, transguid, extra_flags, stable_slots, at_login, zone, online, death_expire_time, taxi_path, dungeonDifficulty, " +
"totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, " +
@@ -418,18 +418,18 @@ namespace Framework.Database
PrepareStatement(CharStatements.DEL_LFG_DATA, "DELETE FROM lfg_data WHERE guid = ?");
// Player saving
- PrepareStatement(CharStatements.INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, bankSlots, restState, playerFlags, playerFlagsEx, " +
+ PrepareStatement(CharStatements.INS_CHARACTER, "INSERT INTO characters (guid, account, name, race, class, gender, level, xp, money, skin, face, hairStyle, hairColor, facialStyle, customDisplay1, customDisplay2, customDisplay3, inventorySlots, bankSlots, restState, playerFlags, playerFlagsEx, " +
"map, instance_id, dungeonDifficulty, raidDifficulty, legacyRaidDifficulty, position_x, position_y, position_z, orientation, trans_x, trans_y, trans_z, trans_o, transguid, " +
"taximask, cinematic, totaltime, leveltime, rest_bonus, logout_time, is_logout_resting, resettalents_cost, resettalents_time, primarySpecialization, " +
"extra_flags, stable_slots, at_login, zone, death_expire_time, taxi_path, totalKills, todayKills, yesterdayKills, chosenTitle, watchedFaction, drunk, health, power1, power2, power3, " +
- "power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels) VALUES " +
- "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
- PrepareStatement(CharStatements.UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," +
+ "power4, power5, power6, latency, activeTalentGroup, lootSpecId, exploredZones, equipmentCache, knownTitles, actionBars, grantableLevels, lastLoginBuild) VALUES " +
+ "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
+ PrepareStatement(CharStatements.UPD_CHARACTER, "UPDATE characters SET name=?,race=?,class=?,gender=?,level=?,xp=?,money=?,skin=?,face=?,hairStyle=?,hairColor=?,facialStyle=?,customDisplay1=?,customDisplay2=?,customDisplay3=?,inventorySlots=?,bankSlots=?,restState=?,playerFlags=?,playerFlagsEx=?," +
"map=?,instance_id=?,dungeonDifficulty=?,raidDifficulty=?,legacyRaidDifficulty=?,position_x=?,position_y=?,position_z=?,orientation=?,trans_x=?,trans_y=?,trans_z=?,trans_o=?,transguid=?,taximask=?,cinematic=?,totaltime=?,leveltime=?,rest_bonus=?," +
"logout_time=?,is_logout_resting=?,resettalents_cost=?,resettalents_time=?,primarySpecialization=?,extra_flags=?,stable_slots=?,at_login=?,zone=?,death_expire_time=?,taxi_path=?," +
"totalKills=?,todayKills=?,yesterdayKills=?,chosenTitle=?," +
"watchedFaction=?,drunk=?,health=?,power1=?,power2=?,power3=?,power4=?,power5=?,power6=?,latency=?,activeTalentGroup=?,lootSpecId=?,exploredZones=?," +
- "equipmentCache=?,knownTitles=?,actionBars=?,grantableLevels=?,online=?,honor=?,honorLevel=?,prestigeLevel=?,honorRestState=?,honorRestBonus=? WHERE guid=?");
+ "equipmentCache=?,knownTitles=?,actionBars=?,grantableLevels=?,online=?,honor=?,honorLevel=?,prestigeLevel=?,honorRestState=?,honorRestBonus=?,lastLoginBuild=? WHERE guid=?");
PrepareStatement(CharStatements.UPD_ADD_AT_LOGIN_FLAG, "UPDATE characters SET at_login = at_login | ? WHERE guid = ?");
PrepareStatement(CharStatements.UPD_REM_AT_LOGIN_FLAG, "UPDATE characters set at_login = at_login & ~ ? WHERE guid = ?");
diff --git a/Source/Framework/Logging/Appender.cs b/Source/Framework/Logging/Appender.cs
index 96e7726b1..7229caf5b 100644
--- a/Source/Framework/Logging/Appender.cs
+++ b/Source/Framework/Logging/Appender.cs
@@ -174,7 +174,7 @@ abstract class Appender
public void Write(LogMessage message)
{
- if (_level == LogLevel.Disabled || _level > message.level)
+ if (_level == LogLevel.Disabled || (_level != LogLevel.Fatal && _level > message.level))
return;
StringBuilder ss = new StringBuilder();
diff --git a/Source/Game/Entities/Creature/Gossip.cs b/Source/Game/Entities/Creature/Gossip.cs
index cf11565ae..a4e6225cb 100644
--- a/Source/Game/Entities/Creature/Gossip.cs
+++ b/Source/Game/Entities/Creature/Gossip.cs
@@ -282,6 +282,7 @@ namespace Game.Misc
text.QuestID = (int)questID;
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();
@@ -375,6 +376,7 @@ namespace Game.Misc
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
@@ -497,6 +499,7 @@ namespace Game.Misc
packet.Info.QuestID = quest.Id;
packet.Info.QuestType = (int)quest.Type;
packet.Info.QuestLevel = quest.Level;
+ packet.Info.QuestMaxScalingLevel = quest.MaxScalingLevel;
packet.Info.QuestPackageID = quest.PackageID;
packet.Info.QuestMinLevel = quest.MinLevel;
packet.Info.QuestSortID = quest.QuestSortID;
diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs
index 95a63e585..a1fa16fa4 100644
--- a/Source/Game/Entities/Player/Player.DB.cs
+++ b/Source/Game/Entities/Player/Player.DB.cs
@@ -2370,8 +2370,8 @@ namespace Game.Entities
SetUInt32Value(UnitFields.Level, result.Read(6));
SetXP(result.Read(7));
- _LoadIntoDataField(result.Read(65), (int)PlayerFields.ExploredZones1, PlayerConst.ExploredZonesSize);
- _LoadIntoDataField(result.Read(66), (int)PlayerFields.KnownTitles, PlayerConst.KnowTitlesSize * 2);
+ _LoadIntoDataField(result.Read(66), (int)PlayerFields.ExploredZones1, PlayerConst.ExploredZonesSize);
+ _LoadIntoDataField(result.Read(67), (int)PlayerFields.KnownTitles, PlayerConst.KnowTitlesSize * 2);
SetObjectScale(1.0f);
SetFloatValue(UnitFields.HoverHeight, 1.0f);
@@ -2397,12 +2397,13 @@ namespace Game.Entities
SetByteValue(PlayerFields.Bytes2, PlayerFieldOffsets.Bytes2OffsetFacialStyle, result.Read(13));
for (byte i = 0; i < PlayerConst.CustomDisplaySize; ++i)
SetByteValue(PlayerFields.Bytes2, (byte)(PlayerFieldOffsets.Bytes2OffsetCustomDisplayOption + i), customDisplay[i]);
- SetBankBagSlotCount(result.Read(17));
+ SetInventorySlotCount(result.Read(17));
+ SetBankBagSlotCount(result.Read(18));
SetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetGender, (byte)gender);
- SetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetInebriation, result.Read(54));
- SetUInt32Value(PlayerFields.Flags, result.Read(19));
- SetUInt32Value(PlayerFields.FlagsEx, result.Read(20));
- SetInt32Value(PlayerFields.WatchedFactionIndex, (int)result.Read(53));
+ SetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetInebriation, result.Read(55));
+ SetUInt32Value(PlayerFields.Flags, result.Read(20));
+ SetUInt32Value(PlayerFields.FlagsEx, result.Read(21));
+ SetInt32Value(PlayerFields.WatchedFactionIndex, (int)result.Read(54));
if (!ValidateAppearance((Race)result.Read(3), (Class)result.Read(4), (Gender)gender,
GetByteValue(PlayerFields.Bytes, PlayerFieldOffsets.BytesOffsetHairStyleId),
@@ -2416,9 +2417,9 @@ namespace Game.Entities
}
// set which actionbars the client has active - DO NOT REMOVE EVER AGAIN (can be changed though, if it does change fieldwise)
- SetByteValue(PlayerFields.FieldBytes, PlayerFieldOffsets.FieldBytesOffsetActionBarToggles, result.Read(67));
+ SetByteValue(PlayerFields.FieldBytes, PlayerFieldOffsets.FieldBytesOffsetActionBarToggles, result.Read(68));
- m_fishingSteps = result.Read(71);
+ m_fishingSteps = result.Read(72);
InitDisplayIds();
@@ -2442,20 +2443,20 @@ namespace Game.Entities
InitPrimaryProfessions(); // to max set before any spell loaded
// init saved position, and fix it later if problematic
- ulong transLowGUID = result.Read(40);
+ ulong transLowGUID = result.Read(41);
- Relocate(result.Read(21), result.Read(22), result.Read(23), result.Read(25));
+ Relocate(result.Read(22), result.Read(23), result.Read(24), result.Read(26));
- uint mapId = result.Read(24);
- uint instanceId = result.Read(62);
+ uint mapId = result.Read(25);
+ uint instanceId = result.Read(63);
var RelocateToHomebind = new Action(() => { mapId = homebind.GetMapId(); instanceId = 0; Relocate(homebind); });
- SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID((Difficulty)result.Read(48)));
- SetRaidDifficultyID(CheckLoadedRaidDifficultyID((Difficulty)result.Read(69)));
- SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID((Difficulty)result.Read(70)));
+ SetDungeonDifficultyID(CheckLoadedDungeonDifficultyID((Difficulty)result.Read(49)));
+ SetRaidDifficultyID(CheckLoadedRaidDifficultyID((Difficulty)result.Read(70)));
+ SetLegacyRaidDifficultyID(CheckLoadedLegacyRaidDifficultyID((Difficulty)result.Read(71)));
- string taxi_nodes = result.Read(47);
+ string taxi_nodes = result.Read(48);
_LoadGroup(holder.GetResult(PlayerLoginQueryLoad.Group));
@@ -2479,9 +2480,9 @@ namespace Game.Entities
}
_LoadCurrency(holder.GetResult(PlayerLoginQueryLoad.Currency));
- SetUInt32Value(PlayerFields.LifetimeHonorableKills, result.Read(49));
- SetUInt16Value(PlayerFields.Kills, 0, result.Read(50));
- SetUInt16Value(PlayerFields.Kills, 1, result.Read(51));
+ SetUInt32Value(PlayerFields.LifetimeHonorableKills, result.Read(50));
+ SetUInt16Value(PlayerFields.Kills, PlayerFieldOffsets.FieldKillsOffsetTodayKills, result.Read(51));
+ SetUInt16Value(PlayerFields.Kills, PlayerFieldOffsets.FieldKillsOffsetYesterdayKills, result.Read(52));
_LoadBoundInstances(holder.GetResult(PlayerLoginQueryLoad.BoundInstances));
_LoadInstanceTimeRestrictions(holder.GetResult(PlayerLoginQueryLoad.InstanceLockTimes));
@@ -2559,10 +2560,10 @@ namespace Game.Entities
if (transport)
{
- float x = result.Read(36);
- float y = result.Read(37);
- float z = result.Read(38);
- float o = result.Read(39);
+ float x = result.Read(37);
+ float y = result.Read(38);
+ float z = result.Read(39);
+ float o = result.Read(40);
m_movementInfo.transport.pos = new Position(x, y, z, o);
transport.CalculatePassengerPosition(ref x, ref y, ref z, ref o);
@@ -2757,7 +2758,7 @@ namespace Game.Entities
SaveRecallPosition();
long now = Time.UnixTime;
- long logoutTime = result.Read(31);
+ long logoutTime = result.Read(32);
// since last logout (in seconds)
uint time_diff = (uint)(now - logoutTime);
@@ -2770,32 +2771,32 @@ namespace Game.Entities
SetDrunkValue(newDrunkValue);
- m_cinematic = result.Read(27);
- m_PlayedTimeTotal = result.Read(28);
- m_PlayedTimeLevel = result.Read(29);
+ m_cinematic = result.Read(28);
+ m_PlayedTimeTotal = result.Read(29);
+ m_PlayedTimeLevel = result.Read(30);
- SetTalentResetCost(result.Read(33));
- SetTalentResetTime(result.Read(34));
+ SetTalentResetCost(result.Read(34));
+ SetTalentResetTime(result.Read(35));
- m_taxi.LoadTaxiMask(result.Read(26)); // must be before InitTaxiNodesForLevel
+ m_taxi.LoadTaxiMask(result.Read(27)); // must be before InitTaxiNodesForLevel
- PlayerExtraFlags extraflags = (PlayerExtraFlags)result.Read(41);
+ PlayerExtraFlags extraflags = (PlayerExtraFlags)result.Read(42);
- m_stableSlots = result.Read(42);
+ m_stableSlots = result.Read(43);
if (m_stableSlots > 4)
{
Log.outError(LogFilter.Player, "Player can have not more {0} stable slots, but have in DB {1}", 4, m_stableSlots);
m_stableSlots = 4;
}
- atLoginFlags = (AtLoginFlags)result.Read(43);
+ atLoginFlags = (AtLoginFlags)result.Read(44);
// Honor system
// Update Honor kills data
m_lastHonorUpdateTime = logoutTime;
UpdateHonorFields();
- m_deathExpireTime = result.Read(46);
+ m_deathExpireTime = result.Read(47);
if (m_deathExpireTime > now + PlayerConst.MaxDeathCount * PlayerConst.DeathExpireStep)
m_deathExpireTime = now + PlayerConst.MaxDeathCount * PlayerConst.DeathExpireStep - 1;
@@ -2826,19 +2827,19 @@ namespace Game.Entities
InitRunes();
// rest bonus can only be calculated after InitStatsForLevel()
- _restMgr.LoadRestBonus(RestTypes.XP, (PlayerRestState)result.Read(18), result.Read(30));
+ _restMgr.LoadRestBonus(RestTypes.XP, (PlayerRestState)result.Read(19), result.Read(31));
// load skills after InitStatsForLevel because it triggering aura apply also
_LoadSkills(holder.GetResult(PlayerLoginQueryLoad.Skills));
UpdateSkillsForLevel();
- SetPrimarySpecialization(result.Read(35));
- SetActiveTalentGroup(result.Read(63));
+ SetPrimarySpecialization(result.Read(36));
+ SetActiveTalentGroup(result.Read(64));
ChrSpecializationRecord primarySpec = CliDB.ChrSpecializationStorage.LookupByKey(GetPrimarySpecialization());
if (primarySpec == null || primarySpec.ClassID != (byte)GetClass() || GetActiveTalentGroup() >= PlayerConst.MaxSpecializations)
ResetTalentSpecialization();
- uint lootSpecId = result.Read(64);
+ uint lootSpecId = result.Read(65);
ChrSpecializationRecord chrSpec = CliDB.ChrSpecializationStorage.LookupByKey(lootSpecId);
if (chrSpec != null)
{
@@ -2900,7 +2901,7 @@ namespace Game.Entities
// check PLAYER_CHOSEN_TITLE compatibility with PLAYER__FIELD_KNOWN_TITLES
// note: PLAYER__FIELD_KNOWN_TITLES updated at quest status loaded
- uint curTitle = result.Read(52);
+ uint curTitle = result.Read(53);
if (curTitle != 0 && !HasTitle(curTitle))
curTitle = 0;
@@ -2923,7 +2924,7 @@ namespace Game.Entities
UpdateAllStats();
// restore remembered power/health values (but not more max values)
- uint savedHealth = result.Read(55);
+ uint savedHealth = result.Read(56);
SetHealth(savedHealth > GetMaxHealth() ? GetMaxHealth() : savedHealth);
int loadedPowers = 0;
for (PowerType i = 0; i < PowerType.Max; ++i)
@@ -3014,7 +3015,7 @@ namespace Game.Entities
}
// RaF stuff.
- m_grantableLevels = result.Read(68);
+ m_grantableLevels = result.Read(69);
if (GetSession().IsARecruiter() || (GetSession().GetRecruiterId() != 0))
SetFlag(ObjectFields.DynamicFlags, UnitDynFlags.ReferAFriend);
@@ -3036,9 +3037,9 @@ namespace Game.Entities
holder.GetResult(PlayerLoginQueryLoad.GarrisonFollowerAbilities)))
_garrison = garrison;
- _InitHonorLevelOnLoadFromDB(result.Read(72), result.Read(73), result.Read(74));
+ _InitHonorLevelOnLoadFromDB(result.Read(73), result.Read(74), result.Read(75));
- _restMgr.LoadRestBonus(RestTypes.Honor, (PlayerRestState)result.Read(75), result.Read(76));
+ _restMgr.LoadRestBonus(RestTypes.Honor, (PlayerRestState)result.Read(76), result.Read(77));
if (time_diff > 0)
{
//speed collect rest bonus in offline, in logout, far from tavern, city (section/in hour)
@@ -3100,6 +3101,7 @@ namespace Game.Entities
stmt.AddValue(index++, GetByteValue(PlayerFields.Bytes2, PlayerFieldOffsets.Bytes2OffsetFacialStyle));
for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i)
stmt.AddValue(index++, GetByteValue(PlayerFields.Bytes2, (byte)(PlayerFieldOffsets.Bytes2OffsetCustomDisplayOption + i)));
+ stmt.AddValue(index++, GetInventorySlotCount());
stmt.AddValue(index++, GetBankBagSlotCount());
stmt.AddValue(index++, (byte)GetUInt32Value(PlayerFields.RestInfo + PlayerFieldOffsets.RestStateXp));
stmt.AddValue(index++, GetUInt32Value(PlayerFields.Flags));
@@ -3211,6 +3213,7 @@ namespace Game.Entities
stmt.AddValue(index++, GetByteValue(PlayerFields.FieldBytes, PlayerFieldOffsets.FieldBytesOffsetActionBarToggles));
stmt.AddValue(index++, m_grantableLevels);
+ stmt.AddValue(index++, Global.WorldMgr.GetRealm().Build);
}
else
{
@@ -3231,6 +3234,7 @@ namespace Game.Entities
for (int i = 0; i < PlayerConst.CustomDisplaySize; ++i)
stmt.AddValue(index++, GetByteValue(PlayerFields.Bytes2, (byte)(
PlayerFieldOffsets.Bytes2OffsetCustomDisplayOption + i)));
+ stmt.AddValue(index++, GetInventorySlotCount());
stmt.AddValue(index++, GetBankBagSlotCount());
stmt.AddValue(index++, (byte)GetUInt32Value(PlayerFields.RestInfo + PlayerFieldOffsets.RestStateXp));
stmt.AddValue(index++, GetUInt32Value(PlayerFields.Flags));
@@ -3365,6 +3369,7 @@ namespace Game.Entities
stmt.AddValue(index++, GetPrestigeLevel());
stmt.AddValue(index++, (byte)GetUInt32Value(PlayerFields.RestInfo + PlayerFieldOffsets.RestStateHonor));
stmt.AddValue(index++, _restMgr.GetRestBonus(RestTypes.Honor));
+ stmt.AddValue(index++, Global.WorldMgr.GetRealm().Build);
// Index
stmt.AddValue(index, GetGUID().GetCounter());
diff --git a/Source/Game/Entities/Player/Player.Items.cs b/Source/Game/Entities/Player/Player.Items.cs
index 823fd2f92..94c35ca0b 100644
--- a/Source/Game/Entities/Player/Player.Items.cs
+++ b/Source/Game/Entities/Player/Player.Items.cs
@@ -274,7 +274,8 @@ namespace Game.Entities
if (inventory)
{
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -326,7 +327,8 @@ namespace Game.Entities
if (inventory)
{
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -388,7 +390,8 @@ namespace Game.Entities
{
uint TotalCost = 0;
// equipped, backpack, bags itself
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; i++)
TotalCost += DurabilityRepair((ushort)((InventorySlots.Bag0 << 8) | i), cost, discountMod, guildBank);
// items in inventory bags
@@ -556,6 +559,7 @@ namespace Game.Entities
}
// not specific slot or have space for partly store only in specific slot
+ byte inventoryEnd = (byte)(InventorySlots.ItemStart + GetInventorySlotCount());
// in specific bag
if (bag != ItemConst.NullBag)
@@ -597,7 +601,7 @@ namespace Game.Entities
return InventoryResult.ItemMaxCount;
}
- res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, InventorySlots.ItemEnd, dest, pProto, ref count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, inventoryEnd, dest, pProto, ref count, true, pItem, bag, slot);
if (res != InventoryResult.Ok)
{
no_space_count = count + no_similar_count;
@@ -678,7 +682,7 @@ namespace Game.Entities
}
}
- res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, InventorySlots.ItemEnd, dest, pProto, ref count, false, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, inventoryEnd, dest, pProto, ref count, false, pItem, bag, slot);
if (res != InventoryResult.Ok)
{
no_space_count = count + no_similar_count;
@@ -754,7 +758,7 @@ namespace Game.Entities
return InventoryResult.ItemMaxCount;
}
- res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, InventorySlots.ItemEnd, dest, pProto, ref count, true, pItem, bag, slot);
+ res = CanStoreItem_InInventorySlots(InventorySlots.ItemStart, inventoryEnd, dest, pProto, ref count, true, pItem, bag, slot);
if (res != InventoryResult.Ok)
{
no_space_count = count + no_similar_count;
@@ -917,7 +921,8 @@ namespace Game.Entities
uint[] inventoryCounts = new uint[InventorySlots.ItemEnd - InventorySlots.ItemStart];
uint[][] bagCounts = new uint[InventorySlots.BagEnd - InventorySlots.BagStart][];
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
item2 = GetItemByPos(InventorySlots.Bag0, i);
if (item2 && !item2.IsInTrade())
@@ -974,7 +979,7 @@ namespace Game.Entities
// search stack for merge to
if (pProto.GetMaxStackSize() != 1)
{
- for (byte t = InventorySlots.ItemStart; t < InventorySlots.ItemEnd; ++t)
+ for (byte t = InventorySlots.ItemStart; t < inventoryEnd; ++t)
{
item2 = GetItemByPos(InventorySlots.Bag0, t);
if (item2 && item2.CanBeMergedPartlyWith(pProto) == InventoryResult.Ok && inventoryCounts[t - InventorySlots.ItemStart] + item.GetCount() <= pProto.GetMaxStackSize())
@@ -1043,7 +1048,7 @@ namespace Game.Entities
// search free slot
b_found = false;
- for (int t = InventorySlots.ItemStart; t < InventorySlots.ItemEnd; ++t)
+ for (int t = InventorySlots.ItemStart; t < inventoryEnd; ++t)
{
if (inventoryCounts[t - InventorySlots.ItemStart] == 0)
{
@@ -1538,7 +1543,8 @@ namespace Game.Entities
}
}
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -2682,7 +2688,8 @@ namespace Game.Entities
}
public Item GetItemByGuid(ObjectGuid guid)
{
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -2744,7 +2751,8 @@ namespace Game.Entities
public uint GetItemCount(uint item, bool inBankAlso = false, Item skipItem = null)
{
uint count = 0;
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -2761,7 +2769,7 @@ namespace Game.Entities
if (skipItem != null && skipItem.GetTemplate().GetGemProperties() != 0)
{
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; ++i)
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -2874,7 +2882,8 @@ namespace Game.Entities
public Item GetItemByEntry(uint entry)
{
// in inventory
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -2919,7 +2928,8 @@ namespace Game.Entities
{
List- itemList = new List
- ();
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item item = GetItemByPos(InventorySlots.Bag0, i);
if (item != null)
@@ -2974,7 +2984,8 @@ namespace Game.Entities
public bool HasItemCount(uint item, uint count = 1, bool inBankAlso = false)
{
uint tempcount = 0;
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null && pItem.GetEntry() == item && !pItem.IsInTrade())
@@ -3083,7 +3094,7 @@ namespace Game.Entities
return true;
// backpack slots
- if (slot >= InventorySlots.ItemStart && slot < InventorySlots.ItemEnd)
+ if (slot >= InventorySlots.ItemStart && slot < InventorySlots.ItemStart + GetInventorySlotCount())
return true;
// bank main slots
@@ -3115,7 +3126,8 @@ namespace Game.Entities
public Item GetChildItemByGuid(ObjectGuid guid)
{
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
@@ -3136,7 +3148,8 @@ namespace Game.Entities
uint GetItemCountWithLimitCategory(uint limitCategory, Item skipItem)
{
uint count = 0;
- for (byte i = EquipmentSlot.Start; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
@@ -3220,7 +3233,8 @@ namespace Game.Entities
Log.outDebug(LogFilter.Player, "STORAGE: DestroyConjuredItems");
// in inventory
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
@@ -3260,7 +3274,8 @@ namespace Game.Entities
Log.outDebug(LogFilter.Player, "STORAGE: DestroyZoneLimitedItem in map {0} and area {1}", GetMapId(), new_zone);
// in inventory
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
@@ -3873,7 +3888,8 @@ namespace Game.Entities
public bool HasItemTotemCategory(uint TotemCategory)
{
- for (byte i = EquipmentSlot.Start; i < EquipmentSlot.End; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = EquipmentSlot.Start; i < inventoryEnd; ++i)
{
Item item = GetUseableItemByPos(InventorySlots.Bag0, i);
if (item && Global.DB2Mgr.IsTotemCategoryCompatibleWith(item.GetTemplate().GetTotemCategory(), TotemCategory))
@@ -5701,7 +5717,8 @@ namespace Game.Entities
uint remcount = 0;
// in inventory
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item item = GetItemByPos(InventorySlots.Bag0, i);
if (item != null)
@@ -5973,6 +5990,52 @@ namespace Game.Entities
}
}
+ public byte GetInventorySlotCount() { return GetByteValue(PlayerFields.Bytes2, PlayerFieldOffsets.FieldBytes2OffsetNumBackpackSlots); }
+ public void SetInventorySlotCount(byte slots)
+ {
+ //ASSERT(slots <= (INVENTORY_SLOT_ITEM_END - INVENTORY_SLOT_ITEM_START));
+
+ if (slots < GetInventorySlotCount())
+ {
+ List
- unstorableItems = new List
- ();
+
+ for (byte slot = (byte)(InventorySlots.ItemStart + slots); slot < InventorySlots.ItemEnd; ++slot)
+ {
+ Item unstorableItem = GetItemByPos(InventorySlots.Bag0, slot);
+ if (unstorableItem)
+ unstorableItems.Add(unstorableItem);
+ }
+
+ if (!unstorableItems.Empty())
+ {
+ int fullBatches = unstorableItems.Count / SharedConst.MaxMailItems;
+ int remainder = unstorableItems.Count % SharedConst.MaxMailItems;
+ SQLTransaction trans = new SQLTransaction();
+
+ var sendItemsBatch = new Action((batchNumber, batchSize) =>
+ {
+ MailDraft draft = new MailDraft(Global.ObjectMgr.GetCypherString(CypherStrings.NotEquippedItem), "There were problems with equipping item(s).");
+ for (int j = 0; j < batchSize; ++j)
+ draft.AddItem(unstorableItems[batchNumber * SharedConst.MaxMailItems + j]);
+
+ draft.SendMailTo(trans, this, new MailSender(this, MailStationery.Gm), MailCheckMask.Copied);
+ });
+
+ for (int batch = 0; batch < fullBatches; ++batch)
+ sendItemsBatch(batch, SharedConst.MaxMailItems);
+
+ if (remainder != 0)
+ sendItemsBatch(fullBatches, remainder);
+
+ DB.Characters.CommitTransaction(trans);
+
+ SendPacket(new CharacterInventoryOverflowWarning());
+ }
+ }
+
+ SetByteValue(PlayerFields.FieldBytes2, PlayerFieldOffsets.FieldBytes2OffsetNumBackpackSlots, slots);
+ }
+
public byte GetBankBagSlotCount() { return GetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetBankBagSlots); }
public void SetBankBagSlotCount(byte count) { SetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetBankBagSlots, count); }
diff --git a/Source/Game/Entities/Player/Player.Quest.cs b/Source/Game/Entities/Player/Player.Quest.cs
index 00b5752e4..99ee49481 100644
--- a/Source/Game/Entities/Player/Player.Quest.cs
+++ b/Source/Game/Entities/Player/Player.Quest.cs
@@ -211,7 +211,13 @@ namespace Game.Entities
return false;
}
- public int GetQuestLevel(Quest quest) { return quest != null && (quest.Level > 0) ? quest.Level : (int)getLevel(); }
+ public uint GetQuestLevel(Quest quest)
+ {
+ if (quest == null)
+ return getLevel();
+
+ return (uint)(quest.Level > 0 ? quest.Level : Math.Min((int)getLevel(), quest.MaxScalingLevel));
+ }
public bool IsQuestRewarded(uint quest_id)
{
@@ -1372,7 +1378,7 @@ namespace Game.Entities
public bool SatisfyQuestRace(Quest qInfo, bool msg)
{
- int reqraces = qInfo.AllowableRaces;
+ long reqraces = qInfo.AllowableRaces;
if (reqraces == -1)
return true;
diff --git a/Source/Game/Entities/Player/Player.Spells.cs b/Source/Game/Entities/Player/Player.Spells.cs
index e58f5051d..b652ae536 100644
--- a/Source/Game/Entities/Player/Player.Spells.cs
+++ b/Source/Game/Entities/Player/Player.Spells.cs
@@ -224,33 +224,30 @@ namespace Game.Entities
return GetUInt16Value(PlayerFields.SkillLineTempBonus + field, offset);
}
- public uint GetResurrectionSpellId()
+ void InitializeSelfResurrectionSpells()
{
- // search priceless resurrection possibilities
- uint prio = 0;
- uint spell_id = 0;
+ ClearDynamicValue(PlayerDynamicFields.SelfResSpells);
+
+ uint[] spells = new uint[3];
+
var dummyAuras = GetAuraEffectsByType(AuraType.Dummy);
- foreach (var eff in dummyAuras)
+ foreach (var auraEffect in dummyAuras)
{
// Soulstone Resurrection // prio: 3 (max, non death persistent)
- if (prio < 2 && eff.GetSpellInfo().SpellFamilyName == SpellFamilyNames.Warlock && eff.GetSpellInfo().SpellFamilyFlags[1].HasAnyFlag(0x1000000u))
- {
- spell_id = 3026;
- prio = 3;
- }
+ if (auraEffect.GetSpellInfo().SpellFamilyName == SpellFamilyNames.Warlock && auraEffect.GetSpellInfo().SpellFamilyFlags[1].HasAnyFlag(0x1000000u))
+ spells[0] = 3026;
// Twisting Nether // prio: 2 (max)
- else if (eff.GetId() == 23701 && RandomHelper.randChance(10))
- {
- prio = 2;
- spell_id = 23700;
- }
+ else if (auraEffect.GetId() == 23701 && RandomHelper.randChance(10))
+ spells[1] = 23700;
}
// Reincarnation (passive spell) // prio: 1
- if (prio < 1 && HasSpell(20608) && !GetSpellHistory().HasCooldown(21169))
- spell_id = 21169;
+ if (HasSpell(20608) && !GetSpellHistory().HasCooldown(21169))
+ spells[2] = 21169;
- return spell_id;
+ foreach (uint selfResSpell in spells)
+ if (selfResSpell != 0)
+ AddDynamicValue(PlayerDynamicFields.SelfResSpells, selfResSpell);
}
public void PetSpellInitialize()
@@ -1027,7 +1024,8 @@ namespace Game.Entities
// remove enchants from inventory items
// NOTE: no need to remove these from stats, since these aren't equipped
// in inventory
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; ++i)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; ++i)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem)
diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs
index e90e38d93..a7b096fb1 100644
--- a/Source/Game/Entities/Player/Player.cs
+++ b/Source/Game/Entities/Player/Player.cs
@@ -231,6 +231,7 @@ namespace Game.Entities
SetUInt32Value(PlayerFields.RestInfo + PlayerFieldOffsets.RestStateHonor, (uint)PlayerRestState.NotRAFLinked);
SetByteValue(PlayerFields.Bytes3, PlayerFieldOffsets.Bytes3OffsetGender, (byte)createInfo.Sex);
SetByteValue(PlayerFields.Bytes4, PlayerFieldOffsets.Bytes4OffsetArenaFaction, 0);
+ SetInventorySlotCount(InventorySlots.DefaultSize);
SetGuidValue(ObjectFields.Data, ObjectGuid.Empty);
SetUInt32Value(PlayerFields.GuildRank, 0);
@@ -409,7 +410,8 @@ namespace Game.Entities
// bags and main-hand weapon must equipped at this moment
// now second pass for not equipped (offhand weapon/shield if it attempt equipped before main-hand weapon)
- for (var i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
Item pItem = GetItemByPos(InventorySlots.Bag0, i);
if (pItem != null)
@@ -744,13 +746,11 @@ namespace Game.Entities
public override void setDeathState(DeathState s)
{
- uint ressSpellId = 0;
-
- bool cur = IsAlive();
+ bool oldIsAlive = IsAlive();
if (s == DeathState.JustDied)
{
- if (!cur)
+ if (!oldIsAlive)
{
Log.outError(LogFilter.Player, "Player.setDeathState: Attempted to kill a dead player '{0}' ({1})", GetName(), GetGUID().ToString());
return;
@@ -766,12 +766,8 @@ namespace Game.Entities
//FIXME: is pet dismissed at dying or releasing spirit? if second, add setDeathState(DEAD) to HandleRepopRequestOpcode and define pet unsummon here with (s == DEAD)
RemovePet(null, PetSaveMode.NotInSlot, true);
- // save value before aura remove in Unit::setDeathState
- ressSpellId = GetUInt32Value(PlayerFields.SelfResSpell);
+ InitializeSelfResurrectionSpells();
- // passive spell
- if (ressSpellId == 0)
- ressSpellId = GetResurrectionSpellId();
UpdateCriteria(CriteriaTypes.DeathAtMap, 1);
UpdateCriteria(CriteriaTypes.Death, 1);
UpdateCriteria(CriteriaTypes.DeathInDungeon, 1);
@@ -782,13 +778,9 @@ namespace Game.Entities
base.setDeathState(s);
- // restore resurrection spell id for player after aura remove
- if (s == DeathState.JustDied && cur && ressSpellId != 0)
- SetUInt32Value(PlayerFields.SelfResSpell, ressSpellId);
-
- if (IsAlive() && !cur)
+ if (IsAlive() && !oldIsAlive)
//clear aura case after resurrection by another way (spells will be applied before next death)
- SetUInt32Value(PlayerFields.SelfResSpell, 0);
+ ClearDynamicValue(PlayerDynamicFields.SelfResSpells);
}
public override void DestroyForPlayer(Player target)
@@ -1667,15 +1659,15 @@ namespace Game.Entities
continue;
if (quest.IsDaily())
- rep = CalculateReputationGain(ReputationSource.DailyQuest, (uint)GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
+ rep = CalculateReputationGain(ReputationSource.DailyQuest, GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
else if (quest.IsWeekly())
- rep = CalculateReputationGain(ReputationSource.WeeklyQuest, (uint)GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
+ rep = CalculateReputationGain(ReputationSource.WeeklyQuest, GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
else if (quest.IsMonthly())
- rep = CalculateReputationGain(ReputationSource.MonthlyQuest, (uint)GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
+ rep = CalculateReputationGain(ReputationSource.MonthlyQuest, GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
else if (quest.IsRepeatable())
- rep = CalculateReputationGain(ReputationSource.RepeatableQuest, (uint)GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
+ rep = CalculateReputationGain(ReputationSource.RepeatableQuest, GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
else
- rep = CalculateReputationGain(ReputationSource.Quest, (uint)GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
+ rep = CalculateReputationGain(ReputationSource.Quest, GetQuestLevel(quest), rep, (int)quest.RewardFactionId[i], noQuestBonus);
bool noSpillover = Convert.ToBoolean(quest.RewardReputationMask & (1 << i));
GetReputationMgr().ModifyReputation(factionEntry, rep, noSpillover);
@@ -5003,11 +4995,13 @@ namespace Game.Entities
DisplayPlayerChoice displayPlayerChoice = new DisplayPlayerChoice();
displayPlayerChoice.SenderGUID = sender;
displayPlayerChoice.ChoiceID = choiceId;
+ displayPlayerChoice.UiTextureKitID = playerChoice.UiTextureKitId;
displayPlayerChoice.Question = playerChoice.Question;
if (playerChoiceLocale != null)
ObjectManager.GetLocaleString(playerChoiceLocale.Question, locale, ref displayPlayerChoice.Question);
displayPlayerChoice.CloseChoiceFrame = false;
+ displayPlayerChoice.HideWarboardHeader = playerChoice.HideWarboardHeader;
for (var i = 0; i < playerChoice.Responses.Count; ++i)
{
@@ -5900,7 +5894,9 @@ namespace Game.Entities
RemoveByteFlag(UnitFields.Bytes2, UnitBytes2Offsets.PvpFlag, (UnitBytes2Flags.FFAPvp | UnitBytes2Flags.Sanctuary));
// restore if need some important flags
- SetUInt32Value(PlayerFields.FieldBytes2, 0); // flags empty by default
+ SetByteValue(PlayerFields.FieldBytes2, PlayerFieldOffsets.FieldBytes2OffsetIgnorePowerRegenPredictionMask, 0);
+ SetByteValue(PlayerFields.FieldBytes2, PlayerFieldOffsets.FieldBytes2OffsetAuraVision, 0);
+ SetByteValue(PlayerFields.FieldBytes2, 3, 0);
if (reapplyMods) // reapply stats values only on .reset stats (level) command
_ApplyAllStatBonuses();
@@ -6512,7 +6508,7 @@ namespace Game.Entities
packet.Reason = victim ? PlayerLogXPReason.Kill : PlayerLogXPReason.NoKill;
packet.Amount = (int)xp;
packet.GroupBonus = group_rate;
- packet.ReferAFriend = recruitAFriend;
+ packet.ReferAFriendBonusType = (byte)(recruitAFriend ? 1 : 0);
SendPacket(packet);
uint curXP = GetUInt32Value(PlayerFields.Xp);
diff --git a/Source/Game/Entities/Transport.cs b/Source/Game/Entities/Transport.cs
index 83cdae569..a7bbb43b3 100644
--- a/Source/Game/Entities/Transport.cs
+++ b/Source/Game/Entities/Transport.cs
@@ -673,8 +673,10 @@ namespace Game.Entities
z = nextFrame.Node.Loc.Z,
o = nextFrame.InitialOrientation;
- foreach (var obj in _passengers)
+ for (var i =0; i < _passengers.Count; ++i)
{
+ WorldObject obj = _passengers[i];
+
float destX, destY, destZ, destO;
obj.m_movementInfo.transport.pos.GetPosition(out destX, out destY, out destZ, out destO);
TransportPosHelper.CalculatePassengerPosition(ref destX, ref destY, ref destZ, ref destO, x, y, z, o);
diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs
index cd7edf552..3a915ff2d 100644
--- a/Source/Game/Globals/ObjectManager.cs
+++ b/Source/Game/Globals/ObjectManager.cs
@@ -441,10 +441,10 @@ namespace Game
public void LoadRaceAndClassExpansionRequirements()
{
uint oldMSTime = Time.GetMSTime();
- _raceExpansionRequirementStorage.Clear();
+ _raceUnlockRequirementStorage.Clear();
- // 0 1
- SQLResult result = DB.World.Query("SELECT raceID, expansion FROM `race_expansion_requirement`");
+ // 0 1 2
+ SQLResult result = DB.World.Query("SELECT raceID, expansion, achievementId FROM `race_expansion_requirement`");
if (!result.IsEmpty())
{
uint count = 0;
@@ -452,21 +452,32 @@ namespace Game
{
byte raceID = result.Read(0);
byte expansion = result.Read(1);
+ uint achievementId = result.Read(2);
ChrRacesRecord raceEntry = CliDB.ChrRacesStorage.LookupByKey(raceID);
if (raceEntry == null)
{
- Log.outError(LogFilter.Sql, "Race {0} defined in `race_expansion_requirement` does not exists, skipped.", raceID);
+ Log.outError(LogFilter.Sql, "Race {0} defined in `race_unlock_requirement` does not exists, skipped.", raceID);
continue;
}
- if (expansion >= (int)Expansion.Max)
+ if (expansion >= (int)Expansion.MaxAccountExpansions)
{
- Log.outError(LogFilter.Sql, "Race {0} defined in `race_expansion_requirement` has incorrect expansion {1}, skipped.", raceID, expansion);
+ Log.outError(LogFilter.Sql, "Race {0} defined in `race_unlock_requirement` has incorrect expansion {1}, skipped.", raceID, expansion);
continue;
}
- _raceExpansionRequirementStorage[raceID] = expansion;
+ if (achievementId != 0 && !CliDB.AchievementStorage.ContainsKey(achievementId))
+ {
+ Log.outError(LogFilter.Sql, $"Race {raceID} defined in `race_unlock_requirement` has incorrect achievement {achievementId}, skipped.");
+ continue;
+ }
+
+ RaceUnlockRequirement raceUnlockRequirement = new RaceUnlockRequirement();
+ raceUnlockRequirement.Expansion = expansion;
+ raceUnlockRequirement.AchievementId = achievementId;
+
+ _raceUnlockRequirementStorage[raceID] = raceUnlockRequirement;
++count;
}
@@ -573,13 +584,8 @@ namespace Game
}
return false;
}
- public Dictionary GetRaceExpansionRequirements() { return _raceExpansionRequirementStorage; }
- public Expansion GetRaceExpansionRequirement(Race race)
- {
- if (_raceExpansionRequirementStorage.ContainsKey((byte)race))
- return (Expansion)_raceExpansionRequirementStorage[(byte)race];
- return Expansion.Classic;
- }
+ public Dictionary GetRaceUnlockRequirements() { return _raceUnlockRequirementStorage; }
+ public RaceUnlockRequirement GetRaceUnlockRequirement(Race race) { return _raceUnlockRequirementStorage.LookupByKey((byte)race); }
public Dictionary GetClassExpansionRequirements() { return _classExpansionRequirementStorage; }
public Expansion GetClassExpansionRequirement(Class class_)
{
@@ -4854,7 +4860,7 @@ namespace Game
if (id == -1)
return equip[RandomHelper.IRand(0, equip.Count - 1)].Item2;
else
- return equip.Find(p => p.Item1 == id).Item2;
+ return equip.Find(p => p.Item1 == id)?.Item2;
}
//Maps
@@ -6187,35 +6193,35 @@ namespace Game
_exclusiveQuestGroups.Clear();
SQLResult result = DB.World.Query("SELECT " +
- //0 1 2 3 4 5 6 7 8 9 10
- "ID, QuestType, QuestLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " +
- //11 12 13 14 15 16 17 18 19 20 21
+ //0 1 2 3 4 5 6 7 8 9 10 11
+ "ID, QuestType, QuestLevel, MaxScalingLevel, QuestPackageID, MinLevel, QuestSortID, QuestInfoID, SuggestedGroupNum, RewardNextQuest, RewardXPDifficulty, RewardXPMultiplier, " +
+ //12 13 14 15 16 17 18 19 20 21 22
"RewardMoney, RewardMoneyDifficulty, RewardMoneyMultiplier, RewardBonusMoney, RewardDisplaySpell1, RewardDisplaySpell2, RewardDisplaySpell3, RewardSpell, RewardHonor, RewardKillHonor, StartItem, " +
- //22 23 24 25 26
+ //23 24 25 26 27
"RewardArtifactXPDifficulty, RewardArtifactXPMultiplier, RewardArtifactCategoryID, Flags, FlagsEx, " +
- //27 28 29 30 31 32 33 34
+ //28 29 30 31 32 33 34 35
"RewardItem1, RewardAmount1, ItemDrop1, ItemDropQuantity1, RewardItem2, RewardAmount2, ItemDrop2, ItemDropQuantity2, " +
- //35 36 37 38 39 40 41 42
+ //36 37 38 39 40 41 42 43
"RewardItem3, RewardAmount3, ItemDrop3, ItemDropQuantity3, RewardItem4, RewardAmount4, ItemDrop4, ItemDropQuantity4, " +
- //43 44 45 46 47 48
+ //44 45 46 47 48 49
"RewardChoiceItemID1, RewardChoiceItemQuantity1, RewardChoiceItemDisplayID1, RewardChoiceItemID2, RewardChoiceItemQuantity2, RewardChoiceItemDisplayID2, " +
- //49 50 51 52 53 54
+ //50 51 52 53 54 55
"RewardChoiceItemID3, RewardChoiceItemQuantity3, RewardChoiceItemDisplayID3, RewardChoiceItemID4, RewardChoiceItemQuantity4, RewardChoiceItemDisplayID4, " +
- //55 56 57 58 59 60
+ //56 57 58 59 60 61
"RewardChoiceItemID5, RewardChoiceItemQuantity5, RewardChoiceItemDisplayID5, RewardChoiceItemID6, RewardChoiceItemQuantity6, RewardChoiceItemDisplayID6, " +
- //61 62 63 64 65 66 67 68 69 70
+ //62 63 64 65 66 67 68 69 70 71
"POIContinent, POIx, POIy, POIPriority, RewardTitle, RewardArenaPoints, RewardSkillLineID, RewardNumSkillUps, PortraitGiver, PortraitTurnIn, " +
- //71 72 73 74 75 76 77 78
+ //72 73 74 75 76 77 78 79
"RewardFactionID1, RewardFactionValue1, RewardFactionOverride1, RewardFactionCapIn1, RewardFactionID2, RewardFactionValue2, RewardFactionOverride2, RewardFactionCapIn2, " +
- //79 80 81 82 83 84 85 86
+ //80 81 82 83 84 85 86 87
"RewardFactionID3, RewardFactionValue3, RewardFactionOverride3, RewardFactionCapIn3, RewardFactionID4, RewardFactionValue4, RewardFactionOverride4, RewardFactionCapIn4, " +
- //87 88 89 90 91
+ //88 89 90 91 92
"RewardFactionID5, RewardFactionValue5, RewardFactionOverride5, RewardFactionCapIn5, RewardFactionFlags, " +
- //92 93 94 95 96 97 98 99
+ //93 94 95 96 97 98 99 100
"RewardCurrencyID1, RewardCurrencyQty1, RewardCurrencyID2, RewardCurrencyQty2, RewardCurrencyID3, RewardCurrencyQty3, RewardCurrencyID4, RewardCurrencyQty4, " +
- //100 101 102 103 104 105 106
+ //101 102 103 104 105 106 107
"AcceptedSoundKitID, CompleteSoundKitID, AreaGroupID, TimeAllowed, AllowableRaces, QuestRewardID, Expansion, " +
- //107 108 109 110 111 112 113 114 115
+ //108 109 110 111 112 113 114 115 116
"LogTitle, LogDescription, QuestDescription, AreaDescription, PortraitGiverText, PortraitGiverName, PortraitTurnInText, PortraitTurnInName, QuestCompletionLog" +
" FROM quest_template");
@@ -6506,7 +6512,7 @@ namespace Game
// AllowableRaces, can be -1/RACEMASK_ALL_PLAYABLE to allow any race
if (qinfo.AllowableRaces != -1)
{
- if (!Convert.ToBoolean(qinfo.AllowableRaces & (uint)Race.RaceMaskAllPlayable))
+ if (qinfo.AllowableRaces > 0 && !Convert.ToBoolean(qinfo.AllowableRaces & (long)Race.RaceMaskAllPlayable))
{
Log.outError(LogFilter.Sql, "Quest {0} does not contain any playable races in `RequiredRaces` ({1}), value set to 0 (all races).", qinfo.Id, qinfo.AllowableRaces);
qinfo.AllowableRaces = -1;
@@ -7137,8 +7143,8 @@ namespace Game
uint count = 0;
- // 0 1 2 3 4 5 6 7 8 9 10 11 12 13
- SQLResult result = DB.World.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1 FROM quest_poi order by QuestID, Idx1");
+ // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14
+ SQLResult result = DB.World.Query("SELECT QuestID, BlobIndex, Idx1, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs FROM quest_poi order by QuestID, Idx1");
if (result.IsEmpty())
{
Log.outError(LogFilter.ServerLoading, "Loaded 0 quest POI definitions. DB table `quest_poi` is empty.");
@@ -7182,11 +7188,12 @@ namespace Game
int WorldEffectID = result.Read(11);
int PlayerConditionID = result.Read(12);
int WoDUnk1 = result.Read(13);
+ bool AlwaysAllowMergingBlobs = result.Read(14);
if (Global.ObjectMgr.GetQuestTemplate(QuestID) == null)
Log.outError(LogFilter.Sql, "`quest_poi` quest id ({0}) Idx1 ({1}) does not exist in `quest_template`", QuestID, Idx1);
- QuestPOI POI = new QuestPOI(BlobIndex, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1);
+ QuestPOI POI = new QuestPOI(BlobIndex, ObjectiveIndex, QuestObjectiveID, QuestObjectID, MapID, WorldMapAreaId, Floor, Priority, Flags, WorldEffectID, PlayerConditionID, WoDUnk1, AlwaysAllowMergingBlobs);
if (!POIs.ContainsKey(QuestID) || !POIs[QuestID].ContainsKey(Idx1))
{
Log.outError(LogFilter.Sql, "Table quest_poi references unknown quest points for quest {0} POI id {1}", QuestID, BlobIndex);
@@ -8640,7 +8647,7 @@ namespace Game
uint oldMSTime = Time.GetMSTime();
_playerChoices.Clear();
- SQLResult choiceResult = DB.World.Query("SELECT ChoiceId, Question FROM playerchoice");
+ SQLResult choiceResult = DB.World.Query("SELECT ChoiceId, UiTextureKitId, Question, HideWarboardHeader FROM playerchoice");
if (choiceResult.IsEmpty())
{
Log.outInfo(LogFilter.ServerLoading, "Loaded 0 player choices. DB table `playerchoice` is empty.");
@@ -8655,12 +8662,13 @@ namespace Game
do
{
- int choiceId = choiceResult.Read(0);
-
PlayerChoice choice = new PlayerChoice();
- choice.ChoiceId = choiceId;
- choice.Question = choiceResult.Read(1);
- _playerChoices[choiceId] = choice;
+ choice.ChoiceId = choiceResult.Read(0);
+ choice.UiTextureKitId = choiceResult.Read(1);
+ choice.Question = choiceResult.Read(2);
+ choice.HideWarboardHeader = choiceResult.Read(3);
+
+ _playerChoices[choice.ChoiceId] = choice;
} while (choiceResult.NextRow());
@@ -9466,7 +9474,7 @@ namespace Game
List _reservedNamesStorage = new List();
Dictionary _sceneTemplateStorage = new Dictionary();
- Dictionary _raceExpansionRequirementStorage = new Dictionary();
+ Dictionary _raceUnlockRequirementStorage = new Dictionary();
Dictionary _classExpansionRequirementStorage = new Dictionary();
Dictionary _realmNameStorage = new Dictionary();
@@ -9963,7 +9971,7 @@ namespace Game
public class QuestPOI
{
public QuestPOI(int _BlobIndex, int _ObjectiveIndex, int _QuestObjectiveID, int _QuestObjectID, int _MapID, int _WorldMapAreaID, int _Foor, int _Priority, int _Flags,
- int _WorldEffectID, int _PlayerConditionID, int _UnkWoD1)
+ int _WorldEffectID, int _PlayerConditionID, int _UnkWoD1, bool _AlwaysAllowMergingBlobs)
{
BlobIndex = _BlobIndex;
ObjectiveIndex = _ObjectiveIndex;
@@ -9977,6 +9985,7 @@ namespace Game
WorldEffectID = _WorldEffectID;
PlayerConditionID = _PlayerConditionID;
UnkWoD1 = _UnkWoD1;
+ AlwaysAllowMergingBlobs = _AlwaysAllowMergingBlobs;
}
public int BlobIndex;
@@ -9992,6 +10001,7 @@ namespace Game
public int PlayerConditionID;
public int UnkWoD1;
public List points = new List();
+ public bool AlwaysAllowMergingBlobs;
}
public class QuestPOIPoint
@@ -10425,7 +10435,15 @@ namespace Game
}
public int ChoiceId;
+ public int UiTextureKitId;
public string Question;
public List Responses = new List();
+ public bool HideWarboardHeader;
+ }
+
+ public class RaceUnlockRequirement
+ {
+ public byte Expansion;
+ public uint AchievementId;
}
}
diff --git a/Source/Game/Guilds/GuildManager.cs b/Source/Game/Guilds/GuildManager.cs
index 325a2a6c9..4728c8d61 100644
--- a/Source/Game/Guilds/GuildManager.cs
+++ b/Source/Game/Guilds/GuildManager.cs
@@ -462,7 +462,7 @@ namespace Game
reward.ItemID = result.Read(0);
reward.MinGuildRep = result.Read(1);
- reward.RaceMask = result.Read(2);
+ reward.RaceMask = result.Read(2);
reward.Cost = result.Read(3);
if (Global.ObjectMgr.GetItemTemplate(reward.ItemID) == null)
@@ -524,7 +524,7 @@ namespace Game
{
public uint ItemID;
public byte MinGuildRep;
- public int RaceMask;
+ public ulong RaceMask;
public ulong Cost;
public List AchievementsRequired = new List();
}
diff --git a/Source/Game/Handlers/AuthenticationHandler.cs b/Source/Game/Handlers/AuthenticationHandler.cs
index 89d488a3d..55f88e7db 100644
--- a/Source/Game/Handlers/AuthenticationHandler.cs
+++ b/Source/Game/Handlers/AuthenticationHandler.cs
@@ -32,7 +32,7 @@ namespace Game
response.SuccessInfo.HasValue = true;
response.SuccessInfo.Value = new AuthResponse.AuthSuccessInfo();
- response.SuccessInfo.Value.AccountExpansionLevel = (byte)GetExpansion();
+ response.SuccessInfo.Value.AccountExpansionLevel = (byte)GetAccountExpansion();
response.SuccessInfo.Value.ActiveExpansionLevel = (byte)GetExpansion();
response.SuccessInfo.Value.VirtualRealmAddress = Global.WorldMgr.GetVirtualRealmAddress();
response.SuccessInfo.Value.Time = (uint)Time.UnixTime;
@@ -47,7 +47,6 @@ namespace Game
response.SuccessInfo.Value.Templates.Add(templ);
response.SuccessInfo.Value.AvailableClasses = Global.ObjectMgr.GetClassExpansionRequirements();
- response.SuccessInfo.Value.AvailableRaces = Global.ObjectMgr.GetRaceExpansionRequirements();
}
if (queued)
diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs
index da478cfe7..42d7ae405 100644
--- a/Source/Game/Handlers/CharacterHandler.cs
+++ b/Source/Game/Handlers/CharacterHandler.cs
@@ -108,15 +108,23 @@ namespace Game
else
charResult.HasDemonHunterOnRealm = false;
- if (charInfo.Level >= WorldConfig.GetIntValue(WorldCfg.CharacterCreatingMinLevelForDemonHunter) || canAlwaysCreateDemonHunter)
- charResult.HasLevel70OnRealm = true;
+ charResult.MaxCharacterLevel = Math.Max(charResult.MaxCharacterLevel, charInfo.Level);
charResult.Characters.Add(charInfo);
}
while (result.NextRow());
}
- charResult.IsDemonHunterCreationAllowed = (!charResult.HasDemonHunterOnRealm && charResult.HasLevel70OnRealm) || canAlwaysCreateDemonHunter;
+ charResult.IsDemonHunterCreationAllowed = GetAccountExpansion() >= Expansion.Legion || canAlwaysCreateDemonHunter;
+ charResult.IsAlliedRacesCreationAllowed = GetAccountExpansion() >= Expansion.BattleForAzeroth;
+
+ foreach (var requirement in Global.ObjectMgr.GetRaceUnlockRequirements())
+ {
+ EnumCharactersResult.RaceUnlock raceUnlock = new EnumCharactersResult.RaceUnlock();
+ raceUnlock.RaceID = requirement.Key;
+ raceUnlock.HasExpansion = (byte)GetAccountExpansion() >= requirement.Value.Expansion;
+ charResult.RaceUnlockData.Add(raceUnlock);
+ }
SendPacket(charResult);
}
@@ -212,19 +220,34 @@ namespace Game
}
// prevent character creating Expansion race without Expansion account
- var raceExpansionRequirement = Global.ObjectMgr.GetRaceExpansionRequirement(charCreate.CreateInfo.RaceId);
- if (raceExpansionRequirement > GetExpansion())
+ RaceUnlockRequirement raceExpansionRequirement = Global.ObjectMgr.GetRaceUnlockRequirement(charCreate.CreateInfo.RaceId);
+ if (raceExpansionRequirement == null)
{
- Log.outError(LogFilter.Network, "Expansion {0} account:[{1}] tried to Create character with expansion {2} race ({3})", GetExpansion(), GetAccountId(), raceExpansionRequirement, charCreate.CreateInfo.RaceId);
+ Log.outError(LogFilter.Player, "Account {GetAccountId()} tried to create character with unavailable race {charCreate.CreateInfo.RaceId}");
+ SendCharCreate(ResponseCodes.AccountCreateFailed);
+ return;
+ }
+
+ if (raceExpansionRequirement.Expansion > (byte)GetAccountExpansion())
+ {
+ Log.outError(LogFilter.Player, $"Expansion {GetAccountExpansion()} account:[{GetAccountId()}] tried to Create character with expansion {raceExpansionRequirement.Expansion} race ({charCreate.CreateInfo.RaceId})");
SendCharCreate(ResponseCodes.CharCreateExpansion);
return;
}
+ //if (raceExpansionRequirement->AchievementId && !)
+ //{
+ // TC_LOG_ERROR("entities.player.cheat", "Expansion %u account:[%d] tried to Create character without achievement %u race (%u)",
+ // GetAccountExpansion(), GetAccountId(), raceExpansionRequirement->AchievementId, charCreate.CreateInfo->Race);
+ // SendCharCreate(CHAR_CREATE_ALLIED_RACE_ACHIEVEMENT);
+ // return;
+ //}
+
// prevent character creating Expansion class without Expansion account
var classExpansionRequirement = Global.ObjectMgr.GetClassExpansionRequirement(charCreate.CreateInfo.ClassId);
- if (classExpansionRequirement > GetExpansion())
+ if (classExpansionRequirement > GetAccountExpansion())
{
- Log.outError(LogFilter.Network, "Expansion {0} account:[{1}] tried to Create character with expansion {2} class ({3})", GetExpansion(), GetAccountId(), classExpansionRequirement, charCreate.CreateInfo.ClassId);
+ Log.outError(LogFilter.Network, $"Expansion {GetAccountExpansion()} account:[{GetAccountId()}] tried to Create character with expansion {classExpansionRequirement} class ({charCreate.CreateInfo.ClassId})");
SendCharCreate(ResponseCodes.CharCreateExpansionClass);
return;
}
@@ -409,7 +432,7 @@ namespace Game
if (checkDemonHunterReqs && !hasDemonHunterReqLevel)
{
- SendCharCreate(ResponseCodes.CharCreateFailed);
+ SendCharCreate(ResponseCodes.CharCreateLevelRequirementDemonHunter);
return;
}
@@ -1818,7 +1841,7 @@ namespace Game
var questTemplates = Global.ObjectMgr.GetQuestTemplates();
foreach (Quest quest in questTemplates.Values)
{
- uint newRaceMask = (uint)(newTeamId == TeamId.Alliance ? Race.RaceMaskAlliance : Race.RaceMaskHorde);
+ long newRaceMask = (long)(newTeamId == TeamId.Alliance ? Race.RaceMaskAlliance : Race.RaceMaskHorde);
if (quest.AllowableRaces != -1 && !Convert.ToBoolean(quest.AllowableRaces & newRaceMask))
{
stmt = DB.Characters.GetPreparedStatement(CharStatements.UPD_CHAR_QUESTSTATUS_REWARDED_ACTIVE_BY_QUEST);
diff --git a/Source/Game/Handlers/QueryHandler.cs b/Source/Game/Handlers/QueryHandler.cs
index 59a26ac33..0009daf18 100644
--- a/Source/Game/Handlers/QueryHandler.cs
+++ b/Source/Game/Handlers/QueryHandler.cs
@@ -396,6 +396,7 @@ namespace Game
questPOIBlobData.WorldEffectID = data.WorldEffectID;
questPOIBlobData.PlayerConditionID = data.PlayerConditionID;
questPOIBlobData.UnkWoD1 = data.UnkWoD1;
+ questPOIBlobData.AlwaysAllowMergingBlobs = data.AlwaysAllowMergingBlobs;
foreach (var point in data.points)
questPOIBlobData.QuestPOIBlobPointStats.Add(new QuestPOIBlobPoint(point.X, point.Y));
diff --git a/Source/Game/Handlers/SpellHandler.cs b/Source/Game/Handlers/SpellHandler.cs
index 51edced3b..641e8a85f 100644
--- a/Source/Game/Handlers/SpellHandler.cs
+++ b/Source/Game/Handlers/SpellHandler.cs
@@ -445,19 +445,20 @@ namespace Game
}
[WorldPacketHandler(ClientOpcodes.SelfRes)]
- void HandleSelfRes(SelfRes packet)
+ void HandleSelfRes(SelfRes selfRes)
{
if (_player.HasAuraType(AuraType.PreventResurrection))
return; // silent return, client should display error by itself and not send this opcode
- if (_player.GetUInt32Value(PlayerFields.SelfResSpell) != 0)
- {
- SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(_player.GetUInt32Value(PlayerFields.SelfResSpell));
- if (spellInfo != null)
- _player.CastSpell(_player, spellInfo, false, null);
+ var selfResSpells = _player.GetDynamicValues(PlayerDynamicFields.SelfResSpells);
+ if (!selfResSpells.Contains(selfRes.SpellId))
+ return;
- _player.SetUInt32Value(PlayerFields.SelfResSpell, 0);
- }
+ SpellInfo spellInfo = Global.SpellMgr.GetSpellInfo(selfRes.SpellId);
+ if (spellInfo != null)
+ _player.CastSpell(_player, spellInfo, false, null);
+
+ _player.RemoveDynamicValue(PlayerDynamicFields.SelfResSpells, selfRes.SpellId);
}
[WorldPacketHandler(ClientOpcodes.SpellClick)]
diff --git a/Source/Game/Handlers/VoidStorageHandler.cs b/Source/Game/Handlers/VoidStorageHandler.cs
index 0f8eab2af..0f540f75c 100644
--- a/Source/Game/Handlers/VoidStorageHandler.cs
+++ b/Source/Game/Handlers/VoidStorageHandler.cs
@@ -128,7 +128,8 @@ namespace Game
if (bag)
freeBagSlots += bag.GetFreeSlots();
}
- for (byte i = InventorySlots.ItemStart; i < InventorySlots.ItemEnd; i++)
+ int inventoryEnd = InventorySlots.ItemStart + _player.GetInventorySlotCount();
+ for (byte i = InventorySlots.ItemStart; i < inventoryEnd; i++)
{
if (!player.GetItemByPos(InventorySlots.Bag0, i))
++freeBagSlots;
diff --git a/Source/Game/Network/Packets/AuthenticationPackets.cs b/Source/Game/Network/Packets/AuthenticationPackets.cs
index 72726c0aa..f50e3bd66 100644
--- a/Source/Game/Network/Packets/AuthenticationPackets.cs
+++ b/Source/Game/Network/Packets/AuthenticationPackets.cs
@@ -132,18 +132,11 @@ namespace Game.Network.Packets
_worldPacket.WriteUInt8(SuccessInfo.Value.ActiveExpansionLevel);
_worldPacket.WriteUInt8(SuccessInfo.Value.AccountExpansionLevel);
_worldPacket.WriteUInt32(SuccessInfo.Value.TimeSecondsUntilPCKick);
- _worldPacket.WriteUInt32(SuccessInfo.Value.AvailableRaces.Count);
_worldPacket.WriteUInt32(SuccessInfo.Value.AvailableClasses.Count);
_worldPacket.WriteUInt32(SuccessInfo.Value.Templates.Count);
_worldPacket.WriteUInt32(SuccessInfo.Value.CurrencyID);
_worldPacket.WriteUInt32(SuccessInfo.Value.Time);
- foreach (var race in SuccessInfo.Value.AvailableRaces)
- {
- _worldPacket.WriteUInt8(race.Key); /// the current race
- _worldPacket.WriteUInt8(race.Value); /// the required Expansion
- }
-
foreach (var klass in SuccessInfo.Value.AvailableClasses)
{
_worldPacket.WriteUInt8(klass.Key); /// the current class
@@ -219,7 +212,6 @@ namespace Game.Network.Packets
public List Templates = new List(); // list of pre-made character templates. @todo implement
public Dictionary AvailableClasses; // the minimum AccountExpansion required to select the classes
- public Dictionary AvailableRaces; // the minimum AccountExpansion required to select the races
public bool IsExpansionTrial;
public bool ForceCharacterTemplate; // forces the client to always use a character template when creating a new character. @see Templates. @todo implement
diff --git a/Source/Game/Network/Packets/CharacterPackets.cs b/Source/Game/Network/Packets/CharacterPackets.cs
index affa32c6b..af8b11afb 100644
--- a/Source/Game/Network/Packets/CharacterPackets.cs
+++ b/Source/Game/Network/Packets/CharacterPackets.cs
@@ -44,79 +44,35 @@ namespace Game.Network.Packets
_worldPacket.WriteBit(IsDeletedCharacters);
_worldPacket.WriteBit(IsDemonHunterCreationAllowed);
_worldPacket.WriteBit(HasDemonHunterOnRealm);
- _worldPacket.WriteBit(HasLevel70OnRealm);
_worldPacket.WriteBit(Unknown7x);
_worldPacket.WriteBit(DisabledClassesMask.HasValue);
+ _worldPacket.WriteBit(IsAlliedRacesCreationAllowed);
_worldPacket.WriteUInt32(Characters.Count);
- _worldPacket.WriteUInt32(FactionChangeRestrictions.Count);
+ _worldPacket.WriteInt32(MaxCharacterLevel);
+ _worldPacket.WriteUInt32(RaceUnlockData.Count);
if (DisabledClassesMask.HasValue)
_worldPacket.WriteUInt32(DisabledClassesMask.Value);
- foreach (RestrictedFactionChangeRuleInfo rule in FactionChangeRestrictions)
- {
- _worldPacket.WriteUInt32(rule.Mask);
- _worldPacket.WriteUInt8(rule.Race);
- }
-
foreach (CharacterInfo charInfo in Characters)
- {
- _worldPacket.WritePackedGuid(charInfo.Guid);
- _worldPacket.WriteUInt8(charInfo.ListPosition);
- _worldPacket.WriteUInt8(charInfo.RaceId);
- _worldPacket.WriteUInt8(charInfo.ClassId);
- _worldPacket.WriteUInt8(charInfo.Sex);
- _worldPacket.WriteUInt8(charInfo.Skin);
- _worldPacket.WriteUInt8(charInfo.Face);
- _worldPacket.WriteUInt8(charInfo.HairStyle);
- _worldPacket.WriteUInt8(charInfo.HairColor);
- _worldPacket.WriteUInt8(charInfo.FacialHair);
- charInfo.CustomDisplay.ForEach(id => _worldPacket.WriteUInt8(id));
- _worldPacket.WriteUInt8(charInfo.Level);
- _worldPacket.WriteUInt32(charInfo.ZoneId);
- _worldPacket.WriteUInt32(charInfo.MapId);
- _worldPacket.WriteVector3(charInfo.PreLoadPosition);
- _worldPacket.WritePackedGuid(charInfo.GuildGuid);
- _worldPacket.WriteUInt32(charInfo.Flags);
- _worldPacket.WriteUInt32(charInfo.CustomizationFlag);
- _worldPacket.WriteUInt32(charInfo.Flags3);
- _worldPacket.WriteUInt32(charInfo.Pet.CreatureDisplayId);
- _worldPacket.WriteUInt32(charInfo.Pet.Level);
- _worldPacket.WriteUInt32(charInfo.Pet.CreatureFamily);
+ charInfo.Write(_worldPacket);
- _worldPacket.WriteUInt32(charInfo.ProfessionIds[0]);
- _worldPacket.WriteUInt32(charInfo.ProfessionIds[1]);
-
- foreach (var visualItem in charInfo.VisualItems)
- {
- _worldPacket.WriteUInt32(visualItem.DisplayId);
- _worldPacket.WriteUInt32(visualItem.DisplayEnchantId);
- _worldPacket.WriteUInt8(visualItem.InventoryType);
- }
-
- _worldPacket.WriteUInt32(charInfo.LastPlayedTime);
- _worldPacket.WriteUInt16(charInfo.SpecID);
- _worldPacket.WriteUInt32(charInfo.Unknown703);
- _worldPacket.WriteUInt32(charInfo.Flags4);
- _worldPacket.WriteBits(charInfo.Name.GetByteCount(), 6);
- _worldPacket.WriteBit(charInfo.FirstLogin);
- _worldPacket.WriteBit(charInfo.BoostInProgress);
- _worldPacket.WriteBits(charInfo.unkWod61x, 5);
- _worldPacket.WriteString(charInfo.Name);
- }
+ foreach (RaceUnlock raceUnlock in RaceUnlockData)
+ raceUnlock.Write(_worldPacket);
}
public bool Success;
public bool IsDeletedCharacters; // used for character undelete list
public bool IsDemonHunterCreationAllowed = false; ///< used for demon hunter early access
public bool HasDemonHunterOnRealm = false;
- public bool HasLevel70OnRealm = false;
public bool Unknown7x = false;
+ public bool IsAlliedRacesCreationAllowed = false;
+ public int MaxCharacterLevel = 1;
public Optional DisabledClassesMask = new Optional();
public List Characters = new List(); // all characters on the list
- public List FactionChangeRestrictions = new List(); // @todo: research
+ public List RaceUnlockData = new List(); ///<
public class CharacterInfo
{
@@ -130,8 +86,8 @@ namespace Game.Network.Packets
// "characters.zone, characters.map, characters.position_x, characters.position_y, characters.position_z, "
// 19 20 21 22 23 24 25
// "guild_member.guildid, characters.playerFlags, characters.at_login, character_pet.entry, character_pet.modelid, character_pet.level, characters.equipmentCache, "
- // 26 27 28 29 30
- // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, character_declinedname.genitive"
+ // 26 27 28 29 30 31
+ // "character_banned.guid, characters.slot, characters.logout_time, characters.activeTalentGroup, characters.lastLoginBuild, character_declinedname.genitive"
Guid = ObjectGuid.Create(HighGuid.Player, fields.Read(0));
Name = fields.Read(1);
@@ -176,7 +132,7 @@ namespace Game.Network.Packets
if (fields.Read(26) != 0)
Flags |= CharacterFlags.LockedByBilling;
- if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read(30)))
+ if (WorldConfig.GetBoolValue(WorldCfg.DeclinedNamesUsed) && !string.IsNullOrEmpty(fields.Read(31)))
Flags |= CharacterFlags.Declined;
if (atLoginFlags.HasAnyFlag(AtLoginFlags.Customize))
@@ -214,6 +170,8 @@ namespace Game.Network.Packets
if (spec != null)
SpecID = (ushort)spec.Id;
+ LastLoginBuild = fields.Read(30);
+
for (byte slot = 0; slot < InventorySlots.BagEnd; ++slot)
{
VisualItems[slot].InventoryType = (byte)equipment.NextUInt32();
@@ -222,6 +180,53 @@ namespace Game.Network.Packets
}
}
+ public void Write(WorldPacket data)
+ {
+ data.WritePackedGuid(Guid);
+ data.WriteUInt8(ListPosition);
+ data.WriteUInt8(RaceId);
+ data.WriteUInt8(ClassId);
+ data.WriteUInt8(Sex);
+ data.WriteUInt8(Skin);
+ data.WriteUInt8(Face);
+ data.WriteUInt8(HairStyle);
+ data.WriteUInt8(HairColor);
+ data.WriteUInt8(FacialHair);
+
+ foreach (var display in CustomDisplay)
+ data.WriteUInt8(display);
+
+ data.WriteUInt8(Level);
+ data.WriteUInt32(ZoneId);
+ data.WriteUInt32(MapId);
+ data.WriteVector3(PreLoadPosition);
+ data.WritePackedGuid(GuildGuid);
+ data.WriteUInt32(Flags);
+ data.WriteUInt32(CustomizationFlag);
+ data.WriteUInt32(Flags3);
+ data.WriteUInt32(Pet.CreatureDisplayId);
+ data.WriteUInt32(Pet.Level);
+ data.WriteUInt32(Pet.CreatureFamily);
+
+ data.WriteUInt32(ProfessionIds[0]);
+ data.WriteUInt32(ProfessionIds[1]);
+
+ foreach (var visualItem in VisualItems)
+ visualItem.Write(data);
+
+ data.WriteUInt32(LastPlayedTime);
+ data.WriteUInt16(SpecID);
+ data.WriteUInt32(Unknown703);
+ data.WriteUInt32(Flags4);
+ data.WriteBits(Name.GetByteCount(), 6);
+ data.WriteBit(FirstLogin);
+ data.WriteBit(BoostInProgress);
+ data.WriteBits(unkWod61x, 5);
+ data.FlushBits();
+
+ data.WriteString(Name);
+ }
+
public ObjectGuid Guid;
public string Name;
public byte ListPosition; // Order of the characters in list
@@ -248,6 +253,7 @@ namespace Game.Network.Packets
public uint LastPlayedTime;
public ushort SpecID;
public uint Unknown703;
+ public uint LastLoginBuild;
public PetInfo Pet = new PetInfo();
public bool BoostInProgress; // @todo
public uint[] ProfessionIds = new uint[2]; // @todo
@@ -255,6 +261,13 @@ namespace Game.Network.Packets
public struct VisualItemInfo
{
+ public void Write(WorldPacket data)
+ {
+ data.WriteUInt32(DisplayId);
+ data.WriteUInt32(DisplayEnchantId);
+ data.WriteUInt8(InventoryType);
+ }
+
public uint DisplayId;
public uint DisplayEnchantId;
public byte InventoryType;
@@ -267,16 +280,21 @@ namespace Game.Network.Packets
}
}
- public struct RestrictedFactionChangeRuleInfo
+ public struct RaceUnlock
{
- public RestrictedFactionChangeRuleInfo(uint mask, byte race)
+ public void Write(WorldPacket data)
{
- Mask = mask;
- Race = race;
+ data.WriteInt32(RaceID);
+ data.WriteBit(HasExpansion);
+ data.WriteBit(HasAchievement);
+ data.WriteBit(HasHeritageArmor);
+ data.FlushBits();
}
- public uint Mask;
- public byte Race;
+ public int RaceID;
+ public bool HasExpansion;
+ public bool HasAchievement;
+ public bool HasHeritageArmor;
}
}
@@ -832,8 +850,7 @@ namespace Game.Network.Packets
_worldPacket.WriteUInt8(Reason);
_worldPacket.WriteInt32(Amount);
_worldPacket.WriteFloat(GroupBonus);
- _worldPacket.WriteBit(ReferAFriend);
- _worldPacket.FlushBits();
+ _worldPacket.WriteUInt8(ReferAFriendBonusType);
}
public ObjectGuid Victim;
@@ -841,7 +858,7 @@ namespace Game.Network.Packets
public PlayerLogXPReason Reason;
public int Amount;
public float GroupBonus;
- public bool ReferAFriend;
+ public byte ReferAFriendBonusType; // 1 - 300% of normal XP; 2 - 150% of normal XP
}
class TitleEarned : ServerPacket
diff --git a/Source/Game/Network/Packets/GuildPackets.cs b/Source/Game/Network/Packets/GuildPackets.cs
index 0b9071490..3ca83f9eb 100644
--- a/Source/Game/Network/Packets/GuildPackets.cs
+++ b/Source/Game/Network/Packets/GuildPackets.cs
@@ -1467,7 +1467,7 @@ namespace Game.Network.Packets
data.WriteUInt32(ItemID);
data.WriteUInt32(Unk4);
data.WriteUInt32(AchievementsRequired.Count);
- data.WriteUInt32(RaceMask);
+ data.WriteUInt64(RaceMask);
data.WriteUInt32(MinGuildLevel);
data.WriteUInt32(MinGuildRep);
data.WriteUInt64(Cost);
@@ -1479,7 +1479,7 @@ namespace Game.Network.Packets
public uint ItemID;
public uint Unk4;
public List AchievementsRequired = new List();
- public uint RaceMask;
+ public ulong RaceMask;
public int MinGuildLevel;
public int MinGuildRep;
public ulong Cost;
diff --git a/Source/Game/Network/Packets/InstancePackets.cs b/Source/Game/Network/Packets/InstancePackets.cs
index da28dd949..469650d5a 100644
--- a/Source/Game/Network/Packets/InstancePackets.cs
+++ b/Source/Game/Network/Packets/InstancePackets.cs
@@ -218,12 +218,15 @@ namespace Game.Network.Packets
_worldPacket.WriteUInt32(MaxInCombatResCount);
_worldPacket.WriteUInt32(CombatResChargeRecovery);
_worldPacket.WriteUInt32(NextCombatResChargeTime);
+ _worldPacket.WriteBit(InProgress);
+ _worldPacket.FlushBits();
}
public uint InCombatResCount; // amount of usable battle ressurections
public uint MaxInCombatResCount;
public uint CombatResChargeRecovery;
public uint NextCombatResChargeTime;
+ public bool InProgress = true;
}
class InstanceEncounterEnd : ServerPacket
diff --git a/Source/Game/Network/Packets/ItemPackets.cs b/Source/Game/Network/Packets/ItemPackets.cs
index a4f6d836a..14c033ccb 100644
--- a/Source/Game/Network/Packets/ItemPackets.cs
+++ b/Source/Game/Network/Packets/ItemPackets.cs
@@ -703,6 +703,13 @@ namespace Game.Network.Packets
public ObjectGuid ItemGuid { get; set; }
}
+ class CharacterInventoryOverflowWarning : ServerPacket
+ {
+ public CharacterInventoryOverflowWarning() : base(ServerOpcodes.CharacterInventoryOverflowWarning) { }
+
+ public override void Write() { }
+ }
+
//Structs
public class ItemBonusInstanceData
{
diff --git a/Source/Game/Network/Packets/NPCPackets.cs b/Source/Game/Network/Packets/NPCPackets.cs
index fdffac94f..9a70517c8 100644
--- a/Source/Game/Network/Packets/NPCPackets.cs
+++ b/Source/Game/Network/Packets/NPCPackets.cs
@@ -76,6 +76,7 @@ namespace Game.Network.Packets
_worldPacket.WriteInt32(text.QuestID);
_worldPacket.WriteInt32(text.QuestType);
_worldPacket.WriteInt32(text.QuestLevel);
+ _worldPacket.WriteInt32(text.QuestMaxScalingLevel);
_worldPacket.WriteInt32(text.QuestFlags);
_worldPacket.WriteInt32(text.QuestFlagsEx);
@@ -308,6 +309,7 @@ namespace Game.Network.Packets
public int QuestID;
public int QuestType;
public int QuestLevel;
+ public int QuestMaxScalingLevel;
public bool Repeatable;
public string QuestTitle;
public int QuestFlags;
diff --git a/Source/Game/Network/Packets/QueryPackets.cs b/Source/Game/Network/Packets/QueryPackets.cs
index 15f18524a..ff591ee8f 100644
--- a/Source/Game/Network/Packets/QueryPackets.cs
+++ b/Source/Game/Network/Packets/QueryPackets.cs
@@ -437,6 +437,9 @@ namespace Game.Network.Packets
_worldPacket.WriteInt32(questPOIBlobPoint.X);
_worldPacket.WriteInt32(questPOIBlobPoint.Y);
}
+
+ _worldPacket.WriteBit(questPOIBlobData.AlwaysAllowMergingBlobs);
+ _worldPacket.FlushBits();
}
}
}
@@ -759,6 +762,7 @@ namespace Game.Network.Packets
public int PlayerConditionID;
public int UnkWoD1;
public List QuestPOIBlobPointStats = new List();
+ public bool AlwaysAllowMergingBlobs;
}
public class QuestPOIData
diff --git a/Source/Game/Network/Packets/QuestPackets.cs b/Source/Game/Network/Packets/QuestPackets.cs
index 42ddc8715..a03452429 100644
--- a/Source/Game/Network/Packets/QuestPackets.cs
+++ b/Source/Game/Network/Packets/QuestPackets.cs
@@ -117,6 +117,7 @@ namespace Game.Network.Packets
_worldPacket.WriteInt32(Info.QuestID);
_worldPacket.WriteInt32(Info.QuestType);
_worldPacket.WriteInt32(Info.QuestLevel);
+ _worldPacket.WriteInt32(Info.QuestMaxScalingLevel);
_worldPacket.WriteInt32(Info.QuestPackageID);
_worldPacket.WriteInt32(Info.QuestMinLevel);
_worldPacket.WriteInt32(Info.QuestSortID);
@@ -194,7 +195,7 @@ namespace Game.Network.Packets
_worldPacket.WriteInt32(Info.TimeAllowed);
_worldPacket.WriteUInt32(Info.Objectives.Count);
- _worldPacket.WriteInt32(Info.AllowableRaces);
+ _worldPacket.WriteInt64(Info.AllowableRaces);
_worldPacket.WriteInt32(Info.QuestRewardID);
_worldPacket.WriteInt32(Info.Expansion);
@@ -619,6 +620,7 @@ namespace Game.Network.Packets
_worldPacket.WriteUInt32(gossip.QuestID);
_worldPacket.WriteUInt32(gossip.QuestType);
_worldPacket.WriteUInt32(gossip.QuestLevel);
+ _worldPacket.WriteUInt32(gossip.QuestMaxScalingLevel);
_worldPacket.WriteUInt32(gossip.QuestFlags);
_worldPacket.WriteUInt32(gossip.QuestFlagsEx);
@@ -827,8 +829,10 @@ namespace Game.Network.Packets
_worldPacket.WriteInt32(ChoiceID);
_worldPacket.WriteUInt32(Responses.Count);
_worldPacket.WritePackedGuid(SenderGUID);
+ _worldPacket.WriteInt32(UiTextureKitID);
_worldPacket.WriteBits(Question.GetByteCount(), 8);
_worldPacket.WriteBit(CloseChoiceFrame);
+ _worldPacket.WriteBit(HideWarboardHeader);
_worldPacket.FlushBits();
foreach (PlayerChoiceResponse response in Responses)
@@ -839,9 +843,11 @@ namespace Game.Network.Packets
public ObjectGuid SenderGUID;
public int ChoiceID;
+ public int UiTextureKitID;
public string Question;
public List Responses = new List();
public bool CloseChoiceFrame;
+ public bool HideWarboardHeader;
}
class ChoiceResponse : ClientPacket
@@ -897,6 +903,7 @@ namespace Game.Network.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 QuestMaxScalingLevel = 255;
public uint QuestPackageID;
public int QuestMinLevel;
public int QuestSortID; // zone or sort to display in quest log
@@ -923,7 +930,7 @@ namespace Game.Network.Packets
public float POIx;
public float POIy;
public uint POIPriority;
- public int AllowableRaces = -1;
+ public long AllowableRaces = -1;
public string LogTitle;
public string LogDescription;
public string QuestDescription;
@@ -1129,11 +1136,12 @@ namespace Game.Network.Packets
public struct GossipText
{
- public GossipText(uint questID, uint questType, uint questLevel, uint questFlags, uint questFlagsEx, bool repeatable, string questTitle)
+ 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;
@@ -1143,6 +1151,7 @@ namespace Game.Network.Packets
public uint QuestID;
public uint QuestType;
public uint QuestLevel;
+ public uint QuestMaxScalingLevel;
public uint QuestFlags;
public uint QuestFlagsEx;
public bool Repeatable;
diff --git a/Source/Game/Network/Packets/SpellPackets.cs b/Source/Game/Network/Packets/SpellPackets.cs
index 38ddd9516..a5f15d8d4 100644
--- a/Source/Game/Network/Packets/SpellPackets.cs
+++ b/Source/Game/Network/Packets/SpellPackets.cs
@@ -864,7 +864,12 @@ namespace Game.Network.Packets
{
public SelfRes(WorldPacket packet) : base(packet) { }
- public override void Read() { }
+ public override void Read()
+ {
+ SpellId = _worldPacket.ReadUInt32();
+ }
+
+ public uint SpellId;
}
class GetMirrorImageData : ClientPacket
@@ -1236,7 +1241,7 @@ namespace Game.Network.Packets
public void Write(WorldPacket data)
{
- data.WriteBits(Type, 3);
+ data.WriteBits(Type, 4);
data.WriteInt16(PlayerLevelDelta);
data.WriteUInt16(PlayerItemLevel);
data.WriteUInt8(TargetLevel);
diff --git a/Source/Game/Network/Packets/TicketPackets.cs b/Source/Game/Network/Packets/TicketPackets.cs
index b0aae1060..5ea34e3c8 100644
--- a/Source/Game/Network/Packets/TicketPackets.cs
+++ b/Source/Game/Network/Packets/TicketPackets.cs
@@ -315,6 +315,8 @@ namespace Game.Network.Packets
LastTitleAuthorGuid = data.ReadPackedGuid();
LastDescriptionAuthorGuid = data.ReadPackedGuid();
LastVoiceChatAuthorGuid = data.ReadPackedGuid();
+ ListingCreatorGuid = data.ReadPackedGuid();
+ Unknown735 = data.ReadPackedGuid();
byte titleLength = data.ReadBits(8);
byte descriptionLength = data.ReadBits(11);
@@ -330,6 +332,8 @@ namespace Game.Network.Packets
ObjectGuid LastTitleAuthorGuid;
ObjectGuid LastDescriptionAuthorGuid;
ObjectGuid LastVoiceChatAuthorGuid;
+ ObjectGuid ListingCreatorGuid;
+ ObjectGuid Unknown735;
string Title;
string Description;
string VoiceChat;
diff --git a/Source/Game/Network/Packets/WhoPackets.cs b/Source/Game/Network/Packets/WhoPackets.cs
index bb58e31be..8c16fba2b 100644
--- a/Source/Game/Network/Packets/WhoPackets.cs
+++ b/Source/Game/Network/Packets/WhoPackets.cs
@@ -101,7 +101,7 @@ namespace Game.Network.Packets
{
MinLevel = data.ReadInt32();
MaxLevel = data.ReadInt32();
- RaceFilter = data.ReadInt32();
+ RaceFilter = data.ReadInt64();
ClassFilter = data.ReadInt32();
uint nameLength = data.ReadBits(6);
@@ -137,7 +137,7 @@ namespace Game.Network.Packets
public string VirtualRealmName;
public string Guild;
public string GuildVirtualRealmName;
- public int RaceFilter = -1;
+ public long RaceFilter = 0;
public int ClassFilter = -1;
public List Words = new List();
public bool ShowEnemies;
diff --git a/Source/Game/Network/WorldSocket.cs b/Source/Game/Network/WorldSocket.cs
index c25da6f1c..133b185e0 100644
--- a/Source/Game/Network/WorldSocket.cs
+++ b/Source/Game/Network/WorldSocket.cs
@@ -36,9 +36,9 @@ namespace Game.Network
static byte[] SessionKeySeed = { 0x58, 0xCB, 0xCF, 0x40, 0xFE, 0x2E, 0xCE, 0xA6, 0x5A, 0x90, 0xB8, 0x01, 0x68, 0x6C, 0x28, 0x0B };
static byte[] ContinuedSessionSeed = { 0x16, 0xAD, 0x0C, 0xD4, 0x46, 0xF9, 0x4F, 0xB2, 0xEF, 0x7D, 0xEA, 0x2A, 0x17, 0x66, 0x4D, 0x2F };
- static uint[] ClientTypeSeed_Win = { 0xC34F59FE, 0xFF9A7F5E, 0x8A9DD986, 0x97B24A36 };
- static uint[] ClientTypeSeed_Wn64 = { 0x4E625212, 0xFAD6CBD8, 0x5D3FD3C7, 0xF335A567 };
- static uint[] ClientTypeSeed_Mc64 = { 0x95EFC66, 0x266170B8, 0x3145F79, 0xD8C1C808 };
+ static byte[] ClientTypeSeed_Win = { 0x23, 0xC5, 0x9C, 0x59, 0x63, 0xCB, 0xEF, 0x5B, 0x72, 0x8D, 0x13, 0xA5, 0x08, 0x78, 0xDF, 0xCB };
+ static byte[] ClientTypeSeed_Wn64 = { 0xC7, 0xFF, 0x93, 0x2D, 0x6A, 0x21, 0x74, 0xA3, 0xD5, 0x38, 0xCA, 0x72, 0x12, 0x13, 0x6D, 0x2B };
+ static byte[] ClientTypeSeed_Mc64 = { 0x21, 0x0B, 0x97, 0x01, 0x49, 0xD6, 0xF5, 0x6C, 0xAC, 0x9B, 0xAD, 0xF2, 0xAA, 0xC9, 0x1E, 0x8E };
public WorldSocket(Socket socket) : base(socket)
{
@@ -383,18 +383,15 @@ namespace Game.Network
// For hook purposes, we get Remoteaddress at this point.
string address = GetRemoteIpAddress().ToString();
- uint[] clientSeed = ClientTypeSeed_Win;
+ byte[] clientSeed = ClientTypeSeed_Win;
if (account.game.OS == "Wn64")
clientSeed = ClientTypeSeed_Wn64;
else if (account.game.OS == "Mc64")
clientSeed = ClientTypeSeed_Mc64;
- byte[] byteArray = new byte[clientSeed.Length * 4];
- Buffer.BlockCopy(clientSeed, 0, byteArray, 0, clientSeed.Length * 4);
-
Sha256 digestKeyHash = new Sha256();
digestKeyHash.Process(account.game.SessionKey, account.game.SessionKey.Length);
- digestKeyHash.Finish(byteArray, byteArray.Length);
+ digestKeyHash.Finish(clientSeed, clientSeed.Length);
HmacSha256 hmac = new HmacSha256(digestKeyHash.Digest);
hmac.Process(authSession.LocalChallenge, authSession.LocalChallenge.Count);
@@ -744,10 +741,6 @@ namespace Game.Network
game.IsBanned = fields.Read(13) != 0;
game.IsRectuiter = fields.Read(14) != 0;
- uint world_expansion = WorldConfig.GetUIntValue(WorldCfg.Expansion);
- if (game.Expansion > world_expansion)
- game.Expansion = (byte)world_expansion;
-
if (battleNet.Locale >= LocaleConstant.Total)
battleNet.Locale = LocaleConstant.enUS;
}
diff --git a/Source/Game/Network/WorldSocketManager.cs b/Source/Game/Network/WorldSocketManager.cs
index d3b648324..c6e686944 100644
--- a/Source/Game/Network/WorldSocketManager.cs
+++ b/Source/Game/Network/WorldSocketManager.cs
@@ -33,14 +33,6 @@ namespace Game.Network
// -1 means use default
_socketSendBufferSize = ConfigMgr.GetDefaultValue("Network.OutKBuff", -1);
- m_SockOutUBuff = ConfigMgr.GetDefaultValue("Network.OutUBuff", 65536);
-
- if (m_SockOutUBuff <= 0)
- {
- Log.outError(LogFilter.Network, "Network.OutUBuff is wrong in your config file");
- return false;
- }
-
if (!base.StartNetwork(bindIp, port, threadCount))
return false;
@@ -82,7 +74,6 @@ namespace Game.Network
AsyncAcceptor _instanceAcceptor;
int _socketSendBufferSize;
- int m_SockOutUBuff;
bool _tcpNoDelay;
}
}
diff --git a/Source/Game/Quest/Quest.cs b/Source/Game/Quest/Quest.cs
index 3dc423d80..dcc7edd6a 100644
--- a/Source/Game/Quest/Quest.cs
+++ b/Source/Game/Quest/Quest.cs
@@ -33,38 +33,39 @@ namespace Game
Id = fields.Read(0);
Type = (QuestType)fields.Read(1);
Level = fields.Read(2);
- PackageID = fields.Read(3);
- MinLevel = fields.Read(4);
- QuestSortID = fields.Read(5);
- QuestInfoID = fields.Read(6);
- SuggestedPlayers = fields.Read(7);
- NextQuestInChain = fields.Read(8);
- RewardXPDifficulty = fields.Read(9);
- RewardXPMultiplier = fields.Read(10);
- RewardMoney = fields.Read(11);
- RewardMoneyDifficulty = fields.Read(12);
- RewardMoneyMultiplier = fields.Read(13);
- RewardBonusMoney = fields.Read(14);
+ MaxScalingLevel = fields.Read(3);
+ PackageID = fields.Read(4);
+ MinLevel = fields.Read(5);
+ QuestSortID = fields.Read(6);
+ QuestInfoID = fields.Read(7);
+ SuggestedPlayers = fields.Read(8);
+ NextQuestInChain = fields.Read(9);
+ RewardXPDifficulty = fields.Read(10);
+ RewardXPMultiplier = fields.Read(11);
+ RewardMoney = fields.Read(12);
+ RewardMoneyDifficulty = fields.Read(13);
+ RewardMoneyMultiplier = fields.Read(14);
+ RewardBonusMoney = fields.Read(15);
for (int i = 0; i < SharedConst.QuestRewardDisplaySpellCount; ++i)
- RewardDisplaySpell[i] = fields.Read(15 + i);
+ RewardDisplaySpell[i] = fields.Read(16 + i);
- RewardSpell = fields.Read(18);
- RewardHonor = fields.Read(19);
- RewardKillHonor = fields.Read(20);
- SourceItemId = fields.Read(21);
- RewardArtifactXPDifficulty = fields.Read(22);
- RewardArtifactXPMultiplier = fields.Read(23);
- RewardArtifactCategoryID = fields.Read(24);
- Flags = (QuestFlags)fields.Read(25);
- FlagsEx = (QuestFlagsEx)fields.Read(26);
+ RewardSpell = fields.Read(19);
+ RewardHonor = fields.Read(20);
+ RewardKillHonor = fields.Read(21);
+ SourceItemId = fields.Read(22);
+ RewardArtifactXPDifficulty = fields.Read(23);
+ RewardArtifactXPMultiplier = fields.Read(24);
+ RewardArtifactCategoryID = fields.Read(25);
+ Flags = (QuestFlags)fields.Read(26);
+ FlagsEx = (QuestFlagsEx)fields.Read(27);
for (int i = 0; i < SharedConst.QuestItemDropCount; ++i)
{
- RewardItemId[i] = fields.Read(27 + i * 4);
- RewardItemCount[i] = fields.Read(28 + i * 4);
- ItemDrop[i] = fields.Read(29 + i * 4);
- ItemDropQuantity[i] = fields.Read(30 + i * 4);
+ RewardItemId[i] = fields.Read(28 + i * 4);
+ RewardItemCount[i] = fields.Read(29 + i * 4);
+ ItemDrop[i] = fields.Read(30 + i * 4);
+ ItemDropQuantity[i] = fields.Read(31 + i * 4);
if (RewardItemId[i] != 0)
++_rewItemsCount;
@@ -72,63 +73,63 @@ namespace Game
for (int i = 0; i < SharedConst.QuestRewardChoicesCount; ++i)
{
- RewardChoiceItemId[i] = fields.Read(43 + i * 3);
- RewardChoiceItemCount[i] = fields.Read(44 + i * 3);
- RewardChoiceItemDisplayId[i] = fields.Read(45 + i * 3);
+ RewardChoiceItemId[i] = fields.Read(44 + i * 3);
+ RewardChoiceItemCount[i] = fields.Read(45 + i * 3);
+ RewardChoiceItemDisplayId[i] = fields.Read(46 + i * 3);
if (RewardChoiceItemId[i] != 0)
++_rewChoiceItemsCount;
}
- POIContinent = fields.Read(61);
- POIx = fields.Read(62);
- POIy = fields.Read(63);
- POIPriority = fields.Read(64);
+ POIContinent = fields.Read(62);
+ POIx = fields.Read(63);
+ POIy = fields.Read(64);
+ POIPriority = fields.Read(65);
- RewardTitleId = fields.Read(65);
- RewardArenaPoints = fields.Read