diff --git a/Source/Framework/Constants/PlayerConst.cs b/Source/Framework/Constants/PlayerConst.cs index bd0a031bb..7ddfa3542 100644 --- a/Source/Framework/Constants/PlayerConst.cs +++ b/Source/Framework/Constants/PlayerConst.cs @@ -19,7 +19,10 @@ namespace Framework.Constants public const int MaxMasterySpells = 2; public const int ReqPrimaryTreeTalents = 31; - public const int ExploredZonesSize = 192; + + public const int ExploredZonesSize = 240; + public const int ExploredZonesBits = sizeof(ulong) * 8; + public const ulong MaxMoneyAmount = 99999999999UL; public const int MaxActionButtons = 180; public const int MaxActionButtonActionValue = 0x00FFFFFF + 1; @@ -900,4 +903,11 @@ namespace Framework.Constants Guild = 0, Personal = 1, } + + public enum PlayerDataFlag + { + ExploredZonesIndex = 1, + CharacterIndex = 2, + AccountIndex = 3 + } } diff --git a/Source/Framework/Constants/QuestConst.cs b/Source/Framework/Constants/QuestConst.cs index 35ed5c403..7e1e3674f 100644 --- a/Source/Framework/Constants/QuestConst.cs +++ b/Source/Framework/Constants/QuestConst.cs @@ -28,6 +28,7 @@ namespace Framework.Constants IncreaseReputation = 18,// requires the player to gain X reputation with a faction AreaTriggerEnter = 19, AreaTriggerExit = 20, + KillWithLabel = 21, Max } diff --git a/Source/Framework/Constants/SharedConst.cs b/Source/Framework/Constants/SharedConst.cs index d94b785dc..be6f1a467 100644 --- a/Source/Framework/Constants/SharedConst.cs +++ b/Source/Framework/Constants/SharedConst.cs @@ -2042,988 +2042,989 @@ namespace Framework.Constants GuildLeaderChangedSs = 143, GuildDisbanded = 144, GuildNotAllied = 145, - GuildLeaderLeave = 146, - GuildRanksLocked = 147, - GuildRankInUse = 148, - GuildRankTooHighS = 149, - GuildRankTooLowS = 150, - GuildNameExistsS = 151, - GuildWithdrawLimit = 152, - GuildNotEnoughMoney = 153, - GuildTooMuchMoney = 154, - GuildBankConjuredItem = 155, - GuildBankEquippedItem = 156, - GuildBankBoundItem = 157, - GuildBankQuestItem = 158, - GuildBankWrappedItem = 159, - GuildBankFull = 160, - GuildBankWrongTab = 161, - NoGuildCharter = 162, - OutOfRange = 163, - PlayerDead = 164, - ClientLockedOut = 165, - ClientOnTransport = 166, - KilledByS = 167, - LootLocked = 168, - LootTooFar = 169, - LootDidntKill = 170, - LootBadFacing = 171, - LootNotstanding = 172, - LootStunned = 173, - LootNoUi = 174, - LootWhileInvulnerable = 175, - NoLoot = 176, - QuestAcceptedS = 177, - QuestCompleteS = 178, - QuestFailedS = 179, - QuestFailedBagFullS = 180, - QuestFailedMaxCountS = 181, - QuestFailedLowLevel = 182, - QuestFailedMissingItems = 183, - QuestFailedWrongRace = 184, - QuestFailedNotEnoughMoney = 185, - QuestFailedExpansion = 186, - QuestOnlyOneTimed = 187, - QuestNeedPrereqs = 188, - QuestNeedPrereqsCustom = 189, - QuestAlreadyOn = 190, - QuestAlreadyDone = 191, - QuestAlreadyDoneDaily = 192, - QuestHasInProgress = 193, - QuestRewardExpI = 194, - QuestRewardMoneyS = 195, - QuestMustChoose = 196, - QuestLogFull = 197, - CombatDamageSsi = 198, - InspectS = 199, - CantUseItem = 200, - CantUseItemInArena = 201, - CantUseItemInRatedBattleground = 202, - MustEquipItem = 203, - PassiveAbility = 204, - H2skillnotfound = 205, - NoAttackTarget = 206, - InvalidAttackTarget = 207, - AttackPvpTargetWhileUnflagged = 208, - AttackStunned = 209, - AttackPacified = 210, - AttackMounted = 211, - AttackFleeing = 212, - AttackConfused = 213, - AttackCharmed = 214, - AttackDead = 215, - AttackPreventedByMechanicS = 216, - AttackChannel = 217, - Taxisamenode = 218, - Taxinosuchpath = 219, - Taxiunspecifiedservererror = 220, - Taxinotenoughmoney = 221, - Taxitoofaraway = 222, - Taxinovendornearby = 223, - Taxinotvisited = 224, - Taxiplayerbusy = 225, - Taxiplayeralreadymounted = 226, - Taxiplayershapeshifted = 227, - Taxiplayermoving = 228, - Taxinopaths = 229, - Taxinoteligible = 230, - Taxinotstanding = 231, - Taxiincombat = 232, - NoReplyTarget = 233, - GenericNoTarget = 234, - InitiateTradeS = 235, - TradeRequestS = 236, - TradeBlockedS = 237, - TradeTargetDead = 238, - TradeTooFar = 239, - TradeCancelled = 240, - TradeComplete = 241, - TradeBagFull = 242, - TradeTargetBagFull = 243, - TradeMaxCountExceeded = 244, - TradeTargetMaxCountExceeded = 245, - InventoryTradeTooManyUniqueItem = 246, - AlreadyTrading = 247, - MountInvalidmountee = 248, - MountToofaraway = 249, - MountAlreadymounted = 250, - MountNotmountable = 251, - MountNotyourpet = 252, - MountOther = 253, - MountLooting = 254, - MountRacecantmount = 255, - MountShapeshifted = 256, - MountNoFavorites = 257, - MountNoMounts = 258, - DismountNopet = 259, - DismountNotmounted = 260, - DismountNotyourpet = 261, - SpellFailedTotems = 262, - SpellFailedReagents = 263, - SpellFailedReagentsGeneric = 264, - SpellFailedOptionalReagents = 265, - CantTradeGold = 266, - SpellFailedEquippedItem = 267, - SpellFailedEquippedItemClassS = 268, - SpellFailedShapeshiftFormS = 269, - SpellFailedAnotherInProgress = 270, - Badattackfacing = 271, - Badattackpos = 272, - ChestInUse = 273, - UseCantOpen = 274, - UseLocked = 275, - DoorLocked = 276, - ButtonLocked = 277, - UseLockedWithItemS = 278, - UseLockedWithSpellS = 279, - UseLockedWithSpellKnownSi = 280, - UseTooFar = 281, - UseBadAngle = 282, - UseObjectMoving = 283, - UseSpellFocus = 284, - UseDestroyed = 285, - SetLootFreeforall = 286, - SetLootRoundrobin = 287, - SetLootMaster = 288, - SetLootGroup = 289, - SetLootThresholdS = 290, - NewLootMasterS = 291, - SpecifyMasterLooter = 292, - LootSpecChangedS = 293, - TameFailed = 294, - ChatWhileDead = 295, - ChatPlayerNotFoundS = 296, - Newtaxipath = 297, - NoPet = 298, - Notyourpet = 299, - PetNotRenameable = 300, - QuestObjectiveCompleteS = 301, - QuestUnknownComplete = 302, - QuestAddKillSii = 303, - QuestAddFoundSii = 304, - QuestAddItemSii = 305, - QuestAddPlayerKillSii = 306, - Cannotcreatedirectory = 307, - Cannotcreatefile = 308, - PlayerWrongFaction = 309, - PlayerIsNeutral = 310, - BankslotFailedTooMany = 311, - BankslotInsufficientFunds = 312, - BankslotNotbanker = 313, - FriendDbError = 314, - FriendListFull = 315, - FriendAddedS = 316, - BattletagFriendAddedS = 317, - FriendOnlineSs = 318, - FriendOfflineS = 319, - FriendNotFound = 320, - FriendWrongFaction = 321, - FriendRemovedS = 322, - BattletagFriendRemovedS = 323, - FriendError = 324, - FriendAlreadyS = 325, - FriendSelf = 326, - FriendDeleted = 327, - IgnoreFull = 328, - IgnoreSelf = 329, - IgnoreNotFound = 330, - IgnoreAlreadyS = 331, - IgnoreAddedS = 332, - IgnoreRemovedS = 333, - IgnoreAmbiguous = 334, - IgnoreDeleted = 335, - OnlyOneBolt = 336, - OnlyOneAmmo = 337, - SpellFailedEquippedSpecificItem = 338, - WrongBagTypeSubclass = 339, - CantWrapStackable = 340, - CantWrapEquipped = 341, - CantWrapWrapped = 342, - CantWrapBound = 343, - CantWrapUnique = 344, - CantWrapBags = 345, - OutOfMana = 346, - OutOfRage = 347, - OutOfFocus = 348, - OutOfEnergy = 349, - OutOfChi = 350, - OutOfHealth = 351, - OutOfRunes = 352, - OutOfRunicPower = 353, - OutOfSoulShards = 354, - OutOfLunarPower = 355, - OutOfHolyPower = 356, - OutOfMaelstrom = 357, - OutOfComboPoints = 358, - OutOfInsanity = 359, - OutOfEssence = 360, - OutOfArcaneCharges = 361, - OutOfFury = 362, - OutOfPain = 363, - OutOfPowerDisplay = 364, - LootGone = 365, - MountForceddismount = 366, - AutofollowTooFar = 367, - UnitNotFound = 368, - InvalidFollowTarget = 369, - InvalidFollowPvpCombat = 370, - InvalidFollowTargetPvpCombat = 371, - InvalidInspectTarget = 372, - GuildemblemSuccess = 373, - GuildemblemInvalidTabardColors = 374, - GuildemblemNoguild = 375, - GuildemblemNotguildmaster = 376, - GuildemblemNotenoughmoney = 377, - GuildemblemInvalidvendor = 378, - EmblemerrorNotabardgeoset = 379, - SpellOutOfRange = 380, - CommandNeedsTarget = 381, - NoammoS = 382, - Toobusytofollow = 383, - DuelRequested = 384, - DuelCancelled = 385, - Deathbindalreadybound = 386, - DeathbindSuccessS = 387, - Noemotewhilerunning = 388, - ZoneExplored = 389, - ZoneExploredXp = 390, - InvalidItemTarget = 391, - InvalidQuestTarget = 392, - IgnoringYouS = 393, - FishNotHooked = 394, - FishEscaped = 395, - SpellFailedNotunsheathed = 396, - PetitionOfferedS = 397, - PetitionSigned = 398, - PetitionSignedS = 399, - PetitionDeclinedS = 400, - PetitionAlreadySigned = 401, - PetitionRestrictedAccountTrial = 402, - PetitionAlreadySignedOther = 403, - PetitionInGuild = 404, - PetitionCreator = 405, - PetitionNotEnoughSignatures = 406, - PetitionNotSameServer = 407, - PetitionFull = 408, - PetitionAlreadySignedByS = 409, - GuildNameInvalid = 410, - SpellUnlearnedS = 411, - PetSpellRooted = 412, - PetSpellAffectingCombat = 413, - PetSpellOutOfRange = 414, - PetSpellNotBehind = 415, - PetSpellTargetsDead = 416, - PetSpellDead = 417, - PetSpellNopath = 418, - ItemCantBeDestroyed = 419, - TicketAlreadyExists = 420, - TicketCreateError = 421, - TicketUpdateError = 422, - TicketDbError = 423, - TicketNoText = 424, - TicketTextTooLong = 425, - ObjectIsBusy = 426, - ExhaustionWellrested = 427, - ExhaustionRested = 428, - ExhaustionNormal = 429, - ExhaustionTired = 430, - ExhaustionExhausted = 431, - NoItemsWhileShapeshifted = 432, - CantInteractShapeshifted = 433, - RealmNotFound = 434, - MailQuestItem = 435, - MailBoundItem = 436, - MailConjuredItem = 437, - MailBag = 438, - MailToSelf = 439, - MailTargetNotFound = 440, - MailDatabaseError = 441, - MailDeleteItemError = 442, - MailWrappedCod = 443, - MailCantSendRealm = 444, - MailTempReturnOutage = 445, - MailRecepientCantReceiveMail = 446, - MailSent = 447, - MailTargetIsTrial = 448, - NotHappyEnough = 449, - UseCantImmune = 450, - CantBeDisenchanted = 451, - CantUseDisarmed = 452, - AuctionDatabaseError = 453, - AuctionHigherBid = 454, - AuctionAlreadyBid = 455, - AuctionOutbidS = 456, - AuctionWonS = 457, - AuctionRemovedS = 458, - AuctionBidPlaced = 459, - LogoutFailed = 460, - QuestPushSuccessS = 461, - QuestPushInvalidS = 462, - QuestPushInvalidToRecipientS = 463, - QuestPushAcceptedS = 464, - QuestPushDeclinedS = 465, - QuestPushBusyS = 466, - QuestPushDeadS = 467, - QuestPushDeadToRecipientS = 468, - QuestPushLogFullS = 469, - QuestPushLogFullToRecipientS = 470, - QuestPushOnquestS = 471, - QuestPushOnquestToRecipientS = 472, - QuestPushAlreadyDoneS = 473, - QuestPushAlreadyDoneToRecipientS = 474, - QuestPushNotDailyS = 475, - QuestPushTimerExpiredS = 476, - QuestPushNotInPartyS = 477, - QuestPushDifferentServerDailyS = 478, - QuestPushDifferentServerDailyToRecipientS = 479, - QuestPushNotAllowedS = 480, - QuestPushPrerequisiteS = 481, - QuestPushPrerequisiteToRecipientS = 482, - QuestPushLowLevelS = 483, - QuestPushLowLevelToRecipientS = 484, - QuestPushHighLevelS = 485, - QuestPushHighLevelToRecipientS = 486, - QuestPushClassS = 487, - QuestPushClassToRecipientS = 488, - QuestPushRaceS = 489, - QuestPushRaceToRecipientS = 490, - QuestPushLowFactionS = 491, - QuestPushLowFactionToRecipientS = 492, - QuestPushExpansionS = 493, - QuestPushExpansionToRecipientS = 494, - QuestPushNotGarrisonOwnerS = 495, - QuestPushNotGarrisonOwnerToRecipientS = 496, - QuestPushWrongCovenantS = 497, - QuestPushWrongCovenantToRecipientS = 498, - QuestPushNewPlayerExperienceS = 499, - QuestPushNewPlayerExperienceToRecipientS = 500, - QuestPushWrongFactionS = 501, - QuestPushWrongFactionToRecipientS = 502, - QuestPushCrossFactionRestrictedS = 503, - RaidGroupLowlevel = 504, - RaidGroupOnly = 505, - RaidGroupFull = 506, - RaidGroupRequirementsUnmatch = 507, - CorpseIsNotInInstance = 508, - PvpKillHonorable = 509, - PvpKillDishonorable = 510, - SpellFailedAlreadyAtFullHealth = 511, - SpellFailedAlreadyAtFullMana = 512, - SpellFailedAlreadyAtFullPowerS = 513, - AutolootMoneyS = 514, - GenericStunned = 515, - GenericThrottle = 516, - ClubFinderSearchingTooFast = 517, - TargetStunned = 518, - MustRepairDurability = 519, - RaidYouJoined = 520, - RaidYouLeft = 521, - InstanceGroupJoinedWithParty = 522, - InstanceGroupJoinedWithRaid = 523, - RaidMemberAddedS = 524, - RaidMemberRemovedS = 525, - InstanceGroupAddedS = 526, - InstanceGroupRemovedS = 527, - ClickOnItemToFeed = 528, - TooManyChatChannels = 529, - LootRollPending = 530, - LootPlayerNotFound = 531, - NotInRaid = 532, - LoggingOut = 533, - TargetLoggingOut = 534, - NotWhileMounted = 535, - NotWhileShapeshifted = 536, - NotInCombat = 537, - NotWhileDisarmed = 538, - PetBroken = 539, - TalentWipeError = 540, - SpecWipeError = 541, - GlyphWipeError = 542, - PetSpecWipeError = 543, - FeignDeathResisted = 544, - MeetingStoneInQueueS = 545, - MeetingStoneLeftQueueS = 546, - MeetingStoneOtherMemberLeft = 547, - MeetingStonePartyKickedFromQueue = 548, - MeetingStoneMemberStillInQueue = 549, - MeetingStoneSuccess = 550, - MeetingStoneInProgress = 551, - MeetingStoneMemberAddedS = 552, - MeetingStoneGroupFull = 553, - MeetingStoneNotLeader = 554, - MeetingStoneInvalidLevel = 555, - MeetingStoneTargetNotInParty = 556, - MeetingStoneTargetInvalidLevel = 557, - MeetingStoneMustBeLeader = 558, - MeetingStoneNoRaidGroup = 559, - MeetingStoneNeedParty = 560, - MeetingStoneNotFound = 561, - MeetingStoneTargetInVehicle = 562, - GuildemblemSame = 563, - EquipTradeItem = 564, - PvpToggleOn = 565, - PvpToggleOff = 566, - GroupJoinBattlegroundDeserters = 567, - GroupJoinBattlegroundDead = 568, - GroupJoinBattlegroundS = 569, - GroupJoinBattlegroundFail = 570, - GroupJoinBattlegroundTooMany = 571, - SoloJoinBattlegroundS = 572, - JoinSingleScenarioS = 573, - BattlegroundTooManyQueues = 574, - BattlegroundCannotQueueForRated = 575, - BattledgroundQueuedForRated = 576, - BattlegroundTeamLeftQueue = 577, - BattlegroundNotInBattleground = 578, - AlreadyInArenaTeamS = 579, - InvalidPromotionCode = 580, - BgPlayerJoinedSs = 581, - BgPlayerLeftS = 582, - RestrictedAccount = 583, - RestrictedAccountTrial = 584, - PlayTimeExceeded = 585, - ApproachingPartialPlayTime = 586, - ApproachingPartialPlayTime2 = 587, - ApproachingNoPlayTime = 588, - ApproachingNoPlayTime2 = 589, - UnhealthyTime = 590, - ChatRestrictedTrial = 591, - ChatThrottled = 592, - MailReachedCap = 593, - InvalidRaidTarget = 594, - RaidLeaderReadyCheckStartS = 595, - ReadyCheckInProgress = 596, - ReadyCheckThrottled = 597, - DungeonDifficultyFailed = 598, - DungeonDifficultyChangedS = 599, - TradeWrongRealm = 600, - TradeNotOnTaplist = 601, - ChatPlayerAmbiguousS = 602, - LootCantLootThatNow = 603, - LootMasterInvFull = 604, - LootMasterUniqueItem = 605, - LootMasterOther = 606, - FilteringYouS = 607, - UsePreventedByMechanicS = 608, - ItemUniqueEquippable = 609, - LfgLeaderIsLfmS = 610, - LfgPending = 611, - CantSpeakLangage = 612, - VendorMissingTurnins = 613, - BattlegroundNotInTeam = 614, - NotInBattleground = 615, - NotEnoughHonorPoints = 616, - NotEnoughArenaPoints = 617, - SocketingRequiresMetaGem = 618, - SocketingMetaGemOnlyInMetaslot = 619, - SocketingRequiresHydraulicGem = 620, - SocketingHydraulicGemOnlyInHydraulicslot = 621, - SocketingRequiresCogwheelGem = 622, - SocketingCogwheelGemOnlyInCogwheelslot = 623, - SocketingItemTooLowLevel = 624, - ItemMaxCountSocketed = 625, - SystemDisabled = 626, - QuestFailedTooManyDailyQuestsI = 627, - ItemMaxCountEquippedSocketed = 628, - ItemUniqueEquippableSocketed = 629, - UserSquelched = 630, - AccountSilenced = 631, - PartyMemberSilenced = 632, - PartyMemberSilencedLfgDelist = 633, - TooMuchGold = 634, - NotBarberSitting = 635, - QuestFailedCais = 636, - InviteRestrictedTrial = 637, - VoiceIgnoreFull = 638, - VoiceIgnoreSelf = 639, - VoiceIgnoreNotFound = 640, - VoiceIgnoreAlreadyS = 641, - VoiceIgnoreAddedS = 642, - VoiceIgnoreRemovedS = 643, - VoiceIgnoreAmbiguous = 644, - VoiceIgnoreDeleted = 645, - UnknownMacroOptionS = 646, - NotDuringArenaMatch = 647, - NotInRatedBattleground = 648, - PlayerSilenced = 649, - PlayerUnsilenced = 650, - ComsatDisconnect = 651, - ComsatReconnectAttempt = 652, - ComsatConnectFail = 653, - MailInvalidAttachmentSlot = 654, - MailTooManyAttachments = 655, - MailInvalidAttachment = 656, - MailAttachmentExpired = 657, - VoiceChatParentalDisableMic = 658, - ProfaneChatName = 659, - PlayerSilencedEcho = 660, - PlayerUnsilencedEcho = 661, - LootCantLootThat = 662, - ArenaExpiredCais = 663, - GroupActionThrottled = 664, - AlreadyPickpocketed = 665, - NameInvalid = 666, - NameNoName = 667, - NameTooShort = 668, - NameTooLong = 669, - NameMixedLanguages = 670, - NameProfane = 671, - NameReserved = 672, - NameThreeConsecutive = 673, - NameInvalidSpace = 674, - NameConsecutiveSpaces = 675, - NameRussianConsecutiveSilentCharacters = 676, - NameRussianSilentCharacterAtBeginningOrEnd = 677, - NameDeclensionDoesntMatchBaseName = 678, - RecruitAFriendNotLinked = 679, - RecruitAFriendNotNow = 680, - RecruitAFriendSummonLevelMax = 681, - RecruitAFriendSummonCooldown = 682, - RecruitAFriendSummonOffline = 683, - RecruitAFriendInsufExpanLvl = 684, - RecruitAFriendMapIncomingTransferNotAllowed = 685, - NotSameAccount = 686, - BadOnUseEnchant = 687, - TradeSelf = 688, - TooManySockets = 689, - ItemMaxLimitCategoryCountExceededIs = 690, - TradeTargetMaxLimitCategoryCountExceededIs = 691, - ItemMaxLimitCategorySocketedExceededIs = 692, - ItemMaxLimitCategoryEquippedExceededIs = 693, - ShapeshiftFormCannotEquip = 694, - ItemInventoryFullSatchel = 695, - ScalingStatItemLevelExceeded = 696, - ScalingStatItemLevelTooLow = 697, - PurchaseLevelTooLow = 698, - GroupSwapFailed = 699, - InviteInCombat = 700, - InvalidGlyphSlot = 701, - GenericNoValidTargets = 702, - CalendarEventAlertS = 703, - PetLearnSpellS = 704, - PetLearnAbilityS = 705, - PetSpellUnlearnedS = 706, - InviteUnknownRealm = 707, - InviteNoPartyServer = 708, - InvitePartyBusy = 709, - InvitePartyBusyPendingRequest = 710, - InvitePartyBusyPendingSuggest = 711, - PartyTargetAmbiguous = 712, - PartyLfgInviteRaidLocked = 713, - PartyLfgBootLimit = 714, - PartyLfgBootCooldownS = 715, - PartyLfgBootNotEligibleS = 716, - PartyLfgBootInpatientTimerS = 717, - PartyLfgBootInProgress = 718, - PartyLfgBootTooFewPlayers = 719, - PartyLfgBootVoteSucceeded = 720, - PartyLfgBootVoteFailed = 721, - PartyLfgBootInCombat = 722, - PartyLfgBootDungeonComplete = 723, - PartyLfgBootLootRolls = 724, - PartyLfgBootVoteRegistered = 725, - PartyPrivateGroupOnly = 726, - PartyLfgTeleportInCombat = 727, - RaidDisallowedByLevel = 728, - RaidDisallowedByCrossRealm = 729, - PartyRoleNotAvailable = 730, - JoinLfgObjectFailed = 731, - LfgRemovedLevelup = 732, - LfgRemovedXpToggle = 733, - LfgRemovedFactionChange = 734, - BattlegroundInfoThrottled = 735, - BattlegroundAlreadyIn = 736, - ArenaTeamChangeFailedQueued = 737, - ArenaTeamPermissions = 738, - NotWhileFalling = 739, - NotWhileMoving = 740, - NotWhileFatigued = 741, - MaxSockets = 742, - MultiCastActionTotemS = 743, - BattlegroundJoinLevelup = 744, - RemoveFromPvpQueueXpGain = 745, - BattlegroundJoinXpGain = 746, - BattlegroundJoinMercenary = 747, - BattlegroundJoinTooManyHealers = 748, - BattlegroundJoinRatedTooManyHealers = 749, - BattlegroundJoinTooManyTanks = 750, - BattlegroundJoinTooManyDamage = 751, - RaidDifficultyFailed = 752, - RaidDifficultyChangedS = 753, - LegacyRaidDifficultyChangedS = 754, - RaidLockoutChangedS = 755, - RaidConvertedToParty = 756, - PartyConvertedToRaid = 757, - PlayerDifficultyChangedS = 758, - GmresponseDbError = 759, - BattlegroundJoinRangeIndex = 760, - ArenaJoinRangeIndex = 761, - RemoveFromPvpQueueFactionChange = 762, - BattlegroundJoinFailed = 763, - BattlegroundJoinNoValidSpecForRole = 764, - BattlegroundJoinRespec = 765, - BattlegroundInvitationDeclined = 766, - BattlegroundInvitationDeclinedBy = 767, - BattlegroundJoinTimedOut = 768, - BattlegroundDupeQueue = 769, - BattlegroundJoinMustCompleteQuest = 770, - InBattlegroundRespec = 771, - MailLimitedDurationItem = 772, - YellRestrictedTrial = 773, - ChatRaidRestrictedTrial = 774, - LfgRoleCheckFailed = 775, - LfgRoleCheckFailedTimeout = 776, - LfgRoleCheckFailedNotViable = 777, - LfgReadyCheckFailed = 778, - LfgReadyCheckFailedTimeout = 779, - LfgGroupFull = 780, - LfgNoLfgObject = 781, - LfgNoSlotsPlayer = 782, - LfgNoSlotsParty = 783, - LfgNoSpec = 784, - LfgMismatchedSlots = 785, - LfgMismatchedSlotsLocalXrealm = 786, - LfgPartyPlayersFromDifferentRealms = 787, - LfgMembersNotPresent = 788, - LfgGetInfoTimeout = 789, - LfgInvalidSlot = 790, - LfgDeserterPlayer = 791, - LfgDeserterParty = 792, - LfgDead = 793, - LfgRandomCooldownPlayer = 794, - LfgRandomCooldownParty = 795, - LfgTooManyMembers = 796, - LfgTooFewMembers = 797, - LfgProposalFailed = 798, - LfgProposalDeclinedSelf = 799, - LfgProposalDeclinedParty = 800, - LfgNoSlotsSelected = 801, - LfgNoRolesSelected = 802, - LfgRoleCheckInitiated = 803, - LfgReadyCheckInitiated = 804, - LfgPlayerDeclinedRoleCheck = 805, - LfgPlayerDeclinedReadyCheck = 806, - LfgJoinedQueue = 807, - LfgJoinedFlexQueue = 808, - LfgJoinedRfQueue = 809, - LfgJoinedScenarioQueue = 810, - LfgJoinedWorldPvpQueue = 811, - LfgJoinedBattlefieldQueue = 812, - LfgJoinedList = 813, - LfgLeftQueue = 814, - LfgLeftList = 815, - LfgRoleCheckAborted = 816, - LfgReadyCheckAborted = 817, - LfgCantUseBattleground = 818, - LfgCantUseDungeons = 819, - LfgReasonTooManyLfg = 820, - LfgFarmLimit = 821, - LfgNoCrossFactionParties = 822, - InvalidTeleportLocation = 823, - TooFarToInteract = 824, - BattlegroundPlayersFromDifferentRealms = 825, - DifficultyChangeCooldownS = 826, - DifficultyChangeCombatCooldownS = 827, - DifficultyChangeWorldstate = 828, - DifficultyChangeEncounter = 829, - DifficultyChangeCombat = 830, - DifficultyChangePlayerBusy = 831, - DifficultyChangePlayerOnVehicle = 832, - DifficultyChangeAlreadyStarted = 833, - DifficultyChangeOtherHeroicS = 834, - DifficultyChangeHeroicInstanceAlreadyRunning = 835, - ArenaTeamPartySize = 836, - SoloShuffleWargameGroupSize = 837, - SoloShuffleWargameGroupComp = 838, - SoloMinItemLevel = 839, - PvpPlayerAbandoned = 840, - BattlegroundJoinGroupQueueWithoutHealer = 841, - QuestForceRemovedS = 842, - AttackNoActions = 843, - InRandomBg = 844, - InNonRandomBg = 845, - BnFriendSelf = 846, - BnFriendAlready = 847, - BnFriendBlocked = 848, - BnFriendListFull = 849, - BnFriendRequestSent = 850, - BnBroadcastThrottle = 851, - BgDeveloperOnly = 852, - CurrencySpellSlotMismatch = 853, - CurrencyNotTradable = 854, - RequiresExpansionS = 855, - QuestFailedSpell = 856, - TalentFailedUnspentTalentPoints = 857, - TalentFailedNotEnoughTalentsInPrimaryTree = 858, - TalentFailedNoPrimaryTreeSelected = 859, - TalentFailedCantRemoveTalent = 860, - TalentFailedUnknown = 861, - TalentFailedInCombat = 862, - TalentFailedInPvpMatch = 863, - TalentFailedInMythicPlus = 864, - WargameRequestFailure = 865, - RankRequiresAuthenticator = 866, - GuildBankVoucherFailed = 867, - WargameRequestSent = 868, - RequiresAchievementI = 869, - RefundResultExceedMaxCurrency = 870, - CantBuyQuantity = 871, - ItemIsBattlePayLocked = 872, - PartyAlreadyInBattlegroundQueue = 873, - PartyConfirmingBattlegroundQueue = 874, - BattlefieldTeamPartySize = 875, - InsuffTrackedCurrencyIs = 876, - NotOnTournamentRealm = 877, - GuildTrialAccountTrial = 878, - GuildTrialAccountVeteran = 879, - GuildUndeletableDueToLevel = 880, - CantDoThatInAGroup = 881, - GuildLeaderReplaced = 882, - TransmogrifyCantEquip = 883, - TransmogrifyInvalidItemType = 884, - TransmogrifyNotSoulbound = 885, - TransmogrifyInvalidSource = 886, - TransmogrifyInvalidDestination = 887, - TransmogrifyMismatch = 888, - TransmogrifyLegendary = 889, - TransmogrifySameItem = 890, - TransmogrifySameAppearance = 891, - TransmogrifyNotEquipped = 892, - VoidDepositFull = 893, - VoidWithdrawFull = 894, - VoidStorageWrapped = 895, - VoidStorageStackable = 896, - VoidStorageUnbound = 897, - VoidStorageRepair = 898, - VoidStorageCharges = 899, - VoidStorageQuest = 900, - VoidStorageConjured = 901, - VoidStorageMail = 902, - VoidStorageBag = 903, - VoidTransferStorageFull = 904, - VoidTransferInvFull = 905, - VoidTransferInternalError = 906, - VoidTransferItemInvalid = 907, - DifficultyDisabledInLfg = 908, - VoidStorageUnique = 909, - VoidStorageLoot = 910, - VoidStorageHoliday = 911, - VoidStorageDuration = 912, - VoidStorageLoadFailed = 913, - VoidStorageInvalidItem = 914, - ParentalControlsChatMuted = 915, - SorStartExperienceIncomplete = 916, - SorInvalidEmail = 917, - SorInvalidComment = 918, - ChallengeModeResetCooldownS = 919, - ChallengeModeResetKeystone = 920, - PetJournalAlreadyInLoadout = 921, - ReportSubmittedSuccessfully = 922, - ReportSubmissionFailed = 923, - SuggestionSubmittedSuccessfully = 924, - BugSubmittedSuccessfully = 925, - ChallengeModeEnabled = 926, - ChallengeModeDisabled = 927, - PetbattleCreateFailed = 928, - PetbattleNotHere = 929, - PetbattleNotHereOnTransport = 930, - PetbattleNotHereUnevenGround = 931, - PetbattleNotHereObstructed = 932, - PetbattleNotWhileInCombat = 933, - PetbattleNotWhileDead = 934, - PetbattleNotWhileFlying = 935, - PetbattleTargetInvalid = 936, - PetbattleTargetOutOfRange = 937, - PetbattleTargetNotCapturable = 938, - PetbattleNotATrainer = 939, - PetbattleDeclined = 940, - PetbattleInBattle = 941, - PetbattleInvalidLoadout = 942, - PetbattleAllPetsDead = 943, - PetbattleNoPetsInSlots = 944, - PetbattleNoAccountLock = 945, - PetbattleWildPetTapped = 946, - PetbattleRestrictedAccount = 947, - PetbattleOpponentNotAvailable = 948, - PetbattleNotWhileInMatchedBattle = 949, - CantHaveMorePetsOfThatType = 950, - CantHaveMorePets = 951, - PvpMapNotFound = 952, - PvpMapNotSet = 953, - PetbattleQueueQueued = 954, - PetbattleQueueAlreadyQueued = 955, - PetbattleQueueJoinFailed = 956, - PetbattleQueueJournalLock = 957, - PetbattleQueueRemoved = 958, - PetbattleQueueProposalDeclined = 959, - PetbattleQueueProposalTimeout = 960, - PetbattleQueueOpponentDeclined = 961, - PetbattleQueueRequeuedInternal = 962, - PetbattleQueueRequeuedRemoved = 963, - PetbattleQueueSlotLocked = 964, - PetbattleQueueSlotEmpty = 965, - PetbattleQueueSlotNoTracker = 966, - PetbattleQueueSlotNoSpecies = 967, - PetbattleQueueSlotCantBattle = 968, - PetbattleQueueSlotRevoked = 969, - PetbattleQueueSlotDead = 970, - PetbattleQueueSlotNoPet = 971, - PetbattleQueueNotWhileNeutral = 972, - PetbattleGameTimeLimitWarning = 973, - PetbattleGameRoundsLimitWarning = 974, - HasRestriction = 975, - ItemUpgradeItemTooLowLevel = 976, - ItemUpgradeNoPath = 977, - ItemUpgradeNoMoreUpgrades = 978, - BonusRollEmpty = 979, - ChallengeModeFull = 980, - ChallengeModeInProgress = 981, - ChallengeModeIncorrectKeystone = 982, - BattletagFriendNotFound = 983, - BattletagFriendNotValid = 984, - BattletagFriendNotAllowed = 985, - BattletagFriendThrottled = 986, - BattletagFriendSuccess = 987, - PetTooHighLevelToUncage = 988, - PetbattleInternal = 989, - CantCagePetYet = 990, - NoLootInChallengeMode = 991, - QuestPetBattleVictoriesPvpIi = 992, - RoleCheckAlreadyInProgress = 993, - RecruitAFriendAccountLimit = 994, - RecruitAFriendFailed = 995, - SetLootPersonal = 996, - SetLootMethodFailedCombat = 997, - ReagentBankFull = 998, - ReagentBankLocked = 999, - GarrisonBuildingExists = 1000, - GarrisonInvalidPlot = 1001, - GarrisonInvalidBuildingid = 1002, - GarrisonInvalidPlotBuilding = 1003, - GarrisonRequiresBlueprint = 1004, - GarrisonNotEnoughCurrency = 1005, - GarrisonNotEnoughGold = 1006, - GarrisonCompleteMissionWrongFollowerType = 1007, - AlreadyUsingLfgList = 1008, - RestrictedAccountLfgListTrial = 1009, - ToyUseLimitReached = 1010, - ToyAlreadyKnown = 1011, - TransmogSetAlreadyKnown = 1012, - NotEnoughCurrency = 1013, - SpecIsDisabled = 1014, - FeatureRestrictedTrial = 1015, - CantBeObliterated = 1016, - CantBeScrapped = 1017, - CantBeRecrafted = 1018, - ArtifactRelicDoesNotMatchArtifact = 1019, - MustEquipArtifact = 1020, - CantDoThatRightNow = 1021, - AffectingCombat = 1022, - EquipmentManagerCombatSwapS = 1023, - EquipmentManagerBagsFull = 1024, - EquipmentManagerMissingItemS = 1025, - MovieRecordingWarningPerf = 1026, - MovieRecordingWarningDiskFull = 1027, - MovieRecordingWarningNoMovie = 1028, - MovieRecordingWarningRequirements = 1029, - MovieRecordingWarningCompressing = 1030, - NoChallengeModeReward = 1031, - ClaimedChallengeModeReward = 1032, - ChallengeModePeriodResetSs = 1033, - CantDoThatChallengeModeActive = 1034, - TalentFailedRestArea = 1035, - CannotAbandonLastPet = 1036, - TestCvarSetSss = 1037, - QuestTurnInFailReason = 1038, - ClaimedChallengeModeRewardOld = 1039, - TalentGrantedByAura = 1040, - ChallengeModeAlreadyComplete = 1041, - GlyphTargetNotAvailable = 1042, - PvpWarmodeToggleOn = 1043, - PvpWarmodeToggleOff = 1044, - SpellFailedLevelRequirement = 1045, - SpellFailedCantFlyHere = 1046, - BattlegroundJoinRequiresLevel = 1047, - BattlegroundJoinDisqualified = 1048, - BattlegroundJoinDisqualifiedNoName = 1049, - VoiceChatGenericUnableToConnect = 1050, - VoiceChatServiceLost = 1051, - VoiceChatChannelNameTooShort = 1052, - VoiceChatChannelNameTooLong = 1053, - VoiceChatChannelAlreadyExists = 1054, - VoiceChatTargetNotFound = 1055, - VoiceChatTooManyRequests = 1056, - VoiceChatPlayerSilenced = 1057, - VoiceChatParentalDisableAll = 1058, - VoiceChatDisabled = 1059, - NoPvpReward = 1060, - ClaimedPvpReward = 1061, - AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1062, - AzeriteEssenceSelectionFailedCantRemoveEssence = 1063, - AzeriteEssenceSelectionFailedConditionFailed = 1064, - AzeriteEssenceSelectionFailedRestArea = 1065, - AzeriteEssenceSelectionFailedSlotLocked = 1066, - AzeriteEssenceSelectionFailedNotAtForge = 1067, - AzeriteEssenceSelectionFailedHeartLevelTooLow = 1068, - AzeriteEssenceSelectionFailedNotEquipped = 1069, - SocketingRequiresPunchcardredGem = 1070, - SocketingPunchcardredGemOnlyInPunchcardredslot = 1071, - SocketingRequiresPunchcardyellowGem = 1072, - SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1073, - SocketingRequiresPunchcardblueGem = 1074, - SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1075, - SocketingRequiresDominationShard = 1076, - SocketingDominationShardOnlyInDominationslot = 1077, - SocketingRequiresCypherGem = 1078, - SocketingCypherGemOnlyInCypherslot = 1079, - SocketingRequiresTinkerGem = 1080, - SocketingTinkerGemOnlyInTinkerslot = 1081, - SocketingRequiresPrimordialGem = 1082, - SocketingPrimordialGemOnlyInPrimordialslot = 1083, - LevelLinkingResultLinked = 1084, - LevelLinkingResultUnlinked = 1085, - ClubFinderErrorPostClub = 1086, - ClubFinderErrorApplyClub = 1087, - ClubFinderErrorRespondApplicant = 1088, - ClubFinderErrorCancelApplication = 1089, - ClubFinderErrorTypeAcceptApplication = 1090, - ClubFinderErrorTypeNoInvitePermissions = 1091, - ClubFinderErrorTypeNoPostingPermissions = 1092, - ClubFinderErrorTypeApplicantList = 1093, - ClubFinderErrorTypeApplicantListNoPerm = 1094, - ClubFinderErrorTypeFinderNotAvailable = 1095, - ClubFinderErrorTypeGetPostingIds = 1096, - ClubFinderErrorTypeJoinApplication = 1097, - ClubFinderErrorTypeRealmNotEligible = 1098, - ClubFinderErrorTypeFlaggedRename = 1099, - ClubFinderErrorTypeFlaggedDescriptionChange = 1100, - ItemInteractionNotEnoughGold = 1101, - ItemInteractionNotEnoughCurrency = 1102, - ItemInteractionNoConversionOutput = 1103, - PlayerChoiceErrorPendingChoice = 1104, - SoulbindInvalidConduit = 1105, - SoulbindInvalidConduitItem = 1106, - SoulbindInvalidTalent = 1107, - SoulbindDuplicateConduit = 1108, - ActivateSoulbindS = 1109, - ActivateSoulbindFailedRestArea = 1110, - CantUseProfanity = 1111, - NotInPetBattle = 1112, - NotInNpe = 1113, - NoSpec = 1114, - NoDominationshardOverwrite = 1115, - UseWeeklyRewardsDisabled = 1116, - CrossFactionGroupJoined = 1117, - CantTargetUnfriendlyInOverworld = 1118, - EquipablespellsSlotsFull = 1119, - ItemModAppearanceGroupAlreadyKnown = 1120, - CantBulkSellItemWithRefund = 1121, - WowLabsPartyErrorTypePartyIsFull = 1122, - WowLabsPartyErrorTypeMaxInviteSent = 1123, - WowLabsPartyErrorTypePlayerAlreadyInvited = 1124, - WowLabsPartyErrorTypePartyInviteInvalid = 1125, - WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1126, - WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1127 + GuildNewLeaderNotAllied = 146, + GuildLeaderLeave = 147, + GuildRanksLocked = 148, + GuildRankInUse = 149, + GuildRankTooHighS = 150, + GuildRankTooLowS = 151, + GuildNameExistsS = 152, + GuildWithdrawLimit = 153, + GuildNotEnoughMoney = 154, + GuildTooMuchMoney = 155, + GuildBankConjuredItem = 156, + GuildBankEquippedItem = 157, + GuildBankBoundItem = 158, + GuildBankQuestItem = 159, + GuildBankWrappedItem = 160, + GuildBankFull = 161, + GuildBankWrongTab = 162, + NoGuildCharter = 163, + OutOfRange = 164, + PlayerDead = 165, + ClientLockedOut = 166, + ClientOnTransport = 167, + KilledByS = 168, + LootLocked = 169, + LootTooFar = 170, + LootDidntKill = 171, + LootBadFacing = 172, + LootNotstanding = 173, + LootStunned = 174, + LootNoUi = 175, + LootWhileInvulnerable = 176, + NoLoot = 177, + QuestAcceptedS = 178, + QuestCompleteS = 179, + QuestFailedS = 180, + QuestFailedBagFullS = 181, + QuestFailedMaxCountS = 182, + QuestFailedLowLevel = 183, + QuestFailedMissingItems = 184, + QuestFailedWrongRace = 185, + QuestFailedNotEnoughMoney = 186, + QuestFailedExpansion = 187, + QuestOnlyOneTimed = 188, + QuestNeedPrereqs = 189, + QuestNeedPrereqsCustom = 190, + QuestAlreadyOn = 191, + QuestAlreadyDone = 192, + QuestAlreadyDoneDaily = 193, + QuestHasInProgress = 194, + QuestRewardExpI = 195, + QuestRewardMoneyS = 196, + QuestMustChoose = 197, + QuestLogFull = 198, + CombatDamageSsi = 199, + InspectS = 200, + CantUseItem = 201, + CantUseItemInArena = 202, + CantUseItemInRatedBattleground = 203, + MustEquipItem = 204, + PassiveAbility = 205, + Skill2Hnotfound = 206, + NoAttackTarget = 207, + InvalidAttackTarget = 208, + AttackPvpTargetWhileUnflagged = 209, + AttackStunned = 210, + AttackPacified = 211, + AttackMounted = 212, + AttackFleeing = 213, + AttackConfused = 214, + AttackCharmed = 215, + AttackDead = 216, + AttackPreventedByMechanicS = 217, + AttackChannel = 218, + Taxisamenode = 219, + Taxinosuchpath = 220, + Taxiunspecifiedservererror = 221, + Taxinotenoughmoney = 222, + Taxitoofaraway = 223, + Taxinovendornearby = 224, + Taxinotvisited = 225, + Taxiplayerbusy = 226, + Taxiplayeralreadymounted = 227, + Taxiplayershapeshifted = 228, + Taxiplayermoving = 229, + Taxinopaths = 230, + Taxinoteligible = 231, + Taxinotstanding = 232, + Taxiincombat = 233, + NoReplyTarget = 234, + GenericNoTarget = 235, + InitiateTradeS = 236, + TradeRequestS = 237, + TradeBlockedS = 238, + TradeTargetDead = 239, + TradeTooFar = 240, + TradeCancelled = 241, + TradeComplete = 242, + TradeBagFull = 243, + TradeTargetBagFull = 244, + TradeMaxCountExceeded = 245, + TradeTargetMaxCountExceeded = 246, + InventoryTradeTooManyUniqueItem = 247, + AlreadyTrading = 248, + MountInvalidmountee = 249, + MountToofaraway = 250, + MountAlreadymounted = 251, + MountNotmountable = 252, + MountNotyourpet = 253, + MountOther = 254, + MountLooting = 255, + MountRacecantmount = 256, + MountShapeshifted = 257, + MountNoFavorites = 258, + MountNoMounts = 259, + DismountNopet = 260, + DismountNotmounted = 261, + DismountNotyourpet = 262, + SpellFailedTotems = 263, + SpellFailedReagents = 264, + SpellFailedReagentsGeneric = 265, + SpellFailedOptionalReagents = 266, + CantTradeGold = 267, + SpellFailedEquippedItem = 268, + SpellFailedEquippedItemClassS = 269, + SpellFailedShapeshiftFormS = 270, + SpellFailedAnotherInProgress = 271, + Badattackfacing = 272, + Badattackpos = 273, + ChestInUse = 274, + UseCantOpen = 275, + UseLocked = 276, + DoorLocked = 277, + ButtonLocked = 278, + UseLockedWithItemS = 279, + UseLockedWithSpellS = 280, + UseLockedWithSpellKnownSi = 281, + UseTooFar = 282, + UseBadAngle = 283, + UseObjectMoving = 284, + UseSpellFocus = 285, + UseDestroyed = 286, + SetLootFreeforall = 287, + SetLootRoundrobin = 288, + SetLootMaster = 289, + SetLootGroup = 290, + SetLootThresholdS = 291, + NewLootMasterS = 292, + SpecifyMasterLooter = 293, + LootSpecChangedS = 294, + TameFailed = 295, + ChatWhileDead = 296, + ChatPlayerNotFoundS = 297, + Newtaxipath = 298, + NoPet = 299, + Notyourpet = 300, + PetNotRenameable = 301, + QuestObjectiveCompleteS = 302, + QuestUnknownComplete = 303, + QuestAddKillSii = 304, + QuestAddFoundSii = 305, + QuestAddItemSii = 306, + QuestAddPlayerKillSii = 307, + Cannotcreatedirectory = 308, + Cannotcreatefile = 309, + PlayerWrongFaction = 310, + PlayerIsNeutral = 311, + BankslotFailedTooMany = 312, + BankslotInsufficientFunds = 313, + BankslotNotbanker = 314, + FriendDbError = 315, + FriendListFull = 316, + FriendAddedS = 317, + BattletagFriendAddedS = 318, + FriendOnlineSs = 319, + FriendOfflineS = 320, + FriendNotFound = 321, + FriendWrongFaction = 322, + FriendRemovedS = 323, + BattletagFriendRemovedS = 324, + FriendError = 325, + FriendAlreadyS = 326, + FriendSelf = 327, + FriendDeleted = 328, + IgnoreFull = 329, + IgnoreSelf = 330, + IgnoreNotFound = 331, + IgnoreAlreadyS = 332, + IgnoreAddedS = 333, + IgnoreRemovedS = 334, + IgnoreAmbiguous = 335, + IgnoreDeleted = 336, + OnlyOneBolt = 337, + OnlyOneAmmo = 338, + SpellFailedEquippedSpecificItem = 339, + WrongBagTypeSubclass = 340, + CantWrapStackable = 341, + CantWrapEquipped = 342, + CantWrapWrapped = 343, + CantWrapBound = 344, + CantWrapUnique = 345, + CantWrapBags = 346, + OutOfMana = 347, + OutOfRage = 348, + OutOfFocus = 349, + OutOfEnergy = 350, + OutOfChi = 351, + OutOfHealth = 352, + OutOfRunes = 353, + OutOfRunicPower = 354, + OutOfSoulShards = 355, + OutOfLunarPower = 356, + OutOfHolyPower = 357, + OutOfMaelstrom = 358, + OutOfComboPoints = 359, + OutOfInsanity = 360, + OutOfEssence = 361, + OutOfArcaneCharges = 362, + OutOfFury = 363, + OutOfPain = 364, + OutOfPowerDisplay = 365, + LootGone = 366, + MountForceddismount = 367, + AutofollowTooFar = 368, + UnitNotFound = 369, + InvalidFollowTarget = 370, + InvalidFollowPvpCombat = 371, + InvalidFollowTargetPvpCombat = 372, + InvalidInspectTarget = 373, + GuildemblemSuccess = 374, + GuildemblemInvalidTabardColors = 375, + GuildemblemNoguild = 376, + GuildemblemNotguildmaster = 377, + GuildemblemNotenoughmoney = 378, + GuildemblemInvalidvendor = 379, + EmblemerrorNotabardgeoset = 380, + SpellOutOfRange = 381, + CommandNeedsTarget = 382, + NoammoS = 383, + Toobusytofollow = 384, + DuelRequested = 385, + DuelCancelled = 386, + Deathbindalreadybound = 387, + DeathbindSuccessS = 388, + Noemotewhilerunning = 389, + ZoneExplored = 390, + ZoneExploredXp = 391, + InvalidItemTarget = 392, + InvalidQuestTarget = 393, + IgnoringYouS = 394, + FishNotHooked = 395, + FishEscaped = 396, + SpellFailedNotunsheathed = 397, + PetitionOfferedS = 398, + PetitionSigned = 399, + PetitionSignedS = 400, + PetitionDeclinedS = 401, + PetitionAlreadySigned = 402, + PetitionRestrictedAccountTrial = 403, + PetitionAlreadySignedOther = 404, + PetitionInGuild = 405, + PetitionCreator = 406, + PetitionNotEnoughSignatures = 407, + PetitionNotSameServer = 408, + PetitionFull = 409, + PetitionAlreadySignedByS = 410, + GuildNameInvalid = 411, + SpellUnlearnedS = 412, + PetSpellRooted = 413, + PetSpellAffectingCombat = 414, + PetSpellOutOfRange = 415, + PetSpellNotBehind = 416, + PetSpellTargetsDead = 417, + PetSpellDead = 418, + PetSpellNopath = 419, + ItemCantBeDestroyed = 420, + TicketAlreadyExists = 421, + TicketCreateError = 422, + TicketUpdateError = 423, + TicketDbError = 424, + TicketNoText = 425, + TicketTextTooLong = 426, + ObjectIsBusy = 427, + ExhaustionWellrested = 428, + ExhaustionRested = 429, + ExhaustionNormal = 430, + ExhaustionTired = 431, + ExhaustionExhausted = 432, + NoItemsWhileShapeshifted = 433, + CantInteractShapeshifted = 434, + RealmNotFound = 435, + MailQuestItem = 436, + MailBoundItem = 437, + MailConjuredItem = 438, + MailBag = 439, + MailToSelf = 440, + MailTargetNotFound = 441, + MailDatabaseError = 442, + MailDeleteItemError = 443, + MailWrappedCod = 444, + MailCantSendRealm = 445, + MailTempReturnOutage = 446, + MailRecepientCantReceiveMail = 447, + MailSent = 448, + MailTargetIsTrial = 449, + NotHappyEnough = 450, + UseCantImmune = 451, + CantBeDisenchanted = 452, + CantUseDisarmed = 453, + AuctionDatabaseError = 454, + AuctionHigherBid = 455, + AuctionAlreadyBid = 456, + AuctionOutbidS = 457, + AuctionWonS = 458, + AuctionRemovedS = 459, + AuctionBidPlaced = 460, + LogoutFailed = 461, + QuestPushSuccessS = 462, + QuestPushInvalidS = 463, + QuestPushInvalidToRecipientS = 464, + QuestPushAcceptedS = 465, + QuestPushDeclinedS = 466, + QuestPushBusyS = 467, + QuestPushDeadS = 468, + QuestPushDeadToRecipientS = 469, + QuestPushLogFullS = 470, + QuestPushLogFullToRecipientS = 471, + QuestPushOnquestS = 472, + QuestPushOnquestToRecipientS = 473, + QuestPushAlreadyDoneS = 474, + QuestPushAlreadyDoneToRecipientS = 475, + QuestPushNotDailyS = 476, + QuestPushTimerExpiredS = 477, + QuestPushNotInPartyS = 478, + QuestPushDifferentServerDailyS = 479, + QuestPushDifferentServerDailyToRecipientS = 480, + QuestPushNotAllowedS = 481, + QuestPushPrerequisiteS = 482, + QuestPushPrerequisiteToRecipientS = 483, + QuestPushLowLevelS = 484, + QuestPushLowLevelToRecipientS = 485, + QuestPushHighLevelS = 486, + QuestPushHighLevelToRecipientS = 487, + QuestPushClassS = 488, + QuestPushClassToRecipientS = 489, + QuestPushRaceS = 490, + QuestPushRaceToRecipientS = 491, + QuestPushLowFactionS = 492, + QuestPushLowFactionToRecipientS = 493, + QuestPushExpansionS = 494, + QuestPushExpansionToRecipientS = 495, + QuestPushNotGarrisonOwnerS = 496, + QuestPushNotGarrisonOwnerToRecipientS = 497, + QuestPushWrongCovenantS = 498, + QuestPushWrongCovenantToRecipientS = 499, + QuestPushNewPlayerExperienceS = 500, + QuestPushNewPlayerExperienceToRecipientS = 501, + QuestPushWrongFactionS = 502, + QuestPushWrongFactionToRecipientS = 503, + QuestPushCrossFactionRestrictedS = 504, + RaidGroupLowlevel = 505, + RaidGroupOnly = 506, + RaidGroupFull = 507, + RaidGroupRequirementsUnmatch = 508, + CorpseIsNotInInstance = 509, + PvpKillHonorable = 510, + PvpKillDishonorable = 511, + SpellFailedAlreadyAtFullHealth = 512, + SpellFailedAlreadyAtFullMana = 513, + SpellFailedAlreadyAtFullPowerS = 514, + AutolootMoneyS = 515, + GenericStunned = 516, + GenericThrottle = 517, + ClubFinderSearchingTooFast = 518, + TargetStunned = 519, + MustRepairDurability = 520, + RaidYouJoined = 521, + RaidYouLeft = 522, + InstanceGroupJoinedWithParty = 523, + InstanceGroupJoinedWithRaid = 524, + RaidMemberAddedS = 525, + RaidMemberRemovedS = 526, + InstanceGroupAddedS = 527, + InstanceGroupRemovedS = 528, + ClickOnItemToFeed = 529, + TooManyChatChannels = 530, + LootRollPending = 531, + LootPlayerNotFound = 532, + NotInRaid = 533, + LoggingOut = 534, + TargetLoggingOut = 535, + NotWhileMounted = 536, + NotWhileShapeshifted = 537, + NotInCombat = 538, + NotWhileDisarmed = 539, + PetBroken = 540, + TalentWipeError = 541, + SpecWipeError = 542, + GlyphWipeError = 543, + PetSpecWipeError = 544, + FeignDeathResisted = 545, + MeetingStoneInQueueS = 546, + MeetingStoneLeftQueueS = 547, + MeetingStoneOtherMemberLeft = 548, + MeetingStonePartyKickedFromQueue = 549, + MeetingStoneMemberStillInQueue = 550, + MeetingStoneSuccess = 551, + MeetingStoneInProgress = 552, + MeetingStoneMemberAddedS = 553, + MeetingStoneGroupFull = 554, + MeetingStoneNotLeader = 555, + MeetingStoneInvalidLevel = 556, + MeetingStoneTargetNotInParty = 557, + MeetingStoneTargetInvalidLevel = 558, + MeetingStoneMustBeLeader = 559, + MeetingStoneNoRaidGroup = 560, + MeetingStoneNeedParty = 561, + MeetingStoneNotFound = 562, + MeetingStoneTargetInVehicle = 563, + GuildemblemSame = 564, + EquipTradeItem = 565, + PvpToggleOn = 566, + PvpToggleOff = 567, + GroupJoinBattlegroundDeserters = 568, + GroupJoinBattlegroundDead = 569, + GroupJoinBattlegroundS = 570, + GroupJoinBattlegroundFail = 571, + GroupJoinBattlegroundTooMany = 572, + SoloJoinBattlegroundS = 573, + JoinSingleScenarioS = 574, + BattlegroundTooManyQueues = 575, + BattlegroundCannotQueueForRated = 576, + BattledgroundQueuedForRated = 577, + BattlegroundTeamLeftQueue = 578, + BattlegroundNotInBattleground = 579, + AlreadyInArenaTeamS = 580, + InvalidPromotionCode = 581, + BgPlayerJoinedSs = 582, + BgPlayerLeftS = 583, + RestrictedAccount = 584, + RestrictedAccountTrial = 585, + PlayTimeExceeded = 586, + ApproachingPartialPlayTime = 587, + ApproachingPartialPlayTime2 = 588, + ApproachingNoPlayTime = 589, + ApproachingNoPlayTime2 = 590, + UnhealthyTime = 591, + ChatRestrictedTrial = 592, + ChatThrottled = 593, + MailReachedCap = 594, + InvalidRaidTarget = 595, + RaidLeaderReadyCheckStartS = 596, + ReadyCheckInProgress = 597, + ReadyCheckThrottled = 598, + DungeonDifficultyFailed = 599, + DungeonDifficultyChangedS = 600, + TradeWrongRealm = 601, + TradeNotOnTaplist = 602, + ChatPlayerAmbiguousS = 603, + LootCantLootThatNow = 604, + LootMasterInvFull = 605, + LootMasterUniqueItem = 606, + LootMasterOther = 607, + FilteringYouS = 608, + UsePreventedByMechanicS = 609, + ItemUniqueEquippable = 610, + LfgLeaderIsLfmS = 611, + LfgPending = 612, + CantSpeakLangage = 613, + VendorMissingTurnins = 614, + BattlegroundNotInTeam = 615, + NotInBattleground = 616, + NotEnoughHonorPoints = 617, + NotEnoughArenaPoints = 618, + SocketingRequiresMetaGem = 619, + SocketingMetaGemOnlyInMetaslot = 620, + SocketingRequiresHydraulicGem = 621, + SocketingHydraulicGemOnlyInHydraulicslot = 622, + SocketingRequiresCogwheelGem = 623, + SocketingCogwheelGemOnlyInCogwheelslot = 624, + SocketingItemTooLowLevel = 625, + ItemMaxCountSocketed = 626, + SystemDisabled = 627, + QuestFailedTooManyDailyQuestsI = 628, + ItemMaxCountEquippedSocketed = 629, + ItemUniqueEquippableSocketed = 630, + UserSquelched = 631, + AccountSilenced = 632, + PartyMemberSilenced = 633, + PartyMemberSilencedLfgDelist = 634, + TooMuchGold = 635, + NotBarberSitting = 636, + QuestFailedCais = 637, + InviteRestrictedTrial = 638, + VoiceIgnoreFull = 639, + VoiceIgnoreSelf = 640, + VoiceIgnoreNotFound = 641, + VoiceIgnoreAlreadyS = 642, + VoiceIgnoreAddedS = 643, + VoiceIgnoreRemovedS = 644, + VoiceIgnoreAmbiguous = 645, + VoiceIgnoreDeleted = 646, + UnknownMacroOptionS = 647, + NotDuringArenaMatch = 648, + NotInRatedBattleground = 649, + PlayerSilenced = 650, + PlayerUnsilenced = 651, + ComsatDisconnect = 652, + ComsatReconnectAttempt = 653, + ComsatConnectFail = 654, + MailInvalidAttachmentSlot = 655, + MailTooManyAttachments = 656, + MailInvalidAttachment = 657, + MailAttachmentExpired = 658, + VoiceChatParentalDisableMic = 659, + ProfaneChatName = 660, + PlayerSilencedEcho = 661, + PlayerUnsilencedEcho = 662, + LootCantLootThat = 663, + ArenaExpiredCais = 664, + GroupActionThrottled = 665, + AlreadyPickpocketed = 666, + NameInvalid = 667, + NameNoName = 668, + NameTooShort = 669, + NameTooLong = 670, + NameMixedLanguages = 671, + NameProfane = 672, + NameReserved = 673, + NameThreeConsecutive = 674, + NameInvalidSpace = 675, + NameConsecutiveSpaces = 676, + NameRussianConsecutiveSilentCharacters = 677, + NameRussianSilentCharacterAtBeginningOrEnd = 678, + NameDeclensionDoesntMatchBaseName = 679, + RecruitAFriendNotLinked = 680, + RecruitAFriendNotNow = 681, + RecruitAFriendSummonLevelMax = 682, + RecruitAFriendSummonCooldown = 683, + RecruitAFriendSummonOffline = 684, + RecruitAFriendInsufExpanLvl = 685, + RecruitAFriendMapIncomingTransferNotAllowed = 686, + NotSameAccount = 687, + BadOnUseEnchant = 688, + TradeSelf = 689, + TooManySockets = 690, + ItemMaxLimitCategoryCountExceededIs = 691, + TradeTargetMaxLimitCategoryCountExceededIs = 692, + ItemMaxLimitCategorySocketedExceededIs = 693, + ItemMaxLimitCategoryEquippedExceededIs = 694, + ShapeshiftFormCannotEquip = 695, + ItemInventoryFullSatchel = 696, + ScalingStatItemLevelExceeded = 697, + ScalingStatItemLevelTooLow = 698, + PurchaseLevelTooLow = 699, + GroupSwapFailed = 700, + InviteInCombat = 701, + InvalidGlyphSlot = 702, + GenericNoValidTargets = 703, + CalendarEventAlertS = 704, + PetLearnSpellS = 705, + PetLearnAbilityS = 706, + PetSpellUnlearnedS = 707, + InviteUnknownRealm = 708, + InviteNoPartyServer = 709, + InvitePartyBusy = 710, + InvitePartyBusyPendingRequest = 711, + InvitePartyBusyPendingSuggest = 712, + PartyTargetAmbiguous = 713, + PartyLfgInviteRaidLocked = 714, + PartyLfgBootLimit = 715, + PartyLfgBootCooldownS = 716, + PartyLfgBootNotEligibleS = 717, + PartyLfgBootInpatientTimerS = 718, + PartyLfgBootInProgress = 719, + PartyLfgBootTooFewPlayers = 720, + PartyLfgBootVoteSucceeded = 721, + PartyLfgBootVoteFailed = 722, + PartyLfgBootInCombat = 723, + PartyLfgBootDungeonComplete = 724, + PartyLfgBootLootRolls = 725, + PartyLfgBootVoteRegistered = 726, + PartyPrivateGroupOnly = 727, + PartyLfgTeleportInCombat = 728, + RaidDisallowedByLevel = 729, + RaidDisallowedByCrossRealm = 730, + PartyRoleNotAvailable = 731, + JoinLfgObjectFailed = 732, + LfgRemovedLevelup = 733, + LfgRemovedXpToggle = 734, + LfgRemovedFactionChange = 735, + BattlegroundInfoThrottled = 736, + BattlegroundAlreadyIn = 737, + ArenaTeamChangeFailedQueued = 738, + ArenaTeamPermissions = 739, + NotWhileFalling = 740, + NotWhileMoving = 741, + NotWhileFatigued = 742, + MaxSockets = 743, + MultiCastActionTotemS = 744, + BattlegroundJoinLevelup = 745, + RemoveFromPvpQueueXpGain = 746, + BattlegroundJoinXpGain = 747, + BattlegroundJoinMercenary = 748, + BattlegroundJoinTooManyHealers = 749, + BattlegroundJoinRatedTooManyHealers = 750, + BattlegroundJoinTooManyTanks = 751, + BattlegroundJoinTooManyDamage = 752, + RaidDifficultyFailed = 753, + RaidDifficultyChangedS = 754, + LegacyRaidDifficultyChangedS = 755, + RaidLockoutChangedS = 756, + RaidConvertedToParty = 757, + PartyConvertedToRaid = 758, + PlayerDifficultyChangedS = 759, + GmresponseDbError = 760, + BattlegroundJoinRangeIndex = 761, + ArenaJoinRangeIndex = 762, + RemoveFromPvpQueueFactionChange = 763, + BattlegroundJoinFailed = 764, + BattlegroundJoinNoValidSpecForRole = 765, + BattlegroundJoinRespec = 766, + BattlegroundInvitationDeclined = 767, + BattlegroundInvitationDeclinedBy = 768, + BattlegroundJoinTimedOut = 769, + BattlegroundDupeQueue = 770, + BattlegroundJoinMustCompleteQuest = 771, + InBattlegroundRespec = 772, + MailLimitedDurationItem = 773, + YellRestrictedTrial = 774, + ChatRaidRestrictedTrial = 775, + LfgRoleCheckFailed = 776, + LfgRoleCheckFailedTimeout = 777, + LfgRoleCheckFailedNotViable = 778, + LfgReadyCheckFailed = 779, + LfgReadyCheckFailedTimeout = 780, + LfgGroupFull = 781, + LfgNoLfgObject = 782, + LfgNoSlotsPlayer = 783, + LfgNoSlotsParty = 784, + LfgNoSpec = 785, + LfgMismatchedSlots = 786, + LfgMismatchedSlotsLocalXrealm = 787, + LfgPartyPlayersFromDifferentRealms = 788, + LfgMembersNotPresent = 789, + LfgGetInfoTimeout = 790, + LfgInvalidSlot = 791, + LfgDeserterPlayer = 792, + LfgDeserterParty = 793, + LfgDead = 794, + LfgRandomCooldownPlayer = 795, + LfgRandomCooldownParty = 796, + LfgTooManyMembers = 797, + LfgTooFewMembers = 798, + LfgProposalFailed = 799, + LfgProposalDeclinedSelf = 800, + LfgProposalDeclinedParty = 801, + LfgNoSlotsSelected = 802, + LfgNoRolesSelected = 803, + LfgRoleCheckInitiated = 804, + LfgReadyCheckInitiated = 805, + LfgPlayerDeclinedRoleCheck = 806, + LfgPlayerDeclinedReadyCheck = 807, + LfgJoinedQueue = 808, + LfgJoinedFlexQueue = 809, + LfgJoinedRfQueue = 810, + LfgJoinedScenarioQueue = 811, + LfgJoinedWorldPvpQueue = 812, + LfgJoinedBattlefieldQueue = 813, + LfgJoinedList = 814, + LfgLeftQueue = 815, + LfgLeftList = 816, + LfgRoleCheckAborted = 817, + LfgReadyCheckAborted = 818, + LfgCantUseBattleground = 819, + LfgCantUseDungeons = 820, + LfgReasonTooManyLfg = 821, + LfgFarmLimit = 822, + LfgNoCrossFactionParties = 823, + InvalidTeleportLocation = 824, + TooFarToInteract = 825, + BattlegroundPlayersFromDifferentRealms = 826, + DifficultyChangeCooldownS = 827, + DifficultyChangeCombatCooldownS = 828, + DifficultyChangeWorldstate = 829, + DifficultyChangeEncounter = 830, + DifficultyChangeCombat = 831, + DifficultyChangePlayerBusy = 832, + DifficultyChangePlayerOnVehicle = 833, + DifficultyChangeAlreadyStarted = 834, + DifficultyChangeOtherHeroicS = 835, + DifficultyChangeHeroicInstanceAlreadyRunning = 836, + ArenaTeamPartySize = 837, + SoloShuffleWargameGroupSize = 838, + SoloShuffleWargameGroupComp = 839, + SoloMinItemLevel = 840, + PvpPlayerAbandoned = 841, + BattlegroundJoinGroupQueueWithoutHealer = 842, + QuestForceRemovedS = 843, + AttackNoActions = 844, + InRandomBg = 845, + InNonRandomBg = 846, + BnFriendSelf = 847, + BnFriendAlready = 848, + BnFriendBlocked = 849, + BnFriendListFull = 850, + BnFriendRequestSent = 851, + BnBroadcastThrottle = 852, + BgDeveloperOnly = 853, + CurrencySpellSlotMismatch = 854, + CurrencyNotTradable = 855, + RequiresExpansionS = 856, + QuestFailedSpell = 857, + TalentFailedUnspentTalentPoints = 858, + TalentFailedNotEnoughTalentsInPrimaryTree = 859, + TalentFailedNoPrimaryTreeSelected = 860, + TalentFailedCantRemoveTalent = 861, + TalentFailedUnknown = 862, + TalentFailedInCombat = 863, + TalentFailedInPvpMatch = 864, + TalentFailedInMythicPlus = 865, + WargameRequestFailure = 866, + RankRequiresAuthenticator = 867, + GuildBankVoucherFailed = 868, + WargameRequestSent = 869, + RequiresAchievementI = 870, + RefundResultExceedMaxCurrency = 871, + CantBuyQuantity = 872, + ItemIsBattlePayLocked = 873, + PartyAlreadyInBattlegroundQueue = 874, + PartyConfirmingBattlegroundQueue = 875, + BattlefieldTeamPartySize = 876, + InsuffTrackedCurrencyIs = 877, + NotOnTournamentRealm = 878, + GuildTrialAccountTrial = 879, + GuildTrialAccountVeteran = 880, + GuildUndeletableDueToLevel = 881, + CantDoThatInAGroup = 882, + GuildLeaderReplaced = 883, + TransmogrifyCantEquip = 884, + TransmogrifyInvalidItemType = 885, + TransmogrifyNotSoulbound = 886, + TransmogrifyInvalidSource = 887, + TransmogrifyInvalidDestination = 888, + TransmogrifyMismatch = 889, + TransmogrifyLegendary = 890, + TransmogrifySameItem = 891, + TransmogrifySameAppearance = 892, + TransmogrifyNotEquipped = 893, + VoidDepositFull = 894, + VoidWithdrawFull = 895, + VoidStorageWrapped = 896, + VoidStorageStackable = 897, + VoidStorageUnbound = 898, + VoidStorageRepair = 899, + VoidStorageCharges = 900, + VoidStorageQuest = 901, + VoidStorageConjured = 902, + VoidStorageMail = 903, + VoidStorageBag = 904, + VoidTransferStorageFull = 905, + VoidTransferInvFull = 906, + VoidTransferInternalError = 907, + VoidTransferItemInvalid = 908, + DifficultyDisabledInLfg = 909, + VoidStorageUnique = 910, + VoidStorageLoot = 911, + VoidStorageHoliday = 912, + VoidStorageDuration = 913, + VoidStorageLoadFailed = 914, + VoidStorageInvalidItem = 915, + ParentalControlsChatMuted = 916, + SorStartExperienceIncomplete = 917, + SorInvalidEmail = 918, + SorInvalidComment = 919, + ChallengeModeResetCooldownS = 920, + ChallengeModeResetKeystone = 921, + PetJournalAlreadyInLoadout = 922, + ReportSubmittedSuccessfully = 923, + ReportSubmissionFailed = 924, + SuggestionSubmittedSuccessfully = 925, + BugSubmittedSuccessfully = 926, + ChallengeModeEnabled = 927, + ChallengeModeDisabled = 928, + PetbattleCreateFailed = 929, + PetbattleNotHere = 930, + PetbattleNotHereOnTransport = 931, + PetbattleNotHereUnevenGround = 932, + PetbattleNotHereObstructed = 933, + PetbattleNotWhileInCombat = 934, + PetbattleNotWhileDead = 935, + PetbattleNotWhileFlying = 936, + PetbattleTargetInvalid = 937, + PetbattleTargetOutOfRange = 938, + PetbattleTargetNotCapturable = 939, + PetbattleNotATrainer = 940, + PetbattleDeclined = 941, + PetbattleInBattle = 942, + PetbattleInvalidLoadout = 943, + PetbattleAllPetsDead = 944, + PetbattleNoPetsInSlots = 945, + PetbattleNoAccountLock = 946, + PetbattleWildPetTapped = 947, + PetbattleRestrictedAccount = 948, + PetbattleOpponentNotAvailable = 949, + PetbattleNotWhileInMatchedBattle = 950, + CantHaveMorePetsOfThatType = 951, + CantHaveMorePets = 952, + PvpMapNotFound = 953, + PvpMapNotSet = 954, + PetbattleQueueQueued = 955, + PetbattleQueueAlreadyQueued = 956, + PetbattleQueueJoinFailed = 957, + PetbattleQueueJournalLock = 958, + PetbattleQueueRemoved = 959, + PetbattleQueueProposalDeclined = 960, + PetbattleQueueProposalTimeout = 961, + PetbattleQueueOpponentDeclined = 962, + PetbattleQueueRequeuedInternal = 963, + PetbattleQueueRequeuedRemoved = 964, + PetbattleQueueSlotLocked = 965, + PetbattleQueueSlotEmpty = 966, + PetbattleQueueSlotNoTracker = 967, + PetbattleQueueSlotNoSpecies = 968, + PetbattleQueueSlotCantBattle = 969, + PetbattleQueueSlotRevoked = 970, + PetbattleQueueSlotDead = 971, + PetbattleQueueSlotNoPet = 972, + PetbattleQueueNotWhileNeutral = 973, + PetbattleGameTimeLimitWarning = 974, + PetbattleGameRoundsLimitWarning = 975, + HasRestriction = 976, + ItemUpgradeItemTooLowLevel = 977, + ItemUpgradeNoPath = 978, + ItemUpgradeNoMoreUpgrades = 979, + BonusRollEmpty = 980, + ChallengeModeFull = 981, + ChallengeModeInProgress = 982, + ChallengeModeIncorrectKeystone = 983, + BattletagFriendNotFound = 984, + BattletagFriendNotValid = 985, + BattletagFriendNotAllowed = 986, + BattletagFriendThrottled = 987, + BattletagFriendSuccess = 988, + PetTooHighLevelToUncage = 989, + PetbattleInternal = 990, + CantCagePetYet = 991, + NoLootInChallengeMode = 992, + QuestPetBattleVictoriesPvpIi = 993, + RoleCheckAlreadyInProgress = 994, + RecruitAFriendAccountLimit = 995, + RecruitAFriendFailed = 996, + SetLootPersonal = 997, + SetLootMethodFailedCombat = 998, + ReagentBankFull = 999, + ReagentBankLocked = 1000, + GarrisonBuildingExists = 1001, + GarrisonInvalidPlot = 1002, + GarrisonInvalidBuildingid = 1003, + GarrisonInvalidPlotBuilding = 1004, + GarrisonRequiresBlueprint = 1005, + GarrisonNotEnoughCurrency = 1006, + GarrisonNotEnoughGold = 1007, + GarrisonCompleteMissionWrongFollowerType = 1008, + AlreadyUsingLfgList = 1009, + RestrictedAccountLfgListTrial = 1010, + ToyUseLimitReached = 1011, + ToyAlreadyKnown = 1012, + TransmogSetAlreadyKnown = 1013, + NotEnoughCurrency = 1014, + SpecIsDisabled = 1015, + FeatureRestrictedTrial = 1016, + CantBeObliterated = 1017, + CantBeScrapped = 1018, + CantBeRecrafted = 1019, + ArtifactRelicDoesNotMatchArtifact = 1020, + MustEquipArtifact = 1021, + CantDoThatRightNow = 1022, + AffectingCombat = 1023, + EquipmentManagerCombatSwapS = 1024, + EquipmentManagerBagsFull = 1025, + EquipmentManagerMissingItemS = 1026, + MovieRecordingWarningPerf = 1027, + MovieRecordingWarningDiskFull = 1028, + MovieRecordingWarningNoMovie = 1029, + MovieRecordingWarningRequirements = 1030, + MovieRecordingWarningCompressing = 1031, + NoChallengeModeReward = 1032, + ClaimedChallengeModeReward = 1033, + ChallengeModePeriodResetSs = 1034, + CantDoThatChallengeModeActive = 1035, + TalentFailedRestArea = 1036, + CannotAbandonLastPet = 1037, + TestCvarSetSss = 1038, + QuestTurnInFailReason = 1039, + ClaimedChallengeModeRewardOld = 1040, + TalentGrantedByAura = 1041, + ChallengeModeAlreadyComplete = 1042, + GlyphTargetNotAvailable = 1043, + PvpWarmodeToggleOn = 1044, + PvpWarmodeToggleOff = 1045, + SpellFailedLevelRequirement = 1046, + SpellFailedCantFlyHere = 1047, + BattlegroundJoinRequiresLevel = 1048, + BattlegroundJoinDisqualified = 1049, + BattlegroundJoinDisqualifiedNoName = 1050, + VoiceChatGenericUnableToConnect = 1051, + VoiceChatServiceLost = 1052, + VoiceChatChannelNameTooShort = 1053, + VoiceChatChannelNameTooLong = 1054, + VoiceChatChannelAlreadyExists = 1055, + VoiceChatTargetNotFound = 1056, + VoiceChatTooManyRequests = 1057, + VoiceChatPlayerSilenced = 1058, + VoiceChatParentalDisableAll = 1059, + VoiceChatDisabled = 1060, + NoPvpReward = 1061, + ClaimedPvpReward = 1062, + AzeriteEssenceSelectionFailedEssenceNotUnlocked = 1063, + AzeriteEssenceSelectionFailedCantRemoveEssence = 1064, + AzeriteEssenceSelectionFailedConditionFailed = 1065, + AzeriteEssenceSelectionFailedRestArea = 1066, + AzeriteEssenceSelectionFailedSlotLocked = 1067, + AzeriteEssenceSelectionFailedNotAtForge = 1068, + AzeriteEssenceSelectionFailedHeartLevelTooLow = 1069, + AzeriteEssenceSelectionFailedNotEquipped = 1070, + SocketingRequiresPunchcardredGem = 1071, + SocketingPunchcardredGemOnlyInPunchcardredslot = 1072, + SocketingRequiresPunchcardyellowGem = 1073, + SocketingPunchcardyellowGemOnlyInPunchcardyellowslot = 1074, + SocketingRequiresPunchcardblueGem = 1075, + SocketingPunchcardblueGemOnlyInPunchcardblueslot = 1076, + SocketingRequiresDominationShard = 1077, + SocketingDominationShardOnlyInDominationslot = 1078, + SocketingRequiresCypherGem = 1079, + SocketingCypherGemOnlyInCypherslot = 1080, + SocketingRequiresTinkerGem = 1081, + SocketingTinkerGemOnlyInTinkerslot = 1082, + SocketingRequiresPrimordialGem = 1083, + SocketingPrimordialGemOnlyInPrimordialslot = 1084, + LevelLinkingResultLinked = 1085, + LevelLinkingResultUnlinked = 1086, + ClubFinderErrorPostClub = 1087, + ClubFinderErrorApplyClub = 1088, + ClubFinderErrorRespondApplicant = 1089, + ClubFinderErrorCancelApplication = 1090, + ClubFinderErrorTypeAcceptApplication = 1091, + ClubFinderErrorTypeNoInvitePermissions = 1092, + ClubFinderErrorTypeNoPostingPermissions = 1093, + ClubFinderErrorTypeApplicantList = 1094, + ClubFinderErrorTypeApplicantListNoPerm = 1095, + ClubFinderErrorTypeFinderNotAvailable = 1096, + ClubFinderErrorTypeGetPostingIds = 1097, + ClubFinderErrorTypeJoinApplication = 1098, + ClubFinderErrorTypeRealmNotEligible = 1099, + ClubFinderErrorTypeFlaggedRename = 1100, + ClubFinderErrorTypeFlaggedDescriptionChange = 1101, + ItemInteractionNotEnoughGold = 1102, + ItemInteractionNotEnoughCurrency = 1103, + ItemInteractionNoConversionOutput = 1104, + PlayerChoiceErrorPendingChoice = 1105, + SoulbindInvalidConduit = 1106, + SoulbindInvalidConduitItem = 1107, + SoulbindInvalidTalent = 1108, + SoulbindDuplicateConduit = 1109, + ActivateSoulbindS = 1110, + ActivateSoulbindFailedRestArea = 1111, + CantUseProfanity = 1112, + NotInPetBattle = 1113, + NotInNpe = 1114, + NoSpec = 1115, + NoDominationshardOverwrite = 1116, + UseWeeklyRewardsDisabled = 1117, + CrossFactionGroupJoined = 1118, + CantTargetUnfriendlyInOverworld = 1119, + EquipablespellsSlotsFull = 1120, + ItemModAppearanceGroupAlreadyKnown = 1121, + CantBulkSellItemWithRefund = 1122, + WowLabsPartyErrorTypePartyIsFull = 1123, + WowLabsPartyErrorTypeMaxInviteSent = 1124, + WowLabsPartyErrorTypePlayerAlreadyInvited = 1125, + WowLabsPartyErrorTypePartyInviteInvalid = 1126, + WowLabsLobbyMatchmakerErrorEnterQueueFailed = 1127, + WowLabsLobbyMatchmakerErrorLeaveQueueFailed = 1128, } public enum SceneFlags diff --git a/Source/Game/Achievements/CriteriaHandler.cs b/Source/Game/Achievements/CriteriaHandler.cs index b25b93819..dafd9e745 100644 --- a/Source/Game/Achievements/CriteriaHandler.cs +++ b/Source/Game/Achievements/CriteriaHandler.cs @@ -1068,21 +1068,9 @@ namespace Game.Achievements break; bool matchFound = false; - for (int j = 0; j < SharedConst.MaxWorldMapOverlayArea; ++j) + for (uint j = 0; j < SharedConst.MaxWorldMapOverlayArea; ++j) { - AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(worldOverlayEntry.AreaID[j]); - if (area == null) - break; - - if (area.AreaBit < 0) - continue; - - int playerIndexOffset = (int)area.AreaBit / ActivePlayerData.ExploredZonesBits; - if (playerIndexOffset >= PlayerConst.ExploredZonesSize) - continue; - - ulong mask = 1ul << (int)((uint)area.AreaBit % ActivePlayerData.ExploredZonesBits); - if (Convert.ToBoolean(referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & mask)) + if (referencePlayer.HasExploredZone(j)) { matchFound = true; break; @@ -1835,18 +1823,7 @@ namespace Game.Achievements } case ModifierTreeType.PlayerHasExploredArea: // 113 { - AreaTableRecord areaTable = CliDB.AreaTableStorage.LookupByKey(reqValue); - if (areaTable == null) - return false; - - if (areaTable.AreaBit <= 0) - break; // success - - int playerIndexOffset = areaTable.AreaBit / ActivePlayerData.ExploredZonesBits; - if (playerIndexOffset >= PlayerConst.ExploredZonesSize) - break; - - if ((referencePlayer.m_activePlayerData.ExploredZones[playerIndexOffset] & (1ul << (areaTable.AreaBit % ActivePlayerData.ExploredZonesBits))) == 0) + if (!referencePlayer.HasExploredZone(reqValue)) return false; break; } diff --git a/Source/Game/Chat/Commands/MiscCommands.cs b/Source/Game/Chat/Commands/MiscCommands.cs index 65271f6a5..aa6ec683f 100644 --- a/Source/Game/Chat/Commands/MiscCommands.cs +++ b/Source/Game/Chat/Commands/MiscCommands.cs @@ -690,14 +690,9 @@ namespace Game.Chat return false; } - uint offset = (uint)(area.AreaBit / ActivePlayerData.ExploredZonesBits); - if (offset >= PlayerConst.ExploredZonesSize) - { - handler.SendSysMessage(CypherStrings.BadValue); - return false; - } + int offset = (area.AreaBit / PlayerConst.ExploredZonesBits); - uint val = 1u << (area.AreaBit % ActivePlayerData.ExploredZonesBits); + uint val = 1u << (area.AreaBit % PlayerConst.ExploredZonesBits); playerTarget.RemoveExploredZones(offset, val); handler.SendSysMessage(CypherStrings.UnexploreArea); @@ -1670,14 +1665,9 @@ namespace Game.Chat return false; } - uint offset = (uint)(area.AreaBit / ActivePlayerData.ExploredZonesBits); - if (offset >= PlayerConst.ExploredZonesSize) - { - handler.SendSysMessage(CypherStrings.BadValue); - return false; - } + int offset = (area.AreaBit / PlayerConst.ExploredZonesBits); - ulong val = 1ul << (area.AreaBit % ActivePlayerData.ExploredZonesBits); + ulong val = 1ul << (area.AreaBit % PlayerConst.ExploredZonesBits); playerTarget.AddExploredZones(offset, val); handler.SendSysMessage(CypherStrings.ExploreArea); diff --git a/Source/Game/Conditions/ConditionManager.cs b/Source/Game/Conditions/ConditionManager.cs index 07e30c71b..94f26ae0b 100644 --- a/Source/Game/Conditions/ConditionManager.cs +++ b/Source/Game/Conditions/ConditionManager.cs @@ -2192,9 +2192,8 @@ namespace Game for (var i = 0; i < condition.Explored.Length; ++i) { AreaTableRecord area = CliDB.AreaTableStorage.LookupByKey(condition.Explored[i]); - if (area != null) - if (area.AreaBit != -1 && !Convert.ToBoolean(player.m_activePlayerData.ExploredZones[area.AreaBit / ActivePlayerData.ExploredZonesBits] & (1ul << ((int)area.AreaBit % ActivePlayerData.ExploredZonesBits)))) - return false; + if (area != null && !player.HasExploredZone(area.Id)) + return false; } } diff --git a/Source/Game/DataStorage/CliDB.cs b/Source/Game/DataStorage/CliDB.cs index e32505a31..4bb0770ee 100644 --- a/Source/Game/DataStorage/CliDB.cs +++ b/Source/Game/DataStorage/CliDB.cs @@ -437,13 +437,13 @@ namespace Game.DataStorage } // Check loaded DB2 files proper version - if (!AreaTableStorage.ContainsKey(14720) || // last area added in 10.0.7 (48520) - !CharTitlesStorage.ContainsKey(762) || // last char title added in 10.0.7 (48520) - !GemPropertiesStorage.ContainsKey(4059) || // last gem property added in 10.0.7 (48520) - !ItemStorage.ContainsKey(205244) || // last item added in 10.0.7 (48520) - !ItemExtendedCostStorage.ContainsKey(8043) || // last item extended cost added in 10.0.7 (48520) - !MapStorage.ContainsKey(2616) || // last map added in 10.0.7 (48520) - !SpellNameStorage.ContainsKey(409033)) // last spell added in 10.0.7 (48520) + if (!AreaTableStorage.ContainsKey(15151) || // last area added in 10.2.5 (53007) + !CharTitlesStorage.ContainsKey(805) || // last char title added in 10.2.5 (53007) + !GemPropertiesStorage.ContainsKey(4081) || // last gem property added in 10.2.5 (53007) + !ItemStorage.ContainsKey(215160) || // last item added in 10.2.5 (53007) + !ItemExtendedCostStorage.ContainsKey(8510) || // last item extended cost added in 10.2.5 (53007) + !MapStorage.ContainsKey(2708) || // last map added in 10.2.5 (53007) + !SpellNameStorage.ContainsKey(438878)) // last spell added in 10.2.5 (53007) { Log.outFatal(LogFilter.ServerLoading, "You have _outdated_ DB2 files. Please extract correct versions from current using client."); Environment.Exit(1); diff --git a/Source/Game/DataStorage/ClientReader/DBReader.cs b/Source/Game/DataStorage/ClientReader/DBReader.cs index 50b64e6c1..0f8a936fe 100644 --- a/Source/Game/DataStorage/ClientReader/DBReader.cs +++ b/Source/Game/DataStorage/ClientReader/DBReader.cs @@ -19,7 +19,7 @@ namespace Game.DataStorage { class DBReader { - private const uint WDC3FmtSig = 0x34434457; // WDC3 + private const uint WDC5FmtSig = 0x35434457; // WDC5 public WDCHeader Header; public FieldMetaData[] FieldMeta; @@ -36,9 +36,14 @@ namespace Game.DataStorage { Header = new WDCHeader(); Header.Signature = reader.ReadUInt32(); - if (Header.Signature != WDC3FmtSig) + if (Header.Signature != WDC5FmtSig) return false; + Header.Version = reader.ReadUInt32(); + if (Header.Version != 5) + return false; + + Header.Schema = reader.ReadStringFromChars(128); Header.RecordCount = reader.ReadUInt32(); Header.FieldCount = reader.ReadUInt32(); Header.RecordSize = reader.ReadUInt32(); @@ -583,6 +588,8 @@ namespace Game.DataStorage } public uint Signature; + public uint Version; + public string Schema; public uint RecordCount; public uint FieldCount; public uint RecordSize; diff --git a/Source/Game/DataStorage/DB2Manager.cs b/Source/Game/DataStorage/DB2Manager.cs index 2c9b9efb0..2c7644b97 100644 --- a/Source/Game/DataStorage/DB2Manager.cs +++ b/Source/Game/DataStorage/DB2Manager.cs @@ -42,6 +42,9 @@ namespace Game.DataStorage foreach (var areaGroupMember in AreaGroupMemberStorage.Values) _areaGroupMembers.Add(areaGroupMember.AreaGroupID, areaGroupMember.AreaID); + foreach (AreaTableRecord areaTable in AreaTableStorage.Values) + Cypher.Assert(areaTable.AreaBit <= 0 || (areaTable.AreaBit / 64) < PlayerConst.ExploredZonesSize, $"PLAYER_EXPLORED_ZONES_SIZE must be at least {((areaTable.AreaBit + 63) / 64)}"); + foreach (ArtifactPowerRecord artifactPower in ArtifactPowerStorage.Values) _artifactPowers.Add(artifactPower.ArtifactID, artifactPower); @@ -227,6 +230,9 @@ namespace Game.DataStorage _chrSpecializationsByIndex[storageIndex][chrSpec.OrderIndex] = chrSpec; } + foreach (ConditionalChrModelRecord conditionalChrModel in ConditionalChrModelStorage.Values) + _conditionalChrModelsByChrModelId[conditionalChrModel.ChrModelID] = conditionalChrModel; + foreach (ConditionalContentTuningRecord conditionalContentTuning in ConditionalContentTuningStorage.Values) _conditionalContentTuning.Add(conditionalContentTuning.ParentContentTuningID, conditionalContentTuning); @@ -1024,6 +1030,11 @@ namespace Game.DataStorage return _chrModelsByRaceAndGender.LookupByKey(Tuple.Create((byte)race, (byte)gender)); } + public ConditionalChrModelRecord GetConditionalChrModel(int chrModelId) + { + return _conditionalChrModelsByChrModelId.LookupByKey(chrModelId); + } + public string GetChrRaceName(Race race, Locale locale = Locale.enUS) { ChrRacesRecord raceEntry = ChrRacesStorage.LookupByKey(race); @@ -2267,6 +2278,7 @@ namespace Game.DataStorage MultiMap, ChrCustomizationOptionRecord> _chrCustomizationOptionsByRaceAndGender = new(); Dictionary> _chrCustomizationRequiredChoices = new(); ChrSpecializationRecord[][] _chrSpecializationsByIndex = new ChrSpecializationRecord[(int)Class.Max + 1][]; + Dictionary _conditionalChrModelsByChrModelId = new(); MultiMap _conditionalContentTuning = new(); List<(uint, int)> _contentTuningLabels = new(); MultiMap _currencyContainers = new(); diff --git a/Source/Game/DataStorage/Structs/C_Records.cs b/Source/Game/DataStorage/Structs/C_Records.cs index bd06362a5..150a45e72 100644 --- a/Source/Game/DataStorage/Structs/C_Records.cs +++ b/Source/Game/DataStorage/Structs/C_Records.cs @@ -357,7 +357,7 @@ namespace Game.DataStorage public sealed class ConditionalChrModelRecord { public uint Id; - public uint ChrModelID; // This is the PK + public int ChrModelID; public int ChrCustomizationReqID; public int PlayerConditionID; public int Flags; diff --git a/Source/Game/Entities/Creature/CreatureData.cs b/Source/Game/Entities/Creature/CreatureData.cs index 510462025..afa72c955 100644 --- a/Source/Game/Entities/Creature/CreatureData.cs +++ b/Source/Game/Entities/Creature/CreatureData.cs @@ -196,6 +196,10 @@ namespace Game.Entities if (items != null) stats.QuestItems.AddRange(items); + var currencies = Global.ObjectMgr.GetCreatureQuestCurrencyList(Entry); + if (currencies != null) + stats.QuestCurrencies.AddRange(currencies); + if (locale != Locale.enUS) { CreatureLocale creatureLocale = Global.ObjectMgr.GetCreatureLocale(Entry); diff --git a/Source/Game/Entities/Object/Update/UpdateFields.cs b/Source/Game/Entities/Object/Update/UpdateFields.cs index c0a40a0e5..2944fb7c6 100644 --- a/Source/Game/Entities/Object/Update/UpdateFields.cs +++ b/Source/Game/Entities/Object/Update/UpdateFields.cs @@ -4512,10 +4512,10 @@ namespace Game.Entities public class PersonalCraftingOrderCount : HasChangesMask { - public UpdateField ProfessionID = new(0, 1); - public UpdateField Count = new(0, 2); + public UpdateField ProfessionID = new(-1, 0); + public UpdateField Count = new(-1, 1); - public PersonalCraftingOrderCount() : base(3) { } + public PersonalCraftingOrderCount() : base(2) { } public void WriteCreate(WorldPacket data, Player owner, Player receiver) { @@ -4798,12 +4798,10 @@ namespace Game.Entities public class ActivePlayerData : HasChangesMask { - public static int ExploredZonesSize; - public static int ExploredZonesBits; public static int QuestCompletedBitsSize; public static int QuestCompletedBitsPerBlock; - static int changeMaskLength = 1616; + static int changeMaskLength = 1452; public UpdateField BackpackAutoSortDisabled = new(0, 1); public UpdateField BackpackSellJunkDisabled = new(0, 2); @@ -4811,9 +4809,10 @@ namespace Game.Entities public UpdateField SortBagsRightToLeft = new(0, 4); public UpdateField InsertItemsLeftToRight = new(0, 5); public UpdateField HasPerksProgramPendingReward = new(0, 6); - public UpdateFieldArray> ResearchSites = new(1, 36, 37); - public UpdateFieldArray> ResearchSiteProgress = new(1, 38, 39); - public UpdateFieldArray> Research = new(1, 40, 41); + public UpdateFieldArray> DataFlags = new(8, 36, 37); + public UpdateFieldArray> ResearchSites = new(1, 38, 39); + public UpdateFieldArray> ResearchSiteProgress = new(1, 40, 41); + public UpdateFieldArray> Research = new(1, 42, 43); public DynamicUpdateField KnownTitles = new(0, 7); public DynamicUpdateField DailyQuestsCompleted = new(0, 9); public DynamicUpdateField AvailableQuestLineXQuestIDs = new(0, 10); @@ -4842,120 +4841,116 @@ namespace Game.Entities public DynamicUpdateField CharacterRestrictions = new(0, 20); public DynamicUpdateField TraitConfigs = new(0, 29); public DynamicUpdateField CraftingOrders = new(0, 30); - public UpdateField FarsightObject = new(32, 42); - public UpdateField SummonedBattlePetGUID = new(32, 43); - public UpdateField Coinage = new(32, 44); - public UpdateField XP = new(32, 45); - public UpdateField NextLevelXP = new(32, 46); - public UpdateField TrialXP = new(32, 47); - public UpdateField Skill = new(32, 48); - public UpdateField CharacterPoints = new(32, 49); - public UpdateField MaxTalentTiers = new(32, 50); - public UpdateField TrackCreatureMask = new(32, 51); - public UpdateField MainhandExpertise = new(32, 52); - public UpdateField OffhandExpertise = new(32, 53); - public UpdateField RangedExpertise = new(32, 54); - public UpdateField CombatRatingExpertise = new(32, 55); - public UpdateField BlockPercentage = new(32, 56); - public UpdateField DodgePercentage = new(32, 57); - public UpdateField DodgePercentageFromAttribute = new(32, 58); - public UpdateField ParryPercentage = new(32, 59); - public UpdateField ParryPercentageFromAttribute = new(32, 60); - public UpdateField CritPercentage = new(32, 61); - public UpdateField RangedCritPercentage = new(32, 62); - public UpdateField OffhandCritPercentage = new(32, 63); - public UpdateField SpellCritPercentage = new(32, 64); - public UpdateField ShieldBlock = new(32, 65); - public UpdateField ShieldBlockCritPercentage = new(32, 66); - public UpdateField Mastery = new(32, 67); - public UpdateField Speed = new(32, 68); - public UpdateField Avoidance = new(32, 69); - public UpdateField Sturdiness = new(70, 71); - public UpdateField Versatility = new(70, 72); - public UpdateField VersatilityBonus = new(70, 73); - public UpdateField PvpPowerDamage = new(70, 74); - public UpdateField PvpPowerHealing = new(70, 75); - public UpdateField ModHealingDonePos = new(70, 76); - public UpdateField ModHealingPercent = new(70, 77); - public UpdateField ModPeriodicHealingDonePercent = new(70, 78); - public UpdateField ModSpellPowerPercent = new(70, 79); - public UpdateField ModResiliencePercent = new(70, 80); - public UpdateField OverrideSpellPowerByAPPercent = new(70, 81); - public UpdateField OverrideAPBySpellPowerPercent = new(70, 82); - public UpdateField ModTargetResistance = new(70, 83); - public UpdateField ModTargetPhysicalResistance = new(70, 84); - public UpdateField LocalFlags = new(70, 85); - public UpdateField GrantableLevels = new(70, 86); - public UpdateField MultiActionBars = new(70, 87); - public UpdateField LifetimeMaxRank = new(70, 88); - public UpdateField NumRespecs = new(70, 89); - public UpdateField PvpMedals = new(70, 90); - public UpdateField TodayHonorableKills = new(70, 91); - public UpdateField YesterdayHonorableKills = new(70, 92); - public UpdateField LifetimeHonorableKills = new(70, 93); - public UpdateField WatchedFactionIndex = new(70, 94); - public UpdateField MaxLevel = new(70, 95); - public UpdateField ScalingPlayerLevelDelta = new(70, 96); - public UpdateField MaxCreatureScalingLevel = new(70, 97); - public UpdateField PetSpellPower = new(70, 98); - public UpdateField UiHitModifier = new(70, 99); - public UpdateField UiSpellHitModifier = new(70, 100); - public UpdateField HomeRealmTimeOffset = new(70, 101); - public UpdateField ModPetHaste = new(102, 103); - public UpdateField JailersTowerLevelMax = new(102, 104); - public UpdateField JailersTowerLevel = new(102, 105); - public UpdateField LocalRegenFlags = new(102, 106); - public UpdateField AuraVision = new(102, 107); - public UpdateField NumBackpackSlots = new(102, 108); - public UpdateField OverrideSpellsID = new(102, 109); - public UpdateField LootSpecID = new(102, 110); - public UpdateField OverrideZonePVPType = new(102, 111); - public UpdateField Honor = new(102, 112); - public UpdateField HonorNextLevel = new(102, 113); - public UpdateField PerksProgramCurrency = new(102, 114); - public UpdateField NumBankSlots = new(102, 115); - public UpdateField ResearchHistory = new(102, 116); - public UpdateField FrozenPerksVendorItem = new(102, 117); - public UpdateField Field_1410 = new(102, 119); - public OptionalUpdateField QuestSession = new(102, 118); - public UpdateField UiChromieTimeExpansionID = new(102, 120); - public UpdateField TransportServerTime = new(102, 121); - public UpdateField WeeklyRewardsPeriodSinceOrigin = new(102, 122); // week count since Cfg_RegionsEntry::ChallengeOrigin - public UpdateField DEBUGSoulbindConduitRank = new(102, 123); - public UpdateField DungeonScore = new(102, 124); - public UpdateField ActiveCombatTraitConfigID = new(102, 125); - public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(102, 126); - public UpdateField ItemUpgradeHighFingerItemID = new(102, 127); - public UpdateField ItemUpgradeHighFingerWatermark = new(102, 128); - public UpdateField ItemUpgradeHighTrinketItemID = new(102, 129); - public UpdateField ItemUpgradeHighTrinketWatermark = new(102, 130); - public UpdateField LootHistoryInstanceID = new(102, 131); - public OptionalUpdateField PetStable = new(102, 132); - public UpdateField RequiredMountCapabilityFlags = new(102, 133); - public UpdateFieldArray InvSlots = new(227, 134, 135); - public UpdateFieldArray ExploredZones = new(240, 362, 363); - public UpdateFieldArray RestInfo = new(2, 603, 604); - public UpdateFieldArray ModDamageDonePos = new(7, 606, 607); - public UpdateFieldArray ModDamageDoneNeg = new(7, 606, 614); - public UpdateFieldArray ModDamageDonePercent = new(7, 606, 621); - public UpdateFieldArray ModHealingDonePercent = new(7, 606, 628); - public UpdateFieldArray WeaponDmgMultipliers = new(3, 635, 636); - public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 635, 639); - public UpdateFieldArray BuybackPrice = new(12, 642, 643); - public UpdateFieldArray BuybackTimestamp = new(12, 642, 655); - public UpdateFieldArray CombatRatings = new(32, 667, 668); - public UpdateFieldArray NoReagentCostMask = new(4, 700, 701); - public UpdateFieldArray ProfessionSkillLine = new(2, 705, 706); - public UpdateFieldArray BagSlotFlags = new(5, 708, 709); - public UpdateFieldArray BankBagSlotFlags = new(7, 714, 715); - public UpdateFieldArray QuestCompleted = new(875, 722, 723); - public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 1598, 1599); + public UpdateField FarsightObject = new(32, 44); + public UpdateField SummonedBattlePetGUID = new(32, 45); + public UpdateField Coinage = new(32, 46); + public UpdateField XP = new(32, 47); + public UpdateField NextLevelXP = new(32, 48); + public UpdateField TrialXP = new(32, 49); + public UpdateField Skill = new(32, 50); + public UpdateField CharacterPoints = new(32, 51); + public UpdateField MaxTalentTiers = new(32, 52); + public UpdateField TrackCreatureMask = new(32, 53); + public UpdateField MainhandExpertise = new(32, 54); + public UpdateField OffhandExpertise = new(32, 55); + public UpdateField RangedExpertise = new(32, 56); + public UpdateField CombatRatingExpertise = new(32, 57); + public UpdateField BlockPercentage = new(32, 58); + public UpdateField DodgePercentage = new(32, 59); + public UpdateField DodgePercentageFromAttribute = new(32, 60); + public UpdateField ParryPercentage = new(32, 61); + public UpdateField ParryPercentageFromAttribute = new(32, 62); + public UpdateField CritPercentage = new(32, 63); + public UpdateField RangedCritPercentage = new(32, 64); + public UpdateField OffhandCritPercentage = new(32, 65); + public UpdateField SpellCritPercentage = new(32, 66); + public UpdateField ShieldBlock = new(32, 67); + public UpdateField ShieldBlockCritPercentage = new(32, 68); + public UpdateField Mastery = new(32, 69); + public UpdateField Speed = new(32, 70); + public UpdateField Avoidance = new(32, 71); + public UpdateField Sturdiness = new(72, 73); + public UpdateField Versatility = new(72, 74); + public UpdateField VersatilityBonus = new(72, 75); + public UpdateField PvpPowerDamage = new(72, 76); + public UpdateField PvpPowerHealing = new(72, 77); + public UpdateField ModHealingDonePos = new(72, 78); + public UpdateField ModHealingPercent = new(72, 79); + public UpdateField ModPeriodicHealingDonePercent = new(72, 80); + public UpdateField ModSpellPowerPercent = new(72, 81); + public UpdateField ModResiliencePercent = new(72, 82); + public UpdateField OverrideSpellPowerByAPPercent = new(72, 83); + public UpdateField OverrideAPBySpellPowerPercent = new(72, 84); + public UpdateField ModTargetResistance = new(72, 85); + public UpdateField ModTargetPhysicalResistance = new(72, 86); + public UpdateField LocalFlags = new(72, 87); + public UpdateField GrantableLevels = new(72, 88); + public UpdateField MultiActionBars = new(72, 89); + public UpdateField LifetimeMaxRank = new(72, 90); + public UpdateField NumRespecs = new(72, 91); + public UpdateField PvpMedals = new(72, 92); + public UpdateField TodayHonorableKills = new(72, 93); + public UpdateField YesterdayHonorableKills = new(72, 94); + public UpdateField LifetimeHonorableKills = new(72, 95); + public UpdateField WatchedFactionIndex = new(72, 96); + public UpdateField MaxLevel = new(72, 97); + public UpdateField ScalingPlayerLevelDelta = new(72, 98); + public UpdateField MaxCreatureScalingLevel = new(72, 99); + public UpdateField PetSpellPower = new(72, 100); + public UpdateField UiHitModifier = new(72, 101); + public UpdateField UiSpellHitModifier = new(72, 102); + public UpdateField HomeRealmTimeOffset = new(72, 103); + public UpdateField ModPetHaste = new(104, 105); + public UpdateField JailersTowerLevelMax = new(104, 106); + public UpdateField JailersTowerLevel = new(104, 107); + public UpdateField LocalRegenFlags = new(104, 108); + public UpdateField AuraVision = new(104, 109); + public UpdateField NumBackpackSlots = new(104, 110); + public UpdateField OverrideSpellsID = new(104, 111); + public UpdateField LootSpecID = new(104, 112); + public UpdateField OverrideZonePVPType = new(104, 113); + public UpdateField Honor = new(104, 114); + public UpdateField HonorNextLevel = new(104, 115); + public UpdateField PerksProgramCurrency = new(104, 116); + public UpdateField NumBankSlots = new(104, 117); + public UpdateField ResearchHistory = new(104, 118); + public UpdateField FrozenPerksVendorItem = new(104, 119); + public UpdateField Field_1410 = new(104, 121); + public OptionalUpdateField QuestSession = new(104, 120); + public UpdateField UiChromieTimeExpansionID = new(104, 122); + public UpdateField TransportServerTime = new(104, 123); + public UpdateField WeeklyRewardsPeriodSinceOrigin = new(104, 124); // week count since Cfg_RegionsEntry::ChallengeOrigin + public UpdateField DEBUGSoulbindConduitRank = new(104, 125); + public UpdateField DungeonScore = new(104, 126); + public UpdateField ActiveCombatTraitConfigID = new(104, 127); + public UpdateField ItemUpgradeHighOnehandWeaponItemID = new(104, 128); + public UpdateField ItemUpgradeHighFingerItemID = new(104, 129); + public UpdateField ItemUpgradeHighFingerWatermark = new(104, 130); + public UpdateField ItemUpgradeHighTrinketItemID = new(104, 131); + public UpdateField ItemUpgradeHighTrinketWatermark = new(104, 132); + public UpdateField LootHistoryInstanceID = new(104, 133); + public OptionalUpdateField PetStable = new(104, 134); + public UpdateField RequiredMountCapabilityFlags = new(104, 135); + public UpdateFieldArray InvSlots = new(227, 136, 137); + public UpdateFieldArray RestInfo = new(2, 364, 365); + public UpdateFieldArray ModDamageDonePos = new(7, 367, 368); + public UpdateFieldArray ModDamageDoneNeg = new(7, 367, 375); + public UpdateFieldArray ModDamageDonePercent = new(7, 367, 382); + public UpdateFieldArray ModHealingDonePercent = new(7, 367, 389); + public UpdateFieldArray WeaponDmgMultipliers = new(3, 396, 397); + public UpdateFieldArray WeaponAtkSpeedMultipliers = new(3, 396, 400); + public UpdateFieldArray BuybackPrice = new(12, 403, 404); + public UpdateFieldArray BuybackTimestamp = new(12, 403, 416); + public UpdateFieldArray CombatRatings = new(32, 428, 429); + public UpdateFieldArray NoReagentCostMask = new(4, 461, 462); + public UpdateFieldArray ProfessionSkillLine = new(2, 466, 467); + public UpdateFieldArray BagSlotFlags = new(5, 469, 470); + public UpdateFieldArray BankBagSlotFlags = new(7, 475, 476); + public UpdateFieldArray QuestCompleted = new(950, 483, 484); + public UpdateFieldArray ItemUpgradeHighWatermark = new(17, 1434, 1435); public ActivePlayerData() : base(0, TypeId.ActivePlayer, changeMaskLength) { - ExploredZonesSize = ExploredZones.GetSize(); - ExploredZonesBits = sizeof(ulong) * 8; - QuestCompletedBitsSize = QuestCompleted.GetSize(); QuestCompletedBitsPerBlock = sizeof(ulong) * 8; } @@ -5000,9 +4995,13 @@ namespace Game.Entities data.WriteFloat(VersatilityBonus); data.WriteFloat(PvpPowerDamage); data.WriteFloat(PvpPowerHealing); - for (int i = 0; i < 240; ++i) + for (int i = 0; i < 8; ++i) { - data.WriteUInt64(ExploredZones[i]); + data.WriteInt32(DataFlags[i].Size()); + for (int j = 0; j < DataFlags[i].Size(); ++j) + { + data.WriteUInt64(DataFlags[i][j]); + } } for (int i = 0; i < 2; ++i) { @@ -5081,7 +5080,7 @@ namespace Game.Entities { data.WriteUInt32(BankBagSlotFlags[i]); } - for (int i = 0; i < 875; ++i) + for (int i = 0; i < 950; ++i) { data.WriteUInt64(QuestCompleted[i]); } @@ -5295,8 +5294,8 @@ namespace Game.Entities { for (uint i = 0; i < 1; ++i) data.WriteUInt32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 19); - for (uint i = 0; i < 51; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 14); + for (uint i = 0; i < 46; ++i) if (changesMask.GetBlock(i) != 0) data.WriteBits(changesMask.GetBlock(i), 32); @@ -5333,6 +5332,38 @@ namespace Game.Entities else WriteCompleteDynamicFieldUpdateMask(KnownTitles.Size(), data); } + } + if (changesMask[36]) + { + for (int i = 0; i < 8; ++i) + { + if (changesMask[37]) + { + if (!ignoreNestedChangesMask) + DataFlags[i].WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(DataFlags[i].Size(), data); + } + } + } + if (changesMask[36]) + { + for (int i = 0; i < 8; ++i) + { + if (changesMask[37]) + { + for (int j = 0; j < DataFlags[i].Size(); ++j) + { + if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask) + { + data.WriteUInt64(DataFlags[i][j]); + } + } + } + } + } + if (changesMask[0]) + { if (changesMask[8]) { if (!ignoreNestedChangesMask) @@ -5341,11 +5372,11 @@ namespace Game.Entities WriteCompleteDynamicFieldUpdateMask(PvpInfo.Size(), data); } } - if (changesMask[36]) + if (changesMask[38]) { for (int i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[39]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -5354,11 +5385,11 @@ namespace Game.Entities } } } - if (changesMask[38]) + if (changesMask[40]) { for (int i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -5367,11 +5398,11 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[42]) { for (int i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -5380,11 +5411,11 @@ namespace Game.Entities } } } - if (changesMask[36]) + if (changesMask[38]) { for (int i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[39]) { for (int j = 0; j < ResearchSites[i].Size(); ++j) { @@ -5396,11 +5427,11 @@ namespace Game.Entities } } } - if (changesMask[38]) + if (changesMask[40]) { for (int i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[41]) { for (int j = 0; j < ResearchSiteProgress[i].Size(); ++j) { @@ -5412,11 +5443,11 @@ namespace Game.Entities } } } - if (changesMask[40]) + if (changesMask[42]) { for (int i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[43]) { for (int j = 0; j < Research[i].Size(); ++j) { @@ -5909,345 +5940,345 @@ namespace Game.Entities } if (changesMask[32]) { - if (changesMask[42]) + if (changesMask[44]) { data.WritePackedGuid(FarsightObject); } - if (changesMask[43]) + if (changesMask[45]) { data.WritePackedGuid(SummonedBattlePetGUID); } - if (changesMask[44]) + if (changesMask[46]) { data.WriteUInt64(Coinage); } - if (changesMask[45]) + if (changesMask[47]) { data.WriteUInt32(XP); } - if (changesMask[46]) + if (changesMask[48]) { data.WriteUInt32(NextLevelXP); } - if (changesMask[47]) + if (changesMask[49]) { data.WriteInt32(TrialXP); } - if (changesMask[48]) + if (changesMask[50]) { Skill.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[49]) + if (changesMask[51]) { data.WriteUInt32(CharacterPoints); } - if (changesMask[50]) + if (changesMask[52]) { data.WriteUInt32(MaxTalentTiers); } - if (changesMask[51]) + if (changesMask[53]) { data.WriteUInt32(TrackCreatureMask); } - if (changesMask[52]) + if (changesMask[54]) { data.WriteFloat(MainhandExpertise); } - if (changesMask[53]) + if (changesMask[55]) { data.WriteFloat(OffhandExpertise); } - if (changesMask[54]) + if (changesMask[56]) { data.WriteFloat(RangedExpertise); } - if (changesMask[55]) + if (changesMask[57]) { data.WriteFloat(CombatRatingExpertise); } - if (changesMask[56]) + if (changesMask[58]) { data.WriteFloat(BlockPercentage); } - if (changesMask[57]) + if (changesMask[59]) { data.WriteFloat(DodgePercentage); } - if (changesMask[58]) + if (changesMask[60]) { data.WriteFloat(DodgePercentageFromAttribute); } - if (changesMask[59]) + if (changesMask[61]) { data.WriteFloat(ParryPercentage); } - if (changesMask[60]) + if (changesMask[62]) { data.WriteFloat(ParryPercentageFromAttribute); } - if (changesMask[61]) + if (changesMask[63]) { data.WriteFloat(CritPercentage); } - if (changesMask[62]) + if (changesMask[64]) { data.WriteFloat(RangedCritPercentage); } - if (changesMask[63]) + if (changesMask[65]) { data.WriteFloat(OffhandCritPercentage); } - if (changesMask[64]) + if (changesMask[66]) { data.WriteFloat(SpellCritPercentage); } - if (changesMask[65]) + if (changesMask[67]) { data.WriteUInt32(ShieldBlock); } - if (changesMask[66]) + if (changesMask[68]) { data.WriteFloat(ShieldBlockCritPercentage); } - if (changesMask[67]) + if (changesMask[69]) { data.WriteFloat(Mastery); } - if (changesMask[68]) + if (changesMask[70]) { data.WriteFloat(Speed); } - if (changesMask[69]) + if (changesMask[71]) { data.WriteFloat(Avoidance); } } - if (changesMask[70]) + if (changesMask[72]) { - if (changesMask[71]) + if (changesMask[73]) { data.WriteFloat(Sturdiness); } - if (changesMask[72]) + if (changesMask[74]) { data.WriteInt32(Versatility); } - if (changesMask[73]) + if (changesMask[75]) { data.WriteFloat(VersatilityBonus); } - if (changesMask[74]) + if (changesMask[76]) { data.WriteFloat(PvpPowerDamage); } - if (changesMask[75]) + if (changesMask[77]) { data.WriteFloat(PvpPowerHealing); } - if (changesMask[76]) + if (changesMask[78]) { data.WriteInt32(ModHealingDonePos); } - if (changesMask[77]) + if (changesMask[79]) { data.WriteFloat(ModHealingPercent); } - if (changesMask[78]) + if (changesMask[80]) { data.WriteFloat(ModPeriodicHealingDonePercent); } - if (changesMask[79]) + if (changesMask[81]) { data.WriteFloat(ModSpellPowerPercent); } - if (changesMask[80]) + if (changesMask[82]) { data.WriteFloat(ModResiliencePercent); } - if (changesMask[81]) + if (changesMask[83]) { data.WriteFloat(OverrideSpellPowerByAPPercent); } - if (changesMask[82]) + if (changesMask[84]) { data.WriteFloat(OverrideAPBySpellPowerPercent); } - if (changesMask[83]) + if (changesMask[85]) { data.WriteInt32(ModTargetResistance); } - if (changesMask[84]) + if (changesMask[86]) { data.WriteInt32(ModTargetPhysicalResistance); } - if (changesMask[85]) + if (changesMask[87]) { data.WriteUInt32(LocalFlags); } - if (changesMask[86]) + if (changesMask[88]) { data.WriteUInt8(GrantableLevels); } - if (changesMask[87]) + if (changesMask[89]) { data.WriteUInt8(MultiActionBars); } - if (changesMask[88]) + if (changesMask[90]) { data.WriteUInt8(LifetimeMaxRank); } - if (changesMask[89]) + if (changesMask[91]) { data.WriteUInt8(NumRespecs); } - if (changesMask[90]) + if (changesMask[92]) { data.WriteUInt32(PvpMedals); } - if (changesMask[91]) + if (changesMask[93]) { data.WriteUInt16(TodayHonorableKills); } - if (changesMask[92]) + if (changesMask[94]) { data.WriteUInt16(YesterdayHonorableKills); } - if (changesMask[93]) + if (changesMask[95]) { data.WriteUInt32(LifetimeHonorableKills); } - if (changesMask[94]) + if (changesMask[96]) { data.WriteUInt32(WatchedFactionIndex); } - if (changesMask[95]) + if (changesMask[97]) { data.WriteInt32(MaxLevel); } - if (changesMask[96]) + if (changesMask[98]) { data.WriteInt32(ScalingPlayerLevelDelta); } - if (changesMask[97]) + if (changesMask[99]) { data.WriteInt32(MaxCreatureScalingLevel); } - if (changesMask[98]) + if (changesMask[100]) { data.WriteUInt32(PetSpellPower); } - if (changesMask[99]) + if (changesMask[101]) { data.WriteFloat(UiHitModifier); } - if (changesMask[100]) + if (changesMask[102]) { data.WriteFloat(UiSpellHitModifier); } - if (changesMask[101]) + if (changesMask[103]) { data.WriteInt32(HomeRealmTimeOffset); } } - if (changesMask[102]) + if (changesMask[104]) { - if (changesMask[103]) + if (changesMask[105]) { data.WriteFloat(ModPetHaste); } - if (changesMask[104]) + if (changesMask[106]) { data.WriteInt8(JailersTowerLevelMax); } - if (changesMask[105]) + if (changesMask[107]) { data.WriteInt8(JailersTowerLevel); } - if (changesMask[106]) + if (changesMask[108]) { data.WriteUInt8(LocalRegenFlags); } - if (changesMask[107]) + if (changesMask[109]) { data.WriteUInt8(AuraVision); } - if (changesMask[108]) + if (changesMask[110]) { data.WriteUInt8(NumBackpackSlots); } - if (changesMask[109]) + if (changesMask[111]) { data.WriteUInt32(OverrideSpellsID); } - if (changesMask[110]) + if (changesMask[112]) { data.WriteUInt16(LootSpecID); } - if (changesMask[111]) + if (changesMask[113]) { data.WriteUInt32(OverrideZonePVPType); } - if (changesMask[112]) + if (changesMask[114]) { data.WriteUInt32(Honor); } - if (changesMask[113]) + if (changesMask[115]) { data.WriteUInt32(HonorNextLevel); } - if (changesMask[114]) + if (changesMask[116]) { data.WriteInt32(PerksProgramCurrency); } - if (changesMask[115]) + if (changesMask[117]) { data.WriteUInt8(NumBankSlots); } - if (changesMask[120]) + if (changesMask[122]) { data.WriteInt32(UiChromieTimeExpansionID); } - if (changesMask[121]) + if (changesMask[123]) { data.WriteInt32(TransportServerTime); } - if (changesMask[122]) + if (changesMask[124]) { data.WriteUInt32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[123]) + if (changesMask[125]) { data.WriteInt16(DEBUGSoulbindConduitRank); } - if (changesMask[125]) + if (changesMask[127]) { data.WriteUInt32(ActiveCombatTraitConfigID); } - if (changesMask[126]) + if (changesMask[128]) { data.WriteInt32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[127]) + if (changesMask[129]) { data.WriteInt32(ItemUpgradeHighFingerItemID); } - if (changesMask[128]) + if (changesMask[130]) { data.WriteFloat(ItemUpgradeHighFingerWatermark); } - if (changesMask[129]) + if (changesMask[131]) { data.WriteInt32(ItemUpgradeHighTrinketItemID); } - if (changesMask[130]) + if (changesMask[132]) { data.WriteFloat(ItemUpgradeHighTrinketWatermark); } - if (changesMask[131]) + if (changesMask[133]) { data.WriteUInt64(LootHistoryInstanceID); } - if (changesMask[133]) + if (changesMask[135]) { data.WriteUInt8(RequiredMountCapabilityFlags); } @@ -6255,32 +6286,32 @@ namespace Game.Entities data.WriteBits(PetStable.HasValue(), 1); } data.FlushBits(); - if (changesMask[102]) + if (changesMask[104]) { - if (changesMask[116]) + if (changesMask[118]) { ResearchHistory.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[116]) + if (changesMask[120]) { if (QuestSession.HasValue()) { QuestSession.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[117]) + if (changesMask[119]) { FrozenPerksVendorItem.GetValue().Write(data); } - if (changesMask[119]) + if (changesMask[121]) { Field_1410.GetValue().WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[124]) + if (changesMask[126]) { DungeonScore.GetValue().Write(data); } - if (changesMask[132]) + if (changesMask[134]) { if (PetStable.HasValue()) { @@ -6288,151 +6319,141 @@ namespace Game.Entities } } } - if (changesMask[134]) + if (changesMask[136]) { for (int i = 0; i < 227; ++i) { - if (changesMask[135 + i]) + if (changesMask[137 + i]) { data.WritePackedGuid(InvSlots[i]); } } } - if (changesMask[362]) - { - for (int i = 0; i < 240; ++i) - { - if (changesMask[363 + i]) - { - data.WriteUInt64(ExploredZones[i]); - } - } - } - if (changesMask[603]) + if (changesMask[364]) { for (int i = 0; i < 2; ++i) { - if (changesMask[604 + i]) + if (changesMask[365 + i]) { RestInfo[i].WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } } - if (changesMask[606]) + if (changesMask[367]) { for (int i = 0; i < 7; ++i) { - if (changesMask[607 + i]) + if (changesMask[368 + i]) { data.WriteInt32(ModDamageDonePos[i]); } - if (changesMask[614 + i]) + if (changesMask[375 + i]) { data.WriteInt32(ModDamageDoneNeg[i]); } - if (changesMask[621 + i]) + if (changesMask[382 + i]) { data.WriteFloat(ModDamageDonePercent[i]); } - if (changesMask[628 + i]) + if (changesMask[389 + i]) { data.WriteFloat(ModHealingDonePercent[i]); } } } - if (changesMask[635]) + if (changesMask[396]) { for (int i = 0; i < 3; ++i) { - if (changesMask[636 + i]) + if (changesMask[397 + i]) { data.WriteFloat(WeaponDmgMultipliers[i]); } - if (changesMask[639 + i]) + if (changesMask[400 + i]) { data.WriteFloat(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[642]) + if (changesMask[403]) { for (int i = 0; i < 12; ++i) { - if (changesMask[643 + i]) + if (changesMask[404 + i]) { data.WriteUInt32(BuybackPrice[i]); } - if (changesMask[655 + i]) + if (changesMask[416 + i]) { data.WriteInt64(BuybackTimestamp[i]); } } } - if (changesMask[667]) + if (changesMask[428]) { for (int i = 0; i < 32; ++i) { - if (changesMask[668 + i]) + if (changesMask[429 + i]) { data.WriteUInt32(CombatRatings[i]); } } } - if (changesMask[700]) + if (changesMask[461]) { for (int i = 0; i < 4; ++i) { - if (changesMask[701 + i]) + if (changesMask[462 + i]) { data.WriteUInt32(NoReagentCostMask[i]); } } } - if (changesMask[705]) + if (changesMask[466]) { for (int i = 0; i < 2; ++i) { - if (changesMask[706 + i]) + if (changesMask[467 + i]) { data.WriteUInt32(ProfessionSkillLine[i]); } } } - if (changesMask[708]) + if (changesMask[469]) { for (int i = 0; i < 5; ++i) { - if (changesMask[709 + i]) + if (changesMask[470 + i]) { data.WriteUInt32(BagSlotFlags[i]); } } } - if (changesMask[714]) + if (changesMask[475]) { for (int i = 0; i < 7; ++i) { - if (changesMask[715 + i]) + if (changesMask[476 + i]) { data.WriteUInt32(BankBagSlotFlags[i]); } } } - if (changesMask[722]) + if (changesMask[483]) { - for (int i = 0; i < 875; ++i) + for (int i = 0; i < 950; ++i) { - if (changesMask[723 + i]) + if (changesMask[484 + i]) { data.WriteUInt64(QuestCompleted[i]); } } } - if (changesMask[1598]) + if (changesMask[1434]) { for (int i = 0; i < 17; ++i) { - if (changesMask[1599 + i]) + if (changesMask[1435 + i]) { data.WriteFloat(ItemUpgradeHighWatermark[i]); } @@ -6449,6 +6470,7 @@ namespace Game.Entities ClearChangesMask(SortBagsRightToLeft); ClearChangesMask(InsertItemsLeftToRight); ClearChangesMask(HasPerksProgramPendingReward); + ClearChangesMask(DataFlags); ClearChangesMask(ResearchSites); ClearChangesMask(ResearchSiteProgress); ClearChangesMask(Research); @@ -6571,7 +6593,6 @@ namespace Game.Entities ClearChangesMask(PetStable); ClearChangesMask(RequiredMountCapabilityFlags); ClearChangesMask(InvSlots); - ClearChangesMask(ExploredZones); ClearChangesMask(RestInfo); ClearChangesMask(ModDamageDonePos); ClearChangesMask(ModDamageDoneNeg); diff --git a/Source/Game/Entities/Object/WorldObject.cs b/Source/Game/Entities/Object/WorldObject.cs index daf7fbfe8..6183bfeab 100644 --- a/Source/Game/Entities/Object/WorldObject.cs +++ b/Source/Game/Entities/Object/WorldObject.cs @@ -855,6 +855,12 @@ namespace Game.Entities SetUpdateFieldValue(updateField, (T)(updateField.GetValue() | (dynamic)flag)); } + public void SetUpdateFieldFlagValue(DynamicUpdateField updateField, int index, T flag) where T : new() + { + //static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); + InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] | (dynamic)flag)); + } + public void SetUpdateFieldFlagValue(ref T value, T flag) where T : new() { //static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); @@ -867,6 +873,12 @@ namespace Game.Entities SetUpdateFieldValue(updateField, (T)(updateField.GetValue() & ~(dynamic)flag)); } + public void RemoveUpdateFieldFlagValue(DynamicUpdateField updateField, int index, T flag) where T : new() + { + //static_assert(std::is_integral < T >::value, "SetUpdateFieldFlagValue must be used with integral types"); + InsertDynamicUpdateFieldValue(updateField, index, (T)(updateField[index] & ~(dynamic)flag)); + } + public void RemoveUpdateFieldFlagValue(ref T value, T flag) where T : new() { //static_assert(std::is_integral < T >::value, "RemoveUpdateFieldFlagValue must be used with integral types"); diff --git a/Source/Game/Entities/Player/Player.DB.cs b/Source/Game/Entities/Player/Player.DB.cs index 9978d79c1..069343240 100644 --- a/Source/Game/Entities/Player/Player.DB.cs +++ b/Source/Game/Entities/Player/Player.DB.cs @@ -2953,8 +2953,13 @@ namespace Game.Entities SetXP(xp); StringArray exploredZonesStrings = new(exploredZones, ' '); - for (int i = 0; i < exploredZonesStrings.Length && i / 2 < ActivePlayerData.ExploredZonesSize; ++i) - SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, i / 2), (ulong)((long.Parse(exploredZonesStrings[i])) << (32 * (i % 2)))); + for (int i = 0; i < exploredZonesStrings.Length && i / 2 < PlayerConst.ExploredZonesSize; ++i) + { + if (!ulong.TryParse(exploredZonesStrings[i], out ulong value)) + value = 0; + + AddExploredZones(i / 2, (value << (32 * (i % 2)))); + } StringArray knownTitlesStrings = new(knownTitles, ' '); if ((knownTitlesStrings.Length % 2) == 0) @@ -3742,8 +3747,8 @@ namespace Game.Entities stmt.AddValue(index++, GetLootSpecId()); ss.Clear(); - for (int i = 0; i < PlayerConst.ExploredZonesSize; ++i) - ss.Append($"{(uint)(m_activePlayerData.ExploredZones[i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.ExploredZones[i] >> 32) & 0xFFFFFFFF)} "); + for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) + ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); stmt.AddValue(index++, ss.ToString()); @@ -3877,8 +3882,8 @@ namespace Game.Entities stmt.AddValue(index++, GetLootSpecId()); ss.Clear(); - for (int i = 0; i < PlayerConst.ExploredZonesSize; ++i) - ss.Append($"{(uint)(m_activePlayerData.ExploredZones[i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.ExploredZones[i] >> 32) & 0xFFFFFFFF)} "); + for (int i = 0; i < m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size(); ++i) + ss.Append($"{(uint)(m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] & 0xFFFFFFFF)} {(uint)((m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][i] >> 32) & 0xFFFFFFFF)} "); stmt.AddValue(index++, ss.ToString()); diff --git a/Source/Game/Entities/Player/Player.cs b/Source/Game/Entities/Player/Player.cs index f438ab9aa..971803399 100644 --- a/Source/Game/Entities/Player/Player.cs +++ b/Source/Game/Entities/Player/Player.cs @@ -6301,8 +6301,6 @@ namespace Game.Entities SendPacket(new ResetWeeklyCurrency()); } - public void AddExploredZones(uint pos, ulong mask) { SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, (int)pos), mask); } - public void RemoveExploredZones(uint pos, ulong mask) { RemoveUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, (int)pos), mask); } void CheckAreaExploreAndOutdoor() { if (!IsAlive()) @@ -6326,20 +6324,13 @@ namespace Game.Entities return; } - int offset = areaEntry.AreaBit / ActivePlayerData.ExploredZonesBits; - if (offset >= PlayerConst.ExploredZonesSize) - { - Log.outError(LogFilter.Player, "Wrong area flag {0} in map data for (X: {1} Y: {2}) point to field PLAYER_EXPLORED_ZONES_1 + {3} ( {4} must be < {5} ).", - areaId, GetPositionX(), GetPositionY(), offset, offset, PlayerConst.ExploredZonesSize); - return; - } + int offset = (areaEntry.AreaBit / PlayerConst.ExploredZonesBits); + ulong val = 1ul << (areaEntry.AreaBit % PlayerConst.ExploredZonesBits); - ulong val = 1ul << (areaEntry.AreaBit % ActivePlayerData.ExploredZonesBits); - ulong currFields = m_activePlayerData.ExploredZones[offset]; - - if (!Convert.ToBoolean(currFields & val)) + if (offset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size() + || (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][offset] & val) == 0) { - SetUpdateFieldFlagValue(ref m_values.ModifyValue(m_activePlayerData).ModifyValue(m_activePlayerData.ExploredZones, (int)offset), val); + AddExploredZones(offset, val); UpdateCriteria(CriteriaType.RevealWorldMapOverlay, GetAreaId()); @@ -6385,6 +6376,38 @@ namespace Game.Entities } } } + + public void AddExploredZones(int pos, ulong mask) + { + SetUpdateFieldFlagValue(m_values + .ModifyValue(m_activePlayerData) + .ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask); + } + + public void RemoveExploredZones(int pos, ulong mask) + { + RemoveUpdateFieldFlagValue(m_values + .ModifyValue(m_activePlayerData) + .ModifyValue(m_activePlayerData.DataFlags, (int)PlayerDataFlag.ExploredZonesIndex), pos, mask); + } + + public bool HasExploredZone(uint areaId) + { + var area = CliDB.AreaTableStorage.LookupByKey(areaId); + if (area == null) + return false; + + if (area.AreaBit < 0) + return false; + + int playerIndexOffset = area.AreaBit / PlayerConst.ExploredZonesBits; + if (playerIndexOffset >= m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex].Size()) + return false; + + ulong mask = 1ul << (area.AreaBit % PlayerConst.ExploredZonesBits); + return (m_activePlayerData.DataFlags[(int)PlayerDataFlag.ExploredZonesIndex][playerIndexOffset] & mask) != 0; + } + void SendExplorationExperience(uint Area, uint Experience) { SendPacket(new ExplorationExperience(Experience, Area)); diff --git a/Source/Game/Globals/ObjectManager.cs b/Source/Game/Globals/ObjectManager.cs index e3e76870c..55cc44e28 100644 --- a/Source/Game/Globals/ObjectManager.cs +++ b/Source/Game/Globals/ObjectManager.cs @@ -2016,7 +2016,7 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} creature template models in {Time.GetMSTimeDiffToNow(oldMSTime)} ms"); } - + public void LoadCreatureSummonedData() { uint oldMSTime = Time.GetMSTime(); @@ -8226,6 +8226,11 @@ namespace Game return null; } + public List GetCreatureQuestCurrencyList(uint creatureId) + { + return creatureQuestCurrenciesStorage.LookupByKey(creatureId); + } + //Spells /Skills / Phases public void LoadPhases() { @@ -10005,6 +10010,46 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} Player Choice Response locale strings in {Time.GetMSTimeDiffToNow(oldMSTime)} ms"); } } + + public void LoadCreatureQuestCurrencies() + { + uint oldMSTime = Time.GetMSTime(); + + // 0 1 + SQLResult result = DB.World.Query("SELECT CreatureId, CurrencyId FROM creature_quest_currency ORDER BY CreatureId, CurrencyId ASC"); + if (result.IsEmpty()) + { + Log.outInfo(LogFilter.ServerLoading, ">> Loaded 0 creature quest currencies. DB table `creature_quest_currency` is empty."); + return; + } + + uint count = 0; + do + { + uint entry = result.Read(0); + int currency = result.Read(1); + + if (GetCreatureTemplate(entry) == null) + { + Log.outError(LogFilter.Sql, $"Table `creature_quest_currency` has data for nonexistent creature (entry: {entry}, currency: {currency}), skipped"); + continue; + } + + if (!CliDB.CurrencyTypesStorage.HasRecord((uint)currency)) + { + Log.outError(LogFilter.Sql, $"Table `creature_quest_currency` has nonexistent currency (ID: {currency}) in creature (entry: {entry}, currency: {currency}), skipped"); + continue; + } + + creatureQuestCurrenciesStorage.Add(entry, currency); + + ++count; + } + while (result.NextRow()); + + Log.outInfo(LogFilter.ServerLoading, $"Loaded {count} creature quest currencies in {Time.GetMSTimeDiffToNow(oldMSTime)} ms"); + } + public void InitializeQueriesData(QueryDataGroup mask) { uint oldMSTime = Time.GetMSTime(); @@ -10827,6 +10872,7 @@ namespace Game Dictionary creatureDataStorage = new(); Dictionary creatureAddonStorage = new(); MultiMap<(uint, Difficulty), uint> creatureQuestItemStorage = new(); + MultiMap creatureQuestCurrenciesStorage = new(); Dictionary creatureTemplateAddonStorage = new(); MultiMap _creatureTemplateSparringStorage = new(); Dictionary creatureMovementOverrides = new(); diff --git a/Source/Game/Handlers/CharacterHandler.cs b/Source/Game/Handlers/CharacterHandler.cs index ff40f2b46..d13cb991e 100644 --- a/Source/Game/Handlers/CharacterHandler.cs +++ b/Source/Game/Handlers/CharacterHandler.cs @@ -993,7 +993,7 @@ namespace Game // start with every map explored if (WorldConfig.GetBoolValue(WorldCfg.StartAllExplored)) { - for (uint i = 0; i < PlayerConst.ExploredZonesSize; i++) + for (int i = 0; i < PlayerConst.ExploredZonesSize; i++) pCurrChar.AddExploredZones(i, 0xFFFFFFFFFFFFFFFF); } @@ -1385,7 +1385,7 @@ namespace Game { if (packet.CustomizedChrModelID != 0) { - var conditionalChrModel = CliDB.ConditionalChrModelStorage.LookupByKey(packet.CustomizedChrModelID); + var conditionalChrModel = Global.DB2Mgr.GetConditionalChrModel(packet.CustomizedChrModelID); if (conditionalChrModel == null) return; diff --git a/Source/Game/Networking/Packets/AuthenticationPackets.cs b/Source/Game/Networking/Packets/AuthenticationPackets.cs index 967d5236d..e5ef224d1 100644 --- a/Source/Game/Networking/Packets/AuthenticationPackets.cs +++ b/Source/Game/Networking/Packets/AuthenticationPackets.cs @@ -22,7 +22,7 @@ namespace Game.Networking.Packets Serial = _worldPacket.ReadUInt32(); Latency = _worldPacket.ReadUInt32(); } - + public uint Serial; public uint Latency; } @@ -153,7 +153,7 @@ namespace Game.Networking.Packets if (SuccessInfo.NumPlayersAlliance.HasValue) _worldPacket.WriteUInt16(SuccessInfo.NumPlayersAlliance.Value); - if(SuccessInfo.ExpansionTrialExpiration.HasValue) + if (SuccessInfo.ExpansionTrialExpiration.HasValue) _worldPacket.WriteInt64(SuccessInfo.ExpansionTrialExpiration.Value); if (SuccessInfo.NewBuildKeys != null) @@ -188,7 +188,7 @@ namespace Game.Networking.Packets } if (WaitInfo.HasValue) - WaitInfo.Value.Write(_worldPacket); + WaitInfo.Value.Write(_worldPacket); } public AuthSuccessInfo SuccessInfo; // contains the packet data in case that it has account information (It is never set when WaitInfo is set), otherwise its contents are undefined. @@ -412,13 +412,17 @@ namespace Game.Networking.Packets { data.WriteUInt32(WaitCount); data.WriteUInt32(WaitTime); + data.WriteUInt32(AllowedFactionGroupForCharacterCreate); data.WriteBit(HasFCM); + data.WriteBit(CanCreateOnlyIfExisting); data.FlushBits(); } public uint WaitCount; // position of the account in the login queue public uint WaitTime; // Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time" + public uint AllowedFactionGroupForCharacterCreate; public bool HasFCM; // true if the account has a forced character migration pending. @todo implement + public bool CanCreateOnlyIfExisting; ///< Can create characters on realm only if player has other existing characters there } struct VirtualRealmNameInfo diff --git a/Source/Game/Networking/Packets/ChatPackets.cs b/Source/Game/Networking/Packets/ChatPackets.cs index 2e675a1b2..c7337e3fe 100644 --- a/Source/Game/Networking/Packets/ChatPackets.cs +++ b/Source/Game/Networking/Packets/ChatPackets.cs @@ -398,7 +398,7 @@ namespace Game.Networking.Packets public override void Write() { - _worldPacket.WriteUInt8((byte)Reason); + _worldPacket.WriteInt32((int)Reason); } ChatRestrictionType Reason; diff --git a/Source/Game/Networking/Packets/LootPackets.cs b/Source/Game/Networking/Packets/LootPackets.cs index 55689c57e..5419e8241 100644 --- a/Source/Game/Networking/Packets/LootPackets.cs +++ b/Source/Game/Networking/Packets/LootPackets.cs @@ -264,7 +264,7 @@ namespace Game.Networking.Packets public uint RollTime; public LootMethod Method; public RollMask ValidRolls; - public Array LootRollIneligibleReason = new Array(4); + public Array LootRollIneligibleReason = new Array(5); public LootItemData Item = new(); public uint DungeonEncounterID; diff --git a/Source/Game/Networking/Packets/QueryPackets.cs b/Source/Game/Networking/Packets/QueryPackets.cs index 2ceb40c38..0e8634b4f 100644 --- a/Source/Game/Networking/Packets/QueryPackets.cs +++ b/Source/Game/Networking/Packets/QueryPackets.cs @@ -106,8 +106,8 @@ namespace Game.Networking.Packets _worldPacket.WriteFloat(Stats.HpMulti); _worldPacket.WriteFloat(Stats.EnergyMulti); - _worldPacket.WriteInt32(Stats.QuestItems.Count); + _worldPacket.WriteInt32(Stats.QuestCurrencies.Count); _worldPacket.WriteUInt32(Stats.CreatureMovementInfoID); _worldPacket.WriteInt32(Stats.HealthScalingExpansion); _worldPacket.WriteUInt32(Stats.RequiredExpansion); @@ -128,6 +128,9 @@ namespace Game.Networking.Packets foreach (var questItem in Stats.QuestItems) _worldPacket.WriteUInt32(questItem); + + foreach (var currencyItem in Stats.QuestCurrencies) + _worldPacket.WriteInt32(currencyItem); } } @@ -671,7 +674,7 @@ namespace Game.Networking.Packets public uint Unused1; public ObjectGuid Unused2; public string Unused3 = ""; - + public void Write(WorldPacket data) { data.WriteUInt32(Unused1); @@ -739,6 +742,7 @@ namespace Game.Networking.Packets public float EnergyMulti; public bool Leader; public List QuestItems = new(); + public List QuestCurrencies = new(); public uint CreatureMovementInfoID; public int HealthScalingExpansion; public uint RequiredExpansion; diff --git a/Source/Game/Quest/Quest.cs b/Source/Game/Quest/Quest.cs index 661794c66..e5bc17903 100644 --- a/Source/Game/Quest/Quest.cs +++ b/Source/Game/Quest/Quest.cs @@ -1070,6 +1070,7 @@ namespace Game case QuestObjectiveType.HaveCurrency: case QuestObjectiveType.ObtainCurrency: case QuestObjectiveType.IncreaseReputation: + case QuestObjectiveType.KillWithLabel: return true; default: break; diff --git a/Source/Game/World/WorldManager.cs b/Source/Game/World/WorldManager.cs index ac4d5d346..8a94d1fe9 100644 --- a/Source/Game/World/WorldManager.cs +++ b/Source/Game/World/WorldManager.cs @@ -673,6 +673,9 @@ namespace Game Log.outInfo(LogFilter.ServerLoading, "Loading Creature Quest Items..."); Global.ObjectMgr.LoadCreatureQuestItems(); + Log.outInfo(LogFilter.ServerLoading, "Loading Creature Quest Currencies..."); + Global.ObjectMgr.LoadCreatureQuestCurrencies(); + Log.outInfo(LogFilter.ServerLoading, "Loading Creature Linked Respawn..."); Global.ObjectMgr.LoadLinkedRespawn(); // must be after LoadCreatures(), LoadGameObjects()