diff options
35 files changed, 1628 insertions, 1367 deletions
diff --git a/sql/base/auth_database.sql b/sql/base/auth_database.sql index 2ac92429949..6fddaf1e85b 100644 --- a/sql/base/auth_database.sql +++ b/sql/base/auth_database.sql @@ -755,7 +755,11 @@ INSERT INTO `build_info` VALUES (52545,10,2,0,NULL,NULL,'FB52179A8355A46EDBFBDC8E8E5CDAFD',NULL,NULL,NULL), (52607,10,2,0,NULL,NULL,'8F002E4AADCAEABB08ABC2880B31AD60',NULL,NULL,NULL), (52649,10,2,0,NULL,NULL,'D0B779FBECEBC1ED5A85D83F03C8A75B',NULL,NULL,NULL), -(52808,10,2,0,NULL,NULL,'6276712B6C8AEA21CD5D94D52FEE70EE',NULL,NULL,NULL); +(52808,10,2,0,NULL,NULL,'6276712B6C8AEA21CD5D94D52FEE70EE',NULL,NULL,NULL), +(52902,10,2,5,NULL,NULL,'D4F0A24CDF165628538C1C387A326AF3',NULL,NULL,NULL), +(52968,10,2,5,NULL,NULL,'2D247FD440C44D4F1BF80B075B8720F2',NULL,NULL,NULL), +(52983,10,2,5,NULL,NULL,'B1E5ADA5FDD06C9AB5E5D8A6983324AC',NULL,NULL,NULL), +(53007,10,2,5,NULL,NULL,'A21AFB4D381C56AF471D994258C0EEF5',NULL,NULL,NULL); /*!40000 ALTER TABLE `build_info` ENABLE KEYS */; UNLOCK TABLES; @@ -2365,7 +2369,7 @@ CREATE TABLE `realmlist` ( `timezone` tinyint unsigned NOT NULL DEFAULT '0', `allowedSecurityLevel` tinyint unsigned NOT NULL DEFAULT '0', `population` float unsigned NOT NULL DEFAULT '0', - `gamebuild` int unsigned NOT NULL DEFAULT '52808', + `gamebuild` int unsigned NOT NULL DEFAULT '53007', `Region` tinyint unsigned NOT NULL DEFAULT '1', `Battlegroup` tinyint unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`id`), @@ -2380,7 +2384,7 @@ CREATE TABLE `realmlist` ( LOCK TABLES `realmlist` WRITE; /*!40000 ALTER TABLE `realmlist` DISABLE KEYS */; INSERT INTO `realmlist` VALUES -(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,52808,1,1); +(1,'Trinity','127.0.0.1','127.0.0.1','255.255.255.0',8085,0,0,1,0,0,53007,1,1); /*!40000 ALTER TABLE `realmlist` ENABLE KEYS */; UNLOCK TABLES; @@ -2784,7 +2788,8 @@ INSERT INTO `updates` VALUES ('2023_12_24_00_auth.sql','F59B3A895750FD83177324B89BFCEBD8A43DD577','RELEASED','2023-12-24 06:24:58',0), ('2023_12_26_00_auth.sql','5C8716F7F6E2792E15A42BDA8F2D855A7DE95FC5','RELEASED','2023-12-26 13:38:58',0), ('2024_01_05_00_auth.sql','7F401D473B08BBE5212551E96A86F85107CE7C8E','RELEASED','2023-12-19 10:05:39',0), -('2024_01_10_00_auth.sql','75F06894D95986AEAB2933F141DB7693FABB0324','RELEASED','2024-01-10 11:14:55',0); +('2024_01_10_00_auth.sql','75F06894D95986AEAB2933F141DB7693FABB0324','RELEASED','2024-01-10 11:14:55',0), +('2024_01_21_00_auth.sql','5F12B88EAADC5390AD42843290BD13CEF3BF2E0B','RELEASED','2024-01-21 21:21:50',0); /*!40000 ALTER TABLE `updates` ENABLE KEYS */; UNLOCK TABLES; diff --git a/sql/updates/auth/master/2024_01_21_00_auth.sql b/sql/updates/auth/master/2024_01_21_00_auth.sql new file mode 100644 index 00000000000..d1f5781cd5f --- /dev/null +++ b/sql/updates/auth/master/2024_01_21_00_auth.sql @@ -0,0 +1,10 @@ +DELETE FROM `build_info` WHERE `build` IN (52902,52968,52983,53007); +INSERT INTO `build_info` (`build`,`majorVersion`,`minorVersion`,`bugfixVersion`,`hotfixVersion`,`winAuthSeed`,`win64AuthSeed`,`mac64AuthSeed`,`winChecksumSeed`,`macChecksumSeed`) VALUES +(52902,10,2,5,NULL,NULL,'D4F0A24CDF165628538C1C387A326AF3',NULL,NULL,NULL), +(52968,10,2,5,NULL,NULL,'2D247FD440C44D4F1BF80B075B8720F2',NULL,NULL,NULL), +(52983,10,2,5,NULL,NULL,'B1E5ADA5FDD06C9AB5E5D8A6983324AC',NULL,NULL,NULL), +(53007,10,2,5,NULL,NULL,'A21AFB4D381C56AF471D994258C0EEF5',NULL,NULL,NULL); + +UPDATE `realmlist` SET `gamebuild`=53007 WHERE `gamebuild`=52808; + +ALTER TABLE `realmlist` CHANGE `gamebuild` `gamebuild` int unsigned NOT NULL DEFAULT '53007'; diff --git a/sql/updates/hotfixes/master/2024_01_21_00_hotfixes.sql b/sql/updates/hotfixes/master/2024_01_21_00_hotfixes.sql new file mode 100644 index 00000000000..e1e7b7eb0cd --- /dev/null +++ b/sql/updates/hotfixes/master/2024_01_21_00_hotfixes.sql @@ -0,0 +1,2 @@ +ALTER TABLE `conditional_chr_model` MODIFY `ID` int UNSIGNED NOT NULL DEFAULT 0 FIRST; +ALTER TABLE `conditional_chr_model` MODIFY `ChrModelID` int NOT NULL DEFAULT 0 AFTER `ID`; diff --git a/sql/updates/world/master/2024_01_21_00_world.sql b/sql/updates/world/master/2024_01_21_00_world.sql new file mode 100644 index 00000000000..27f343fe7ae --- /dev/null +++ b/sql/updates/world/master/2024_01_21_00_world.sql @@ -0,0 +1,10 @@ +-- +-- Table structure for table `creature_quest_currency` +-- +DROP TABLE IF EXISTS `creature_quest_currency`; +CREATE TABLE `creature_quest_currency` ( + `CreatureId` int unsigned NOT NULL, + `CurrencyId` int NOT NULL, + `VerifiedBuild` int NOT NULL DEFAULT 0, + PRIMARY KEY (`CreatureId`,`CurrencyId`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; diff --git a/src/common/DataStores/DB2FileLoader.cpp b/src/common/DataStores/DB2FileLoader.cpp index d687c34d4a7..57ec7df6e3f 100644 --- a/src/common/DataStores/DB2FileLoader.cpp +++ b/src/common/DataStores/DB2FileLoader.cpp @@ -1810,6 +1810,7 @@ void DB2FileLoader::LoadHeaders(DB2FileSource* source, DB2FileLoadInfo const* lo throw DB2FileLoadException("Failed to read header"); EndianConvert(_header.Signature); + EndianConvert(_header.Version); EndianConvert(_header.RecordCount); EndianConvert(_header.FieldCount); EndianConvert(_header.RecordSize); @@ -1829,10 +1830,14 @@ void DB2FileLoader::LoadHeaders(DB2FileSource* source, DB2FileLoadInfo const* lo EndianConvert(_header.PalletDataSize); EndianConvert(_header.SectionCount); - if (_header.Signature != 0x34434457) //'WDC4' - throw DB2FileLoadException(Trinity::StringFormat("Incorrect file signature in {}, expected 'WDC4', got {}{}{}{}", source->GetFileName(), + if (_header.Signature != 0x35434457) //'WDC5' + throw DB2FileLoadException(Trinity::StringFormat("Incorrect file signature in {}, expected 'WDC5', got {}{}{}{}", source->GetFileName(), char(_header.Signature & 0xFF), char((_header.Signature >> 8) & 0xFF), char((_header.Signature >> 16) & 0xFF), char((_header.Signature >> 24) & 0xFF))); + if (_header.Version != 5) + throw DB2FileLoadException(Trinity::StringFormat("Incorrect version in {}, expected 5, got {} (possibly wrong client version)", + source->GetFileName(), _header.Version)); + if (loadInfo && _header.LayoutHash != loadInfo->Meta->LayoutHash) throw DB2FileLoadException(Trinity::StringFormat("Incorrect layout hash in {}, expected 0x{:08X}, got 0x{:08X} (possibly wrong client version)", source->GetFileName(), loadInfo->Meta->LayoutHash, _header.LayoutHash)); diff --git a/src/common/DataStores/DB2FileLoader.h b/src/common/DataStores/DB2FileLoader.h index 29e78463f38..6875335f3ca 100644 --- a/src/common/DataStores/DB2FileLoader.h +++ b/src/common/DataStores/DB2FileLoader.h @@ -31,6 +31,8 @@ struct DB2Meta; struct DB2Header { uint32 Signature; + uint32 Version; + std::array<char, 128> Schema; uint32 RecordCount; uint32 FieldCount; uint32 RecordSize; diff --git a/src/server/game/Achievements/CriteriaHandler.cpp b/src/server/game/Achievements/CriteriaHandler.cpp index 08fc5d69c14..8e6d7a84bba 100644 --- a/src/server/game/Achievements/CriteriaHandler.cpp +++ b/src/server/game/Achievements/CriteriaHandler.cpp @@ -1516,19 +1516,7 @@ bool CriteriaHandler::RequirementsSatisfied(Criteria const* criteria, uint64 mis bool matchFound = false; for (uint32 j : worldOverlayEntry->AreaID) { - AreaTableEntry const* area = sAreaTableStore.LookupEntry(j); - if (!area) - break; - - if (area->AreaBit < 0) - continue; - - size_t playerIndexOffset = size_t(area->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; - if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) - continue; - - uint64 mask = uint64(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); - if (referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & mask) + if (referencePlayer->HasExploredZone(j)) { matchFound = true; break; @@ -2276,15 +2264,7 @@ bool CriteriaHandler::ModifierSatisfied(ModifierTreeEntry const* modifier, uint6 } case ModifierTreeType::PlayerHasExploredArea: // 113 { - AreaTableEntry const* areaTable = sAreaTableStore.LookupEntry(reqValue); - if (!areaTable) - return false; - if (areaTable->AreaBit <= 0) - break; // success - size_t playerIndexOffset = size_t(areaTable->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; - if (playerIndexOffset >= PLAYER_EXPLORED_ZONES_SIZE) - break; - if (!(referencePlayer->m_activePlayerData->ExploredZones[playerIndexOffset] & (UI64LIT(1) << (areaTable->AreaBit % PLAYER_EXPLORED_ZONES_BITS)))) + if (!referencePlayer->HasExploredZone(reqValue)) return false; break; } diff --git a/src/server/game/Conditions/ConditionMgr.cpp b/src/server/game/Conditions/ConditionMgr.cpp index 7e2ef468878..ad53892967e 100644 --- a/src/server/game/Conditions/ConditionMgr.cpp +++ b/src/server/game/Conditions/ConditionMgr.cpp @@ -3089,7 +3089,7 @@ bool ConditionMgr::IsPlayerMeetingCondition(Player const* player, PlayerConditio { for (std::size_t i = 0; i < condition->Explored.size(); ++i) if (AreaTableEntry const* area = sAreaTableStore.LookupEntry(condition->Explored[i])) - if (area->AreaBit != -1 && !(player->m_activePlayerData->ExploredZones[area->AreaBit / PLAYER_EXPLORED_ZONES_BITS] & (UI64LIT(1) << (uint32(area->AreaBit) % PLAYER_EXPLORED_ZONES_BITS)))) + if (!player->HasExploredZone(area->ID)) return false; } diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 2a3509c1bd5..d051c0fa472 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -1259,8 +1259,8 @@ struct ConditionalChrModelLoadInfo { static constexpr DB2FieldMeta Fields[6] = { - { true, FT_INT, "ID" }, - { false, FT_INT, "ChrModelID" }, + { false, FT_INT, "ID" }, + { true, FT_INT, "ChrModelID" }, { true, FT_INT, "ChrCustomizationReqID" }, { true, FT_INT, "PlayerConditionID" }, { true, FT_INT, "Flags" }, diff --git a/src/server/game/DataStores/DB2Metadata.h b/src/server/game/DataStores/DB2Metadata.h index 6be4d8024cf..cdfea34a87d 100644 --- a/src/server/game/DataStores/DB2Metadata.h +++ b/src/server/game/DataStores/DB2Metadata.h @@ -2878,15 +2878,15 @@ struct ConditionalChrModelMeta { static constexpr DB2MetaField Fields[6] = { - { FT_INT, 1, true }, { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 5211412, 1, 6, 6, 0x4467B29C, Fields, -1 }; + static constexpr DB2Meta Instance{ 5211412, 0, 6, 6, 0xACE42127, Fields, 1 }; }; struct ConditionalContentTuningMeta @@ -3095,7 +3095,7 @@ struct CovenantMeta struct CraftingDataMeta { - static constexpr DB2MetaField Fields[15] = + static constexpr DB2MetaField Fields[16] = { { FT_INT, 1, false }, { FT_INT, 1, true }, @@ -3112,9 +3112,10 @@ struct CraftingDataMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4545611, 0, 15, 15, 0xAC3DA43D, Fields, -1 }; + static constexpr DB2Meta Instance{ 4545611, 0, 16, 16, 0xE8316F5C, Fields, -1 }; }; struct CraftingDataEnchantQualityMeta @@ -8152,6 +8153,74 @@ struct ModelRibbonQualityMeta static constexpr DB2Meta Instance{ 1399953, -1, 2, 1, 0x682023A4, Fields, 1 }; }; +struct ModelSoundMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5393273, -1, 2, 2, 0x9A4E453C, Fields, -1 }; +}; + +struct ModelSoundAnimEntryMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5393274, -1, 2, 2, 0x98809C50, Fields, 0 }; +}; + +struct ModelSoundEntryMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5393275, -1, 1, 1, 0x870082C7, Fields, 0 }; +}; + +struct ModelSoundOverrideMeta +{ + static constexpr DB2MetaField Fields[2] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5393276, -1, 2, 2, 0x5A6FC74A, Fields, 0 }; +}; + +struct ModelSoundOverrideNameMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_STRING_NOT_LOCALIZED, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5512584, -1, 1, 1, 0x0F422F8A, Fields, -1 }; +}; + +struct ModelSoundTagEntryMeta +{ + static constexpr DB2MetaField Fields[6] = + { + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5393277, -1, 6, 6, 0x66973320, Fields, 5 }; +}; + struct ModifiedCraftingCategoryMeta { static constexpr DB2MetaField Fields[5] = @@ -8913,6 +8982,19 @@ struct PerksActivityMeta static constexpr DB2Meta Instance{ 4519766, 2, 7, 7, 0x4FF9AFB2, Fields, -1 }; }; +struct PerksActivityConditionMeta +{ + static constexpr DB2MetaField Fields[4] = + { + { FT_INT, 1, false }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5524226, 0, 4, 3, 0x6DD21FC7, Fields, 3 }; +}; + struct PerksActivityTagMeta { static constexpr DB2MetaField Fields[2] = @@ -9042,14 +9124,15 @@ struct PerksVendorItemUIGroupMeta struct PerksVendorItemUIInfoMeta { - static constexpr DB2MetaField Fields[3] = + static constexpr DB2MetaField Fields[4] = { { FT_INT, 1, false }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 4281312, 0, 3, 3, 0x6D14E9E7, Fields, -1 }; + static constexpr DB2Meta Instance{ 4281312, 0, 4, 4, 0x8F2F6861, Fields, -1 }; }; struct PerksVendorItemXIntervalMeta @@ -9213,6 +9296,26 @@ struct PlayerConditionMeta static constexpr DB2Meta Instance{ 1045411, -1, 84, 84, 0xEE0F1EDC, Fields, -1 }; }; +struct PlayerDataFlagAccountMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5426706, -1, 1, 1, 0x5C476AE6, Fields, -1 }; +}; + +struct PlayerDataFlagCharacterMeta +{ + static constexpr DB2MetaField Fields[1] = + { + { FT_INT, 1, true }, + }; + + static constexpr DB2Meta Instance{ 5426708, -1, 1, 1, 0x5C476AE6, Fields, -1 }; +}; + struct PositionerMeta { static constexpr DB2MetaField Fields[4] = @@ -13120,7 +13223,7 @@ struct UIDungeonScoreRarityMeta struct UIEventToastMeta { - static constexpr DB2MetaField Fields[21] = + static constexpr DB2MetaField Fields[22] = { { FT_STRING, 1, true }, { FT_STRING, 1, true }, @@ -13143,9 +13246,10 @@ struct UIEventToastMeta { FT_INT, 1, true }, { FT_INT, 1, true }, { FT_INT, 1, true }, + { FT_INT, 1, true }, }; - static constexpr DB2Meta Instance{ 3946498, 6, 21, 21, 0x1B94BDE2, Fields, -1 }; + static constexpr DB2Meta Instance{ 3946498, 6, 22, 22, 0xE0B754D7, Fields, -1 }; }; struct UIExpansionDisplayInfoMeta diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp index ec9455dd343..8c849f43061 100644 --- a/src/server/game/DataStores/DB2Stores.cpp +++ b/src/server/game/DataStores/DB2Stores.cpp @@ -457,6 +457,7 @@ namespace std::unordered_map<std::pair<uint8 /*race*/, uint8/*gender*/>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender; std::unordered_map<uint32 /*chrCustomizationReqId*/, std::vector<std::pair<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>>> _chrCustomizationRequiredChoices; ChrSpecializationByIndexContainer _chrSpecializationsByIndex; + std::unordered_map<int32, ConditionalChrModelEntry const*> _conditionalChrModelsByChrModelId; std::unordered_multimap<uint32, ConditionalContentTuningEntry const*> _conditionalContentTuning; std::unordered_set<std::pair<uint32, int32>> _contentTuningLabels; std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers; @@ -987,13 +988,13 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul } // Check loaded DB2 files proper version - if (!sAreaTableStore.LookupEntry(14720) || // last area added in 10.0.7 (48520) - !sCharTitlesStore.LookupEntry(762) || // last char title added in 10.0.7 (48520) - !sGemPropertiesStore.LookupEntry(4059) || // last gem property added in 10.0.7 (48520) - !sItemStore.LookupEntry(205244) || // last item added in 10.0.7 (48520) - !sItemExtendedCostStore.LookupEntry(8043) || // last item extended cost added in 10.0.7 (48520) - !sMapStore.LookupEntry(2616) || // last map added in 10.0.7 (48520) - !sSpellNameStore.LookupEntry(409033)) // last spell added in 10.0.7 (48520) + if (!sAreaTableStore.LookupEntry(15151) || // last area added in 10.2.5 (53007) + !sCharTitlesStore.LookupEntry(805) || // last char title added in 10.2.5 (53007) + !sGemPropertiesStore.LookupEntry(4081) || // last gem property added in 10.2.5 (53007) + !sItemStore.LookupEntry(215160) || // last item added in 10.2.5 (53007) + !sItemExtendedCostStore.LookupEntry(8510) || // last item extended cost added in 10.2.5 (53007) + !sMapStore.LookupEntry(2708) || // last map added in 10.2.5 (53007) + !sSpellNameStore.LookupEntry(438878)) // last spell added in 10.2.5 (53007) { TC_LOG_ERROR("misc", "You have _outdated_ DB2 files. Please extract correct versions from current using client."); exit(1); @@ -1002,6 +1003,12 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul for (AreaGroupMemberEntry const* areaGroupMember : sAreaGroupMemberStore) _areaGroupMembers[areaGroupMember->AreaGroupID].push_back(areaGroupMember->AreaID); + for (AreaTableEntry const* areaTable : sAreaTableStore) + { + ASSERT(areaTable->AreaBit <= 0 || (size_t(areaTable->AreaBit / 64) < PLAYER_EXPLORED_ZONES_SIZE), + "PLAYER_EXPLORED_ZONES_SIZE must be at least %d", (areaTable->AreaBit + 63) / 64); + } + for (ArtifactPowerEntry const* artifactPower : sArtifactPowerStore) _artifactPowers[artifactPower->ArtifactID].push_back(artifactPower); @@ -1199,6 +1206,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul _chrSpecializationsByIndex[storageIndex][chrSpec->OrderIndex] = chrSpec; } + for (ConditionalChrModelEntry const* conditionalChrModel : sConditionalChrModelStore) + _conditionalChrModelsByChrModelId[conditionalChrModel->ChrModelID] = conditionalChrModel; + for (ConditionalContentTuningEntry const* conditionalContentTuning : sConditionalContentTuningStore) _conditionalContentTuning.emplace(conditionalContentTuning->ParentContentTuningID, conditionalContentTuning); @@ -2057,6 +2067,11 @@ ChrModelEntry const* DB2Manager::GetChrModel(uint8 race, uint8 gender) const return Trinity::Containers::MapGetValuePtr(_chrModelsByRaceAndGender, { race, gender }); } +ConditionalChrModelEntry const* DB2Manager::GetConditionalChrModel(int32 chrModelId) +{ + return Trinity::Containers::MapGetValuePtr(_conditionalChrModelsByChrModelId, chrModelId); +} + char const* DB2Manager::GetChrRaceName(uint8 race, LocaleConstant locale /*= DEFAULT_LOCALE*/) { ChrRacesEntry const* raceEntry = sChrRacesStore.LookupEntry(race); diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h index 21a0bcf07de..91609057a35 100644 --- a/src/server/game/DataStores/DB2Stores.h +++ b/src/server/game/DataStores/DB2Stores.h @@ -443,6 +443,7 @@ public: std::vector<ChrCustomizationOptionEntry const*> const* GetCustomiztionOptions(uint8 race, uint8 gender) const; std::vector<std::pair<uint32, std::vector<uint32>>> const* GetRequiredCustomizationChoices(uint32 chrCustomizationReqId) const; ChrModelEntry const* GetChrModel(uint8 race, uint8 gender) const; + static ConditionalChrModelEntry const* GetConditionalChrModel(int32 chrModelId); static char const* GetChrRaceName(uint8 race, LocaleConstant locale = DEFAULT_LOCALE); ChrSpecializationEntry const* GetChrSpecializationByIndex(uint32 class_, uint32 index) const; ChrSpecializationEntry const* GetDefaultChrSpecializationForClass(uint32 class_) const; diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index acf4c98c77a..455b3f78ea8 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -897,8 +897,8 @@ struct CinematicSequencesEntry struct ConditionalChrModelEntry { - int32 ID; - uint32 ChrModelID; // This is the PK + uint32 ID; + int32 ChrModelID; int32 ChrCustomizationReqID; int32 PlayerConditionID; int32 Flags; diff --git a/src/server/game/DataStores/DBCEnums.h b/src/server/game/DataStores/DBCEnums.h index db4ef4082a2..c39c4cd9626 100644 --- a/src/server/game/DataStores/DBCEnums.h +++ b/src/server/game/DataStores/DBCEnums.h @@ -163,6 +163,8 @@ enum class AreaFlags2 : uint32 DEFINE_ENUM_FLAG(AreaFlags2); +inline constexpr size_t PLAYER_EXPLORED_ZONES_SIZE = 240; + enum class AreaMountFlags : uint8 { None = 0x0, diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 6905966e567..a8077ffae0b 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -222,7 +222,10 @@ WorldPacket CreatureTemplate::BuildQueryData(LocaleConstant loc, Difficulty diff stats.CursorName = IconName; if (std::vector<uint32> const* items = sObjectMgr->GetCreatureQuestItemList(Entry, difficulty)) - stats.QuestItems.insert(stats.QuestItems.begin(), items->begin(), items->end()); + stats.QuestItems.assign(items->begin(), items->end()); + + if (std::vector<int32> const* currencies = sObjectMgr->GetCreatureQuestCurrencyList(Entry)) + stats.QuestCurrencies.assign(currencies->begin(), currencies->end()); if (loc != LOCALE_enUS) if (CreatureLocale const* creatureLocale = sObjectMgr->GetCreatureLocale(Entry)) diff --git a/src/server/game/Entities/Object/Updates/UpdateField.h b/src/server/game/Entities/Object/Updates/UpdateField.h index 74b0176851c..fdad7e0d18e 100644 --- a/src/server/game/Entities/Object/Updates/UpdateField.h +++ b/src/server/game/Entities/Object/Updates/UpdateField.h @@ -214,11 +214,11 @@ namespace UF _updateMask[block] |= UpdateMaskHelpers::GetBlockFlag(index); } - void MarkNewValue(T&, std::false_type) + static void MarkNewValue(T&, std::false_type) { } - void MarkNewValue(T& value, std::true_type) + static void MarkNewValue(T& value, std::true_type) { value._changesMask.SetAll(); } @@ -278,7 +278,11 @@ namespace UF ModifyValue(UpdateFieldArray<V, Size, Bit, FirstElementBit>(T::* field), uint32 index) { _value._changesMask.Set(Bit); - _value._changesMask.Set(FirstElementBit + index); + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, V>) + _value._changesMask.Set(FirstElementBit + index); + else + _value._changesMask.Set(FirstElementBit); + return { (_value.*field)._values[index] }; } @@ -536,7 +540,10 @@ namespace UF static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); _changesMask.Set(Bit); - _changesMask.Set(FirstElementBit + index); + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) + _changesMask.Set(FirstElementBit + index); + else + _changesMask.Set(FirstElementBit); } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> @@ -574,7 +581,10 @@ namespace UF { static_assert(std::is_base_of_v<Base, Derived>, "Given field argument must belong to the same structure as this HasChangesMask"); - _changesMask.Reset(FirstElementBit + index); + if constexpr (!std::is_base_of_v<IsUpdateFieldHolderTag, T>) + _changesMask.Reset(FirstElementBit + index); + else + _changesMask.Reset(FirstElementBit); } template<typename Derived, typename T, int32 BlockBit, uint32 Bit> @@ -596,64 +606,64 @@ namespace UF protected: template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field) + static void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field) { ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(UpdateField<T, BlockBit, Bit>&, std::false_type) { } + static void ClearChangesMask(UpdateField<T, BlockBit, Bit>&, std::false_type) { } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::true_type) + static void ClearChangesMask(UpdateField<T, BlockBit, Bit>& field, std::true_type) { field._value.ClearChangesMask(); } template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> - void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field) + static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field) { - ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); + ClearChangesMask(field, std::disjunction<std::is_base_of<HasChangesMaskTag, T>, std::is_base_of<IsUpdateFieldHolderTag, T>>{}); } template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> - void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>&, std::false_type) { } + static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>&, std::false_type) { } template<typename T, std::size_t Size, uint32 Bit, uint32 FirstElementBit> - void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type) + static void ClearChangesMask(UpdateFieldArray<T, Size, Bit, FirstElementBit>& field, std::true_type) { for (uint32 i = 0; i < Size; ++i) field._values[i].ClearChangesMask(); } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field) + static void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field) { ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); field.ClearChangesMask(); } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>&, std::false_type) { } + static void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>&, std::false_type) { } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::true_type) + static void ClearChangesMask(DynamicUpdateField<T, BlockBit, Bit>& field, std::true_type) { for (uint32 i = 0; i < field._values.size(); ++i) field._values[i].ClearChangesMask(); } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>& field) + static void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>& field) { ClearChangesMask(field, std::is_base_of<HasChangesMaskTag, T>{}); } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>&, std::false_type) { } + static void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>&, std::false_type) { } template<typename T, int32 BlockBit, uint32 Bit> - void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>& field, std::true_type) + static void ClearChangesMask(OptionalUpdateField<T, BlockBit, Bit>& field, std::true_type) { if (field.has_value()) field._value->ClearChangesMask(); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.cpp b/src/server/game/Entities/Object/Updates/UpdateFields.cpp index 2a4402603e9..6f02ac0e838 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.cpp +++ b/src/server/game/Entities/Object/Updates/UpdateFields.cpp @@ -4104,9 +4104,13 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f data << float(VersatilityBonus); data << float(PvpPowerDamage); data << float(PvpPowerHealing); - for (uint32 i = 0; i < 240; ++i) + for (uint32 i = 0; i < 8; ++i) { - data << uint64(ExploredZones[i]); + data << uint32(DataFlags[i].size()); + for (uint32 j = 0; j < DataFlags[i].size(); ++j) + { + data << uint64(DataFlags[i][j]); + } } for (uint32 i = 0; i < 2; ++i) { @@ -4185,7 +4189,7 @@ void ActivePlayerData::WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> f { data << uint32(BankBagSlotFlags[i]); } - for (uint32 i = 0; i < 875; ++i) + for (uint32 i = 0; i < 950; ++i) { data << uint64(QuestCompleted[i]); } @@ -4399,8 +4403,8 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo { for (uint32 i = 0; i < 1; ++i) data << uint32(changesMask.GetBlocksMask(i)); - data.WriteBits(changesMask.GetBlocksMask(1), 19); - for (uint32 i = 0; i < 51; ++i) + data.WriteBits(changesMask.GetBlocksMask(1), 14); + for (uint32 i = 0; i < 46; ++i) if (changesMask.GetBlock(i)) data.WriteBits(changesMask.GetBlock(i), 32); @@ -4437,6 +4441,38 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo else WriteCompleteDynamicFieldUpdateMask(KnownTitles.size(), data); } + } + if (changesMask[36]) + { + for (uint32 i = 0; i < 8; ++i) + { + if (changesMask[37]) + { + if (!ignoreNestedChangesMask) + DataFlags[i].WriteUpdateMask(data); + else + WriteCompleteDynamicFieldUpdateMask(DataFlags[i].size(), data); + } + } + } + if (changesMask[36]) + { + for (uint32 i = 0; i < 8; ++i) + { + if (changesMask[37]) + { + for (uint32 j = 0; j < DataFlags[i].size(); ++j) + { + if (DataFlags[i].HasChanged(j) || ignoreNestedChangesMask) + { + data << uint64(DataFlags[i][j]); + } + } + } + } + } + if (changesMask[0]) + { if (changesMask[8]) { if (!ignoreNestedChangesMask) @@ -4445,11 +4481,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo WriteCompleteDynamicFieldUpdateMask(PvpInfo.size(), data); } } - if (changesMask[36]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[39]) { if (!ignoreNestedChangesMask) ResearchSites[i].WriteUpdateMask(data); @@ -4458,11 +4494,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[41]) { if (!ignoreNestedChangesMask) ResearchSiteProgress[i].WriteUpdateMask(data); @@ -4471,11 +4507,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[43]) { if (!ignoreNestedChangesMask) Research[i].WriteUpdateMask(data); @@ -4484,11 +4520,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[36]) + if (changesMask[38]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[37 + i]) + if (changesMask[39]) { for (uint32 j = 0; j < ResearchSites[i].size(); ++j) { @@ -4500,11 +4536,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[38]) + if (changesMask[40]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[39 + i]) + if (changesMask[41]) { for (uint32 j = 0; j < ResearchSiteProgress[i].size(); ++j) { @@ -4516,11 +4552,11 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[40]) + if (changesMask[42]) { for (uint32 i = 0; i < 1; ++i) { - if (changesMask[41 + i]) + if (changesMask[43]) { for (uint32 j = 0; j < Research[i].size(); ++j) { @@ -5013,345 +5049,345 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } if (changesMask[32]) { - if (changesMask[42]) + if (changesMask[44]) { data << FarsightObject; } - if (changesMask[43]) + if (changesMask[45]) { data << SummonedBattlePetGUID; } - if (changesMask[44]) + if (changesMask[46]) { data << uint64(Coinage); } - if (changesMask[45]) + if (changesMask[47]) { data << int32(XP); } - if (changesMask[46]) + if (changesMask[48]) { data << int32(NextLevelXP); } - if (changesMask[47]) + if (changesMask[49]) { data << int32(TrialXP); } - if (changesMask[48]) + if (changesMask[50]) { Skill->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[49]) + if (changesMask[51]) { data << int32(CharacterPoints); } - if (changesMask[50]) + if (changesMask[52]) { data << int32(MaxTalentTiers); } - if (changesMask[51]) + if (changesMask[53]) { data << uint32(TrackCreatureMask); } - if (changesMask[52]) + if (changesMask[54]) { data << float(MainhandExpertise); } - if (changesMask[53]) + if (changesMask[55]) { data << float(OffhandExpertise); } - if (changesMask[54]) + if (changesMask[56]) { data << float(RangedExpertise); } - if (changesMask[55]) + if (changesMask[57]) { data << float(CombatRatingExpertise); } - if (changesMask[56]) + if (changesMask[58]) { data << float(BlockPercentage); } - if (changesMask[57]) + if (changesMask[59]) { data << float(DodgePercentage); } - if (changesMask[58]) + if (changesMask[60]) { data << float(DodgePercentageFromAttribute); } - if (changesMask[59]) + if (changesMask[61]) { data << float(ParryPercentage); } - if (changesMask[60]) + if (changesMask[62]) { data << float(ParryPercentageFromAttribute); } - if (changesMask[61]) + if (changesMask[63]) { data << float(CritPercentage); } - if (changesMask[62]) + if (changesMask[64]) { data << float(RangedCritPercentage); } - if (changesMask[63]) + if (changesMask[65]) { data << float(OffhandCritPercentage); } - if (changesMask[64]) + if (changesMask[66]) { data << float(SpellCritPercentage); } - if (changesMask[65]) + if (changesMask[67]) { data << int32(ShieldBlock); } - if (changesMask[66]) + if (changesMask[68]) { data << float(ShieldBlockCritPercentage); } - if (changesMask[67]) + if (changesMask[69]) { data << float(Mastery); } - if (changesMask[68]) + if (changesMask[70]) { data << float(Speed); } - if (changesMask[69]) + if (changesMask[71]) { data << float(Avoidance); } } - if (changesMask[70]) + if (changesMask[72]) { - if (changesMask[71]) + if (changesMask[73]) { data << float(Sturdiness); } - if (changesMask[72]) + if (changesMask[74]) { data << int32(Versatility); } - if (changesMask[73]) + if (changesMask[75]) { data << float(VersatilityBonus); } - if (changesMask[74]) + if (changesMask[76]) { data << float(PvpPowerDamage); } - if (changesMask[75]) + if (changesMask[77]) { data << float(PvpPowerHealing); } - if (changesMask[76]) + if (changesMask[78]) { data << int32(ModHealingDonePos); } - if (changesMask[77]) + if (changesMask[79]) { data << float(ModHealingPercent); } - if (changesMask[78]) + if (changesMask[80]) { data << float(ModPeriodicHealingDonePercent); } - if (changesMask[79]) + if (changesMask[81]) { data << float(ModSpellPowerPercent); } - if (changesMask[80]) + if (changesMask[82]) { data << float(ModResiliencePercent); } - if (changesMask[81]) + if (changesMask[83]) { data << float(OverrideSpellPowerByAPPercent); } - if (changesMask[82]) + if (changesMask[84]) { data << float(OverrideAPBySpellPowerPercent); } - if (changesMask[83]) + if (changesMask[85]) { data << int32(ModTargetResistance); } - if (changesMask[84]) + if (changesMask[86]) { data << int32(ModTargetPhysicalResistance); } - if (changesMask[85]) + if (changesMask[87]) { data << uint32(LocalFlags); } - if (changesMask[86]) + if (changesMask[88]) { data << uint8(GrantableLevels); } - if (changesMask[87]) + if (changesMask[89]) { data << uint8(MultiActionBars); } - if (changesMask[88]) + if (changesMask[90]) { data << uint8(LifetimeMaxRank); } - if (changesMask[89]) + if (changesMask[91]) { data << uint8(NumRespecs); } - if (changesMask[90]) + if (changesMask[92]) { data << uint32(PvpMedals); } - if (changesMask[91]) + if (changesMask[93]) { data << uint16(TodayHonorableKills); } - if (changesMask[92]) + if (changesMask[94]) { data << uint16(YesterdayHonorableKills); } - if (changesMask[93]) + if (changesMask[95]) { data << uint32(LifetimeHonorableKills); } - if (changesMask[94]) + if (changesMask[96]) { data << int32(WatchedFactionIndex); } - if (changesMask[95]) + if (changesMask[97]) { data << int32(MaxLevel); } - if (changesMask[96]) + if (changesMask[98]) { data << int32(ScalingPlayerLevelDelta); } - if (changesMask[97]) + if (changesMask[99]) { data << int32(MaxCreatureScalingLevel); } - if (changesMask[98]) + if (changesMask[100]) { data << int32(PetSpellPower); } - if (changesMask[99]) + if (changesMask[101]) { data << float(UiHitModifier); } - if (changesMask[100]) + if (changesMask[102]) { data << float(UiSpellHitModifier); } - if (changesMask[101]) + if (changesMask[103]) { data << int32(HomeRealmTimeOffset); } } - if (changesMask[102]) + if (changesMask[104]) { - if (changesMask[103]) + if (changesMask[105]) { data << float(ModPetHaste); } - if (changesMask[104]) + if (changesMask[106]) { data << int8(JailersTowerLevelMax); } - if (changesMask[105]) + if (changesMask[107]) { data << int8(JailersTowerLevel); } - if (changesMask[106]) + if (changesMask[108]) { data << uint8(LocalRegenFlags); } - if (changesMask[107]) + if (changesMask[109]) { data << uint8(AuraVision); } - if (changesMask[108]) + if (changesMask[110]) { data << uint8(NumBackpackSlots); } - if (changesMask[109]) + if (changesMask[111]) { data << int32(OverrideSpellsID); } - if (changesMask[110]) + if (changesMask[112]) { data << uint16(LootSpecID); } - if (changesMask[111]) + if (changesMask[113]) { data << uint32(OverrideZonePVPType); } - if (changesMask[112]) + if (changesMask[114]) { data << int32(Honor); } - if (changesMask[113]) + if (changesMask[115]) { data << int32(HonorNextLevel); } - if (changesMask[114]) + if (changesMask[116]) { data << int32(PerksProgramCurrency); } - if (changesMask[115]) + if (changesMask[117]) { data << uint8(NumBankSlots); } - if (changesMask[120]) + if (changesMask[122]) { data << int32(UiChromieTimeExpansionID); } - if (changesMask[121]) + if (changesMask[123]) { data << int32(TransportServerTime); } - if (changesMask[122]) + if (changesMask[124]) { data << uint32(WeeklyRewardsPeriodSinceOrigin); } - if (changesMask[123]) + if (changesMask[125]) { data << int16(DEBUGSoulbindConduitRank); } - if (changesMask[125]) + if (changesMask[127]) { data << uint32(ActiveCombatTraitConfigID); } - if (changesMask[126]) + if (changesMask[128]) { data << int32(ItemUpgradeHighOnehandWeaponItemID); } - if (changesMask[127]) + if (changesMask[129]) { data << int32(ItemUpgradeHighFingerItemID); } - if (changesMask[128]) + if (changesMask[130]) { data << float(ItemUpgradeHighFingerWatermark); } - if (changesMask[129]) + if (changesMask[131]) { data << int32(ItemUpgradeHighTrinketItemID); } - if (changesMask[130]) + if (changesMask[132]) { data << float(ItemUpgradeHighTrinketWatermark); } - if (changesMask[131]) + if (changesMask[133]) { data << uint64(LootHistoryInstanceID); } - if (changesMask[133]) + if (changesMask[135]) { data << uint8(RequiredMountCapabilityFlags); } @@ -5359,32 +5395,32 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo data.WriteBits(PetStable.has_value(), 1); } data.FlushBits(); - if (changesMask[102]) + if (changesMask[104]) { - if (changesMask[116]) + if (changesMask[118]) { ResearchHistory->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[118]) + if (changesMask[120]) { if (QuestSession.has_value()) { QuestSession->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } } - if (changesMask[117]) + if (changesMask[119]) { data << FrozenPerksVendorItem; } - if (changesMask[119]) + if (changesMask[121]) { Field_1410->WriteUpdate(data, ignoreNestedChangesMask, owner, receiver); } - if (changesMask[124]) + if (changesMask[126]) { data << DungeonScore; } - if (changesMask[132]) + if (changesMask[134]) { if (PetStable.has_value()) { @@ -5392,151 +5428,141 @@ void ActivePlayerData::WriteUpdate(ByteBuffer& data, Mask const& changesMask, bo } } } - if (changesMask[134]) + if (changesMask[136]) { for (uint32 i = 0; i < 227; ++i) { - if (changesMask[135 + i]) + if (changesMask[137 + i]) { data << InvSlots[i]; } } } - if (changesMask[362]) - { - for (uint32 i = 0; i < 240; ++i) - { - if (changesMask[363 + i]) - { - data << uint64(ExploredZones[i]); - } - } - } - if (changesMask[603]) + if (changesMask[364]) { for (uint32 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 (uint32 i = 0; i < 7; ++i) { - if (changesMask[607 + i]) + if (changesMask[368 + i]) { data << int32(ModDamageDonePos[i]); } - if (changesMask[614 + i]) + if (changesMask[375 + i]) { data << int32(ModDamageDoneNeg[i]); } - if (changesMask[621 + i]) + if (changesMask[382 + i]) { data << float(ModDamageDonePercent[i]); } - if (changesMask[628 + i]) + if (changesMask[389 + i]) { data << float(ModHealingDonePercent[i]); } } } - if (changesMask[635]) + if (changesMask[396]) { for (uint32 i = 0; i < 3; ++i) { - if (changesMask[636 + i]) + if (changesMask[397 + i]) { data << float(WeaponDmgMultipliers[i]); } - if (changesMask[639 + i]) + if (changesMask[400 + i]) { data << float(WeaponAtkSpeedMultipliers[i]); } } } - if (changesMask[642]) + if (changesMask[403]) { for (uint32 i = 0; i < 12; ++i) { - if (changesMask[643 + i]) + if (changesMask[404 + i]) { data << uint32(BuybackPrice[i]); } - if (changesMask[655 + i]) + if (changesMask[416 + i]) { data << int64(BuybackTimestamp[i]); } } } - if (changesMask[667]) + if (changesMask[428]) { for (uint32 i = 0; i < 32; ++i) { - if (changesMask[668 + i]) + if (changesMask[429 + i]) { data << int32(CombatRatings[i]); } } } - if (changesMask[700]) + if (changesMask[461]) { for (uint32 i = 0; i < 4; ++i) { - if (changesMask[701 + i]) + if (changesMask[462 + i]) { data << uint32(NoReagentCostMask[i]); } } } - if (changesMask[705]) + if (changesMask[466]) { for (uint32 i = 0; i < 2; ++i) { - if (changesMask[706 + i]) + if (changesMask[467 + i]) { data << int32(ProfessionSkillLine[i]); } } } - if (changesMask[708]) + if (changesMask[469]) { for (uint32 i = 0; i < 5; ++i) { - if (changesMask[709 + i]) + if (changesMask[470 + i]) { data << uint32(BagSlotFlags[i]); } } } - if (changesMask[714]) + if (changesMask[475]) { for (uint32 i = 0; i < 7; ++i) { - if (changesMask[715 + i]) + if (changesMask[476 + i]) { data << uint32(BankBagSlotFlags[i]); } } } - if (changesMask[722]) + if (changesMask[483]) { - for (uint32 i = 0; i < 875; ++i) + for (uint32 i = 0; i < 950; ++i) { - if (changesMask[723 + i]) + if (changesMask[484 + i]) { data << uint64(QuestCompleted[i]); } } } - if (changesMask[1598]) + if (changesMask[1434]) { for (uint32 i = 0; i < 17; ++i) { - if (changesMask[1599 + i]) + if (changesMask[1435 + i]) { data << float(ItemUpgradeHighWatermark[i]); } @@ -5553,6 +5579,7 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(SortBagsRightToLeft); Base::ClearChangesMask(InsertItemsLeftToRight); Base::ClearChangesMask(HasPerksProgramPendingReward); + Base::ClearChangesMask(DataFlags); Base::ClearChangesMask(ResearchSites); Base::ClearChangesMask(ResearchSiteProgress); Base::ClearChangesMask(Research); @@ -5675,7 +5702,6 @@ void ActivePlayerData::ClearChangesMask() Base::ClearChangesMask(PetStable); Base::ClearChangesMask(RequiredMountCapabilityFlags); Base::ClearChangesMask(InvSlots); - Base::ClearChangesMask(ExploredZones); Base::ClearChangesMask(RestInfo); Base::ClearChangesMask(ModDamageDonePos); Base::ClearChangesMask(ModDamageDoneNeg); diff --git a/src/server/game/Entities/Object/Updates/UpdateFields.h b/src/server/game/Entities/Object/Updates/UpdateFields.h index 96eb02620b3..d3458ea8e67 100644 --- a/src/server/game/Entities/Object/Updates/UpdateFields.h +++ b/src/server/game/Entities/Object/Updates/UpdateFields.h @@ -798,10 +798,10 @@ struct CraftingOrder : public IsUpdateFieldStructureTag, public HasChangesMask<4 void ClearChangesMask(); }; -struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public HasChangesMask<3> +struct PersonalCraftingOrderCount : public IsUpdateFieldStructureTag, public HasChangesMask<2> { - UpdateField<int32, 0, 1> ProfessionID; - UpdateField<uint32, 0, 2> Count; + UpdateField<int32, -1, 0> ProfessionID; + UpdateField<uint32, -1, 1> Count; void WriteCreate(ByteBuffer& data, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, bool ignoreChangesMask, Player const* owner, Player const* receiver) const; @@ -876,7 +876,7 @@ struct Research : public IsUpdateFieldStructureTag bool operator!=(Research const& right) const { return !(*this == right); } }; -struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1616> +struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMask<1452> { UpdateField<bool, 0, 1> BackpackAutoSortDisabled; UpdateField<bool, 0, 2> BackpackSellJunkDisabled; @@ -884,9 +884,10 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas UpdateField<bool, 0, 4> SortBagsRightToLeft; UpdateField<bool, 0, 5> InsertItemsLeftToRight; UpdateField<bool, 0, 6> HasPerksProgramPendingReward; - UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 36, 37> ResearchSites; - UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 38, 39> ResearchSiteProgress; - UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 40, 41> Research; + UpdateFieldArray<DynamicUpdateFieldBase<uint64>, 8, 36, 37> DataFlags; + UpdateFieldArray<DynamicUpdateFieldBase<uint16>, 1, 38, 39> ResearchSites; + UpdateFieldArray<DynamicUpdateFieldBase<uint32>, 1, 40, 41> ResearchSiteProgress; + UpdateFieldArray<DynamicUpdateFieldBase<UF::Research>, 1, 42, 43> Research; DynamicUpdateField<uint64, 0, 7> KnownTitles; DynamicUpdateField<int32, 0, 9> DailyQuestsCompleted; DynamicUpdateField<int32, 0, 10> AvailableQuestLineXQuestIDs; @@ -915,114 +916,113 @@ struct ActivePlayerData : public IsUpdateFieldStructureTag, public HasChangesMas DynamicUpdateField<UF::CharacterRestriction, 0, 20> CharacterRestrictions; DynamicUpdateField<UF::TraitConfig, 0, 29> TraitConfigs; DynamicUpdateField<UF::CraftingOrder, 0, 30> CraftingOrders; - UpdateField<ObjectGuid, 32, 42> FarsightObject; - UpdateField<ObjectGuid, 32, 43> SummonedBattlePetGUID; - UpdateField<uint64, 32, 44> Coinage; - UpdateField<int32, 32, 45> XP; - UpdateField<int32, 32, 46> NextLevelXP; - UpdateField<int32, 32, 47> TrialXP; - UpdateField<UF::SkillInfo, 32, 48> Skill; - UpdateField<int32, 32, 49> CharacterPoints; - UpdateField<int32, 32, 50> MaxTalentTiers; - UpdateField<uint32, 32, 51> TrackCreatureMask; - UpdateField<float, 32, 52> MainhandExpertise; - UpdateField<float, 32, 53> OffhandExpertise; - UpdateField<float, 32, 54> RangedExpertise; - UpdateField<float, 32, 55> CombatRatingExpertise; - UpdateField<float, 32, 56> BlockPercentage; - UpdateField<float, 32, 57> DodgePercentage; - UpdateField<float, 32, 58> DodgePercentageFromAttribute; - UpdateField<float, 32, 59> ParryPercentage; - UpdateField<float, 32, 60> ParryPercentageFromAttribute; - UpdateField<float, 32, 61> CritPercentage; - UpdateField<float, 32, 62> RangedCritPercentage; - UpdateField<float, 32, 63> OffhandCritPercentage; - UpdateField<float, 32, 64> SpellCritPercentage; - UpdateField<int32, 32, 65> ShieldBlock; - UpdateField<float, 32, 66> ShieldBlockCritPercentage; - UpdateField<float, 32, 67> Mastery; - UpdateField<float, 32, 68> Speed; - UpdateField<float, 32, 69> Avoidance; - UpdateField<float, 70, 71> Sturdiness; - UpdateField<int32, 70, 72> Versatility; - UpdateField<float, 70, 73> VersatilityBonus; - UpdateField<float, 70, 74> PvpPowerDamage; - UpdateField<float, 70, 75> PvpPowerHealing; - UpdateField<int32, 70, 76> ModHealingDonePos; - UpdateField<float, 70, 77> ModHealingPercent; - UpdateField<float, 70, 78> ModPeriodicHealingDonePercent; - UpdateField<float, 70, 79> ModSpellPowerPercent; - UpdateField<float, 70, 80> ModResiliencePercent; - UpdateField<float, 70, 81> OverrideSpellPowerByAPPercent; - UpdateField<float, 70, 82> OverrideAPBySpellPowerPercent; - UpdateField<int32, 70, 83> ModTargetResistance; - UpdateField<int32, 70, 84> ModTargetPhysicalResistance; - UpdateField<uint32, 70, 85> LocalFlags; - UpdateField<uint8, 70, 86> GrantableLevels; - UpdateField<uint8, 70, 87> MultiActionBars; - UpdateField<uint8, 70, 88> LifetimeMaxRank; - UpdateField<uint8, 70, 89> NumRespecs; - UpdateField<uint32, 70, 90> PvpMedals; - UpdateField<uint16, 70, 91> TodayHonorableKills; - UpdateField<uint16, 70, 92> YesterdayHonorableKills; - UpdateField<uint32, 70, 93> LifetimeHonorableKills; - UpdateField<int32, 70, 94> WatchedFactionIndex; - UpdateField<int32, 70, 95> MaxLevel; - UpdateField<int32, 70, 96> ScalingPlayerLevelDelta; - UpdateField<int32, 70, 97> MaxCreatureScalingLevel; - UpdateField<int32, 70, 98> PetSpellPower; - UpdateField<float, 70, 99> UiHitModifier; - UpdateField<float, 70, 100> UiSpellHitModifier; - UpdateField<int32, 70, 101> HomeRealmTimeOffset; - UpdateField<float, 102, 103> ModPetHaste; - UpdateField<int8, 102, 104> JailersTowerLevelMax; - UpdateField<int8, 102, 105> JailersTowerLevel; - UpdateField<uint8, 102, 106> LocalRegenFlags; - UpdateField<uint8, 102, 107> AuraVision; - UpdateField<uint8, 102, 108> NumBackpackSlots; - UpdateField<int32, 102, 109> OverrideSpellsID; - UpdateField<uint16, 102, 110> LootSpecID; - UpdateField<uint32, 102, 111> OverrideZonePVPType; - UpdateField<int32, 102, 112> Honor; - UpdateField<int32, 102, 113> HonorNextLevel; - UpdateField<int32, 102, 114> PerksProgramCurrency; - UpdateField<uint8, 102, 115> NumBankSlots; - UpdateField<UF::ResearchHistory, 102, 116> ResearchHistory; - UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 102, 117> FrozenPerksVendorItem; - UpdateField<UF::ActivePlayerUnk901, 102, 119> Field_1410; - OptionalUpdateField<UF::QuestSession, 102, 118> QuestSession; - UpdateField<int32, 102, 120> UiChromieTimeExpansionID; - UpdateField<int32, 102, 121> TransportServerTime; - UpdateField<uint32, 102, 122> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin - UpdateField<int16, 102, 123> DEBUGSoulbindConduitRank; - UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 102, 124> DungeonScore; - UpdateField<uint32, 102, 125> ActiveCombatTraitConfigID; - UpdateField<int32, 102, 126> ItemUpgradeHighOnehandWeaponItemID; - UpdateField<int32, 102, 127> ItemUpgradeHighFingerItemID; - UpdateField<float, 102, 128> ItemUpgradeHighFingerWatermark; - UpdateField<int32, 102, 129> ItemUpgradeHighTrinketItemID; - UpdateField<float, 102, 130> ItemUpgradeHighTrinketWatermark; - UpdateField<uint64, 102, 131> LootHistoryInstanceID; - OptionalUpdateField<UF::StableInfo, 102, 132> PetStable; - UpdateField<uint8, 102, 133> RequiredMountCapabilityFlags; - UpdateFieldArray<ObjectGuid, 227, 134, 135> InvSlots; - UpdateFieldArray<uint64, 240, 362, 363> ExploredZones; - UpdateFieldArray<UF::RestInfo, 2, 603, 604> RestInfo; - UpdateFieldArray<int32, 7, 606, 607> ModDamageDonePos; - UpdateFieldArray<int32, 7, 606, 614> ModDamageDoneNeg; - UpdateFieldArray<float, 7, 606, 621> ModDamageDonePercent; - UpdateFieldArray<float, 7, 606, 628> ModHealingDonePercent; - UpdateFieldArray<float, 3, 635, 636> WeaponDmgMultipliers; - UpdateFieldArray<float, 3, 635, 639> WeaponAtkSpeedMultipliers; - UpdateFieldArray<uint32, 12, 642, 643> BuybackPrice; - UpdateFieldArray<int64, 12, 642, 655> BuybackTimestamp; - UpdateFieldArray<int32, 32, 667, 668> CombatRatings; - UpdateFieldArray<uint32, 4, 700, 701> NoReagentCostMask; - UpdateFieldArray<int32, 2, 705, 706> ProfessionSkillLine; - UpdateFieldArray<uint32, 5, 708, 709> BagSlotFlags; - UpdateFieldArray<uint32, 7, 714, 715> BankBagSlotFlags; - UpdateFieldArray<uint64, 875, 722, 723> QuestCompleted; - UpdateFieldArray<float, 17, 1598, 1599> ItemUpgradeHighWatermark; + UpdateField<ObjectGuid, 32, 44> FarsightObject; + UpdateField<ObjectGuid, 32, 45> SummonedBattlePetGUID; + UpdateField<uint64, 32, 46> Coinage; + UpdateField<int32, 32, 47> XP; + UpdateField<int32, 32, 48> NextLevelXP; + UpdateField<int32, 32, 49> TrialXP; + UpdateField<UF::SkillInfo, 32, 50> Skill; + UpdateField<int32, 32, 51> CharacterPoints; + UpdateField<int32, 32, 52> MaxTalentTiers; + UpdateField<uint32, 32, 53> TrackCreatureMask; + UpdateField<float, 32, 54> MainhandExpertise; + UpdateField<float, 32, 55> OffhandExpertise; + UpdateField<float, 32, 56> RangedExpertise; + UpdateField<float, 32, 57> CombatRatingExpertise; + UpdateField<float, 32, 58> BlockPercentage; + UpdateField<float, 32, 59> DodgePercentage; + UpdateField<float, 32, 60> DodgePercentageFromAttribute; + UpdateField<float, 32, 61> ParryPercentage; + UpdateField<float, 32, 62> ParryPercentageFromAttribute; + UpdateField<float, 32, 63> CritPercentage; + UpdateField<float, 32, 64> RangedCritPercentage; + UpdateField<float, 32, 65> OffhandCritPercentage; + UpdateField<float, 32, 66> SpellCritPercentage; + UpdateField<int32, 32, 67> ShieldBlock; + UpdateField<float, 32, 68> ShieldBlockCritPercentage; + UpdateField<float, 32, 69> Mastery; + UpdateField<float, 32, 70> Speed; + UpdateField<float, 32, 71> Avoidance; + UpdateField<float, 72, 73> Sturdiness; + UpdateField<int32, 72, 74> Versatility; + UpdateField<float, 72, 75> VersatilityBonus; + UpdateField<float, 72, 76> PvpPowerDamage; + UpdateField<float, 72, 77> PvpPowerHealing; + UpdateField<int32, 72, 78> ModHealingDonePos; + UpdateField<float, 72, 79> ModHealingPercent; + UpdateField<float, 72, 80> ModPeriodicHealingDonePercent; + UpdateField<float, 72, 81> ModSpellPowerPercent; + UpdateField<float, 72, 82> ModResiliencePercent; + UpdateField<float, 72, 83> OverrideSpellPowerByAPPercent; + UpdateField<float, 72, 84> OverrideAPBySpellPowerPercent; + UpdateField<int32, 72, 85> ModTargetResistance; + UpdateField<int32, 72, 86> ModTargetPhysicalResistance; + UpdateField<uint32, 72, 87> LocalFlags; + UpdateField<uint8, 72, 88> GrantableLevels; + UpdateField<uint8, 72, 89> MultiActionBars; + UpdateField<uint8, 72, 90> LifetimeMaxRank; + UpdateField<uint8, 72, 91> NumRespecs; + UpdateField<uint32, 72, 92> PvpMedals; + UpdateField<uint16, 72, 93> TodayHonorableKills; + UpdateField<uint16, 72, 94> YesterdayHonorableKills; + UpdateField<uint32, 72, 95> LifetimeHonorableKills; + UpdateField<int32, 72, 96> WatchedFactionIndex; + UpdateField<int32, 72, 97> MaxLevel; + UpdateField<int32, 72, 98> ScalingPlayerLevelDelta; + UpdateField<int32, 72, 99> MaxCreatureScalingLevel; + UpdateField<int32, 72, 100> PetSpellPower; + UpdateField<float, 72, 101> UiHitModifier; + UpdateField<float, 72, 102> UiSpellHitModifier; + UpdateField<int32, 72, 103> HomeRealmTimeOffset; + UpdateField<float, 104, 105> ModPetHaste; + UpdateField<int8, 104, 106> JailersTowerLevelMax; + UpdateField<int8, 104, 107> JailersTowerLevel; + UpdateField<uint8, 104, 108> LocalRegenFlags; + UpdateField<uint8, 104, 109> AuraVision; + UpdateField<uint8, 104, 110> NumBackpackSlots; + UpdateField<int32, 104, 111> OverrideSpellsID; + UpdateField<uint16, 104, 112> LootSpecID; + UpdateField<uint32, 104, 113> OverrideZonePVPType; + UpdateField<int32, 104, 114> Honor; + UpdateField<int32, 104, 115> HonorNextLevel; + UpdateField<int32, 104, 116> PerksProgramCurrency; + UpdateField<uint8, 104, 117> NumBankSlots; + UpdateField<UF::ResearchHistory, 104, 118> ResearchHistory; + UpdateField<WorldPackets::PerksProgram::PerksVendorItem, 104, 119> FrozenPerksVendorItem; + UpdateField<UF::ActivePlayerUnk901, 104, 121> Field_1410; + OptionalUpdateField<UF::QuestSession, 104, 120> QuestSession; + UpdateField<int32, 104, 122> UiChromieTimeExpansionID; + UpdateField<int32, 104, 123> TransportServerTime; + UpdateField<uint32, 104, 124> WeeklyRewardsPeriodSinceOrigin; // week count since Cfg_RegionsEntry::ChallengeOrigin + UpdateField<int16, 104, 125> DEBUGSoulbindConduitRank; + UpdateField<WorldPackets::MythicPlus::DungeonScoreData, 104, 126> DungeonScore; + UpdateField<uint32, 104, 127> ActiveCombatTraitConfigID; + UpdateField<int32, 104, 128> ItemUpgradeHighOnehandWeaponItemID; + UpdateField<int32, 104, 129> ItemUpgradeHighFingerItemID; + UpdateField<float, 104, 130> ItemUpgradeHighFingerWatermark; + UpdateField<int32, 104, 131> ItemUpgradeHighTrinketItemID; + UpdateField<float, 104, 132> ItemUpgradeHighTrinketWatermark; + UpdateField<uint64, 104, 133> LootHistoryInstanceID; + OptionalUpdateField<UF::StableInfo, 104, 134> PetStable; + UpdateField<uint8, 104, 135> RequiredMountCapabilityFlags; + UpdateFieldArray<ObjectGuid, 227, 136, 137> InvSlots; + UpdateFieldArray<UF::RestInfo, 2, 364, 365> RestInfo; + UpdateFieldArray<int32, 7, 367, 368> ModDamageDonePos; + UpdateFieldArray<int32, 7, 367, 375> ModDamageDoneNeg; + UpdateFieldArray<float, 7, 367, 382> ModDamageDonePercent; + UpdateFieldArray<float, 7, 367, 389> ModHealingDonePercent; + UpdateFieldArray<float, 3, 396, 397> WeaponDmgMultipliers; + UpdateFieldArray<float, 3, 396, 400> WeaponAtkSpeedMultipliers; + UpdateFieldArray<uint32, 12, 403, 404> BuybackPrice; + UpdateFieldArray<int64, 12, 403, 416> BuybackTimestamp; + UpdateFieldArray<int32, 32, 428, 429> CombatRatings; + UpdateFieldArray<uint32, 4, 461, 462> NoReagentCostMask; + UpdateFieldArray<int32, 2, 466, 467> ProfessionSkillLine; + UpdateFieldArray<uint32, 5, 469, 470> BagSlotFlags; + UpdateFieldArray<uint32, 7, 475, 476> BankBagSlotFlags; + UpdateFieldArray<uint64, 950, 483, 484> QuestCompleted; + UpdateFieldArray<float, 17, 1434, 1435> ItemUpgradeHighWatermark; void WriteCreate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; void WriteUpdate(ByteBuffer& data, EnumFlag<UpdateFieldFlag> fieldVisibilityFlags, Player const* owner, Player const* receiver) const; diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 360e1c52cef..7edd50481b8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -6360,20 +6360,12 @@ void Player::CheckAreaExploreAndOutdoor() } uint32 offset = areaEntry->AreaBit / PLAYER_EXPLORED_ZONES_BITS; - - if (offset >= PLAYER_EXPLORED_ZONES_SIZE) - { - TC_LOG_ERROR("entities.player", "Player::CheckAreaExploreAndOutdoor: Wrong area flag {} in map data for (X: {} Y: {}) point to field PLAYER_EXPLORED_ZONES_1 + {} ( {} must be < {} ).", - areaId, GetPositionX(), GetPositionY(), offset, offset, PLAYER_EXPLORED_ZONES_SIZE); - return; - } - uint64 val = UI64LIT(1) << (areaEntry->AreaBit % PLAYER_EXPLORED_ZONES_BITS); - uint64 currFields = m_activePlayerData->ExploredZones[offset]; - if (!(currFields & val)) + if (offset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size() + || !(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][offset] & val)) { - SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, offset), val); + AddExploredZones(offset, val); UpdateCriteria(CriteriaType::RevealWorldMapOverlay, GetAreaId()); @@ -6419,6 +6411,39 @@ void Player::CheckAreaExploreAndOutdoor() } } +void Player::AddExploredZones(uint32 pos, uint64 mask) +{ + SetUpdateFieldFlagValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) + .ModifyValue(pos), mask); +} + +void Player::RemoveExploredZones(uint32 pos, uint64 mask) +{ + RemoveUpdateFieldFlagValue(m_values + .ModifyValue(&Player::m_activePlayerData) + .ModifyValue(&UF::ActivePlayerData::DataFlags, PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX) + .ModifyValue(pos), mask); +} + +bool Player::HasExploredZone(uint32 areaId) const +{ + AreaTableEntry const* area = sAreaTableStore.LookupEntry(areaId); + if (!area) + return false; + + if (area->AreaBit < 0) + return false; + + size_t playerIndexOffset = size_t(area->AreaBit) / PLAYER_EXPLORED_ZONES_BITS; + if (playerIndexOffset >= m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size()) + return false; + + uint64 mask = uint64(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); + return (m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][playerIndexOffset] & mask) != 0; +} + Team Player::TeamForRace(uint8 race) { if (ChrRacesEntry const* rEntry = sChrRacesStore.LookupEntry(race)) @@ -17785,9 +17810,8 @@ bool Player::LoadFromDB(ObjectGuid guid, CharacterDatabaseQueryHolder const& hol SetXP(fields.xp); std::vector<std::string_view> exploredZones = Trinity::Tokenize(fields.exploredZones, ' ', false); - for (std::size_t i = 0; i < exploredZones.size() && i / 2 < PLAYER_EXPLORED_ZONES_SIZE; ++i) - SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, i / 2), - Trinity::StringTo<uint64>(exploredZones[i]).value_or(UI64LIT(0)) << (32 * (i % 2))); + for (std::size_t i = 0; i < exploredZones.size(); ++i) + AddExploredZones(i / 2, Trinity::StringTo<uint64>(exploredZones[i]).value_or(UI64LIT(0)) << (32 * (i % 2))); std::vector<std::string_view> knownTitles = Trinity::Tokenize(fields.knownTitles, ' ', false); for (std::size_t i = 0; i < knownTitles.size(); ++i) @@ -20037,10 +20061,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt32(index++, GetLootSpecId()); ss.str(""); - for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) + for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) { - ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' '; - ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' '; + ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; } stmt->setString(index++, ss.str()); @@ -20174,10 +20198,10 @@ void Player::SaveToDB(LoginDatabaseTransaction loginTransaction, CharacterDataba stmt->setUInt32(index++, GetLootSpecId()); ss.str(""); - for (uint32 i = 0; i < PLAYER_EXPLORED_ZONES_SIZE; ++i) + for (size_t i = 0; i < m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX].size(); ++i) { - ss << uint32(m_activePlayerData->ExploredZones[i] & 0xFFFFFFFF) << ' '; - ss << uint32((m_activePlayerData->ExploredZones[i] >> 32) & 0xFFFFFFFF) << ' '; + ss << uint32(m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] & 0xFFFFFFFF) << ' '; + ss << uint32((m_activePlayerData->DataFlags[PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX][i] >> 32) & 0xFFFFFFFF) << ' '; } stmt->setString(index++, ss.str()); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0dda39ea498..10f309f56ca 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -143,10 +143,13 @@ enum PlayerSkillsConstants PLAYER_MAX_SKILLS = UF::size<decltype(UF::SkillInfo::SkillLineID)>() }; -enum PlayerExplorationConstants +enum PlayerDataFlagConstants { - PLAYER_EXPLORED_ZONES_SIZE = UF::size<decltype(UF::ActivePlayerData::ExploredZones)>(), - PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::ActivePlayerData::ExploredZones)>() * 8 + PLAYER_EXPLORED_ZONES_BITS = UF::size_of_value_type<decltype(UF::ActivePlayerData::DataFlags)::value_type>() * 8, + + PLAYER_DATA_FLAG_EXPLORED_ZONES_INDEX = 1, + PLAYER_DATA_FLAG_CHARACTER_INDEX = 2, + PLAYER_DATA_FLAG_ACCOUNT_INDEX = 3, }; enum SpellModType : uint8 @@ -2223,8 +2226,9 @@ class TC_GAME_API Player : public Unit, public GridObject<Player> void ProcessDelayedOperations(); void CheckAreaExploreAndOutdoor(void); - void AddExploredZones(uint32 pos, uint64 mask) { SetUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); } - void RemoveExploredZones(uint32 pos, uint64 mask) { RemoveUpdateFieldFlagValue(m_values.ModifyValue(&Player::m_activePlayerData).ModifyValue(&UF::ActivePlayerData::ExploredZones, pos), mask); } + void AddExploredZones(uint32 pos, uint64 mask); + void RemoveExploredZones(uint32 pos, uint64 mask); + bool HasExploredZone(uint32 areaId) const; static Team TeamForRace(uint8 race); static TeamId TeamIdForRace(uint8 race); diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index b61f8c7e4b5..0c4ca35be92 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -4482,18 +4482,21 @@ void ObjectMgr::BuildPlayerLevelInfo(uint8 race, uint8 _class, uint8 level, Play std::vector<uint32> const* ObjectMgr::GetCreatureQuestItemList(uint32 creatureEntry, Difficulty difficulty) const { - CreatureQuestItemMap::const_iterator itr = _creatureQuestItemStore.find(std::make_pair(creatureEntry, difficulty)); - if (itr != _creatureQuestItemStore.end()) - return &itr->second; + if (std::vector<uint32> const* items = Trinity::Containers::MapGetValuePtr(_creatureQuestItemStore, { creatureEntry, difficulty })) + return items; // If there is no data for the difficulty, try to get data for the fallback difficulty - DifficultyEntry const* difficultyEntry = sDifficultyStore.LookupEntry(difficulty); - if (difficultyEntry) + if (DifficultyEntry const* difficultyEntry = sDifficultyStore.LookupEntry(difficulty)) return GetCreatureQuestItemList(creatureEntry, Difficulty(difficultyEntry->FallbackDifficultyID)); return nullptr; } +std::vector<int32> const* ObjectMgr::GetCreatureQuestCurrencyList(uint32 creatureId) const +{ + return Trinity::Containers::MapGetValuePtr(_creatureQuestCurrenciesStore, creatureId); +} + void ObjectMgr::LoadQuests() { uint32 oldMSTime = getMSTime(); @@ -10744,14 +10747,14 @@ void ObjectMgr::LoadCreatureQuestItems() { TC_LOG_ERROR("sql.sql", "Table `creature_questitem` has data for nonexistent creature (entry: {}, difficulty: {}, idx: {}), skipped", entry, difficulty, idx); continue; - }; + } ItemEntry const* db2Data = sItemStore.LookupEntry(item); if (!db2Data) { TC_LOG_ERROR("sql.sql", "Table `creature_questitem` has nonexistent item (ID: {}) in creature (entry: {}, difficulty: {}, idx: {}), skipped", item, entry, difficulty, idx); continue; - }; + } _creatureQuestItemStore[std::make_pair(entry, difficulty)].push_back(item); @@ -10762,6 +10765,48 @@ void ObjectMgr::LoadCreatureQuestItems() TC_LOG_INFO("server.loading", ">> Loaded {} creature quest items in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); } +void ObjectMgr::LoadCreatureQuestCurrencies() +{ + uint32 oldMSTime = getMSTime(); + + // 0 1 + QueryResult result = WorldDatabase.Query("SELECT CreatureId, CurrencyId FROM creature_quest_currency ORDER BY CreatureId, CurrencyId ASC"); + + if (!result) + { + TC_LOG_INFO("server.loading", ">> Loaded 0 creature quest currencies. DB table `creature_quest_currency` is empty."); + return; + } + + uint32 count = 0; + do + { + Field* fields = result->Fetch(); + + uint32 entry = fields[0].GetUInt32(); + int32 currency = fields[1].GetInt32(); + + if (!GetCreatureTemplate(entry)) + { + TC_LOG_ERROR("sql.sql", "Table `creature_quest_currency` has data for nonexistent creature (entry: {}, currency: {}), skipped", entry, currency); + continue; + } + + if (!sCurrencyTypesStore.HasRecord(currency)) + { + TC_LOG_ERROR("sql.sql", "Table `creature_quest_currency` has nonexistent currency (ID: {}) in creature (entry: {}, currency: {}), skipped", currency, entry, currency); + continue; + } + + _creatureQuestCurrenciesStore[entry].push_back(currency); + + ++count; + } + while (result->NextRow()); + + TC_LOG_INFO("server.loading", ">> Loaded {} creature quest currencies in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); +} + void ObjectMgr::InitializeQueriesData(QueryDataGroup mask) { uint32 oldMSTime = getMSTime(); diff --git a/src/server/game/Globals/ObjectMgr.h b/src/server/game/Globals/ObjectMgr.h index deae3736ff6..7a570135431 100644 --- a/src/server/game/Globals/ObjectMgr.h +++ b/src/server/game/Globals/ObjectMgr.h @@ -501,6 +501,7 @@ typedef std::unordered_map<uint8, EquipmentInfo> EquipmentInfoContainerInternal; typedef std::unordered_map<uint32, EquipmentInfoContainerInternal> EquipmentInfoContainer; typedef std::unordered_map<uint32, CreatureModelInfo> CreatureModelContainer; typedef std::unordered_map<std::pair<uint32, Difficulty>, std::vector<uint32>> CreatureQuestItemMap; +typedef std::unordered_map<uint32, std::vector<int32>> CreatureQuestCurrenciesMap; typedef std::unordered_map<uint32, GameObjectTemplate> GameObjectTemplateContainer; typedef std::unordered_map<uint32, GameObjectTemplateAddon> GameObjectTemplateAddonContainer; typedef std::unordered_map<ObjectGuid::LowType, GameObjectOverride> GameObjectOverrideContainer; @@ -1164,7 +1165,7 @@ class TC_GAME_API ObjectMgr GameObjectQuestItemMap const* GetGameObjectQuestItemMap() const { return &_gameObjectQuestItemStore; } std::vector<uint32> const* GetCreatureQuestItemList(uint32 creatureEntry, Difficulty difficulty) const; - CreatureQuestItemMap const* GetCreatureQuestItemMap() const { return &_creatureQuestItemStore; } + std::vector<int32> const* GetCreatureQuestCurrencyList(uint32 creatureId) const; uint32 GetNearestTaxiNode(float x, float y, float z, uint32 mapid, uint32 team); void GetTaxiPath(uint32 source, uint32 destination, uint32 &path, uint32 &cost); @@ -1316,6 +1317,7 @@ class TC_GAME_API ObjectMgr void CheckCreatureMovement(char const* table, uint64 id, CreatureMovementData& creatureMovement); void LoadGameObjectQuestItems(); void LoadCreatureQuestItems(); + void LoadCreatureQuestCurrencies(); void LoadTempSummons(); void LoadCreatures(); void LoadLinkedRespawn(); @@ -1892,6 +1894,7 @@ class TC_GAME_API ObjectMgr GameObjectAddonContainer _gameObjectAddonStore; GameObjectQuestItemMap _gameObjectQuestItemStore; CreatureQuestItemMap _creatureQuestItemStore; + CreatureQuestCurrenciesMap _creatureQuestCurrenciesStore; EquipmentInfoContainer _equipmentInfoStore; LinkedRespawnContainer _linkedRespawnStore; CreatureLocaleContainer _creatureLocaleStore; diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 65da654793a..767095bfd45 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1738,7 +1738,7 @@ void WorldSession::HandleAlterAppearance(WorldPackets::Character::AlterApperance Trinity::IteratorPair<UF::ChrCustomizationChoice const*> customizations = MakeChrCustomizationChoiceRange(packet.Customizations); if (packet.CustomizedChrModelID) { - ConditionalChrModelEntry const* conditionalChrModel = sConditionalChrModelStore.LookupEntry(packet.CustomizedChrModelID); + ConditionalChrModelEntry const* conditionalChrModel = DB2Manager::GetConditionalChrModel(packet.CustomizedChrModelID); if (!conditionalChrModel) return; diff --git a/src/server/game/Miscellaneous/SharedDefines.h b/src/server/game/Miscellaneous/SharedDefines.h index 8573ddc7527..58abbf8522f 100644 --- a/src/server/game/Miscellaneous/SharedDefines.h +++ b/src/server/game/Miscellaneous/SharedDefines.h @@ -7064,988 +7064,989 @@ enum class GameError : uint32 ERR_GUILD_LEADER_CHANGED_SS = 143, ERR_GUILD_DISBANDED = 144, ERR_GUILD_NOT_ALLIED = 145, - ERR_GUILD_LEADER_LEAVE = 146, - ERR_GUILD_RANKS_LOCKED = 147, - ERR_GUILD_RANK_IN_USE = 148, - ERR_GUILD_RANK_TOO_HIGH_S = 149, - ERR_GUILD_RANK_TOO_LOW_S = 150, - ERR_GUILD_NAME_EXISTS_S = 151, - ERR_GUILD_WITHDRAW_LIMIT = 152, - ERR_GUILD_NOT_ENOUGH_MONEY = 153, - ERR_GUILD_TOO_MUCH_MONEY = 154, - ERR_GUILD_BANK_CONJURED_ITEM = 155, - ERR_GUILD_BANK_EQUIPPED_ITEM = 156, - ERR_GUILD_BANK_BOUND_ITEM = 157, - ERR_GUILD_BANK_QUEST_ITEM = 158, - ERR_GUILD_BANK_WRAPPED_ITEM = 159, - ERR_GUILD_BANK_FULL = 160, - ERR_GUILD_BANK_WRONG_TAB = 161, - ERR_NO_GUILD_CHARTER = 162, - ERR_OUT_OF_RANGE = 163, - ERR_PLAYER_DEAD = 164, - ERR_CLIENT_LOCKED_OUT = 165, - ERR_CLIENT_ON_TRANSPORT = 166, - ERR_KILLED_BY_S = 167, - ERR_LOOT_LOCKED = 168, - ERR_LOOT_TOO_FAR = 169, - ERR_LOOT_DIDNT_KILL = 170, - ERR_LOOT_BAD_FACING = 171, - ERR_LOOT_NOTSTANDING = 172, - ERR_LOOT_STUNNED = 173, - ERR_LOOT_NO_UI = 174, - ERR_LOOT_WHILE_INVULNERABLE = 175, - ERR_NO_LOOT = 176, - ERR_QUEST_ACCEPTED_S = 177, - ERR_QUEST_COMPLETE_S = 178, - ERR_QUEST_FAILED_S = 179, - ERR_QUEST_FAILED_BAG_FULL_S = 180, - ERR_QUEST_FAILED_MAX_COUNT_S = 181, - ERR_QUEST_FAILED_LOW_LEVEL = 182, - ERR_QUEST_FAILED_MISSING_ITEMS = 183, - ERR_QUEST_FAILED_WRONG_RACE = 184, - ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 185, - ERR_QUEST_FAILED_EXPANSION = 186, - ERR_QUEST_ONLY_ONE_TIMED = 187, - ERR_QUEST_NEED_PREREQS = 188, - ERR_QUEST_NEED_PREREQS_CUSTOM = 189, - ERR_QUEST_ALREADY_ON = 190, - ERR_QUEST_ALREADY_DONE = 191, - ERR_QUEST_ALREADY_DONE_DAILY = 192, - ERR_QUEST_HAS_IN_PROGRESS = 193, - ERR_QUEST_REWARD_EXP_I = 194, - ERR_QUEST_REWARD_MONEY_S = 195, - ERR_QUEST_MUST_CHOOSE = 196, - ERR_QUEST_LOG_FULL = 197, - ERR_COMBAT_DAMAGE_SSI = 198, - ERR_INSPECT_S = 199, - ERR_CANT_USE_ITEM = 200, - ERR_CANT_USE_ITEM_IN_ARENA = 201, - ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 202, - ERR_MUST_EQUIP_ITEM = 203, - ERR_PASSIVE_ABILITY = 204, - ERR_2HSKILLNOTFOUND = 205, - ERR_NO_ATTACK_TARGET = 206, - ERR_INVALID_ATTACK_TARGET = 207, - ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 208, - ERR_ATTACK_STUNNED = 209, - ERR_ATTACK_PACIFIED = 210, - ERR_ATTACK_MOUNTED = 211, - ERR_ATTACK_FLEEING = 212, - ERR_ATTACK_CONFUSED = 213, - ERR_ATTACK_CHARMED = 214, - ERR_ATTACK_DEAD = 215, - ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 216, - ERR_ATTACK_CHANNEL = 217, - ERR_TAXISAMENODE = 218, - ERR_TAXINOSUCHPATH = 219, - ERR_TAXIUNSPECIFIEDSERVERERROR = 220, - ERR_TAXINOTENOUGHMONEY = 221, - ERR_TAXITOOFARAWAY = 222, - ERR_TAXINOVENDORNEARBY = 223, - ERR_TAXINOTVISITED = 224, - ERR_TAXIPLAYERBUSY = 225, - ERR_TAXIPLAYERALREADYMOUNTED = 226, - ERR_TAXIPLAYERSHAPESHIFTED = 227, - ERR_TAXIPLAYERMOVING = 228, - ERR_TAXINOPATHS = 229, - ERR_TAXINOTELIGIBLE = 230, - ERR_TAXINOTSTANDING = 231, - ERR_TAXIINCOMBAT = 232, - ERR_NO_REPLY_TARGET = 233, - ERR_GENERIC_NO_TARGET = 234, - ERR_INITIATE_TRADE_S = 235, - ERR_TRADE_REQUEST_S = 236, - ERR_TRADE_BLOCKED_S = 237, - ERR_TRADE_TARGET_DEAD = 238, - ERR_TRADE_TOO_FAR = 239, - ERR_TRADE_CANCELLED = 240, - ERR_TRADE_COMPLETE = 241, - ERR_TRADE_BAG_FULL = 242, - ERR_TRADE_TARGET_BAG_FULL = 243, - ERR_TRADE_MAX_COUNT_EXCEEDED = 244, - ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 245, - ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 246, - ERR_ALREADY_TRADING = 247, - ERR_MOUNT_INVALIDMOUNTEE = 248, - ERR_MOUNT_TOOFARAWAY = 249, - ERR_MOUNT_ALREADYMOUNTED = 250, - ERR_MOUNT_NOTMOUNTABLE = 251, - ERR_MOUNT_NOTYOURPET = 252, - ERR_MOUNT_OTHER = 253, - ERR_MOUNT_LOOTING = 254, - ERR_MOUNT_RACECANTMOUNT = 255, - ERR_MOUNT_SHAPESHIFTED = 256, - ERR_MOUNT_NO_FAVORITES = 257, - ERR_MOUNT_NO_MOUNTS = 258, - ERR_DISMOUNT_NOPET = 259, - ERR_DISMOUNT_NOTMOUNTED = 260, - ERR_DISMOUNT_NOTYOURPET = 261, - ERR_SPELL_FAILED_TOTEMS = 262, - ERR_SPELL_FAILED_REAGENTS = 263, - ERR_SPELL_FAILED_REAGENTS_GENERIC = 264, - ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 265, - ERR_CANT_TRADE_GOLD = 266, - ERR_SPELL_FAILED_EQUIPPED_ITEM = 267, - ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 268, - ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 269, - ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 270, - ERR_BADATTACKFACING = 271, - ERR_BADATTACKPOS = 272, - ERR_CHEST_IN_USE = 273, - ERR_USE_CANT_OPEN = 274, - ERR_USE_LOCKED = 275, - ERR_DOOR_LOCKED = 276, - ERR_BUTTON_LOCKED = 277, - ERR_USE_LOCKED_WITH_ITEM_S = 278, - ERR_USE_LOCKED_WITH_SPELL_S = 279, - ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 280, - ERR_USE_TOO_FAR = 281, - ERR_USE_BAD_ANGLE = 282, - ERR_USE_OBJECT_MOVING = 283, - ERR_USE_SPELL_FOCUS = 284, - ERR_USE_DESTROYED = 285, - ERR_SET_LOOT_FREEFORALL = 286, - ERR_SET_LOOT_ROUNDROBIN = 287, - ERR_SET_LOOT_MASTER = 288, - ERR_SET_LOOT_GROUP = 289, - ERR_SET_LOOT_THRESHOLD_S = 290, - ERR_NEW_LOOT_MASTER_S = 291, - ERR_SPECIFY_MASTER_LOOTER = 292, - ERR_LOOT_SPEC_CHANGED_S = 293, - ERR_TAME_FAILED = 294, - ERR_CHAT_WHILE_DEAD = 295, - ERR_CHAT_PLAYER_NOT_FOUND_S = 296, - ERR_NEWTAXIPATH = 297, - ERR_NO_PET = 298, - ERR_NOTYOURPET = 299, - ERR_PET_NOT_RENAMEABLE = 300, - ERR_QUEST_OBJECTIVE_COMPLETE_S = 301, - ERR_QUEST_UNKNOWN_COMPLETE = 302, - ERR_QUEST_ADD_KILL_SII = 303, - ERR_QUEST_ADD_FOUND_SII = 304, - ERR_QUEST_ADD_ITEM_SII = 305, - ERR_QUEST_ADD_PLAYER_KILL_SII = 306, - ERR_CANNOTCREATEDIRECTORY = 307, - ERR_CANNOTCREATEFILE = 308, - ERR_PLAYER_WRONG_FACTION = 309, - ERR_PLAYER_IS_NEUTRAL = 310, - ERR_BANKSLOT_FAILED_TOO_MANY = 311, - ERR_BANKSLOT_INSUFFICIENT_FUNDS = 312, - ERR_BANKSLOT_NOTBANKER = 313, - ERR_FRIEND_DB_ERROR = 314, - ERR_FRIEND_LIST_FULL = 315, - ERR_FRIEND_ADDED_S = 316, - ERR_BATTLETAG_FRIEND_ADDED_S = 317, - ERR_FRIEND_ONLINE_SS = 318, - ERR_FRIEND_OFFLINE_S = 319, - ERR_FRIEND_NOT_FOUND = 320, - ERR_FRIEND_WRONG_FACTION = 321, - ERR_FRIEND_REMOVED_S = 322, - ERR_BATTLETAG_FRIEND_REMOVED_S = 323, - ERR_FRIEND_ERROR = 324, - ERR_FRIEND_ALREADY_S = 325, - ERR_FRIEND_SELF = 326, - ERR_FRIEND_DELETED = 327, - ERR_IGNORE_FULL = 328, - ERR_IGNORE_SELF = 329, - ERR_IGNORE_NOT_FOUND = 330, - ERR_IGNORE_ALREADY_S = 331, - ERR_IGNORE_ADDED_S = 332, - ERR_IGNORE_REMOVED_S = 333, - ERR_IGNORE_AMBIGUOUS = 334, - ERR_IGNORE_DELETED = 335, - ERR_ONLY_ONE_BOLT = 336, - ERR_ONLY_ONE_AMMO = 337, - ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 338, - ERR_WRONG_BAG_TYPE_SUBCLASS = 339, - ERR_CANT_WRAP_STACKABLE = 340, - ERR_CANT_WRAP_EQUIPPED = 341, - ERR_CANT_WRAP_WRAPPED = 342, - ERR_CANT_WRAP_BOUND = 343, - ERR_CANT_WRAP_UNIQUE = 344, - ERR_CANT_WRAP_BAGS = 345, - ERR_OUT_OF_MANA = 346, - ERR_OUT_OF_RAGE = 347, - ERR_OUT_OF_FOCUS = 348, - ERR_OUT_OF_ENERGY = 349, - ERR_OUT_OF_CHI = 350, - ERR_OUT_OF_HEALTH = 351, - ERR_OUT_OF_RUNES = 352, - ERR_OUT_OF_RUNIC_POWER = 353, - ERR_OUT_OF_SOUL_SHARDS = 354, - ERR_OUT_OF_LUNAR_POWER = 355, - ERR_OUT_OF_HOLY_POWER = 356, - ERR_OUT_OF_MAELSTROM = 357, - ERR_OUT_OF_COMBO_POINTS = 358, - ERR_OUT_OF_INSANITY = 359, - ERR_OUT_OF_ESSENCE = 360, - ERR_OUT_OF_ARCANE_CHARGES = 361, - ERR_OUT_OF_FURY = 362, - ERR_OUT_OF_PAIN = 363, - ERR_OUT_OF_POWER_DISPLAY = 364, - ERR_LOOT_GONE = 365, - ERR_MOUNT_FORCEDDISMOUNT = 366, - ERR_AUTOFOLLOW_TOO_FAR = 367, - ERR_UNIT_NOT_FOUND = 368, - ERR_INVALID_FOLLOW_TARGET = 369, - ERR_INVALID_FOLLOW_PVP_COMBAT = 370, - ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 371, - ERR_INVALID_INSPECT_TARGET = 372, - ERR_GUILDEMBLEM_SUCCESS = 373, - ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 374, - ERR_GUILDEMBLEM_NOGUILD = 375, - ERR_GUILDEMBLEM_NOTGUILDMASTER = 376, - ERR_GUILDEMBLEM_NOTENOUGHMONEY = 377, - ERR_GUILDEMBLEM_INVALIDVENDOR = 378, - ERR_EMBLEMERROR_NOTABARDGEOSET = 379, - ERR_SPELL_OUT_OF_RANGE = 380, - ERR_COMMAND_NEEDS_TARGET = 381, - ERR_NOAMMO_S = 382, - ERR_TOOBUSYTOFOLLOW = 383, - ERR_DUEL_REQUESTED = 384, - ERR_DUEL_CANCELLED = 385, - ERR_DEATHBINDALREADYBOUND = 386, - ERR_DEATHBIND_SUCCESS_S = 387, - ERR_NOEMOTEWHILERUNNING = 388, - ERR_ZONE_EXPLORED = 389, - ERR_ZONE_EXPLORED_XP = 390, - ERR_INVALID_ITEM_TARGET = 391, - ERR_INVALID_QUEST_TARGET = 392, - ERR_IGNORING_YOU_S = 393, - ERR_FISH_NOT_HOOKED = 394, - ERR_FISH_ESCAPED = 395, - ERR_SPELL_FAILED_NOTUNSHEATHED = 396, - ERR_PETITION_OFFERED_S = 397, - ERR_PETITION_SIGNED = 398, - ERR_PETITION_SIGNED_S = 399, - ERR_PETITION_DECLINED_S = 400, - ERR_PETITION_ALREADY_SIGNED = 401, - ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 402, - ERR_PETITION_ALREADY_SIGNED_OTHER = 403, - ERR_PETITION_IN_GUILD = 404, - ERR_PETITION_CREATOR = 405, - ERR_PETITION_NOT_ENOUGH_SIGNATURES = 406, - ERR_PETITION_NOT_SAME_SERVER = 407, - ERR_PETITION_FULL = 408, - ERR_PETITION_ALREADY_SIGNED_BY_S = 409, - ERR_GUILD_NAME_INVALID = 410, - ERR_SPELL_UNLEARNED_S = 411, - ERR_PET_SPELL_ROOTED = 412, - ERR_PET_SPELL_AFFECTING_COMBAT = 413, - ERR_PET_SPELL_OUT_OF_RANGE = 414, - ERR_PET_SPELL_NOT_BEHIND = 415, - ERR_PET_SPELL_TARGETS_DEAD = 416, - ERR_PET_SPELL_DEAD = 417, - ERR_PET_SPELL_NOPATH = 418, - ERR_ITEM_CANT_BE_DESTROYED = 419, - ERR_TICKET_ALREADY_EXISTS = 420, - ERR_TICKET_CREATE_ERROR = 421, - ERR_TICKET_UPDATE_ERROR = 422, - ERR_TICKET_DB_ERROR = 423, - ERR_TICKET_NO_TEXT = 424, - ERR_TICKET_TEXT_TOO_LONG = 425, - ERR_OBJECT_IS_BUSY = 426, - ERR_EXHAUSTION_WELLRESTED = 427, - ERR_EXHAUSTION_RESTED = 428, - ERR_EXHAUSTION_NORMAL = 429, - ERR_EXHAUSTION_TIRED = 430, - ERR_EXHAUSTION_EXHAUSTED = 431, - ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 432, - ERR_CANT_INTERACT_SHAPESHIFTED = 433, - ERR_REALM_NOT_FOUND = 434, - ERR_MAIL_QUEST_ITEM = 435, - ERR_MAIL_BOUND_ITEM = 436, - ERR_MAIL_CONJURED_ITEM = 437, - ERR_MAIL_BAG = 438, - ERR_MAIL_TO_SELF = 439, - ERR_MAIL_TARGET_NOT_FOUND = 440, - ERR_MAIL_DATABASE_ERROR = 441, - ERR_MAIL_DELETE_ITEM_ERROR = 442, - ERR_MAIL_WRAPPED_COD = 443, - ERR_MAIL_CANT_SEND_REALM = 444, - ERR_MAIL_TEMP_RETURN_OUTAGE = 445, - ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 446, - ERR_MAIL_SENT = 447, - ERR_MAIL_TARGET_IS_TRIAL = 448, - ERR_NOT_HAPPY_ENOUGH = 449, - ERR_USE_CANT_IMMUNE = 450, - ERR_CANT_BE_DISENCHANTED = 451, - ERR_CANT_USE_DISARMED = 452, - ERR_AUCTION_DATABASE_ERROR = 453, - ERR_AUCTION_HIGHER_BID = 454, - ERR_AUCTION_ALREADY_BID = 455, - ERR_AUCTION_OUTBID_S = 456, - ERR_AUCTION_WON_S = 457, - ERR_AUCTION_REMOVED_S = 458, - ERR_AUCTION_BID_PLACED = 459, - ERR_LOGOUT_FAILED = 460, - ERR_QUEST_PUSH_SUCCESS_S = 461, - ERR_QUEST_PUSH_INVALID_S = 462, - ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 463, - ERR_QUEST_PUSH_ACCEPTED_S = 464, - ERR_QUEST_PUSH_DECLINED_S = 465, - ERR_QUEST_PUSH_BUSY_S = 466, - ERR_QUEST_PUSH_DEAD_S = 467, - ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 468, - ERR_QUEST_PUSH_LOG_FULL_S = 469, - ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 470, - ERR_QUEST_PUSH_ONQUEST_S = 471, - ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 472, - ERR_QUEST_PUSH_ALREADY_DONE_S = 473, - ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 474, - ERR_QUEST_PUSH_NOT_DAILY_S = 475, - ERR_QUEST_PUSH_TIMER_EXPIRED_S = 476, - ERR_QUEST_PUSH_NOT_IN_PARTY_S = 477, - ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 478, - ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 479, - ERR_QUEST_PUSH_NOT_ALLOWED_S = 480, - ERR_QUEST_PUSH_PREREQUISITE_S = 481, - ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 482, - ERR_QUEST_PUSH_LOW_LEVEL_S = 483, - ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 484, - ERR_QUEST_PUSH_HIGH_LEVEL_S = 485, - ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 486, - ERR_QUEST_PUSH_CLASS_S = 487, - ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 488, - ERR_QUEST_PUSH_RACE_S = 489, - ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 490, - ERR_QUEST_PUSH_LOW_FACTION_S = 491, - ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 492, - ERR_QUEST_PUSH_EXPANSION_S = 493, - ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 494, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 495, - ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 496, - ERR_QUEST_PUSH_WRONG_COVENANT_S = 497, - ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 498, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 499, - ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 500, - ERR_QUEST_PUSH_WRONG_FACTION_S = 501, - ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 502, - ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 503, - ERR_RAID_GROUP_LOWLEVEL = 504, - ERR_RAID_GROUP_ONLY = 505, - ERR_RAID_GROUP_FULL = 506, - ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 507, - ERR_CORPSE_IS_NOT_IN_INSTANCE = 508, - ERR_PVP_KILL_HONORABLE = 509, - ERR_PVP_KILL_DISHONORABLE = 510, - ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 511, - ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 512, - ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 513, - ERR_AUTOLOOT_MONEY_S = 514, - ERR_GENERIC_STUNNED = 515, - ERR_GENERIC_THROTTLE = 516, - ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 517, - ERR_TARGET_STUNNED = 518, - ERR_MUST_REPAIR_DURABILITY = 519, - ERR_RAID_YOU_JOINED = 520, - ERR_RAID_YOU_LEFT = 521, - ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 522, - ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 523, - ERR_RAID_MEMBER_ADDED_S = 524, - ERR_RAID_MEMBER_REMOVED_S = 525, - ERR_INSTANCE_GROUP_ADDED_S = 526, - ERR_INSTANCE_GROUP_REMOVED_S = 527, - ERR_CLICK_ON_ITEM_TO_FEED = 528, - ERR_TOO_MANY_CHAT_CHANNELS = 529, - ERR_LOOT_ROLL_PENDING = 530, - ERR_LOOT_PLAYER_NOT_FOUND = 531, - ERR_NOT_IN_RAID = 532, - ERR_LOGGING_OUT = 533, - ERR_TARGET_LOGGING_OUT = 534, - ERR_NOT_WHILE_MOUNTED = 535, - ERR_NOT_WHILE_SHAPESHIFTED = 536, - ERR_NOT_IN_COMBAT = 537, - ERR_NOT_WHILE_DISARMED = 538, - ERR_PET_BROKEN = 539, - ERR_TALENT_WIPE_ERROR = 540, - ERR_SPEC_WIPE_ERROR = 541, - ERR_GLYPH_WIPE_ERROR = 542, - ERR_PET_SPEC_WIPE_ERROR = 543, - ERR_FEIGN_DEATH_RESISTED = 544, - ERR_MEETING_STONE_IN_QUEUE_S = 545, - ERR_MEETING_STONE_LEFT_QUEUE_S = 546, - ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 547, - ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 548, - ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 549, - ERR_MEETING_STONE_SUCCESS = 550, - ERR_MEETING_STONE_IN_PROGRESS = 551, - ERR_MEETING_STONE_MEMBER_ADDED_S = 552, - ERR_MEETING_STONE_GROUP_FULL = 553, - ERR_MEETING_STONE_NOT_LEADER = 554, - ERR_MEETING_STONE_INVALID_LEVEL = 555, - ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 556, - ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 557, - ERR_MEETING_STONE_MUST_BE_LEADER = 558, - ERR_MEETING_STONE_NO_RAID_GROUP = 559, - ERR_MEETING_STONE_NEED_PARTY = 560, - ERR_MEETING_STONE_NOT_FOUND = 561, - ERR_MEETING_STONE_TARGET_IN_VEHICLE = 562, - ERR_GUILDEMBLEM_SAME = 563, - ERR_EQUIP_TRADE_ITEM = 564, - ERR_PVP_TOGGLE_ON = 565, - ERR_PVP_TOGGLE_OFF = 566, - ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 567, - ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 568, - ERR_GROUP_JOIN_BATTLEGROUND_S = 569, - ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 570, - ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 571, - ERR_SOLO_JOIN_BATTLEGROUND_S = 572, - ERR_JOIN_SINGLE_SCENARIO_S = 573, - ERR_BATTLEGROUND_TOO_MANY_QUEUES = 574, - ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 575, - ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 576, - ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 577, - ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 578, - ERR_ALREADY_IN_ARENA_TEAM_S = 579, - ERR_INVALID_PROMOTION_CODE = 580, - ERR_BG_PLAYER_JOINED_SS = 581, - ERR_BG_PLAYER_LEFT_S = 582, - ERR_RESTRICTED_ACCOUNT = 583, - ERR_RESTRICTED_ACCOUNT_TRIAL = 584, - ERR_PLAY_TIME_EXCEEDED = 585, - ERR_APPROACHING_PARTIAL_PLAY_TIME = 586, - ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 587, - ERR_APPROACHING_NO_PLAY_TIME = 588, - ERR_APPROACHING_NO_PLAY_TIME_2 = 589, - ERR_UNHEALTHY_TIME = 590, - ERR_CHAT_RESTRICTED_TRIAL = 591, - ERR_CHAT_THROTTLED = 592, - ERR_MAIL_REACHED_CAP = 593, - ERR_INVALID_RAID_TARGET = 594, - ERR_RAID_LEADER_READY_CHECK_START_S = 595, - ERR_READY_CHECK_IN_PROGRESS = 596, - ERR_READY_CHECK_THROTTLED = 597, - ERR_DUNGEON_DIFFICULTY_FAILED = 598, - ERR_DUNGEON_DIFFICULTY_CHANGED_S = 599, - ERR_TRADE_WRONG_REALM = 600, - ERR_TRADE_NOT_ON_TAPLIST = 601, - ERR_CHAT_PLAYER_AMBIGUOUS_S = 602, - ERR_LOOT_CANT_LOOT_THAT_NOW = 603, - ERR_LOOT_MASTER_INV_FULL = 604, - ERR_LOOT_MASTER_UNIQUE_ITEM = 605, - ERR_LOOT_MASTER_OTHER = 606, - ERR_FILTERING_YOU_S = 607, - ERR_USE_PREVENTED_BY_MECHANIC_S = 608, - ERR_ITEM_UNIQUE_EQUIPPABLE = 609, - ERR_LFG_LEADER_IS_LFM_S = 610, - ERR_LFG_PENDING = 611, - ERR_CANT_SPEAK_LANGAGE = 612, - ERR_VENDOR_MISSING_TURNINS = 613, - ERR_BATTLEGROUND_NOT_IN_TEAM = 614, - ERR_NOT_IN_BATTLEGROUND = 615, - ERR_NOT_ENOUGH_HONOR_POINTS = 616, - ERR_NOT_ENOUGH_ARENA_POINTS = 617, - ERR_SOCKETING_REQUIRES_META_GEM = 618, - ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 619, - ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 620, - ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 621, - ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 622, - ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 623, - ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 624, - ERR_ITEM_MAX_COUNT_SOCKETED = 625, - ERR_SYSTEM_DISABLED = 626, - ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 627, - ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 628, - ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 629, - ERR_USER_SQUELCHED = 630, - ERR_ACCOUNT_SILENCED = 631, - ERR_PARTY_MEMBER_SILENCED = 632, - ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 633, - ERR_TOO_MUCH_GOLD = 634, - ERR_NOT_BARBER_SITTING = 635, - ERR_QUEST_FAILED_CAIS = 636, - ERR_INVITE_RESTRICTED_TRIAL = 637, - ERR_VOICE_IGNORE_FULL = 638, - ERR_VOICE_IGNORE_SELF = 639, - ERR_VOICE_IGNORE_NOT_FOUND = 640, - ERR_VOICE_IGNORE_ALREADY_S = 641, - ERR_VOICE_IGNORE_ADDED_S = 642, - ERR_VOICE_IGNORE_REMOVED_S = 643, - ERR_VOICE_IGNORE_AMBIGUOUS = 644, - ERR_VOICE_IGNORE_DELETED = 645, - ERR_UNKNOWN_MACRO_OPTION_S = 646, - ERR_NOT_DURING_ARENA_MATCH = 647, - ERR_NOT_IN_RATED_BATTLEGROUND = 648, - ERR_PLAYER_SILENCED = 649, - ERR_PLAYER_UNSILENCED = 650, - ERR_COMSAT_DISCONNECT = 651, - ERR_COMSAT_RECONNECT_ATTEMPT = 652, - ERR_COMSAT_CONNECT_FAIL = 653, - ERR_MAIL_INVALID_ATTACHMENT_SLOT = 654, - ERR_MAIL_TOO_MANY_ATTACHMENTS = 655, - ERR_MAIL_INVALID_ATTACHMENT = 656, - ERR_MAIL_ATTACHMENT_EXPIRED = 657, - ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 658, - ERR_PROFANE_CHAT_NAME = 659, - ERR_PLAYER_SILENCED_ECHO = 660, - ERR_PLAYER_UNSILENCED_ECHO = 661, - ERR_LOOT_CANT_LOOT_THAT = 662, - ERR_ARENA_EXPIRED_CAIS = 663, - ERR_GROUP_ACTION_THROTTLED = 664, - ERR_ALREADY_PICKPOCKETED = 665, - ERR_NAME_INVALID = 666, - ERR_NAME_NO_NAME = 667, - ERR_NAME_TOO_SHORT = 668, - ERR_NAME_TOO_LONG = 669, - ERR_NAME_MIXED_LANGUAGES = 670, - ERR_NAME_PROFANE = 671, - ERR_NAME_RESERVED = 672, - ERR_NAME_THREE_CONSECUTIVE = 673, - ERR_NAME_INVALID_SPACE = 674, - ERR_NAME_CONSECUTIVE_SPACES = 675, - ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 676, - ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 677, - ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 678, - ERR_RECRUIT_A_FRIEND_NOT_LINKED = 679, - ERR_RECRUIT_A_FRIEND_NOT_NOW = 680, - ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 681, - ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 682, - ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 683, - ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 684, - ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 685, - ERR_NOT_SAME_ACCOUNT = 686, - ERR_BAD_ON_USE_ENCHANT = 687, - ERR_TRADE_SELF = 688, - ERR_TOO_MANY_SOCKETS = 689, - ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 690, - ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 691, - ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 692, - ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 693, - ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 694, - ERR_ITEM_INVENTORY_FULL_SATCHEL = 695, - ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 696, - ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 697, - ERR_PURCHASE_LEVEL_TOO_LOW = 698, - ERR_GROUP_SWAP_FAILED = 699, - ERR_INVITE_IN_COMBAT = 700, - ERR_INVALID_GLYPH_SLOT = 701, - ERR_GENERIC_NO_VALID_TARGETS = 702, - ERR_CALENDAR_EVENT_ALERT_S = 703, - ERR_PET_LEARN_SPELL_S = 704, - ERR_PET_LEARN_ABILITY_S = 705, - ERR_PET_SPELL_UNLEARNED_S = 706, - ERR_INVITE_UNKNOWN_REALM = 707, - ERR_INVITE_NO_PARTY_SERVER = 708, - ERR_INVITE_PARTY_BUSY = 709, - ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 710, - ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 711, - ERR_PARTY_TARGET_AMBIGUOUS = 712, - ERR_PARTY_LFG_INVITE_RAID_LOCKED = 713, - ERR_PARTY_LFG_BOOT_LIMIT = 714, - ERR_PARTY_LFG_BOOT_COOLDOWN_S = 715, - ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 716, - ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 717, - ERR_PARTY_LFG_BOOT_IN_PROGRESS = 718, - ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 719, - ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 720, - ERR_PARTY_LFG_BOOT_VOTE_FAILED = 721, - ERR_PARTY_LFG_BOOT_IN_COMBAT = 722, - ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 723, - ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 724, - ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 725, - ERR_PARTY_PRIVATE_GROUP_ONLY = 726, - ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 727, - ERR_RAID_DISALLOWED_BY_LEVEL = 728, - ERR_RAID_DISALLOWED_BY_CROSS_REALM = 729, - ERR_PARTY_ROLE_NOT_AVAILABLE = 730, - ERR_JOIN_LFG_OBJECT_FAILED = 731, - ERR_LFG_REMOVED_LEVELUP = 732, - ERR_LFG_REMOVED_XP_TOGGLE = 733, - ERR_LFG_REMOVED_FACTION_CHANGE = 734, - ERR_BATTLEGROUND_INFO_THROTTLED = 735, - ERR_BATTLEGROUND_ALREADY_IN = 736, - ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 737, - ERR_ARENA_TEAM_PERMISSIONS = 738, - ERR_NOT_WHILE_FALLING = 739, - ERR_NOT_WHILE_MOVING = 740, - ERR_NOT_WHILE_FATIGUED = 741, - ERR_MAX_SOCKETS = 742, - ERR_MULTI_CAST_ACTION_TOTEM_S = 743, - ERR_BATTLEGROUND_JOIN_LEVELUP = 744, - ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 745, - ERR_BATTLEGROUND_JOIN_XP_GAIN = 746, - ERR_BATTLEGROUND_JOIN_MERCENARY = 747, - ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 748, - ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 749, - ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 750, - ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 751, - ERR_RAID_DIFFICULTY_FAILED = 752, - ERR_RAID_DIFFICULTY_CHANGED_S = 753, - ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 754, - ERR_RAID_LOCKOUT_CHANGED_S = 755, - ERR_RAID_CONVERTED_TO_PARTY = 756, - ERR_PARTY_CONVERTED_TO_RAID = 757, - ERR_PLAYER_DIFFICULTY_CHANGED_S = 758, - ERR_GMRESPONSE_DB_ERROR = 759, - ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 760, - ERR_ARENA_JOIN_RANGE_INDEX = 761, - ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 762, - ERR_BATTLEGROUND_JOIN_FAILED = 763, - ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 764, - ERR_BATTLEGROUND_JOIN_RESPEC = 765, - ERR_BATTLEGROUND_INVITATION_DECLINED = 766, - ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 767, - ERR_BATTLEGROUND_JOIN_TIMED_OUT = 768, - ERR_BATTLEGROUND_DUPE_QUEUE = 769, - ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 770, - ERR_IN_BATTLEGROUND_RESPEC = 771, - ERR_MAIL_LIMITED_DURATION_ITEM = 772, - ERR_YELL_RESTRICTED_TRIAL = 773, - ERR_CHAT_RAID_RESTRICTED_TRIAL = 774, - ERR_LFG_ROLE_CHECK_FAILED = 775, - ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 776, - ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 777, - ERR_LFG_READY_CHECK_FAILED = 778, - ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 779, - ERR_LFG_GROUP_FULL = 780, - ERR_LFG_NO_LFG_OBJECT = 781, - ERR_LFG_NO_SLOTS_PLAYER = 782, - ERR_LFG_NO_SLOTS_PARTY = 783, - ERR_LFG_NO_SPEC = 784, - ERR_LFG_MISMATCHED_SLOTS = 785, - ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 786, - ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 787, - ERR_LFG_MEMBERS_NOT_PRESENT = 788, - ERR_LFG_GET_INFO_TIMEOUT = 789, - ERR_LFG_INVALID_SLOT = 790, - ERR_LFG_DESERTER_PLAYER = 791, - ERR_LFG_DESERTER_PARTY = 792, - ERR_LFG_DEAD = 793, - ERR_LFG_RANDOM_COOLDOWN_PLAYER = 794, - ERR_LFG_RANDOM_COOLDOWN_PARTY = 795, - ERR_LFG_TOO_MANY_MEMBERS = 796, - ERR_LFG_TOO_FEW_MEMBERS = 797, - ERR_LFG_PROPOSAL_FAILED = 798, - ERR_LFG_PROPOSAL_DECLINED_SELF = 799, - ERR_LFG_PROPOSAL_DECLINED_PARTY = 800, - ERR_LFG_NO_SLOTS_SELECTED = 801, - ERR_LFG_NO_ROLES_SELECTED = 802, - ERR_LFG_ROLE_CHECK_INITIATED = 803, - ERR_LFG_READY_CHECK_INITIATED = 804, - ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 805, - ERR_LFG_PLAYER_DECLINED_READY_CHECK = 806, - ERR_LFG_JOINED_QUEUE = 807, - ERR_LFG_JOINED_FLEX_QUEUE = 808, - ERR_LFG_JOINED_RF_QUEUE = 809, - ERR_LFG_JOINED_SCENARIO_QUEUE = 810, - ERR_LFG_JOINED_WORLD_PVP_QUEUE = 811, - ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 812, - ERR_LFG_JOINED_LIST = 813, - ERR_LFG_LEFT_QUEUE = 814, - ERR_LFG_LEFT_LIST = 815, - ERR_LFG_ROLE_CHECK_ABORTED = 816, - ERR_LFG_READY_CHECK_ABORTED = 817, - ERR_LFG_CANT_USE_BATTLEGROUND = 818, - ERR_LFG_CANT_USE_DUNGEONS = 819, - ERR_LFG_REASON_TOO_MANY_LFG = 820, - ERR_LFG_FARM_LIMIT = 821, - ERR_LFG_NO_CROSS_FACTION_PARTIES = 822, - ERR_INVALID_TELEPORT_LOCATION = 823, - ERR_TOO_FAR_TO_INTERACT = 824, - ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 825, - ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 826, - ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 827, - ERR_DIFFICULTY_CHANGE_WORLDSTATE = 828, - ERR_DIFFICULTY_CHANGE_ENCOUNTER = 829, - ERR_DIFFICULTY_CHANGE_COMBAT = 830, - ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 831, - ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 832, - ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 833, - ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 834, - ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 835, - ERR_ARENA_TEAM_PARTY_SIZE = 836, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 837, - ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 838, - ERR_SOLO_MIN_ITEM_LEVEL = 839, - ERR_PVP_PLAYER_ABANDONED = 840, - ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 841, - ERR_QUEST_FORCE_REMOVED_S = 842, - ERR_ATTACK_NO_ACTIONS = 843, - ERR_IN_RANDOM_BG = 844, - ERR_IN_NON_RANDOM_BG = 845, - ERR_BN_FRIEND_SELF = 846, - ERR_BN_FRIEND_ALREADY = 847, - ERR_BN_FRIEND_BLOCKED = 848, - ERR_BN_FRIEND_LIST_FULL = 849, - ERR_BN_FRIEND_REQUEST_SENT = 850, - ERR_BN_BROADCAST_THROTTLE = 851, - ERR_BG_DEVELOPER_ONLY = 852, - ERR_CURRENCY_SPELL_SLOT_MISMATCH = 853, - ERR_CURRENCY_NOT_TRADABLE = 854, - ERR_REQUIRES_EXPANSION_S = 855, - ERR_QUEST_FAILED_SPELL = 856, - ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 857, - ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 858, - ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 859, - ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 860, - ERR_TALENT_FAILED_UNKNOWN = 861, - ERR_TALENT_FAILED_IN_COMBAT = 862, - ERR_TALENT_FAILED_IN_PVP_MATCH = 863, - ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 864, - ERR_WARGAME_REQUEST_FAILURE = 865, - ERR_RANK_REQUIRES_AUTHENTICATOR = 866, - ERR_GUILD_BANK_VOUCHER_FAILED = 867, - ERR_WARGAME_REQUEST_SENT = 868, - ERR_REQUIRES_ACHIEVEMENT_I = 869, - ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 870, - ERR_CANT_BUY_QUANTITY = 871, - ERR_ITEM_IS_BATTLE_PAY_LOCKED = 872, - ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 873, - ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 874, - ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 875, - ERR_INSUFF_TRACKED_CURRENCY_IS = 876, - ERR_NOT_ON_TOURNAMENT_REALM = 877, - ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 878, - ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 879, - ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 880, - ERR_CANT_DO_THAT_IN_A_GROUP = 881, - ERR_GUILD_LEADER_REPLACED = 882, - ERR_TRANSMOGRIFY_CANT_EQUIP = 883, - ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 884, - ERR_TRANSMOGRIFY_NOT_SOULBOUND = 885, - ERR_TRANSMOGRIFY_INVALID_SOURCE = 886, - ERR_TRANSMOGRIFY_INVALID_DESTINATION = 887, - ERR_TRANSMOGRIFY_MISMATCH = 888, - ERR_TRANSMOGRIFY_LEGENDARY = 889, - ERR_TRANSMOGRIFY_SAME_ITEM = 890, - ERR_TRANSMOGRIFY_SAME_APPEARANCE = 891, - ERR_TRANSMOGRIFY_NOT_EQUIPPED = 892, - ERR_VOID_DEPOSIT_FULL = 893, - ERR_VOID_WITHDRAW_FULL = 894, - ERR_VOID_STORAGE_WRAPPED = 895, - ERR_VOID_STORAGE_STACKABLE = 896, - ERR_VOID_STORAGE_UNBOUND = 897, - ERR_VOID_STORAGE_REPAIR = 898, - ERR_VOID_STORAGE_CHARGES = 899, - ERR_VOID_STORAGE_QUEST = 900, - ERR_VOID_STORAGE_CONJURED = 901, - ERR_VOID_STORAGE_MAIL = 902, - ERR_VOID_STORAGE_BAG = 903, - ERR_VOID_TRANSFER_STORAGE_FULL = 904, - ERR_VOID_TRANSFER_INV_FULL = 905, - ERR_VOID_TRANSFER_INTERNAL_ERROR = 906, - ERR_VOID_TRANSFER_ITEM_INVALID = 907, - ERR_DIFFICULTY_DISABLED_IN_LFG = 908, - ERR_VOID_STORAGE_UNIQUE = 909, - ERR_VOID_STORAGE_LOOT = 910, - ERR_VOID_STORAGE_HOLIDAY = 911, - ERR_VOID_STORAGE_DURATION = 912, - ERR_VOID_STORAGE_LOAD_FAILED = 913, - ERR_VOID_STORAGE_INVALID_ITEM = 914, - ERR_PARENTAL_CONTROLS_CHAT_MUTED = 915, - ERR_SOR_START_EXPERIENCE_INCOMPLETE = 916, - ERR_SOR_INVALID_EMAIL = 917, - ERR_SOR_INVALID_COMMENT = 918, - ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 919, - ERR_CHALLENGE_MODE_RESET_KEYSTONE = 920, - ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 921, - ERR_REPORT_SUBMITTED_SUCCESSFULLY = 922, - ERR_REPORT_SUBMISSION_FAILED = 923, - ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 924, - ERR_BUG_SUBMITTED_SUCCESSFULLY = 925, - ERR_CHALLENGE_MODE_ENABLED = 926, - ERR_CHALLENGE_MODE_DISABLED = 927, - ERR_PETBATTLE_CREATE_FAILED = 928, - ERR_PETBATTLE_NOT_HERE = 929, - ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 930, - ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 931, - ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 932, - ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 933, - ERR_PETBATTLE_NOT_WHILE_DEAD = 934, - ERR_PETBATTLE_NOT_WHILE_FLYING = 935, - ERR_PETBATTLE_TARGET_INVALID = 936, - ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 937, - ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 938, - ERR_PETBATTLE_NOT_A_TRAINER = 939, - ERR_PETBATTLE_DECLINED = 940, - ERR_PETBATTLE_IN_BATTLE = 941, - ERR_PETBATTLE_INVALID_LOADOUT = 942, - ERR_PETBATTLE_ALL_PETS_DEAD = 943, - ERR_PETBATTLE_NO_PETS_IN_SLOTS = 944, - ERR_PETBATTLE_NO_ACCOUNT_LOCK = 945, - ERR_PETBATTLE_WILD_PET_TAPPED = 946, - ERR_PETBATTLE_RESTRICTED_ACCOUNT = 947, - ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 948, - ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 949, - ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 950, - ERR_CANT_HAVE_MORE_PETS = 951, - ERR_PVP_MAP_NOT_FOUND = 952, - ERR_PVP_MAP_NOT_SET = 953, - ERR_PETBATTLE_QUEUE_QUEUED = 954, - ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 955, - ERR_PETBATTLE_QUEUE_JOIN_FAILED = 956, - ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 957, - ERR_PETBATTLE_QUEUE_REMOVED = 958, - ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 959, - ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 960, - ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 961, - ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 962, - ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 963, - ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 964, - ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 965, - ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 966, - ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 967, - ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 968, - ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 969, - ERR_PETBATTLE_QUEUE_SLOT_DEAD = 970, - ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 971, - ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 972, - ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 973, - ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 974, - ERR_HAS_RESTRICTION = 975, - ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 976, - ERR_ITEM_UPGRADE_NO_PATH = 977, - ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 978, - ERR_BONUS_ROLL_EMPTY = 979, - ERR_CHALLENGE_MODE_FULL = 980, - ERR_CHALLENGE_MODE_IN_PROGRESS = 981, - ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 982, - ERR_BATTLETAG_FRIEND_NOT_FOUND = 983, - ERR_BATTLETAG_FRIEND_NOT_VALID = 984, - ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 985, - ERR_BATTLETAG_FRIEND_THROTTLED = 986, - ERR_BATTLETAG_FRIEND_SUCCESS = 987, - ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 988, - ERR_PETBATTLE_INTERNAL = 989, - ERR_CANT_CAGE_PET_YET = 990, - ERR_NO_LOOT_IN_CHALLENGE_MODE = 991, - ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 992, - ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 993, - ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 994, - ERR_RECRUIT_A_FRIEND_FAILED = 995, - ERR_SET_LOOT_PERSONAL = 996, - ERR_SET_LOOT_METHOD_FAILED_COMBAT = 997, - ERR_REAGENT_BANK_FULL = 998, - ERR_REAGENT_BANK_LOCKED = 999, - ERR_GARRISON_BUILDING_EXISTS = 1000, - ERR_GARRISON_INVALID_PLOT = 1001, - ERR_GARRISON_INVALID_BUILDINGID = 1002, - ERR_GARRISON_INVALID_PLOT_BUILDING = 1003, - ERR_GARRISON_REQUIRES_BLUEPRINT = 1004, - ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1005, - ERR_GARRISON_NOT_ENOUGH_GOLD = 1006, - ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1007, - ERR_ALREADY_USING_LFG_LIST = 1008, - ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1009, - ERR_TOY_USE_LIMIT_REACHED = 1010, - ERR_TOY_ALREADY_KNOWN = 1011, - ERR_TRANSMOG_SET_ALREADY_KNOWN = 1012, - ERR_NOT_ENOUGH_CURRENCY = 1013, - ERR_SPEC_IS_DISABLED = 1014, - ERR_FEATURE_RESTRICTED_TRIAL = 1015, - ERR_CANT_BE_OBLITERATED = 1016, - ERR_CANT_BE_SCRAPPED = 1017, - ERR_CANT_BE_RECRAFTED = 1018, - ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1019, - ERR_MUST_EQUIP_ARTIFACT = 1020, - ERR_CANT_DO_THAT_RIGHT_NOW = 1021, - ERR_AFFECTING_COMBAT = 1022, - ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1023, - ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1024, - ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1025, - ERR_MOVIE_RECORDING_WARNING_PERF = 1026, - ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1027, - ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1028, - ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1029, - ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1030, - ERR_NO_CHALLENGE_MODE_REWARD = 1031, - ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1032, - ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1033, - ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1034, - ERR_TALENT_FAILED_REST_AREA = 1035, - ERR_CANNOT_ABANDON_LAST_PET = 1036, - ERR_TEST_CVAR_SET_SSS = 1037, - ERR_QUEST_TURN_IN_FAIL_REASON = 1038, - ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1039, - ERR_TALENT_GRANTED_BY_AURA = 1040, - ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1041, - ERR_GLYPH_TARGET_NOT_AVAILABLE = 1042, - ERR_PVP_WARMODE_TOGGLE_ON = 1043, - ERR_PVP_WARMODE_TOGGLE_OFF = 1044, - ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1045, - ERR_SPELL_FAILED_CANT_FLY_HERE = 1046, - ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1047, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1048, - ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1049, - ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1050, - ERR_VOICE_CHAT_SERVICE_LOST = 1051, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1052, - ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1053, - ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1054, - ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1055, - ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1056, - ERR_VOICE_CHAT_PLAYER_SILENCED = 1057, - ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1058, - ERR_VOICE_CHAT_DISABLED = 1059, - ERR_NO_PVP_REWARD = 1060, - ERR_CLAIMED_PVP_REWARD = 1061, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1062, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1063, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1064, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1065, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1066, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1067, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1068, - ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1069, - ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1070, - ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1071, - ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1072, - ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1073, - ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1074, - ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1075, - ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1076, - ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1077, - ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1078, - ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1079, - ERR_SOCKETING_REQUIRES_TINKER_GEM = 1080, - ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1081, - ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1082, - ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1083, - ERR_LEVEL_LINKING_RESULT_LINKED = 1084, - ERR_LEVEL_LINKING_RESULT_UNLINKED = 1085, - ERR_CLUB_FINDER_ERROR_POST_CLUB = 1086, - ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1087, - ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1088, - ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1089, - ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1090, - ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1091, - ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1092, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1093, - ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1094, - ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1095, - ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1096, - ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1097, - ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1098, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1099, - ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1100, - ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1101, - ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1102, - ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1103, - ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1104, - ERR_SOULBIND_INVALID_CONDUIT = 1105, - ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1106, - ERR_SOULBIND_INVALID_TALENT = 1107, - ERR_SOULBIND_DUPLICATE_CONDUIT = 1108, - ERR_ACTIVATE_SOULBIND_S = 1109, - ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1110, - ERR_CANT_USE_PROFANITY = 1111, - ERR_NOT_IN_PET_BATTLE = 1112, - ERR_NOT_IN_NPE = 1113, - ERR_NO_SPEC = 1114, - ERR_NO_DOMINATIONSHARD_OVERWRITE = 1115, - ERR_USE_WEEKLY_REWARDS_DISABLED = 1116, - ERR_CROSS_FACTION_GROUP_JOINED = 1117, - ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1118, - ERR_EQUIPABLESPELLS_SLOTS_FULL = 1119, - ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1120, - ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1121, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1122, - ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1123, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1124, - ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1125, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1126, - ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1127, + ERR_GUILD_NEW_LEADER_NOT_ALLIED = 146, + ERR_GUILD_LEADER_LEAVE = 147, + ERR_GUILD_RANKS_LOCKED = 148, + ERR_GUILD_RANK_IN_USE = 149, + ERR_GUILD_RANK_TOO_HIGH_S = 150, + ERR_GUILD_RANK_TOO_LOW_S = 151, + ERR_GUILD_NAME_EXISTS_S = 152, + ERR_GUILD_WITHDRAW_LIMIT = 153, + ERR_GUILD_NOT_ENOUGH_MONEY = 154, + ERR_GUILD_TOO_MUCH_MONEY = 155, + ERR_GUILD_BANK_CONJURED_ITEM = 156, + ERR_GUILD_BANK_EQUIPPED_ITEM = 157, + ERR_GUILD_BANK_BOUND_ITEM = 158, + ERR_GUILD_BANK_QUEST_ITEM = 159, + ERR_GUILD_BANK_WRAPPED_ITEM = 160, + ERR_GUILD_BANK_FULL = 161, + ERR_GUILD_BANK_WRONG_TAB = 162, + ERR_NO_GUILD_CHARTER = 163, + ERR_OUT_OF_RANGE = 164, + ERR_PLAYER_DEAD = 165, + ERR_CLIENT_LOCKED_OUT = 166, + ERR_CLIENT_ON_TRANSPORT = 167, + ERR_KILLED_BY_S = 168, + ERR_LOOT_LOCKED = 169, + ERR_LOOT_TOO_FAR = 170, + ERR_LOOT_DIDNT_KILL = 171, + ERR_LOOT_BAD_FACING = 172, + ERR_LOOT_NOTSTANDING = 173, + ERR_LOOT_STUNNED = 174, + ERR_LOOT_NO_UI = 175, + ERR_LOOT_WHILE_INVULNERABLE = 176, + ERR_NO_LOOT = 177, + ERR_QUEST_ACCEPTED_S = 178, + ERR_QUEST_COMPLETE_S = 179, + ERR_QUEST_FAILED_S = 180, + ERR_QUEST_FAILED_BAG_FULL_S = 181, + ERR_QUEST_FAILED_MAX_COUNT_S = 182, + ERR_QUEST_FAILED_LOW_LEVEL = 183, + ERR_QUEST_FAILED_MISSING_ITEMS = 184, + ERR_QUEST_FAILED_WRONG_RACE = 185, + ERR_QUEST_FAILED_NOT_ENOUGH_MONEY = 186, + ERR_QUEST_FAILED_EXPANSION = 187, + ERR_QUEST_ONLY_ONE_TIMED = 188, + ERR_QUEST_NEED_PREREQS = 189, + ERR_QUEST_NEED_PREREQS_CUSTOM = 190, + ERR_QUEST_ALREADY_ON = 191, + ERR_QUEST_ALREADY_DONE = 192, + ERR_QUEST_ALREADY_DONE_DAILY = 193, + ERR_QUEST_HAS_IN_PROGRESS = 194, + ERR_QUEST_REWARD_EXP_I = 195, + ERR_QUEST_REWARD_MONEY_S = 196, + ERR_QUEST_MUST_CHOOSE = 197, + ERR_QUEST_LOG_FULL = 198, + ERR_COMBAT_DAMAGE_SSI = 199, + ERR_INSPECT_S = 200, + ERR_CANT_USE_ITEM = 201, + ERR_CANT_USE_ITEM_IN_ARENA = 202, + ERR_CANT_USE_ITEM_IN_RATED_BATTLEGROUND = 203, + ERR_MUST_EQUIP_ITEM = 204, + ERR_PASSIVE_ABILITY = 205, + ERR_2HSKILLNOTFOUND = 206, + ERR_NO_ATTACK_TARGET = 207, + ERR_INVALID_ATTACK_TARGET = 208, + ERR_ATTACK_PVP_TARGET_WHILE_UNFLAGGED = 209, + ERR_ATTACK_STUNNED = 210, + ERR_ATTACK_PACIFIED = 211, + ERR_ATTACK_MOUNTED = 212, + ERR_ATTACK_FLEEING = 213, + ERR_ATTACK_CONFUSED = 214, + ERR_ATTACK_CHARMED = 215, + ERR_ATTACK_DEAD = 216, + ERR_ATTACK_PREVENTED_BY_MECHANIC_S = 217, + ERR_ATTACK_CHANNEL = 218, + ERR_TAXISAMENODE = 219, + ERR_TAXINOSUCHPATH = 220, + ERR_TAXIUNSPECIFIEDSERVERERROR = 221, + ERR_TAXINOTENOUGHMONEY = 222, + ERR_TAXITOOFARAWAY = 223, + ERR_TAXINOVENDORNEARBY = 224, + ERR_TAXINOTVISITED = 225, + ERR_TAXIPLAYERBUSY = 226, + ERR_TAXIPLAYERALREADYMOUNTED = 227, + ERR_TAXIPLAYERSHAPESHIFTED = 228, + ERR_TAXIPLAYERMOVING = 229, + ERR_TAXINOPATHS = 230, + ERR_TAXINOTELIGIBLE = 231, + ERR_TAXINOTSTANDING = 232, + ERR_TAXIINCOMBAT = 233, + ERR_NO_REPLY_TARGET = 234, + ERR_GENERIC_NO_TARGET = 235, + ERR_INITIATE_TRADE_S = 236, + ERR_TRADE_REQUEST_S = 237, + ERR_TRADE_BLOCKED_S = 238, + ERR_TRADE_TARGET_DEAD = 239, + ERR_TRADE_TOO_FAR = 240, + ERR_TRADE_CANCELLED = 241, + ERR_TRADE_COMPLETE = 242, + ERR_TRADE_BAG_FULL = 243, + ERR_TRADE_TARGET_BAG_FULL = 244, + ERR_TRADE_MAX_COUNT_EXCEEDED = 245, + ERR_TRADE_TARGET_MAX_COUNT_EXCEEDED = 246, + ERR_INVENTORY_TRADE_TOO_MANY_UNIQUE_ITEM = 247, + ERR_ALREADY_TRADING = 248, + ERR_MOUNT_INVALIDMOUNTEE = 249, + ERR_MOUNT_TOOFARAWAY = 250, + ERR_MOUNT_ALREADYMOUNTED = 251, + ERR_MOUNT_NOTMOUNTABLE = 252, + ERR_MOUNT_NOTYOURPET = 253, + ERR_MOUNT_OTHER = 254, + ERR_MOUNT_LOOTING = 255, + ERR_MOUNT_RACECANTMOUNT = 256, + ERR_MOUNT_SHAPESHIFTED = 257, + ERR_MOUNT_NO_FAVORITES = 258, + ERR_MOUNT_NO_MOUNTS = 259, + ERR_DISMOUNT_NOPET = 260, + ERR_DISMOUNT_NOTMOUNTED = 261, + ERR_DISMOUNT_NOTYOURPET = 262, + ERR_SPELL_FAILED_TOTEMS = 263, + ERR_SPELL_FAILED_REAGENTS = 264, + ERR_SPELL_FAILED_REAGENTS_GENERIC = 265, + ERR_SPELL_FAILED_OPTIONAL_REAGENTS = 266, + ERR_CANT_TRADE_GOLD = 267, + ERR_SPELL_FAILED_EQUIPPED_ITEM = 268, + ERR_SPELL_FAILED_EQUIPPED_ITEM_CLASS_S = 269, + ERR_SPELL_FAILED_SHAPESHIFT_FORM_S = 270, + ERR_SPELL_FAILED_ANOTHER_IN_PROGRESS = 271, + ERR_BADATTACKFACING = 272, + ERR_BADATTACKPOS = 273, + ERR_CHEST_IN_USE = 274, + ERR_USE_CANT_OPEN = 275, + ERR_USE_LOCKED = 276, + ERR_DOOR_LOCKED = 277, + ERR_BUTTON_LOCKED = 278, + ERR_USE_LOCKED_WITH_ITEM_S = 279, + ERR_USE_LOCKED_WITH_SPELL_S = 280, + ERR_USE_LOCKED_WITH_SPELL_KNOWN_SI = 281, + ERR_USE_TOO_FAR = 282, + ERR_USE_BAD_ANGLE = 283, + ERR_USE_OBJECT_MOVING = 284, + ERR_USE_SPELL_FOCUS = 285, + ERR_USE_DESTROYED = 286, + ERR_SET_LOOT_FREEFORALL = 287, + ERR_SET_LOOT_ROUNDROBIN = 288, + ERR_SET_LOOT_MASTER = 289, + ERR_SET_LOOT_GROUP = 290, + ERR_SET_LOOT_THRESHOLD_S = 291, + ERR_NEW_LOOT_MASTER_S = 292, + ERR_SPECIFY_MASTER_LOOTER = 293, + ERR_LOOT_SPEC_CHANGED_S = 294, + ERR_TAME_FAILED = 295, + ERR_CHAT_WHILE_DEAD = 296, + ERR_CHAT_PLAYER_NOT_FOUND_S = 297, + ERR_NEWTAXIPATH = 298, + ERR_NO_PET = 299, + ERR_NOTYOURPET = 300, + ERR_PET_NOT_RENAMEABLE = 301, + ERR_QUEST_OBJECTIVE_COMPLETE_S = 302, + ERR_QUEST_UNKNOWN_COMPLETE = 303, + ERR_QUEST_ADD_KILL_SII = 304, + ERR_QUEST_ADD_FOUND_SII = 305, + ERR_QUEST_ADD_ITEM_SII = 306, + ERR_QUEST_ADD_PLAYER_KILL_SII = 307, + ERR_CANNOTCREATEDIRECTORY = 308, + ERR_CANNOTCREATEFILE = 309, + ERR_PLAYER_WRONG_FACTION = 310, + ERR_PLAYER_IS_NEUTRAL = 311, + ERR_BANKSLOT_FAILED_TOO_MANY = 312, + ERR_BANKSLOT_INSUFFICIENT_FUNDS = 313, + ERR_BANKSLOT_NOTBANKER = 314, + ERR_FRIEND_DB_ERROR = 315, + ERR_FRIEND_LIST_FULL = 316, + ERR_FRIEND_ADDED_S = 317, + ERR_BATTLETAG_FRIEND_ADDED_S = 318, + ERR_FRIEND_ONLINE_SS = 319, + ERR_FRIEND_OFFLINE_S = 320, + ERR_FRIEND_NOT_FOUND = 321, + ERR_FRIEND_WRONG_FACTION = 322, + ERR_FRIEND_REMOVED_S = 323, + ERR_BATTLETAG_FRIEND_REMOVED_S = 324, + ERR_FRIEND_ERROR = 325, + ERR_FRIEND_ALREADY_S = 326, + ERR_FRIEND_SELF = 327, + ERR_FRIEND_DELETED = 328, + ERR_IGNORE_FULL = 329, + ERR_IGNORE_SELF = 330, + ERR_IGNORE_NOT_FOUND = 331, + ERR_IGNORE_ALREADY_S = 332, + ERR_IGNORE_ADDED_S = 333, + ERR_IGNORE_REMOVED_S = 334, + ERR_IGNORE_AMBIGUOUS = 335, + ERR_IGNORE_DELETED = 336, + ERR_ONLY_ONE_BOLT = 337, + ERR_ONLY_ONE_AMMO = 338, + ERR_SPELL_FAILED_EQUIPPED_SPECIFIC_ITEM = 339, + ERR_WRONG_BAG_TYPE_SUBCLASS = 340, + ERR_CANT_WRAP_STACKABLE = 341, + ERR_CANT_WRAP_EQUIPPED = 342, + ERR_CANT_WRAP_WRAPPED = 343, + ERR_CANT_WRAP_BOUND = 344, + ERR_CANT_WRAP_UNIQUE = 345, + ERR_CANT_WRAP_BAGS = 346, + ERR_OUT_OF_MANA = 347, + ERR_OUT_OF_RAGE = 348, + ERR_OUT_OF_FOCUS = 349, + ERR_OUT_OF_ENERGY = 350, + ERR_OUT_OF_CHI = 351, + ERR_OUT_OF_HEALTH = 352, + ERR_OUT_OF_RUNES = 353, + ERR_OUT_OF_RUNIC_POWER = 354, + ERR_OUT_OF_SOUL_SHARDS = 355, + ERR_OUT_OF_LUNAR_POWER = 356, + ERR_OUT_OF_HOLY_POWER = 357, + ERR_OUT_OF_MAELSTROM = 358, + ERR_OUT_OF_COMBO_POINTS = 359, + ERR_OUT_OF_INSANITY = 360, + ERR_OUT_OF_ESSENCE = 361, + ERR_OUT_OF_ARCANE_CHARGES = 362, + ERR_OUT_OF_FURY = 363, + ERR_OUT_OF_PAIN = 364, + ERR_OUT_OF_POWER_DISPLAY = 365, + ERR_LOOT_GONE = 366, + ERR_MOUNT_FORCEDDISMOUNT = 367, + ERR_AUTOFOLLOW_TOO_FAR = 368, + ERR_UNIT_NOT_FOUND = 369, + ERR_INVALID_FOLLOW_TARGET = 370, + ERR_INVALID_FOLLOW_PVP_COMBAT = 371, + ERR_INVALID_FOLLOW_TARGET_PVP_COMBAT = 372, + ERR_INVALID_INSPECT_TARGET = 373, + ERR_GUILDEMBLEM_SUCCESS = 374, + ERR_GUILDEMBLEM_INVALID_TABARD_COLORS = 375, + ERR_GUILDEMBLEM_NOGUILD = 376, + ERR_GUILDEMBLEM_NOTGUILDMASTER = 377, + ERR_GUILDEMBLEM_NOTENOUGHMONEY = 378, + ERR_GUILDEMBLEM_INVALIDVENDOR = 379, + ERR_EMBLEMERROR_NOTABARDGEOSET = 380, + ERR_SPELL_OUT_OF_RANGE = 381, + ERR_COMMAND_NEEDS_TARGET = 382, + ERR_NOAMMO_S = 383, + ERR_TOOBUSYTOFOLLOW = 384, + ERR_DUEL_REQUESTED = 385, + ERR_DUEL_CANCELLED = 386, + ERR_DEATHBINDALREADYBOUND = 387, + ERR_DEATHBIND_SUCCESS_S = 388, + ERR_NOEMOTEWHILERUNNING = 389, + ERR_ZONE_EXPLORED = 390, + ERR_ZONE_EXPLORED_XP = 391, + ERR_INVALID_ITEM_TARGET = 392, + ERR_INVALID_QUEST_TARGET = 393, + ERR_IGNORING_YOU_S = 394, + ERR_FISH_NOT_HOOKED = 395, + ERR_FISH_ESCAPED = 396, + ERR_SPELL_FAILED_NOTUNSHEATHED = 397, + ERR_PETITION_OFFERED_S = 398, + ERR_PETITION_SIGNED = 399, + ERR_PETITION_SIGNED_S = 400, + ERR_PETITION_DECLINED_S = 401, + ERR_PETITION_ALREADY_SIGNED = 402, + ERR_PETITION_RESTRICTED_ACCOUNT_TRIAL = 403, + ERR_PETITION_ALREADY_SIGNED_OTHER = 404, + ERR_PETITION_IN_GUILD = 405, + ERR_PETITION_CREATOR = 406, + ERR_PETITION_NOT_ENOUGH_SIGNATURES = 407, + ERR_PETITION_NOT_SAME_SERVER = 408, + ERR_PETITION_FULL = 409, + ERR_PETITION_ALREADY_SIGNED_BY_S = 410, + ERR_GUILD_NAME_INVALID = 411, + ERR_SPELL_UNLEARNED_S = 412, + ERR_PET_SPELL_ROOTED = 413, + ERR_PET_SPELL_AFFECTING_COMBAT = 414, + ERR_PET_SPELL_OUT_OF_RANGE = 415, + ERR_PET_SPELL_NOT_BEHIND = 416, + ERR_PET_SPELL_TARGETS_DEAD = 417, + ERR_PET_SPELL_DEAD = 418, + ERR_PET_SPELL_NOPATH = 419, + ERR_ITEM_CANT_BE_DESTROYED = 420, + ERR_TICKET_ALREADY_EXISTS = 421, + ERR_TICKET_CREATE_ERROR = 422, + ERR_TICKET_UPDATE_ERROR = 423, + ERR_TICKET_DB_ERROR = 424, + ERR_TICKET_NO_TEXT = 425, + ERR_TICKET_TEXT_TOO_LONG = 426, + ERR_OBJECT_IS_BUSY = 427, + ERR_EXHAUSTION_WELLRESTED = 428, + ERR_EXHAUSTION_RESTED = 429, + ERR_EXHAUSTION_NORMAL = 430, + ERR_EXHAUSTION_TIRED = 431, + ERR_EXHAUSTION_EXHAUSTED = 432, + ERR_NO_ITEMS_WHILE_SHAPESHIFTED = 433, + ERR_CANT_INTERACT_SHAPESHIFTED = 434, + ERR_REALM_NOT_FOUND = 435, + ERR_MAIL_QUEST_ITEM = 436, + ERR_MAIL_BOUND_ITEM = 437, + ERR_MAIL_CONJURED_ITEM = 438, + ERR_MAIL_BAG = 439, + ERR_MAIL_TO_SELF = 440, + ERR_MAIL_TARGET_NOT_FOUND = 441, + ERR_MAIL_DATABASE_ERROR = 442, + ERR_MAIL_DELETE_ITEM_ERROR = 443, + ERR_MAIL_WRAPPED_COD = 444, + ERR_MAIL_CANT_SEND_REALM = 445, + ERR_MAIL_TEMP_RETURN_OUTAGE = 446, + ERR_MAIL_RECEPIENT_CANT_RECEIVE_MAIL = 447, + ERR_MAIL_SENT = 448, + ERR_MAIL_TARGET_IS_TRIAL = 449, + ERR_NOT_HAPPY_ENOUGH = 450, + ERR_USE_CANT_IMMUNE = 451, + ERR_CANT_BE_DISENCHANTED = 452, + ERR_CANT_USE_DISARMED = 453, + ERR_AUCTION_DATABASE_ERROR = 454, + ERR_AUCTION_HIGHER_BID = 455, + ERR_AUCTION_ALREADY_BID = 456, + ERR_AUCTION_OUTBID_S = 457, + ERR_AUCTION_WON_S = 458, + ERR_AUCTION_REMOVED_S = 459, + ERR_AUCTION_BID_PLACED = 460, + ERR_LOGOUT_FAILED = 461, + ERR_QUEST_PUSH_SUCCESS_S = 462, + ERR_QUEST_PUSH_INVALID_S = 463, + ERR_QUEST_PUSH_INVALID_TO_RECIPIENT_S = 464, + ERR_QUEST_PUSH_ACCEPTED_S = 465, + ERR_QUEST_PUSH_DECLINED_S = 466, + ERR_QUEST_PUSH_BUSY_S = 467, + ERR_QUEST_PUSH_DEAD_S = 468, + ERR_QUEST_PUSH_DEAD_TO_RECIPIENT_S = 469, + ERR_QUEST_PUSH_LOG_FULL_S = 470, + ERR_QUEST_PUSH_LOG_FULL_TO_RECIPIENT_S = 471, + ERR_QUEST_PUSH_ONQUEST_S = 472, + ERR_QUEST_PUSH_ONQUEST_TO_RECIPIENT_S = 473, + ERR_QUEST_PUSH_ALREADY_DONE_S = 474, + ERR_QUEST_PUSH_ALREADY_DONE_TO_RECIPIENT_S = 475, + ERR_QUEST_PUSH_NOT_DAILY_S = 476, + ERR_QUEST_PUSH_TIMER_EXPIRED_S = 477, + ERR_QUEST_PUSH_NOT_IN_PARTY_S = 478, + ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_S = 479, + ERR_QUEST_PUSH_DIFFERENT_SERVER_DAILY_TO_RECIPIENT_S = 480, + ERR_QUEST_PUSH_NOT_ALLOWED_S = 481, + ERR_QUEST_PUSH_PREREQUISITE_S = 482, + ERR_QUEST_PUSH_PREREQUISITE_TO_RECIPIENT_S = 483, + ERR_QUEST_PUSH_LOW_LEVEL_S = 484, + ERR_QUEST_PUSH_LOW_LEVEL_TO_RECIPIENT_S = 485, + ERR_QUEST_PUSH_HIGH_LEVEL_S = 486, + ERR_QUEST_PUSH_HIGH_LEVEL_TO_RECIPIENT_S = 487, + ERR_QUEST_PUSH_CLASS_S = 488, + ERR_QUEST_PUSH_CLASS_TO_RECIPIENT_S = 489, + ERR_QUEST_PUSH_RACE_S = 490, + ERR_QUEST_PUSH_RACE_TO_RECIPIENT_S = 491, + ERR_QUEST_PUSH_LOW_FACTION_S = 492, + ERR_QUEST_PUSH_LOW_FACTION_TO_RECIPIENT_S = 493, + ERR_QUEST_PUSH_EXPANSION_S = 494, + ERR_QUEST_PUSH_EXPANSION_TO_RECIPIENT_S = 495, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_S = 496, + ERR_QUEST_PUSH_NOT_GARRISON_OWNER_TO_RECIPIENT_S = 497, + ERR_QUEST_PUSH_WRONG_COVENANT_S = 498, + ERR_QUEST_PUSH_WRONG_COVENANT_TO_RECIPIENT_S = 499, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_S = 500, + ERR_QUEST_PUSH_NEW_PLAYER_EXPERIENCE_TO_RECIPIENT_S = 501, + ERR_QUEST_PUSH_WRONG_FACTION_S = 502, + ERR_QUEST_PUSH_WRONG_FACTION_TO_RECIPIENT_S = 503, + ERR_QUEST_PUSH_CROSS_FACTION_RESTRICTED_S = 504, + ERR_RAID_GROUP_LOWLEVEL = 505, + ERR_RAID_GROUP_ONLY = 506, + ERR_RAID_GROUP_FULL = 507, + ERR_RAID_GROUP_REQUIREMENTS_UNMATCH = 508, + ERR_CORPSE_IS_NOT_IN_INSTANCE = 509, + ERR_PVP_KILL_HONORABLE = 510, + ERR_PVP_KILL_DISHONORABLE = 511, + ERR_SPELL_FAILED_ALREADY_AT_FULL_HEALTH = 512, + ERR_SPELL_FAILED_ALREADY_AT_FULL_MANA = 513, + ERR_SPELL_FAILED_ALREADY_AT_FULL_POWER_S = 514, + ERR_AUTOLOOT_MONEY_S = 515, + ERR_GENERIC_STUNNED = 516, + ERR_GENERIC_THROTTLE = 517, + ERR_CLUB_FINDER_SEARCHING_TOO_FAST = 518, + ERR_TARGET_STUNNED = 519, + ERR_MUST_REPAIR_DURABILITY = 520, + ERR_RAID_YOU_JOINED = 521, + ERR_RAID_YOU_LEFT = 522, + ERR_INSTANCE_GROUP_JOINED_WITH_PARTY = 523, + ERR_INSTANCE_GROUP_JOINED_WITH_RAID = 524, + ERR_RAID_MEMBER_ADDED_S = 525, + ERR_RAID_MEMBER_REMOVED_S = 526, + ERR_INSTANCE_GROUP_ADDED_S = 527, + ERR_INSTANCE_GROUP_REMOVED_S = 528, + ERR_CLICK_ON_ITEM_TO_FEED = 529, + ERR_TOO_MANY_CHAT_CHANNELS = 530, + ERR_LOOT_ROLL_PENDING = 531, + ERR_LOOT_PLAYER_NOT_FOUND = 532, + ERR_NOT_IN_RAID = 533, + ERR_LOGGING_OUT = 534, + ERR_TARGET_LOGGING_OUT = 535, + ERR_NOT_WHILE_MOUNTED = 536, + ERR_NOT_WHILE_SHAPESHIFTED = 537, + ERR_NOT_IN_COMBAT = 538, + ERR_NOT_WHILE_DISARMED = 539, + ERR_PET_BROKEN = 540, + ERR_TALENT_WIPE_ERROR = 541, + ERR_SPEC_WIPE_ERROR = 542, + ERR_GLYPH_WIPE_ERROR = 543, + ERR_PET_SPEC_WIPE_ERROR = 544, + ERR_FEIGN_DEATH_RESISTED = 545, + ERR_MEETING_STONE_IN_QUEUE_S = 546, + ERR_MEETING_STONE_LEFT_QUEUE_S = 547, + ERR_MEETING_STONE_OTHER_MEMBER_LEFT = 548, + ERR_MEETING_STONE_PARTY_KICKED_FROM_QUEUE = 549, + ERR_MEETING_STONE_MEMBER_STILL_IN_QUEUE = 550, + ERR_MEETING_STONE_SUCCESS = 551, + ERR_MEETING_STONE_IN_PROGRESS = 552, + ERR_MEETING_STONE_MEMBER_ADDED_S = 553, + ERR_MEETING_STONE_GROUP_FULL = 554, + ERR_MEETING_STONE_NOT_LEADER = 555, + ERR_MEETING_STONE_INVALID_LEVEL = 556, + ERR_MEETING_STONE_TARGET_NOT_IN_PARTY = 557, + ERR_MEETING_STONE_TARGET_INVALID_LEVEL = 558, + ERR_MEETING_STONE_MUST_BE_LEADER = 559, + ERR_MEETING_STONE_NO_RAID_GROUP = 560, + ERR_MEETING_STONE_NEED_PARTY = 561, + ERR_MEETING_STONE_NOT_FOUND = 562, + ERR_MEETING_STONE_TARGET_IN_VEHICLE = 563, + ERR_GUILDEMBLEM_SAME = 564, + ERR_EQUIP_TRADE_ITEM = 565, + ERR_PVP_TOGGLE_ON = 566, + ERR_PVP_TOGGLE_OFF = 567, + ERR_GROUP_JOIN_BATTLEGROUND_DESERTERS = 568, + ERR_GROUP_JOIN_BATTLEGROUND_DEAD = 569, + ERR_GROUP_JOIN_BATTLEGROUND_S = 570, + ERR_GROUP_JOIN_BATTLEGROUND_FAIL = 571, + ERR_GROUP_JOIN_BATTLEGROUND_TOO_MANY = 572, + ERR_SOLO_JOIN_BATTLEGROUND_S = 573, + ERR_JOIN_SINGLE_SCENARIO_S = 574, + ERR_BATTLEGROUND_TOO_MANY_QUEUES = 575, + ERR_BATTLEGROUND_CANNOT_QUEUE_FOR_RATED = 576, + ERR_BATTLEDGROUND_QUEUED_FOR_RATED = 577, + ERR_BATTLEGROUND_TEAM_LEFT_QUEUE = 578, + ERR_BATTLEGROUND_NOT_IN_BATTLEGROUND = 579, + ERR_ALREADY_IN_ARENA_TEAM_S = 580, + ERR_INVALID_PROMOTION_CODE = 581, + ERR_BG_PLAYER_JOINED_SS = 582, + ERR_BG_PLAYER_LEFT_S = 583, + ERR_RESTRICTED_ACCOUNT = 584, + ERR_RESTRICTED_ACCOUNT_TRIAL = 585, + ERR_PLAY_TIME_EXCEEDED = 586, + ERR_APPROACHING_PARTIAL_PLAY_TIME = 587, + ERR_APPROACHING_PARTIAL_PLAY_TIME_2 = 588, + ERR_APPROACHING_NO_PLAY_TIME = 589, + ERR_APPROACHING_NO_PLAY_TIME_2 = 590, + ERR_UNHEALTHY_TIME = 591, + ERR_CHAT_RESTRICTED_TRIAL = 592, + ERR_CHAT_THROTTLED = 593, + ERR_MAIL_REACHED_CAP = 594, + ERR_INVALID_RAID_TARGET = 595, + ERR_RAID_LEADER_READY_CHECK_START_S = 596, + ERR_READY_CHECK_IN_PROGRESS = 597, + ERR_READY_CHECK_THROTTLED = 598, + ERR_DUNGEON_DIFFICULTY_FAILED = 599, + ERR_DUNGEON_DIFFICULTY_CHANGED_S = 600, + ERR_TRADE_WRONG_REALM = 601, + ERR_TRADE_NOT_ON_TAPLIST = 602, + ERR_CHAT_PLAYER_AMBIGUOUS_S = 603, + ERR_LOOT_CANT_LOOT_THAT_NOW = 604, + ERR_LOOT_MASTER_INV_FULL = 605, + ERR_LOOT_MASTER_UNIQUE_ITEM = 606, + ERR_LOOT_MASTER_OTHER = 607, + ERR_FILTERING_YOU_S = 608, + ERR_USE_PREVENTED_BY_MECHANIC_S = 609, + ERR_ITEM_UNIQUE_EQUIPPABLE = 610, + ERR_LFG_LEADER_IS_LFM_S = 611, + ERR_LFG_PENDING = 612, + ERR_CANT_SPEAK_LANGAGE = 613, + ERR_VENDOR_MISSING_TURNINS = 614, + ERR_BATTLEGROUND_NOT_IN_TEAM = 615, + ERR_NOT_IN_BATTLEGROUND = 616, + ERR_NOT_ENOUGH_HONOR_POINTS = 617, + ERR_NOT_ENOUGH_ARENA_POINTS = 618, + ERR_SOCKETING_REQUIRES_META_GEM = 619, + ERR_SOCKETING_META_GEM_ONLY_IN_METASLOT = 620, + ERR_SOCKETING_REQUIRES_HYDRAULIC_GEM = 621, + ERR_SOCKETING_HYDRAULIC_GEM_ONLY_IN_HYDRAULICSLOT = 622, + ERR_SOCKETING_REQUIRES_COGWHEEL_GEM = 623, + ERR_SOCKETING_COGWHEEL_GEM_ONLY_IN_COGWHEELSLOT = 624, + ERR_SOCKETING_ITEM_TOO_LOW_LEVEL = 625, + ERR_ITEM_MAX_COUNT_SOCKETED = 626, + ERR_SYSTEM_DISABLED = 627, + ERR_QUEST_FAILED_TOO_MANY_DAILY_QUESTS_I = 628, + ERR_ITEM_MAX_COUNT_EQUIPPED_SOCKETED = 629, + ERR_ITEM_UNIQUE_EQUIPPABLE_SOCKETED = 630, + ERR_USER_SQUELCHED = 631, + ERR_ACCOUNT_SILENCED = 632, + ERR_PARTY_MEMBER_SILENCED = 633, + ERR_PARTY_MEMBER_SILENCED_LFG_DELIST = 634, + ERR_TOO_MUCH_GOLD = 635, + ERR_NOT_BARBER_SITTING = 636, + ERR_QUEST_FAILED_CAIS = 637, + ERR_INVITE_RESTRICTED_TRIAL = 638, + ERR_VOICE_IGNORE_FULL = 639, + ERR_VOICE_IGNORE_SELF = 640, + ERR_VOICE_IGNORE_NOT_FOUND = 641, + ERR_VOICE_IGNORE_ALREADY_S = 642, + ERR_VOICE_IGNORE_ADDED_S = 643, + ERR_VOICE_IGNORE_REMOVED_S = 644, + ERR_VOICE_IGNORE_AMBIGUOUS = 645, + ERR_VOICE_IGNORE_DELETED = 646, + ERR_UNKNOWN_MACRO_OPTION_S = 647, + ERR_NOT_DURING_ARENA_MATCH = 648, + ERR_NOT_IN_RATED_BATTLEGROUND = 649, + ERR_PLAYER_SILENCED = 650, + ERR_PLAYER_UNSILENCED = 651, + ERR_COMSAT_DISCONNECT = 652, + ERR_COMSAT_RECONNECT_ATTEMPT = 653, + ERR_COMSAT_CONNECT_FAIL = 654, + ERR_MAIL_INVALID_ATTACHMENT_SLOT = 655, + ERR_MAIL_TOO_MANY_ATTACHMENTS = 656, + ERR_MAIL_INVALID_ATTACHMENT = 657, + ERR_MAIL_ATTACHMENT_EXPIRED = 658, + ERR_VOICE_CHAT_PARENTAL_DISABLE_MIC = 659, + ERR_PROFANE_CHAT_NAME = 660, + ERR_PLAYER_SILENCED_ECHO = 661, + ERR_PLAYER_UNSILENCED_ECHO = 662, + ERR_LOOT_CANT_LOOT_THAT = 663, + ERR_ARENA_EXPIRED_CAIS = 664, + ERR_GROUP_ACTION_THROTTLED = 665, + ERR_ALREADY_PICKPOCKETED = 666, + ERR_NAME_INVALID = 667, + ERR_NAME_NO_NAME = 668, + ERR_NAME_TOO_SHORT = 669, + ERR_NAME_TOO_LONG = 670, + ERR_NAME_MIXED_LANGUAGES = 671, + ERR_NAME_PROFANE = 672, + ERR_NAME_RESERVED = 673, + ERR_NAME_THREE_CONSECUTIVE = 674, + ERR_NAME_INVALID_SPACE = 675, + ERR_NAME_CONSECUTIVE_SPACES = 676, + ERR_NAME_RUSSIAN_CONSECUTIVE_SILENT_CHARACTERS = 677, + ERR_NAME_RUSSIAN_SILENT_CHARACTER_AT_BEGINNING_OR_END = 678, + ERR_NAME_DECLENSION_DOESNT_MATCH_BASE_NAME = 679, + ERR_RECRUIT_A_FRIEND_NOT_LINKED = 680, + ERR_RECRUIT_A_FRIEND_NOT_NOW = 681, + ERR_RECRUIT_A_FRIEND_SUMMON_LEVEL_MAX = 682, + ERR_RECRUIT_A_FRIEND_SUMMON_COOLDOWN = 683, + ERR_RECRUIT_A_FRIEND_SUMMON_OFFLINE = 684, + ERR_RECRUIT_A_FRIEND_INSUF_EXPAN_LVL = 685, + ERR_RECRUIT_A_FRIEND_MAP_INCOMING_TRANSFER_NOT_ALLOWED = 686, + ERR_NOT_SAME_ACCOUNT = 687, + ERR_BAD_ON_USE_ENCHANT = 688, + ERR_TRADE_SELF = 689, + ERR_TOO_MANY_SOCKETS = 690, + ERR_ITEM_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 691, + ERR_TRADE_TARGET_MAX_LIMIT_CATEGORY_COUNT_EXCEEDED_IS = 692, + ERR_ITEM_MAX_LIMIT_CATEGORY_SOCKETED_EXCEEDED_IS = 693, + ERR_ITEM_MAX_LIMIT_CATEGORY_EQUIPPED_EXCEEDED_IS = 694, + ERR_SHAPESHIFT_FORM_CANNOT_EQUIP = 695, + ERR_ITEM_INVENTORY_FULL_SATCHEL = 696, + ERR_SCALING_STAT_ITEM_LEVEL_EXCEEDED = 697, + ERR_SCALING_STAT_ITEM_LEVEL_TOO_LOW = 698, + ERR_PURCHASE_LEVEL_TOO_LOW = 699, + ERR_GROUP_SWAP_FAILED = 700, + ERR_INVITE_IN_COMBAT = 701, + ERR_INVALID_GLYPH_SLOT = 702, + ERR_GENERIC_NO_VALID_TARGETS = 703, + ERR_CALENDAR_EVENT_ALERT_S = 704, + ERR_PET_LEARN_SPELL_S = 705, + ERR_PET_LEARN_ABILITY_S = 706, + ERR_PET_SPELL_UNLEARNED_S = 707, + ERR_INVITE_UNKNOWN_REALM = 708, + ERR_INVITE_NO_PARTY_SERVER = 709, + ERR_INVITE_PARTY_BUSY = 710, + ERR_INVITE_PARTY_BUSY_PENDING_REQUEST = 711, + ERR_INVITE_PARTY_BUSY_PENDING_SUGGEST = 712, + ERR_PARTY_TARGET_AMBIGUOUS = 713, + ERR_PARTY_LFG_INVITE_RAID_LOCKED = 714, + ERR_PARTY_LFG_BOOT_LIMIT = 715, + ERR_PARTY_LFG_BOOT_COOLDOWN_S = 716, + ERR_PARTY_LFG_BOOT_NOT_ELIGIBLE_S = 717, + ERR_PARTY_LFG_BOOT_INPATIENT_TIMER_S = 718, + ERR_PARTY_LFG_BOOT_IN_PROGRESS = 719, + ERR_PARTY_LFG_BOOT_TOO_FEW_PLAYERS = 720, + ERR_PARTY_LFG_BOOT_VOTE_SUCCEEDED = 721, + ERR_PARTY_LFG_BOOT_VOTE_FAILED = 722, + ERR_PARTY_LFG_BOOT_IN_COMBAT = 723, + ERR_PARTY_LFG_BOOT_DUNGEON_COMPLETE = 724, + ERR_PARTY_LFG_BOOT_LOOT_ROLLS = 725, + ERR_PARTY_LFG_BOOT_VOTE_REGISTERED = 726, + ERR_PARTY_PRIVATE_GROUP_ONLY = 727, + ERR_PARTY_LFG_TELEPORT_IN_COMBAT = 728, + ERR_RAID_DISALLOWED_BY_LEVEL = 729, + ERR_RAID_DISALLOWED_BY_CROSS_REALM = 730, + ERR_PARTY_ROLE_NOT_AVAILABLE = 731, + ERR_JOIN_LFG_OBJECT_FAILED = 732, + ERR_LFG_REMOVED_LEVELUP = 733, + ERR_LFG_REMOVED_XP_TOGGLE = 734, + ERR_LFG_REMOVED_FACTION_CHANGE = 735, + ERR_BATTLEGROUND_INFO_THROTTLED = 736, + ERR_BATTLEGROUND_ALREADY_IN = 737, + ERR_ARENA_TEAM_CHANGE_FAILED_QUEUED = 738, + ERR_ARENA_TEAM_PERMISSIONS = 739, + ERR_NOT_WHILE_FALLING = 740, + ERR_NOT_WHILE_MOVING = 741, + ERR_NOT_WHILE_FATIGUED = 742, + ERR_MAX_SOCKETS = 743, + ERR_MULTI_CAST_ACTION_TOTEM_S = 744, + ERR_BATTLEGROUND_JOIN_LEVELUP = 745, + ERR_REMOVE_FROM_PVP_QUEUE_XP_GAIN = 746, + ERR_BATTLEGROUND_JOIN_XP_GAIN = 747, + ERR_BATTLEGROUND_JOIN_MERCENARY = 748, + ERR_BATTLEGROUND_JOIN_TOO_MANY_HEALERS = 749, + ERR_BATTLEGROUND_JOIN_RATED_TOO_MANY_HEALERS = 750, + ERR_BATTLEGROUND_JOIN_TOO_MANY_TANKS = 751, + ERR_BATTLEGROUND_JOIN_TOO_MANY_DAMAGE = 752, + ERR_RAID_DIFFICULTY_FAILED = 753, + ERR_RAID_DIFFICULTY_CHANGED_S = 754, + ERR_LEGACY_RAID_DIFFICULTY_CHANGED_S = 755, + ERR_RAID_LOCKOUT_CHANGED_S = 756, + ERR_RAID_CONVERTED_TO_PARTY = 757, + ERR_PARTY_CONVERTED_TO_RAID = 758, + ERR_PLAYER_DIFFICULTY_CHANGED_S = 759, + ERR_GMRESPONSE_DB_ERROR = 760, + ERR_BATTLEGROUND_JOIN_RANGE_INDEX = 761, + ERR_ARENA_JOIN_RANGE_INDEX = 762, + ERR_REMOVE_FROM_PVP_QUEUE_FACTION_CHANGE = 763, + ERR_BATTLEGROUND_JOIN_FAILED = 764, + ERR_BATTLEGROUND_JOIN_NO_VALID_SPEC_FOR_ROLE = 765, + ERR_BATTLEGROUND_JOIN_RESPEC = 766, + ERR_BATTLEGROUND_INVITATION_DECLINED = 767, + ERR_BATTLEGROUND_INVITATION_DECLINED_BY = 768, + ERR_BATTLEGROUND_JOIN_TIMED_OUT = 769, + ERR_BATTLEGROUND_DUPE_QUEUE = 770, + ERR_BATTLEGROUND_JOIN_MUST_COMPLETE_QUEST = 771, + ERR_IN_BATTLEGROUND_RESPEC = 772, + ERR_MAIL_LIMITED_DURATION_ITEM = 773, + ERR_YELL_RESTRICTED_TRIAL = 774, + ERR_CHAT_RAID_RESTRICTED_TRIAL = 775, + ERR_LFG_ROLE_CHECK_FAILED = 776, + ERR_LFG_ROLE_CHECK_FAILED_TIMEOUT = 777, + ERR_LFG_ROLE_CHECK_FAILED_NOT_VIABLE = 778, + ERR_LFG_READY_CHECK_FAILED = 779, + ERR_LFG_READY_CHECK_FAILED_TIMEOUT = 780, + ERR_LFG_GROUP_FULL = 781, + ERR_LFG_NO_LFG_OBJECT = 782, + ERR_LFG_NO_SLOTS_PLAYER = 783, + ERR_LFG_NO_SLOTS_PARTY = 784, + ERR_LFG_NO_SPEC = 785, + ERR_LFG_MISMATCHED_SLOTS = 786, + ERR_LFG_MISMATCHED_SLOTS_LOCAL_XREALM = 787, + ERR_LFG_PARTY_PLAYERS_FROM_DIFFERENT_REALMS = 788, + ERR_LFG_MEMBERS_NOT_PRESENT = 789, + ERR_LFG_GET_INFO_TIMEOUT = 790, + ERR_LFG_INVALID_SLOT = 791, + ERR_LFG_DESERTER_PLAYER = 792, + ERR_LFG_DESERTER_PARTY = 793, + ERR_LFG_DEAD = 794, + ERR_LFG_RANDOM_COOLDOWN_PLAYER = 795, + ERR_LFG_RANDOM_COOLDOWN_PARTY = 796, + ERR_LFG_TOO_MANY_MEMBERS = 797, + ERR_LFG_TOO_FEW_MEMBERS = 798, + ERR_LFG_PROPOSAL_FAILED = 799, + ERR_LFG_PROPOSAL_DECLINED_SELF = 800, + ERR_LFG_PROPOSAL_DECLINED_PARTY = 801, + ERR_LFG_NO_SLOTS_SELECTED = 802, + ERR_LFG_NO_ROLES_SELECTED = 803, + ERR_LFG_ROLE_CHECK_INITIATED = 804, + ERR_LFG_READY_CHECK_INITIATED = 805, + ERR_LFG_PLAYER_DECLINED_ROLE_CHECK = 806, + ERR_LFG_PLAYER_DECLINED_READY_CHECK = 807, + ERR_LFG_JOINED_QUEUE = 808, + ERR_LFG_JOINED_FLEX_QUEUE = 809, + ERR_LFG_JOINED_RF_QUEUE = 810, + ERR_LFG_JOINED_SCENARIO_QUEUE = 811, + ERR_LFG_JOINED_WORLD_PVP_QUEUE = 812, + ERR_LFG_JOINED_BATTLEFIELD_QUEUE = 813, + ERR_LFG_JOINED_LIST = 814, + ERR_LFG_LEFT_QUEUE = 815, + ERR_LFG_LEFT_LIST = 816, + ERR_LFG_ROLE_CHECK_ABORTED = 817, + ERR_LFG_READY_CHECK_ABORTED = 818, + ERR_LFG_CANT_USE_BATTLEGROUND = 819, + ERR_LFG_CANT_USE_DUNGEONS = 820, + ERR_LFG_REASON_TOO_MANY_LFG = 821, + ERR_LFG_FARM_LIMIT = 822, + ERR_LFG_NO_CROSS_FACTION_PARTIES = 823, + ERR_INVALID_TELEPORT_LOCATION = 824, + ERR_TOO_FAR_TO_INTERACT = 825, + ERR_BATTLEGROUND_PLAYERS_FROM_DIFFERENT_REALMS = 826, + ERR_DIFFICULTY_CHANGE_COOLDOWN_S = 827, + ERR_DIFFICULTY_CHANGE_COMBAT_COOLDOWN_S = 828, + ERR_DIFFICULTY_CHANGE_WORLDSTATE = 829, + ERR_DIFFICULTY_CHANGE_ENCOUNTER = 830, + ERR_DIFFICULTY_CHANGE_COMBAT = 831, + ERR_DIFFICULTY_CHANGE_PLAYER_BUSY = 832, + ERR_DIFFICULTY_CHANGE_PLAYER_ON_VEHICLE = 833, + ERR_DIFFICULTY_CHANGE_ALREADY_STARTED = 834, + ERR_DIFFICULTY_CHANGE_OTHER_HEROIC_S = 835, + ERR_DIFFICULTY_CHANGE_HEROIC_INSTANCE_ALREADY_RUNNING = 836, + ERR_ARENA_TEAM_PARTY_SIZE = 837, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_SIZE = 838, + ERR_SOLO_SHUFFLE_WARGAME_GROUP_COMP = 839, + ERR_SOLO_MIN_ITEM_LEVEL = 840, + ERR_PVP_PLAYER_ABANDONED = 841, + ERR_BATTLEGROUND_JOIN_GROUP_QUEUE_WITHOUT_HEALER = 842, + ERR_QUEST_FORCE_REMOVED_S = 843, + ERR_ATTACK_NO_ACTIONS = 844, + ERR_IN_RANDOM_BG = 845, + ERR_IN_NON_RANDOM_BG = 846, + ERR_BN_FRIEND_SELF = 847, + ERR_BN_FRIEND_ALREADY = 848, + ERR_BN_FRIEND_BLOCKED = 849, + ERR_BN_FRIEND_LIST_FULL = 850, + ERR_BN_FRIEND_REQUEST_SENT = 851, + ERR_BN_BROADCAST_THROTTLE = 852, + ERR_BG_DEVELOPER_ONLY = 853, + ERR_CURRENCY_SPELL_SLOT_MISMATCH = 854, + ERR_CURRENCY_NOT_TRADABLE = 855, + ERR_REQUIRES_EXPANSION_S = 856, + ERR_QUEST_FAILED_SPELL = 857, + ERR_TALENT_FAILED_UNSPENT_TALENT_POINTS = 858, + ERR_TALENT_FAILED_NOT_ENOUGH_TALENTS_IN_PRIMARY_TREE = 859, + ERR_TALENT_FAILED_NO_PRIMARY_TREE_SELECTED = 860, + ERR_TALENT_FAILED_CANT_REMOVE_TALENT = 861, + ERR_TALENT_FAILED_UNKNOWN = 862, + ERR_TALENT_FAILED_IN_COMBAT = 863, + ERR_TALENT_FAILED_IN_PVP_MATCH = 864, + ERR_TALENT_FAILED_IN_MYTHIC_PLUS = 865, + ERR_WARGAME_REQUEST_FAILURE = 866, + ERR_RANK_REQUIRES_AUTHENTICATOR = 867, + ERR_GUILD_BANK_VOUCHER_FAILED = 868, + ERR_WARGAME_REQUEST_SENT = 869, + ERR_REQUIRES_ACHIEVEMENT_I = 870, + ERR_REFUND_RESULT_EXCEED_MAX_CURRENCY = 871, + ERR_CANT_BUY_QUANTITY = 872, + ERR_ITEM_IS_BATTLE_PAY_LOCKED = 873, + ERR_PARTY_ALREADY_IN_BATTLEGROUND_QUEUE = 874, + ERR_PARTY_CONFIRMING_BATTLEGROUND_QUEUE = 875, + ERR_BATTLEFIELD_TEAM_PARTY_SIZE = 876, + ERR_INSUFF_TRACKED_CURRENCY_IS = 877, + ERR_NOT_ON_TOURNAMENT_REALM = 878, + ERR_GUILD_TRIAL_ACCOUNT_TRIAL = 879, + ERR_GUILD_TRIAL_ACCOUNT_VETERAN = 880, + ERR_GUILD_UNDELETABLE_DUE_TO_LEVEL = 881, + ERR_CANT_DO_THAT_IN_A_GROUP = 882, + ERR_GUILD_LEADER_REPLACED = 883, + ERR_TRANSMOGRIFY_CANT_EQUIP = 884, + ERR_TRANSMOGRIFY_INVALID_ITEM_TYPE = 885, + ERR_TRANSMOGRIFY_NOT_SOULBOUND = 886, + ERR_TRANSMOGRIFY_INVALID_SOURCE = 887, + ERR_TRANSMOGRIFY_INVALID_DESTINATION = 888, + ERR_TRANSMOGRIFY_MISMATCH = 889, + ERR_TRANSMOGRIFY_LEGENDARY = 890, + ERR_TRANSMOGRIFY_SAME_ITEM = 891, + ERR_TRANSMOGRIFY_SAME_APPEARANCE = 892, + ERR_TRANSMOGRIFY_NOT_EQUIPPED = 893, + ERR_VOID_DEPOSIT_FULL = 894, + ERR_VOID_WITHDRAW_FULL = 895, + ERR_VOID_STORAGE_WRAPPED = 896, + ERR_VOID_STORAGE_STACKABLE = 897, + ERR_VOID_STORAGE_UNBOUND = 898, + ERR_VOID_STORAGE_REPAIR = 899, + ERR_VOID_STORAGE_CHARGES = 900, + ERR_VOID_STORAGE_QUEST = 901, + ERR_VOID_STORAGE_CONJURED = 902, + ERR_VOID_STORAGE_MAIL = 903, + ERR_VOID_STORAGE_BAG = 904, + ERR_VOID_TRANSFER_STORAGE_FULL = 905, + ERR_VOID_TRANSFER_INV_FULL = 906, + ERR_VOID_TRANSFER_INTERNAL_ERROR = 907, + ERR_VOID_TRANSFER_ITEM_INVALID = 908, + ERR_DIFFICULTY_DISABLED_IN_LFG = 909, + ERR_VOID_STORAGE_UNIQUE = 910, + ERR_VOID_STORAGE_LOOT = 911, + ERR_VOID_STORAGE_HOLIDAY = 912, + ERR_VOID_STORAGE_DURATION = 913, + ERR_VOID_STORAGE_LOAD_FAILED = 914, + ERR_VOID_STORAGE_INVALID_ITEM = 915, + ERR_PARENTAL_CONTROLS_CHAT_MUTED = 916, + ERR_SOR_START_EXPERIENCE_INCOMPLETE = 917, + ERR_SOR_INVALID_EMAIL = 918, + ERR_SOR_INVALID_COMMENT = 919, + ERR_CHALLENGE_MODE_RESET_COOLDOWN_S = 920, + ERR_CHALLENGE_MODE_RESET_KEYSTONE = 921, + ERR_PET_JOURNAL_ALREADY_IN_LOADOUT = 922, + ERR_REPORT_SUBMITTED_SUCCESSFULLY = 923, + ERR_REPORT_SUBMISSION_FAILED = 924, + ERR_SUGGESTION_SUBMITTED_SUCCESSFULLY = 925, + ERR_BUG_SUBMITTED_SUCCESSFULLY = 926, + ERR_CHALLENGE_MODE_ENABLED = 927, + ERR_CHALLENGE_MODE_DISABLED = 928, + ERR_PETBATTLE_CREATE_FAILED = 929, + ERR_PETBATTLE_NOT_HERE = 930, + ERR_PETBATTLE_NOT_HERE_ON_TRANSPORT = 931, + ERR_PETBATTLE_NOT_HERE_UNEVEN_GROUND = 932, + ERR_PETBATTLE_NOT_HERE_OBSTRUCTED = 933, + ERR_PETBATTLE_NOT_WHILE_IN_COMBAT = 934, + ERR_PETBATTLE_NOT_WHILE_DEAD = 935, + ERR_PETBATTLE_NOT_WHILE_FLYING = 936, + ERR_PETBATTLE_TARGET_INVALID = 937, + ERR_PETBATTLE_TARGET_OUT_OF_RANGE = 938, + ERR_PETBATTLE_TARGET_NOT_CAPTURABLE = 939, + ERR_PETBATTLE_NOT_A_TRAINER = 940, + ERR_PETBATTLE_DECLINED = 941, + ERR_PETBATTLE_IN_BATTLE = 942, + ERR_PETBATTLE_INVALID_LOADOUT = 943, + ERR_PETBATTLE_ALL_PETS_DEAD = 944, + ERR_PETBATTLE_NO_PETS_IN_SLOTS = 945, + ERR_PETBATTLE_NO_ACCOUNT_LOCK = 946, + ERR_PETBATTLE_WILD_PET_TAPPED = 947, + ERR_PETBATTLE_RESTRICTED_ACCOUNT = 948, + ERR_PETBATTLE_OPPONENT_NOT_AVAILABLE = 949, + ERR_PETBATTLE_NOT_WHILE_IN_MATCHED_BATTLE = 950, + ERR_CANT_HAVE_MORE_PETS_OF_THAT_TYPE = 951, + ERR_CANT_HAVE_MORE_PETS = 952, + ERR_PVP_MAP_NOT_FOUND = 953, + ERR_PVP_MAP_NOT_SET = 954, + ERR_PETBATTLE_QUEUE_QUEUED = 955, + ERR_PETBATTLE_QUEUE_ALREADY_QUEUED = 956, + ERR_PETBATTLE_QUEUE_JOIN_FAILED = 957, + ERR_PETBATTLE_QUEUE_JOURNAL_LOCK = 958, + ERR_PETBATTLE_QUEUE_REMOVED = 959, + ERR_PETBATTLE_QUEUE_PROPOSAL_DECLINED = 960, + ERR_PETBATTLE_QUEUE_PROPOSAL_TIMEOUT = 961, + ERR_PETBATTLE_QUEUE_OPPONENT_DECLINED = 962, + ERR_PETBATTLE_QUEUE_REQUEUED_INTERNAL = 963, + ERR_PETBATTLE_QUEUE_REQUEUED_REMOVED = 964, + ERR_PETBATTLE_QUEUE_SLOT_LOCKED = 965, + ERR_PETBATTLE_QUEUE_SLOT_EMPTY = 966, + ERR_PETBATTLE_QUEUE_SLOT_NO_TRACKER = 967, + ERR_PETBATTLE_QUEUE_SLOT_NO_SPECIES = 968, + ERR_PETBATTLE_QUEUE_SLOT_CANT_BATTLE = 969, + ERR_PETBATTLE_QUEUE_SLOT_REVOKED = 970, + ERR_PETBATTLE_QUEUE_SLOT_DEAD = 971, + ERR_PETBATTLE_QUEUE_SLOT_NO_PET = 972, + ERR_PETBATTLE_QUEUE_NOT_WHILE_NEUTRAL = 973, + ERR_PETBATTLE_GAME_TIME_LIMIT_WARNING = 974, + ERR_PETBATTLE_GAME_ROUNDS_LIMIT_WARNING = 975, + ERR_HAS_RESTRICTION = 976, + ERR_ITEM_UPGRADE_ITEM_TOO_LOW_LEVEL = 977, + ERR_ITEM_UPGRADE_NO_PATH = 978, + ERR_ITEM_UPGRADE_NO_MORE_UPGRADES = 979, + ERR_BONUS_ROLL_EMPTY = 980, + ERR_CHALLENGE_MODE_FULL = 981, + ERR_CHALLENGE_MODE_IN_PROGRESS = 982, + ERR_CHALLENGE_MODE_INCORRECT_KEYSTONE = 983, + ERR_BATTLETAG_FRIEND_NOT_FOUND = 984, + ERR_BATTLETAG_FRIEND_NOT_VALID = 985, + ERR_BATTLETAG_FRIEND_NOT_ALLOWED = 986, + ERR_BATTLETAG_FRIEND_THROTTLED = 987, + ERR_BATTLETAG_FRIEND_SUCCESS = 988, + ERR_PET_TOO_HIGH_LEVEL_TO_UNCAGE = 989, + ERR_PETBATTLE_INTERNAL = 990, + ERR_CANT_CAGE_PET_YET = 991, + ERR_NO_LOOT_IN_CHALLENGE_MODE = 992, + ERR_QUEST_PET_BATTLE_VICTORIES_PVP_II = 993, + ERR_ROLE_CHECK_ALREADY_IN_PROGRESS = 994, + ERR_RECRUIT_A_FRIEND_ACCOUNT_LIMIT = 995, + ERR_RECRUIT_A_FRIEND_FAILED = 996, + ERR_SET_LOOT_PERSONAL = 997, + ERR_SET_LOOT_METHOD_FAILED_COMBAT = 998, + ERR_REAGENT_BANK_FULL = 999, + ERR_REAGENT_BANK_LOCKED = 1000, + ERR_GARRISON_BUILDING_EXISTS = 1001, + ERR_GARRISON_INVALID_PLOT = 1002, + ERR_GARRISON_INVALID_BUILDINGID = 1003, + ERR_GARRISON_INVALID_PLOT_BUILDING = 1004, + ERR_GARRISON_REQUIRES_BLUEPRINT = 1005, + ERR_GARRISON_NOT_ENOUGH_CURRENCY = 1006, + ERR_GARRISON_NOT_ENOUGH_GOLD = 1007, + ERR_GARRISON_COMPLETE_MISSION_WRONG_FOLLOWER_TYPE = 1008, + ERR_ALREADY_USING_LFG_LIST = 1009, + ERR_RESTRICTED_ACCOUNT_LFG_LIST_TRIAL = 1010, + ERR_TOY_USE_LIMIT_REACHED = 1011, + ERR_TOY_ALREADY_KNOWN = 1012, + ERR_TRANSMOG_SET_ALREADY_KNOWN = 1013, + ERR_NOT_ENOUGH_CURRENCY = 1014, + ERR_SPEC_IS_DISABLED = 1015, + ERR_FEATURE_RESTRICTED_TRIAL = 1016, + ERR_CANT_BE_OBLITERATED = 1017, + ERR_CANT_BE_SCRAPPED = 1018, + ERR_CANT_BE_RECRAFTED = 1019, + ERR_ARTIFACT_RELIC_DOES_NOT_MATCH_ARTIFACT = 1020, + ERR_MUST_EQUIP_ARTIFACT = 1021, + ERR_CANT_DO_THAT_RIGHT_NOW = 1022, + ERR_AFFECTING_COMBAT = 1023, + ERR_EQUIPMENT_MANAGER_COMBAT_SWAP_S = 1024, + ERR_EQUIPMENT_MANAGER_BAGS_FULL = 1025, + ERR_EQUIPMENT_MANAGER_MISSING_ITEM_S = 1026, + ERR_MOVIE_RECORDING_WARNING_PERF = 1027, + ERR_MOVIE_RECORDING_WARNING_DISK_FULL = 1028, + ERR_MOVIE_RECORDING_WARNING_NO_MOVIE = 1029, + ERR_MOVIE_RECORDING_WARNING_REQUIREMENTS = 1030, + ERR_MOVIE_RECORDING_WARNING_COMPRESSING = 1031, + ERR_NO_CHALLENGE_MODE_REWARD = 1032, + ERR_CLAIMED_CHALLENGE_MODE_REWARD = 1033, + ERR_CHALLENGE_MODE_PERIOD_RESET_SS = 1034, + ERR_CANT_DO_THAT_CHALLENGE_MODE_ACTIVE = 1035, + ERR_TALENT_FAILED_REST_AREA = 1036, + ERR_CANNOT_ABANDON_LAST_PET = 1037, + ERR_TEST_CVAR_SET_SSS = 1038, + ERR_QUEST_TURN_IN_FAIL_REASON = 1039, + ERR_CLAIMED_CHALLENGE_MODE_REWARD_OLD = 1040, + ERR_TALENT_GRANTED_BY_AURA = 1041, + ERR_CHALLENGE_MODE_ALREADY_COMPLETE = 1042, + ERR_GLYPH_TARGET_NOT_AVAILABLE = 1043, + ERR_PVP_WARMODE_TOGGLE_ON = 1044, + ERR_PVP_WARMODE_TOGGLE_OFF = 1045, + ERR_SPELL_FAILED_LEVEL_REQUIREMENT = 1046, + ERR_SPELL_FAILED_CANT_FLY_HERE = 1047, + ERR_BATTLEGROUND_JOIN_REQUIRES_LEVEL = 1048, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED = 1049, + ERR_BATTLEGROUND_JOIN_DISQUALIFIED_NO_NAME = 1050, + ERR_VOICE_CHAT_GENERIC_UNABLE_TO_CONNECT = 1051, + ERR_VOICE_CHAT_SERVICE_LOST = 1052, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_SHORT = 1053, + ERR_VOICE_CHAT_CHANNEL_NAME_TOO_LONG = 1054, + ERR_VOICE_CHAT_CHANNEL_ALREADY_EXISTS = 1055, + ERR_VOICE_CHAT_TARGET_NOT_FOUND = 1056, + ERR_VOICE_CHAT_TOO_MANY_REQUESTS = 1057, + ERR_VOICE_CHAT_PLAYER_SILENCED = 1058, + ERR_VOICE_CHAT_PARENTAL_DISABLE_ALL = 1059, + ERR_VOICE_CHAT_DISABLED = 1060, + ERR_NO_PVP_REWARD = 1061, + ERR_CLAIMED_PVP_REWARD = 1062, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_ESSENCE_NOT_UNLOCKED = 1063, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CANT_REMOVE_ESSENCE = 1064, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_CONDITION_FAILED = 1065, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_REST_AREA = 1066, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_SLOT_LOCKED = 1067, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_AT_FORGE = 1068, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_HEART_LEVEL_TOO_LOW = 1069, + ERR_AZERITE_ESSENCE_SELECTION_FAILED_NOT_EQUIPPED = 1070, + ERR_SOCKETING_REQUIRES_PUNCHCARDRED_GEM = 1071, + ERR_SOCKETING_PUNCHCARDRED_GEM_ONLY_IN_PUNCHCARDREDSLOT = 1072, + ERR_SOCKETING_REQUIRES_PUNCHCARDYELLOW_GEM = 1073, + ERR_SOCKETING_PUNCHCARDYELLOW_GEM_ONLY_IN_PUNCHCARDYELLOWSLOT = 1074, + ERR_SOCKETING_REQUIRES_PUNCHCARDBLUE_GEM = 1075, + ERR_SOCKETING_PUNCHCARDBLUE_GEM_ONLY_IN_PUNCHCARDBLUESLOT = 1076, + ERR_SOCKETING_REQUIRES_DOMINATION_SHARD = 1077, + ERR_SOCKETING_DOMINATION_SHARD_ONLY_IN_DOMINATIONSLOT = 1078, + ERR_SOCKETING_REQUIRES_CYPHER_GEM = 1079, + ERR_SOCKETING_CYPHER_GEM_ONLY_IN_CYPHERSLOT = 1080, + ERR_SOCKETING_REQUIRES_TINKER_GEM = 1081, + ERR_SOCKETING_TINKER_GEM_ONLY_IN_TINKERSLOT = 1082, + ERR_SOCKETING_REQUIRES_PRIMORDIAL_GEM = 1083, + ERR_SOCKETING_PRIMORDIAL_GEM_ONLY_IN_PRIMORDIALSLOT = 1084, + ERR_LEVEL_LINKING_RESULT_LINKED = 1085, + ERR_LEVEL_LINKING_RESULT_UNLINKED = 1086, + ERR_CLUB_FINDER_ERROR_POST_CLUB = 1087, + ERR_CLUB_FINDER_ERROR_APPLY_CLUB = 1088, + ERR_CLUB_FINDER_ERROR_RESPOND_APPLICANT = 1089, + ERR_CLUB_FINDER_ERROR_CANCEL_APPLICATION = 1090, + ERR_CLUB_FINDER_ERROR_TYPE_ACCEPT_APPLICATION = 1091, + ERR_CLUB_FINDER_ERROR_TYPE_NO_INVITE_PERMISSIONS = 1092, + ERR_CLUB_FINDER_ERROR_TYPE_NO_POSTING_PERMISSIONS = 1093, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST = 1094, + ERR_CLUB_FINDER_ERROR_TYPE_APPLICANT_LIST_NO_PERM = 1095, + ERR_CLUB_FINDER_ERROR_TYPE_FINDER_NOT_AVAILABLE = 1096, + ERR_CLUB_FINDER_ERROR_TYPE_GET_POSTING_IDS = 1097, + ERR_CLUB_FINDER_ERROR_TYPE_JOIN_APPLICATION = 1098, + ERR_CLUB_FINDER_ERROR_TYPE_REALM_NOT_ELIGIBLE = 1099, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_RENAME = 1100, + ERR_CLUB_FINDER_ERROR_TYPE_FLAGGED_DESCRIPTION_CHANGE = 1101, + ERR_ITEM_INTERACTION_NOT_ENOUGH_GOLD = 1102, + ERR_ITEM_INTERACTION_NOT_ENOUGH_CURRENCY = 1103, + ERR_ITEM_INTERACTION_NO_CONVERSION_OUTPUT = 1104, + ERR_PLAYER_CHOICE_ERROR_PENDING_CHOICE = 1105, + ERR_SOULBIND_INVALID_CONDUIT = 1106, + ERR_SOULBIND_INVALID_CONDUIT_ITEM = 1107, + ERR_SOULBIND_INVALID_TALENT = 1108, + ERR_SOULBIND_DUPLICATE_CONDUIT = 1109, + ERR_ACTIVATE_SOULBIND_S = 1110, + ERR_ACTIVATE_SOULBIND_FAILED_REST_AREA = 1111, + ERR_CANT_USE_PROFANITY = 1112, + ERR_NOT_IN_PET_BATTLE = 1113, + ERR_NOT_IN_NPE = 1114, + ERR_NO_SPEC = 1115, + ERR_NO_DOMINATIONSHARD_OVERWRITE = 1116, + ERR_USE_WEEKLY_REWARDS_DISABLED = 1117, + ERR_CROSS_FACTION_GROUP_JOINED = 1118, + ERR_CANT_TARGET_UNFRIENDLY_IN_OVERWORLD = 1119, + ERR_EQUIPABLESPELLS_SLOTS_FULL = 1120, + ERR_ITEM_MOD_APPEARANCE_GROUP_ALREADY_KNOWN = 1121, + ERR_CANT_BULK_SELL_ITEM_WITH_REFUND = 1122, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_IS_FULL = 1123, + ERR_WOW_LABS_PARTY_ERROR_TYPE_MAX_INVITE_SENT = 1124, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PLAYER_ALREADY_INVITED = 1125, + ERR_WOW_LABS_PARTY_ERROR_TYPE_PARTY_INVITE_INVALID = 1126, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_ENTER_QUEUE_FAILED = 1127, + ERR_WOW_LABS_LOBBY_MATCHMAKER_ERROR_LEAVE_QUEUE_FAILED = 1128, }; enum class MountResult : uint32 diff --git a/src/server/game/Quests/QuestDef.h b/src/server/game/Quests/QuestDef.h index 38410aefa0d..ba7a0470c4f 100644 --- a/src/server/game/Quests/QuestDef.h +++ b/src/server/game/Quests/QuestDef.h @@ -349,6 +349,7 @@ enum QuestObjectiveType QUEST_OBJECTIVE_INCREASE_REPUTATION = 18, // requires the player to gain X reputation with a faction QUEST_OBJECTIVE_AREA_TRIGGER_ENTER = 19, QUEST_OBJECTIVE_AREA_TRIGGER_EXIT = 20, + QUEST_OBJECTIVE_KILL_WITH_LABEL = 21, MAX_QUEST_OBJECTIVE_TYPE }; @@ -466,6 +467,7 @@ struct QuestObjective case QUEST_OBJECTIVE_HAVE_CURRENCY: case QUEST_OBJECTIVE_OBTAIN_CURRENCY: case QUEST_OBJECTIVE_INCREASE_REPUTATION: + case QUEST_OBJECTIVE_KILL_WITH_LABEL: return true; default: break; diff --git a/src/server/game/Server/Packets/AuthenticationPackets.cpp b/src/server/game/Server/Packets/AuthenticationPackets.cpp index 1df518c7b9d..ffb64f59c0d 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.cpp +++ b/src/server/game/Server/Packets/AuthenticationPackets.cpp @@ -102,7 +102,9 @@ ByteBuffer& operator<<(ByteBuffer& data, WorldPackets::Auth::AuthWaitInfo const& { data << uint32(waitInfo.WaitCount); data << uint32(waitInfo.WaitTime); + data << uint32(waitInfo.AllowedFactionGroupForCharacterCreate); data.WriteBit(waitInfo.HasFCM); + data.WriteBit(waitInfo.CanCreateOnlyIfExisting); data.FlushBits(); return data; diff --git a/src/server/game/Server/Packets/AuthenticationPackets.h b/src/server/game/Server/Packets/AuthenticationPackets.h index 62c11af2201..9b733f67728 100644 --- a/src/server/game/Server/Packets/AuthenticationPackets.h +++ b/src/server/game/Server/Packets/AuthenticationPackets.h @@ -102,7 +102,9 @@ namespace WorldPackets { uint32 WaitCount = 0; ///< position of the account in the login queue uint32 WaitTime = 0; ///< Wait time in login queue in minutes, if sent queued and this value is 0 client displays "unknown time" + int32 AllowedFactionGroupForCharacterCreate = 0; bool HasFCM = false; ///< true if the account has a forced character migration pending. @todo implement + bool CanCreateOnlyIfExisting = false; ///< Can create characters on realm only if player has other existing characters there }; struct VirtualRealmNameInfo diff --git a/src/server/game/Server/Packets/ChatPackets.cpp b/src/server/game/Server/Packets/ChatPackets.cpp index 7691c8f8d0f..e347f3bc150 100644 --- a/src/server/game/Server/Packets/ChatPackets.cpp +++ b/src/server/game/Server/Packets/ChatPackets.cpp @@ -310,7 +310,7 @@ WorldPacket const* WorldPackets::Chat::ChatPlayerAmbiguous::Write() WorldPacket const* WorldPackets::Chat::ChatRestricted::Write() { - _worldPacket << uint8(Reason); + _worldPacket << int32(Reason); return &_worldPacket; } diff --git a/src/server/game/Server/Packets/ChatPackets.h b/src/server/game/Server/Packets/ChatPackets.h index f2ef6c3d502..3755754bec1 100644 --- a/src/server/game/Server/Packets/ChatPackets.h +++ b/src/server/game/Server/Packets/ChatPackets.h @@ -320,11 +320,11 @@ namespace WorldPackets class ChatRestricted final : public ServerPacket { public: - ChatRestricted() : ServerPacket(SMSG_CHAT_RESTRICTED, 1) { } + ChatRestricted() : ServerPacket(SMSG_CHAT_RESTRICTED, 4) { } WorldPacket const* Write() override; - uint8 Reason = 0; + int32 Reason = 0; }; class CanLocalWhisperTargetRequest final : public ClientPacket diff --git a/src/server/game/Server/Packets/LootPackets.h b/src/server/game/Server/Packets/LootPackets.h index b553c8275cc..cd7c6212369 100644 --- a/src/server/game/Server/Packets/LootPackets.h +++ b/src/server/game/Server/Packets/LootPackets.h @@ -226,7 +226,7 @@ namespace WorldPackets Duration<Milliseconds, uint32> RollTime; uint8 Method = 0; uint8 ValidRolls = 0; - std::array<LootRollIneligibilityReason, 4> LootRollIneligibleReason = { }; + std::array<LootRollIneligibilityReason, 5> LootRollIneligibleReason = { }; LootItemData Item; int32 DungeonEncounterID = 0; }; diff --git a/src/server/game/Server/Packets/QueryPackets.cpp b/src/server/game/Server/Packets/QueryPackets.cpp index 513a7bffb45..ccc9ec8ba94 100644 --- a/src/server/game/Server/Packets/QueryPackets.cpp +++ b/src/server/game/Server/Packets/QueryPackets.cpp @@ -112,6 +112,7 @@ WorldPacket const* QueryCreatureResponse::Write() _worldPacket << float(Stats.HpMulti); _worldPacket << float(Stats.EnergyMulti); _worldPacket << uint32(Stats.QuestItems.size()); + _worldPacket << uint32(Stats.QuestCurrencies.size()); _worldPacket << int32(Stats.CreatureMovementInfoID); _worldPacket << int32(Stats.HealthScalingExpansion); _worldPacket << int32(Stats.RequiredExpansion); @@ -132,6 +133,9 @@ WorldPacket const* QueryCreatureResponse::Write() if (!Stats.QuestItems.empty()) _worldPacket.append(Stats.QuestItems.data(), Stats.QuestItems.size()); + + if (!Stats.QuestCurrencies.empty()) + _worldPacket.append(Stats.QuestCurrencies.data(), Stats.QuestCurrencies.size()); } return &_worldPacket; diff --git a/src/server/game/Server/Packets/QueryPackets.h b/src/server/game/Server/Packets/QueryPackets.h index 3b2f9dfb1c8..d9c482e9b9e 100644 --- a/src/server/game/Server/Packets/QueryPackets.h +++ b/src/server/game/Server/Packets/QueryPackets.h @@ -72,6 +72,7 @@ namespace WorldPackets float EnergyMulti = 0.0f; bool Leader = false; std::vector<int32> QuestItems; + std::vector<int32> QuestCurrencies; uint32 CreatureMovementInfoID = 0; int32 HealthScalingExpansion = 0; uint32 RequiredExpansion = 0; diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index 7d6888255c9..3b29a643deb 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -2059,6 +2059,9 @@ void World::SetInitialWorldSettings() TC_LOG_INFO("server.loading", "Loading Creature Quest Items..."); sObjectMgr->LoadCreatureQuestItems(); + TC_LOG_INFO("server.loading", "Loading Creature Quest Currencies..."); + sObjectMgr->LoadCreatureQuestCurrencies(); + TC_LOG_INFO("server.loading", "Loading Creature Linked Respawn..."); sObjectMgr->LoadLinkedRespawn(); // must be after LoadCreatures(), LoadGameObjects() diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 7e9a54e2879..e995cdf7a52 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -1113,13 +1113,6 @@ public: } uint32 offset = area->AreaBit / PLAYER_EXPLORED_ZONES_BITS; - if (offset >= PLAYER_EXPLORED_ZONES_SIZE) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - uint64 val = UI64LIT(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); playerTarget->AddExploredZones(offset, val); @@ -1153,13 +1146,6 @@ public: } uint32 offset = area->AreaBit / PLAYER_EXPLORED_ZONES_BITS; - if (offset >= PLAYER_EXPLORED_ZONES_SIZE) - { - handler->SendSysMessage(LANG_BAD_VALUE); - handler->SetSentErrorMessage(true); - return false; - } - uint64 val = UI64LIT(1) << (area->AreaBit % PLAYER_EXPLORED_ZONES_BITS); playerTarget->RemoveExploredZones(offset, val); diff --git a/src/tools/map_extractor/loadlib/DBFilesClientList.h b/src/tools/map_extractor/loadlib/DBFilesClientList.h index 747d5774301..c1c319a85cd 100644 --- a/src/tools/map_extractor/loadlib/DBFilesClientList.h +++ b/src/tools/map_extractor/loadlib/DBFilesClientList.h @@ -563,6 +563,12 @@ DB2FileInfo const DBFilesClientList[] = { 1465904, "ModelAnimCloakDampening.db2" }, { 1337833, "ModelFileData.db2" }, { 1399953, "ModelRibbonQuality.db2" }, + { 5393273, "ModelSound.db2" }, + { 5393274, "ModelSoundAnimEntry.db2" }, + { 5393275, "ModelSoundEntry.db2" }, + { 5393276, "ModelSoundOverride.db2" }, + { 5512584, "ModelSoundOverrideName.db2" }, + { 5393277, "ModelSoundTagEntry.db2" }, { 3386486, "ModifiedCraftingCategory.db2" }, { 4530643, "ModifiedCraftingItem.db2" }, { 3386487, "ModifiedCraftingReagentItem.db2" }, @@ -621,6 +627,7 @@ DB2FileInfo const DBFilesClientList[] = { 801734, "PathNodeProperty.db2" }, { 801735, "PathProperty.db2" }, { 4519766, "PerksActivity.db2" }, + { 5524226, "PerksActivityCondition.db2" }, { 4694317, "PerksActivityTag.db2" }, { 4519767, "PerksActivityThreshold.db2" }, { 4519768, "PerksActivityThresholdGroup.db2" }, @@ -638,6 +645,8 @@ DB2FileInfo const DBFilesClientList[] = { 987581, "PhaseXPhaseGroup.db2" }, { 5152358, "PingType.db2" }, { 1045411, "PlayerCondition.db2" }, + { 5426706, "PlayerDataFlagAccount.db2" }, + { 5426708, "PlayerDataFlagCharacter.db2" }, { 1251523, "Positioner.db2" }, { 1251506, "PositionerState.db2" }, { 1251533, "PositionerStateEntry.db2" }, |