aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/updates/hotfixes/master/2021_10_31_00_hotfixes.sql440
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp66
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.h38
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h226
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp64
-rw-r--r--src/server/game/DataStores/DB2Stores.h12
-rw-r--r--src/server/game/DataStores/DB2Structure.h141
7 files changed, 986 insertions, 1 deletions
diff --git a/sql/updates/hotfixes/master/2021_10_31_00_hotfixes.sql b/sql/updates/hotfixes/master/2021_10_31_00_hotfixes.sql
new file mode 100644
index 00000000000..0a4dcad2ad1
--- /dev/null
+++ b/sql/updates/hotfixes/master/2021_10_31_00_hotfixes.sql
@@ -0,0 +1,440 @@
+--
+-- Table structure for table `currency_container`
+--
+DROP TABLE IF EXISTS `currency_container`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `currency_container` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `ContainerName` text,
+ `ContainerDescription` text,
+ `MinAmount` int(11) NOT NULL DEFAULT '0',
+ `MaxAmount` int(11) NOT NULL DEFAULT '0',
+ `ContainerIconID` int(11) NOT NULL DEFAULT '0',
+ `ContainerQuality` int(11) NOT NULL DEFAULT '0',
+ `OnLootSpellVisualKitID` int(11) NOT NULL DEFAULT '0',
+ `CurrencyTypesID` int(10) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `currency_container_locale`
+--
+DROP TABLE IF EXISTS `currency_container_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `currency_container_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `ContainerName_lang` text,
+ `ContainerDescription_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `garr_mission`
+--
+DROP TABLE IF EXISTS `garr_mission`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `garr_mission` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Name` text,
+ `Location` text,
+ `Description` text,
+ `MapPosX` float NOT NULL DEFAULT '0',
+ `MapPosY` float NOT NULL DEFAULT '0',
+ `WorldPosX` float NOT NULL DEFAULT '0',
+ `WorldPosY` float NOT NULL DEFAULT '0',
+ `GarrTypeID` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `GarrMissionTypeID` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `GarrFollowerTypeID` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `MaxFollowers` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `MissionCost` int(10) unsigned NOT NULL DEFAULT '0',
+ `MissionCostCurrencyTypesID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `OfferedGarrMissionTextureID` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `UiTextureKitID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `EnvGarrMechanicID` int(10) unsigned NOT NULL DEFAULT '0',
+ `EnvGarrMechanicTypeID` int(11) NOT NULL DEFAULT '0',
+ `PlayerConditionID` int(10) unsigned NOT NULL DEFAULT '0',
+ `GarrMissionSetID` int(11) NOT NULL DEFAULT '0',
+ `TargetLevel` tinyint(4) NOT NULL DEFAULT '0',
+ `TargetItemLevel` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `MissionDuration` int(11) NOT NULL DEFAULT '0',
+ `TravelDuration` int(11) NOT NULL DEFAULT '0',
+ `OfferDuration` int(10) unsigned NOT NULL DEFAULT '0',
+ `BaseCompletionChance` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `BaseFollowerXP` int(10) unsigned NOT NULL DEFAULT '0',
+ `OvermaxRewardPackID` int(10) unsigned NOT NULL DEFAULT '0',
+ `FollowerDeathChance` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `AreaID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Flags` int(10) unsigned NOT NULL DEFAULT '0',
+ `AutoMissionScalar` float NOT NULL DEFAULT '0',
+ `AutoMissionScalarCurveID` int(11) NOT NULL DEFAULT '0',
+ `AutoCombatantEnvCasterID` int(11) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `garr_mission_locale`
+--
+DROP TABLE IF EXISTS `garr_mission_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `garr_mission_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `Location_lang` text,
+ `Description_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_encounter`
+--
+DROP TABLE IF EXISTS `journal_encounter`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_encounter` (
+ `Name` text,
+ `Description` text,
+ `MapX` float NOT NULL DEFAULT '0',
+ `MapY` float NOT NULL DEFAULT '0',
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `JournalInstanceID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `DungeonEncounterID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `OrderIndex` int(10) unsigned NOT NULL DEFAULT '0',
+ `FirstSectionID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `UiMapID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `MapDisplayConditionID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Flags` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `DifficultyMask` tinyint(4) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_encounter_locale`
+--
+DROP TABLE IF EXISTS `journal_encounter_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_encounter_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `Description_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_encounter_section`
+--
+DROP TABLE IF EXISTS `journal_encounter_section`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_encounter_section` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Title` text,
+ `BodyText` text,
+ `JournalEncounterID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `OrderIndex` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `ParentSectionID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `FirstChildSectionID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `NextSiblingSectionID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Type` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `IconCreatureDisplayInfoID` int(10) unsigned NOT NULL DEFAULT '0',
+ `UiModelSceneID` int(11) NOT NULL DEFAULT '0',
+ `SpellID` int(11) NOT NULL DEFAULT '0',
+ `IconFileDataID` int(11) NOT NULL DEFAULT '0',
+ `Flags` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `IconFlags` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `DifficultyMask` tinyint(4) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_encounter_section_locale`
+--
+DROP TABLE IF EXISTS `journal_encounter_section_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_encounter_section_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Title_lang` text,
+ `BodyText_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_instance`
+--
+DROP TABLE IF EXISTS `journal_instance`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_instance` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Name` text,
+ `Description` text,
+ `MapID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `BackgroundFileDataID` int(11) NOT NULL DEFAULT '0',
+ `ButtonFileDataID` int(11) NOT NULL DEFAULT '0',
+ `ButtonSmallFileDataID` int(11) NOT NULL DEFAULT '0',
+ `LoreFileDataID` int(11) NOT NULL DEFAULT '0',
+ `OrderIndex` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `Flags` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `AreaID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_instance_locale`
+--
+DROP TABLE IF EXISTS `journal_instance_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_instance_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `Description_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_tier`
+--
+DROP TABLE IF EXISTS `journal_tier`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_tier` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Name` text,
+ `PlayerConditionID` int(11) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `journal_tier_locale`
+--
+DROP TABLE IF EXISTS `journal_tier_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `journal_tier_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `keystone_affix`
+--
+DROP TABLE IF EXISTS `keystone_affix`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `keystone_affix` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Name` text,
+ `Description` text,
+ `FiledataID` int(11) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `keystone_affix_locale`
+--
+DROP TABLE IF EXISTS `keystone_affix_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `keystone_affix_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `Description_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `map_challenge_mode`
+--
+DROP TABLE IF EXISTS `map_challenge_mode`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `map_challenge_mode` (
+ `Name` text,
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `MapID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `Flags` tinyint(3) unsigned NOT NULL DEFAULT '0',
+ `ExpansionLevel` int(10) unsigned NOT NULL DEFAULT '0',
+ `CriteriaCount1` smallint(6) NOT NULL DEFAULT '0',
+ `CriteriaCount2` smallint(6) NOT NULL DEFAULT '0',
+ `CriteriaCount3` smallint(6) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `map_challenge_mode_locale`
+--
+DROP TABLE IF EXISTS `map_challenge_mode_locale`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `map_challenge_mode_locale` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `locale` varchar(4) NOT NULL,
+ `Name_lang` text,
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`locale`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
+/*!50500 PARTITION BY LIST COLUMNS(locale)
+(PARTITION deDE VALUES IN ('deDE') ENGINE = InnoDB,
+ PARTITION esES VALUES IN ('esES') ENGINE = InnoDB,
+ PARTITION esMX VALUES IN ('esMX') ENGINE = InnoDB,
+ PARTITION frFR VALUES IN ('frFR') ENGINE = InnoDB,
+ PARTITION itIT VALUES IN ('itIT') ENGINE = InnoDB,
+ PARTITION koKR VALUES IN ('koKR') ENGINE = InnoDB,
+ PARTITION ptBR VALUES IN ('ptBR') ENGINE = InnoDB,
+ PARTITION ruRU VALUES IN ('ruRU') ENGINE = InnoDB,
+ PARTITION zhCN VALUES IN ('zhCN') ENGINE = InnoDB,
+ PARTITION zhTW VALUES IN ('zhTW') ENGINE = InnoDB) */;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `maw_power`
+--
+DROP TABLE IF EXISTS `maw_power`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `maw_power` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `SpellID` int(11) NOT NULL DEFAULT '0',
+ `MawPowerRarityID` int(11) NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
+
+--
+-- Table structure for table `soulbind_conduit_rank`
+--
+DROP TABLE IF EXISTS `soulbind_conduit_rank`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `soulbind_conduit_rank` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `RankIndex` int(11) NOT NULL DEFAULT '0',
+ `SpellID` int(11) NOT NULL DEFAULT '0',
+ `AuraPointsOverride` float NOT NULL DEFAULT '0',
+ `SoulbindConduitID` int(10) unsigned NOT NULL DEFAULT '0',
+ `VerifiedBuild` int(11) NOT NULL DEFAULT '0',
+ PRIMARY KEY (`ID`,`VerifiedBuild`)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
+/*!40101 SET character_set_client = @saved_cs_client */;
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index b470ba8cdd9..4c3570616ed 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -481,6 +481,13 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_LOCALE_STMT(HOTFIX_SEL_CRITERIA_TREE, "SELECT ID, Description_lang FROM criteria_tree_locale WHERE (`VerifiedBuild` > 0) = ?"
" AND locale = ?", CONNECTION_SYNCH);
+ // CurrencyContainer.db2
+ PrepareStatement(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT ID, ContainerName, ContainerDescription, MinAmount, MaxAmount, ContainerIconID, "
+ "ContainerQuality, OnLootSpellVisualKitID, CurrencyTypesID FROM currency_container WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT MAX(ID) + 1 FROM currency_container", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_CURRENCY_CONTAINER, "SELECT ID, ContainerName_lang, ContainerDescription_lang FROM currency_container_locale"
+ " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
// CurrencyTypes.db2
PrepareStatement(HOTFIX_SEL_CURRENCY_TYPES, "SELECT ID, Name, Description, CategoryID, InventoryIconFileID, SpellWeight, SpellCategory, MaxQty, "
"MaxEarnablePerWeek, Quality, FactionID, ItemGroupSoundsID, XpQuestDifficulty, AwardConditionID, MaxQtyWorldStateID, Flags1, Flags2"
@@ -643,6 +650,16 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" FROM garr_follower_x_ability WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY, "SELECT MAX(ID) + 1 FROM garr_follower_x_ability", CONNECTION_SYNCH);
+ // GarrMission.db2
+ PrepareStatement(HOTFIX_SEL_GARR_MISSION, "SELECT ID, Name, Location, Description, MapPosX, MapPosY, WorldPosX, WorldPosY, GarrTypeID, "
+ "GarrMissionTypeID, GarrFollowerTypeID, MaxFollowers, MissionCost, MissionCostCurrencyTypesID, OfferedGarrMissionTextureID, UiTextureKitID, "
+ "EnvGarrMechanicID, EnvGarrMechanicTypeID, PlayerConditionID, GarrMissionSetID, TargetLevel, TargetItemLevel, MissionDuration, "
+ "TravelDuration, OfferDuration, BaseCompletionChance, BaseFollowerXP, OvermaxRewardPackID, FollowerDeathChance, AreaID, Flags, "
+ "AutoMissionScalar, AutoMissionScalarCurveID, AutoCombatantEnvCasterID FROM garr_mission WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_GARR_MISSION, "SELECT MAX(ID) + 1 FROM garr_mission", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_GARR_MISSION, "SELECT ID, Name_lang, Location_lang, Description_lang FROM garr_mission_locale"
+ " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
// GarrPlot.db2
PrepareStatement(HOTFIX_SEL_GARR_PLOT, "SELECT ID, Name, PlotType, HordeConstructObjID, AllianceConstructObjID, Flags, UiCategoryID, "
"UpgradeRequirement1, UpgradeRequirement2 FROM garr_plot WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
@@ -940,12 +957,45 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PrepareStatement(HOTFIX_SEL_ITEM_X_ITEM_EFFECT, "SELECT ID, ItemEffectID, ItemID FROM item_x_item_effect WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_ITEM_X_ITEM_EFFECT, "SELECT MAX(ID) + 1 FROM item_x_item_effect", CONNECTION_SYNCH);
+ // JournalEncounter.db2
+ PrepareStatement(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT Name, Description, MapX, MapY, ID, JournalInstanceID, DungeonEncounterID, OrderIndex, "
+ "FirstSectionID, UiMapID, MapDisplayConditionID, Flags, DifficultyMask FROM journal_encounter WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT MAX(ID) + 1 FROM journal_encounter", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER, "SELECT ID, Name_lang, Description_lang FROM journal_encounter_locale"
+ " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
+ // JournalEncounterSection.db2
+ PrepareStatement(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT ID, Title, BodyText, JournalEncounterID, OrderIndex, ParentSectionID, "
+ "FirstChildSectionID, NextSiblingSectionID, Type, IconCreatureDisplayInfoID, UiModelSceneID, SpellID, IconFileDataID, Flags, IconFlags, "
+ "DifficultyMask FROM journal_encounter_section WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT MAX(ID) + 1 FROM journal_encounter_section", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION, "SELECT ID, Title_lang, BodyText_lang FROM journal_encounter_section_locale"
+ " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
+ // JournalInstance.db2
+ PrepareStatement(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT ID, Name, Description, MapID, BackgroundFileDataID, ButtonFileDataID, "
+ "ButtonSmallFileDataID, LoreFileDataID, OrderIndex, Flags, AreaID FROM journal_instance WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT MAX(ID) + 1 FROM journal_instance", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_INSTANCE, "SELECT ID, Name_lang, Description_lang FROM journal_instance_locale"
+ " WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
+ // JournalTier.db2
+ PrepareStatement(HOTFIX_SEL_JOURNAL_TIER, "SELECT ID, Name, PlayerConditionID FROM journal_tier WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_JOURNAL_TIER, "SELECT MAX(ID) + 1 FROM journal_tier", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_JOURNAL_TIER, "SELECT ID, Name_lang FROM journal_tier_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+
// Keychain.db2
PrepareStatement(HOTFIX_SEL_KEYCHAIN, "SELECT ID, Key1, Key2, Key3, Key4, Key5, Key6, Key7, Key8, Key9, Key10, Key11, Key12, Key13, Key14, Key15, "
"Key16, Key17, Key18, Key19, Key20, Key21, Key22, Key23, Key24, Key25, Key26, Key27, Key28, Key29, Key30, Key31, Key32 FROM keychain"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_KEYCHAIN, "SELECT MAX(ID) + 1 FROM keychain", CONNECTION_SYNCH);
+ // KeystoneAffix.db2
+ PrepareStatement(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT ID, Name, Description, FiledataID FROM keystone_affix WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT MAX(ID) + 1 FROM keystone_affix", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_KEYSTONE_AFFIX, "SELECT ID, Name_lang, Description_lang FROM keystone_affix_locale WHERE (`VerifiedBuild` > 0) = ?"
+ " AND locale = ?", CONNECTION_SYNCH);
+
// LanguageWords.db2
PrepareStatement(HOTFIX_SEL_LANGUAGE_WORDS, "SELECT ID, Word, LanguageID FROM language_words WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_LANGUAGE_WORDS, "SELECT MAX(ID) + 1 FROM language_words", CONNECTION_SYNCH);
@@ -999,6 +1049,13 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP, "SELECT ID, MapName_lang, MapDescription0_lang, MapDescription1_lang, PvpShortDescription_lang, "
"PvpLongDescription_lang FROM map_locale WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+ // MapChallengeMode.db2
+ PrepareStatement(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT Name, ID, MapID, Flags, ExpansionLevel, CriteriaCount1, CriteriaCount2, CriteriaCount3"
+ " FROM map_challenge_mode WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT MAX(ID) + 1 FROM map_challenge_mode", CONNECTION_SYNCH);
+ PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_CHALLENGE_MODE, "SELECT ID, Name_lang FROM map_challenge_mode_locale WHERE (`VerifiedBuild` > 0) = ?"
+ " AND locale = ?", CONNECTION_SYNCH);
+
// MapDifficulty.db2
PrepareStatement(HOTFIX_SEL_MAP_DIFFICULTY, "SELECT ID, Message, DifficultyID, LockID, ResetInterval, MaxPlayers, ItemContext, "
"ItemContextPickerID, Flags, ContentTuningID, MapID FROM map_difficulty WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
@@ -1012,6 +1069,10 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_LOCALE_STMT(HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION, "SELECT ID, FailureDescription_lang FROM map_difficulty_x_condition_locale"
" WHERE (`VerifiedBuild` > 0) = ? AND locale = ?", CONNECTION_SYNCH);
+ // MawPower.db2
+ PrepareStatement(HOTFIX_SEL_MAW_POWER, "SELECT ID, SpellID, MawPowerRarityID FROM maw_power WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_MAW_POWER, "SELECT MAX(ID) + 1 FROM maw_power", CONNECTION_SYNCH);
+
// ModifierTree.db2
PrepareStatement(HOTFIX_SEL_MODIFIER_TREE, "SELECT ID, Parent, Operator, Amount, Type, Asset, SecondaryAsset, TertiaryAsset FROM modifier_tree"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
@@ -1259,6 +1320,11 @@ void HotfixDatabaseConnection::DoPrepareStatements()
" FROM skill_race_class_info WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
PREPARE_MAX_ID_STMT(HOTFIX_SEL_SKILL_RACE_CLASS_INFO, "SELECT MAX(ID) + 1 FROM skill_race_class_info", CONNECTION_SYNCH);
+ // SoulbindConduitRank.db2
+ PrepareStatement(HOTFIX_SEL_SOULBIND_CONDUIT_RANK, "SELECT ID, RankIndex, SpellID, AuraPointsOverride, SoulbindConduitID"
+ " FROM soulbind_conduit_rank WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_SOULBIND_CONDUIT_RANK, "SELECT MAX(ID) + 1 FROM soulbind_conduit_rank", CONNECTION_SYNCH);
+
// SoundKit.db2
PrepareStatement(HOTFIX_SEL_SOUND_KIT, "SELECT ID, SoundType, VolumeFloat, Flags, MinDistance, DistanceCutoff, EAXDef, SoundKitAdvancedID, "
"VolumeVariationPlus, VolumeVariationMinus, PitchVariationPlus, PitchVariationMinus, DialogType, PitchAdjust, BusOverwriteID, MaxInstances"
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h
index 7237547cfe2..8051a913c40 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.h
+++ b/src/server/database/Database/Implementation/HotfixDatabase.h
@@ -281,6 +281,10 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_CRITERIA_TREE_MAX_ID,
HOTFIX_SEL_CRITERIA_TREE_LOCALE,
+ HOTFIX_SEL_CURRENCY_CONTAINER,
+ HOTFIX_SEL_CURRENCY_CONTAINER_MAX_ID,
+ HOTFIX_SEL_CURRENCY_CONTAINER_LOCALE,
+
HOTFIX_SEL_CURRENCY_TYPES,
HOTFIX_SEL_CURRENCY_TYPES_MAX_ID,
HOTFIX_SEL_CURRENCY_TYPES_LOCALE,
@@ -367,6 +371,10 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY,
HOTFIX_SEL_GARR_FOLLOWER_X_ABILITY_MAX_ID,
+ HOTFIX_SEL_GARR_MISSION,
+ HOTFIX_SEL_GARR_MISSION_MAX_ID,
+ HOTFIX_SEL_GARR_MISSION_LOCALE,
+
HOTFIX_SEL_GARR_PLOT,
HOTFIX_SEL_GARR_PLOT_MAX_ID,
@@ -546,9 +554,29 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_ITEM_X_ITEM_EFFECT,
HOTFIX_SEL_ITEM_X_ITEM_EFFECT_MAX_ID,
+ HOTFIX_SEL_JOURNAL_ENCOUNTER,
+ HOTFIX_SEL_JOURNAL_ENCOUNTER_MAX_ID,
+ HOTFIX_SEL_JOURNAL_ENCOUNTER_LOCALE,
+
+ HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION,
+ HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION_MAX_ID,
+ HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION_LOCALE,
+
+ HOTFIX_SEL_JOURNAL_INSTANCE,
+ HOTFIX_SEL_JOURNAL_INSTANCE_MAX_ID,
+ HOTFIX_SEL_JOURNAL_INSTANCE_LOCALE,
+
+ HOTFIX_SEL_JOURNAL_TIER,
+ HOTFIX_SEL_JOURNAL_TIER_MAX_ID,
+ HOTFIX_SEL_JOURNAL_TIER_LOCALE,
+
HOTFIX_SEL_KEYCHAIN,
HOTFIX_SEL_KEYCHAIN_MAX_ID,
+ HOTFIX_SEL_KEYSTONE_AFFIX,
+ HOTFIX_SEL_KEYSTONE_AFFIX_MAX_ID,
+ HOTFIX_SEL_KEYSTONE_AFFIX_LOCALE,
+
HOTFIX_SEL_LANGUAGE_WORDS,
HOTFIX_SEL_LANGUAGE_WORDS_MAX_ID,
@@ -577,6 +605,10 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_MAP_MAX_ID,
HOTFIX_SEL_MAP_LOCALE,
+ HOTFIX_SEL_MAP_CHALLENGE_MODE,
+ HOTFIX_SEL_MAP_CHALLENGE_MODE_MAX_ID,
+ HOTFIX_SEL_MAP_CHALLENGE_MODE_LOCALE,
+
HOTFIX_SEL_MAP_DIFFICULTY,
HOTFIX_SEL_MAP_DIFFICULTY_MAX_ID,
HOTFIX_SEL_MAP_DIFFICULTY_LOCALE,
@@ -585,6 +617,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION_MAX_ID,
HOTFIX_SEL_MAP_DIFFICULTY_X_CONDITION_LOCALE,
+ HOTFIX_SEL_MAW_POWER,
+ HOTFIX_SEL_MAW_POWER_MAX_ID,
+
HOTFIX_SEL_MODIFIER_TREE,
HOTFIX_SEL_MODIFIER_TREE_MAX_ID,
@@ -733,6 +768,9 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_SKILL_RACE_CLASS_INFO,
HOTFIX_SEL_SKILL_RACE_CLASS_INFO_MAX_ID,
+ HOTFIX_SEL_SOULBIND_CONDUIT_RANK,
+ HOTFIX_SEL_SOULBIND_CONDUIT_RANK_MAX_ID,
+
HOTFIX_SEL_SOUND_KIT,
HOTFIX_SEL_SOUND_KIT_MAX_ID,
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index 6fae3356658..9a631bcc552 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -1648,6 +1648,27 @@ struct CriteriaTreeLoadInfo
}
};
+struct CurrencyContainerLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "ContainerName" },
+ { false, FT_STRING, "ContainerDescription" },
+ { true, FT_INT, "MinAmount" },
+ { true, FT_INT, "MaxAmount" },
+ { true, FT_INT, "ContainerIconID" },
+ { true, FT_INT, "ContainerQuality" },
+ { true, FT_INT, "OnLootSpellVisualKitID" },
+ { false, FT_INT, "CurrencyTypesID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, CurrencyContainerMeta::Instance(), HOTFIX_SEL_CURRENCY_CONTAINER);
+ return &loadInfo;
+ }
+};
+
struct CurrencyTypesLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -2275,6 +2296,52 @@ struct GarrFollowerXAbilityLoadInfo
}
};
+struct GarrMissionLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Location" },
+ { false, FT_STRING, "Description" },
+ { false, FT_FLOAT, "MapPosX" },
+ { false, FT_FLOAT, "MapPosY" },
+ { false, FT_FLOAT, "WorldPosX" },
+ { false, FT_FLOAT, "WorldPosY" },
+ { false, FT_BYTE, "GarrTypeID" },
+ { false, FT_BYTE, "GarrMissionTypeID" },
+ { false, FT_BYTE, "GarrFollowerTypeID" },
+ { false, FT_BYTE, "MaxFollowers" },
+ { false, FT_INT, "MissionCost" },
+ { false, FT_SHORT, "MissionCostCurrencyTypesID" },
+ { false, FT_BYTE, "OfferedGarrMissionTextureID" },
+ { false, FT_SHORT, "UiTextureKitID" },
+ { false, FT_INT, "EnvGarrMechanicID" },
+ { true, FT_INT, "EnvGarrMechanicTypeID" },
+ { false, FT_INT, "PlayerConditionID" },
+ { true, FT_INT, "GarrMissionSetID" },
+ { true, FT_BYTE, "TargetLevel" },
+ { false, FT_SHORT, "TargetItemLevel" },
+ { true, FT_INT, "MissionDuration" },
+ { true, FT_INT, "TravelDuration" },
+ { false, FT_INT, "OfferDuration" },
+ { false, FT_BYTE, "BaseCompletionChance" },
+ { false, FT_INT, "BaseFollowerXP" },
+ { false, FT_INT, "OvermaxRewardPackID" },
+ { false, FT_BYTE, "FollowerDeathChance" },
+ { false, FT_INT, "AreaID" },
+ { false, FT_INT, "Flags" },
+ { false, FT_FLOAT, "AutoMissionScalar" },
+ { true, FT_INT, "AutoMissionScalarCurveID" },
+ { true, FT_INT, "AutoCombatantEnvCasterID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, GarrMissionMeta::Instance(), HOTFIX_SEL_GARR_MISSION);
+ return &loadInfo;
+ }
+};
+
struct GarrPlotLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -3461,6 +3528,97 @@ struct ItemXItemEffectLoadInfo
}
};
+struct JournalEncounterLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { false, FT_FLOAT, "MapX" },
+ { false, FT_FLOAT, "MapY" },
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "JournalInstanceID" },
+ { false, FT_SHORT, "DungeonEncounterID" },
+ { false, FT_INT, "OrderIndex" },
+ { false, FT_SHORT, "FirstSectionID" },
+ { false, FT_SHORT, "UiMapID" },
+ { false, FT_INT, "MapDisplayConditionID" },
+ { false, FT_BYTE, "Flags" },
+ { true, FT_BYTE, "DifficultyMask" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalEncounterMeta::Instance(), HOTFIX_SEL_JOURNAL_ENCOUNTER);
+ return &loadInfo;
+ }
+};
+
+struct JournalEncounterSectionLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Title" },
+ { false, FT_STRING, "BodyText" },
+ { false, FT_SHORT, "JournalEncounterID" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_SHORT, "ParentSectionID" },
+ { false, FT_SHORT, "FirstChildSectionID" },
+ { false, FT_SHORT, "NextSiblingSectionID" },
+ { false, FT_BYTE, "Type" },
+ { false, FT_INT, "IconCreatureDisplayInfoID" },
+ { true, FT_INT, "UiModelSceneID" },
+ { true, FT_INT, "SpellID" },
+ { true, FT_INT, "IconFileDataID" },
+ { false, FT_SHORT, "Flags" },
+ { false, FT_SHORT, "IconFlags" },
+ { true, FT_BYTE, "DifficultyMask" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalEncounterSectionMeta::Instance(), HOTFIX_SEL_JOURNAL_ENCOUNTER_SECTION);
+ return &loadInfo;
+ }
+};
+
+struct JournalInstanceLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { false, FT_SHORT, "MapID" },
+ { true, FT_INT, "BackgroundFileDataID" },
+ { true, FT_INT, "ButtonFileDataID" },
+ { true, FT_INT, "ButtonSmallFileDataID" },
+ { true, FT_INT, "LoreFileDataID" },
+ { false, FT_BYTE, "OrderIndex" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_SHORT, "AreaID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalInstanceMeta::Instance(), HOTFIX_SEL_JOURNAL_INSTANCE);
+ return &loadInfo;
+ }
+};
+
+struct JournalTierLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { true, FT_INT, "PlayerConditionID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, JournalTierMeta::Instance(), HOTFIX_SEL_JOURNAL_TIER);
+ return &loadInfo;
+ }
+};
+
struct KeychainLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -3506,6 +3664,22 @@ struct KeychainLoadInfo
}
};
+struct KeystoneAffixLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_STRING, "Name" },
+ { false, FT_STRING, "Description" },
+ { true, FT_INT, "FiledataID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, KeystoneAffixMeta::Instance(), HOTFIX_SEL_KEYSTONE_AFFIX);
+ return &loadInfo;
+ }
+};
+
struct LanguageWordsLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -3771,6 +3945,26 @@ struct MapLoadInfo
}
};
+struct MapChallengeModeLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_STRING, "Name" },
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "MapID" },
+ { false, FT_BYTE, "Flags" },
+ { false, FT_INT, "ExpansionLevel" },
+ { true, FT_SHORT, "CriteriaCount1" },
+ { true, FT_SHORT, "CriteriaCount2" },
+ { true, FT_SHORT, "CriteriaCount3" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MapChallengeModeMeta::Instance(), HOTFIX_SEL_MAP_CHALLENGE_MODE);
+ return &loadInfo;
+ }
+};
+
struct MapDifficultyLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -3811,6 +4005,21 @@ struct MapDifficultyXConditionLoadInfo
}
};
+struct MawPowerLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "SpellID" },
+ { true, FT_INT, "MawPowerRarityID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, MawPowerMeta::Instance(), HOTFIX_SEL_MAW_POWER);
+ return &loadInfo;
+ }
+};
+
struct ModifierTreeLoadInfo
{
static DB2LoadInfo const* Instance()
@@ -4816,6 +5025,23 @@ struct SkillRaceClassInfoLoadInfo
}
};
+struct SoulbindConduitRankLoadInfo
+{
+ static DB2LoadInfo const* Instance()
+ {
+ static DB2FieldMeta const fields[] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "RankIndex" },
+ { true, FT_INT, "SpellID" },
+ { false, FT_FLOAT, "AuraPointsOverride" },
+ { false, FT_INT, "SoulbindConduitID" },
+ };
+ static DB2LoadInfo const loadInfo(&fields[0], std::extent<decltype(fields)>::value, SoulbindConduitRankMeta::Instance(), HOTFIX_SEL_SOULBIND_CONDUIT_RANK);
+ return &loadInfo;
+ }
+};
+
struct SoundKitLoadInfo
{
static DB2LoadInfo const* Instance()
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index c40820bba9f..83dc7f388c3 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -116,6 +116,7 @@ DB2Storage<CreatureModelDataEntry> sCreatureModelDataStore("Creatur
DB2Storage<CreatureTypeEntry> sCreatureTypeStore("CreatureType.db2", CreatureTypeLoadInfo::Instance());
DB2Storage<CriteriaEntry> sCriteriaStore("Criteria.db2", CriteriaLoadInfo::Instance());
DB2Storage<CriteriaTreeEntry> sCriteriaTreeStore("CriteriaTree.db2", CriteriaTreeLoadInfo::Instance());
+DB2Storage<CurrencyContainerEntry> sCurrencyContainerStore("CurrencyContainer.db2", CurrencyContainerLoadInfo::Instance());
DB2Storage<CurrencyTypesEntry> sCurrencyTypesStore("CurrencyTypes.db2", CurrencyTypesLoadInfo::Instance());
DB2Storage<CurveEntry> sCurveStore("Curve.db2", CurveLoadInfo::Instance());
DB2Storage<CurvePointEntry> sCurvePointStore("CurvePoint.db2", CurvePointLoadInfo::Instance());
@@ -141,6 +142,7 @@ DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildingPlotInstStore("Garr
DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore("GarrClassSpec.db2", GarrClassSpecLoadInfo::Instance());
DB2Storage<GarrFollowerEntry> sGarrFollowerStore("GarrFollower.db2", GarrFollowerLoadInfo::Instance());
DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore("GarrFollowerXAbility.db2", GarrFollowerXAbilityLoadInfo::Instance());
+DB2Storage<GarrMissionEntry> sGarrMissionStore("GarrMission.db2", GarrMissionLoadInfo::Instance());
DB2Storage<GarrPlotEntry> sGarrPlotStore("GarrPlot.db2", GarrPlotLoadInfo::Instance());
DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore("GarrPlotBuilding.db2", GarrPlotBuildingLoadInfo::Instance());
DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore("GarrPlotInstance.db2", GarrPlotInstanceLoadInfo::Instance());
@@ -198,7 +200,12 @@ DB2Storage<ItemSpecEntry> sItemSpecStore("ItemSpec.db2", I
DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore("ItemSpecOverride.db2", ItemSpecOverrideLoadInfo::Instance());
DB2Storage<ItemXBonusTreeEntry> sItemXBonusTreeStore("ItemXBonusTree.db2", ItemXBonusTreeLoadInfo::Instance());
DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore("ItemXItemEffect.db2", ItemXItemEffectLoadInfo::Instance());
+DB2Storage<JournalEncounterEntry> sJournalEncounterStore("JournalEncounter.db2", JournalEncounterLoadInfo::Instance());
+DB2Storage<JournalEncounterSectionEntry> sJournalEncounterSectionStore("JournalEncounterSection.db2", JournalEncounterSectionLoadInfo::Instance());
+DB2Storage<JournalInstanceEntry> sJournalInstanceStore("JournalInstance.db2", JournalInstanceLoadInfo::Instance());
+DB2Storage<JournalTierEntry> sJournalTierStore("JournalTier.db2", JournalTierLoadInfo::Instance());
DB2Storage<KeychainEntry> sKeychainStore("Keychain.db2", KeychainLoadInfo::Instance());
+DB2Storage<KeystoneAffixEntry> sKeystoneAffixStore("KeystoneAffix.db2", KeystoneAffixLoadInfo::Instance());
DB2Storage<LanguageWordsEntry> sLanguageWordsStore("LanguageWords.db2", LanguageWordsLoadInfo::Instance());
DB2Storage<LanguagesEntry> sLanguagesStore("Languages.db2", LanguagesLoadInfo::Instance());
DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore("LFGDungeons.db2", LfgDungeonsLoadInfo::Instance());
@@ -207,8 +214,10 @@ DB2Storage<LiquidTypeEntry> sLiquidTypeStore("LiquidType.db2
DB2Storage<LockEntry> sLockStore("Lock.db2", LockLoadInfo::Instance());
DB2Storage<MailTemplateEntry> sMailTemplateStore("MailTemplate.db2", MailTemplateLoadInfo::Instance());
DB2Storage<MapEntry> sMapStore("Map.db2", MapLoadInfo::Instance());
+DB2Storage<MapChallengeModeEntry> sMapChallengeModeStore("MapChallengeMode.db2", MapChallengeModeLoadInfo::Instance());
DB2Storage<MapDifficultyEntry> sMapDifficultyStore("MapDifficulty.db2", MapDifficultyLoadInfo::Instance());
DB2Storage<MapDifficultyXConditionEntry> sMapDifficultyXConditionStore("MapDifficultyXCondition.db2", MapDifficultyXConditionLoadInfo::Instance());
+DB2Storage<MawPowerEntry> sMawPowerStore("MawPower.db2", MawPowerLoadInfo::Instance());
DB2Storage<ModifierTreeEntry> sModifierTreeStore("ModifierTree.db2", ModifierTreeLoadInfo::Instance());
DB2Storage<MountCapabilityEntry> sMountCapabilityStore("MountCapability.db2", MountCapabilityLoadInfo::Instance());
DB2Storage<MountEntry> sMountStore("Mount.db2", MountLoadInfo::Instance());
@@ -255,6 +264,7 @@ DB2Storage<SceneScriptTextEntry> sSceneScriptTextStore("SceneScri
DB2Storage<SkillLineEntry> sSkillLineStore("SkillLine.db2", SkillLineLoadInfo::Instance());
DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore("SkillLineAbility.db2", SkillLineAbilityLoadInfo::Instance());
DB2Storage<SkillRaceClassInfoEntry> sSkillRaceClassInfoStore("SkillRaceClassInfo.db2", SkillRaceClassInfoLoadInfo::Instance());
+DB2Storage<SoulbindConduitRankEntry> sSoulbindConduitRankStore("SoulbindConduitRank.db2", SoulbindConduitRankLoadInfo::Instance());
DB2Storage<SoundKitEntry> sSoundKitStore("SoundKit.db2", SoundKitLoadInfo::Instance());
DB2Storage<SpecializationSpellsEntry> sSpecializationSpellsStore("SpecializationSpells.db2", SpecializationSpellsLoadInfo::Instance());
DB2Storage<SpecSetMemberEntry> sSpecSetMemberStore("SpecSetMember.db2", SpecSetMemberLoadInfo::Instance());
@@ -417,6 +427,7 @@ namespace
std::unordered_map<std::pair<uint8 /*race*/, uint8/*gender*/>, std::vector<ChrCustomizationOptionEntry const*>> _chrCustomizationOptionsByRaceAndGender;
std::unordered_map<uint32 /*chrCustomizationReqId*/, std::unordered_map<uint32 /*chrCustomizationOptionId*/, std::vector<uint32>>> _chrCustomizationRequiredChoices;
ChrSpecializationByIndexContainer _chrSpecializationsByIndex;
+ std::unordered_multimap<uint32, CurrencyContainerEntry const*> _currencyContainers;
CurvePointsContainer _curvePoints;
EmotesTextSoundContainer _emoteTextSounds;
std::unordered_map<std::pair<uint32 /*level*/, int32 /*expansion*/>, ExpectedStatEntry const*> _expectedStatsByLevel;
@@ -438,6 +449,7 @@ namespace
ItemToBonusTreeContainer _itemToBonusTree;
ItemSetSpellContainer _itemSetSpells;
ItemSpecOverridesContainer _itemSpecOverrides;
+ std::vector<JournalTierEntry const*> _journalTiersByIndex;
DB2Manager::MapDifficultyContainer _mapDifficulties;
std::unordered_map<uint32, DB2Manager::MapDifficultyConditionsContainer> _mapDifficultyConditions;
std::unordered_map<uint32, MountEntry const*> _mountsBySpellId;
@@ -457,12 +469,14 @@ namespace
std::unordered_map<uint32, std::vector<SkillLineEntry const*>> _skillLinesByParentSkillLine;
std::unordered_map<uint32, std::vector<SkillLineAbilityEntry const*>> _skillLineAbilitiesBySkillupSkill;
SkillRaceClassInfoContainer _skillRaceClassInfoBySkill;
+ std::unordered_map<std::pair<int32, int32>, SoulbindConduitRankEntry const*> _soulbindConduitRanks;
SpecializationSpellsContainer _specializationSpellsBySpec;
std::unordered_set<std::pair<int32, uint32>> _specsBySpecSet;
std::unordered_set<uint8> _spellFamilyNames;
SpellProcsPerMinuteModContainer _spellProcsPerMinuteMods;
TalentsByPosition _talentsByPosition;
ToyItemIdsContainer _toys;
+ std::unordered_map<uint32, TransmogIllusionEntry const*> _transmogIllusionsByEnchantmentId;
std::unordered_map<uint32, std::vector<TransmogSetEntry const*>> _transmogSetsByItemModifiedAppearance;
std::unordered_map<uint32, std::vector<TransmogSetItemEntry const*>> _transmogSetItemsByTransmogSet;
std::unordered_map<int32, UiMapBounds> _uiMapBounds;
@@ -669,6 +683,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sCreatureTypeStore);
LOAD_DB2(sCriteriaStore);
LOAD_DB2(sCriteriaTreeStore);
+ LOAD_DB2(sCurrencyContainerStore);
LOAD_DB2(sCurrencyTypesStore);
LOAD_DB2(sCurveStore);
LOAD_DB2(sCurvePointStore);
@@ -694,8 +709,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sGarrClassSpecStore);
LOAD_DB2(sGarrFollowerStore);
LOAD_DB2(sGarrFollowerXAbilityStore);
- LOAD_DB2(sGarrPlotBuildingStore);
+ LOAD_DB2(sGarrMissionStore);
LOAD_DB2(sGarrPlotStore);
+ LOAD_DB2(sGarrPlotBuildingStore);
LOAD_DB2(sGarrPlotInstanceStore);
LOAD_DB2(sGarrSiteLevelStore);
LOAD_DB2(sGarrSiteLevelPlotInstStore);
@@ -751,7 +767,12 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sItemSpecOverrideStore);
LOAD_DB2(sItemXBonusTreeStore);
LOAD_DB2(sItemXItemEffectStore);
+ LOAD_DB2(sJournalEncounterStore);
+ LOAD_DB2(sJournalEncounterSectionStore);
+ LOAD_DB2(sJournalInstanceStore);
+ LOAD_DB2(sJournalTierStore);
LOAD_DB2(sKeychainStore);
+ LOAD_DB2(sKeystoneAffixStore);
LOAD_DB2(sLanguageWordsStore);
LOAD_DB2(sLanguagesStore);
LOAD_DB2(sLFGDungeonsStore);
@@ -760,8 +781,10 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sLockStore);
LOAD_DB2(sMailTemplateStore);
LOAD_DB2(sMapStore);
+ LOAD_DB2(sMapChallengeModeStore);
LOAD_DB2(sMapDifficultyStore);
LOAD_DB2(sMapDifficultyXConditionStore);
+ LOAD_DB2(sMawPowerStore);
LOAD_DB2(sModifierTreeStore);
LOAD_DB2(sMountCapabilityStore);
LOAD_DB2(sMountStore);
@@ -808,6 +831,7 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sSkillLineStore);
LOAD_DB2(sSkillLineAbilityStore);
LOAD_DB2(sSkillRaceClassInfoStore);
+ LOAD_DB2(sSoulbindConduitRankStore);
LOAD_DB2(sSoundKitStore);
LOAD_DB2(sSpecializationSpellsStore);
LOAD_DB2(sSpecSetMemberStore);
@@ -1087,6 +1111,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
if (sExpectedStatModStore.LookupEntry(contentTuningXExpectedStat->ExpectedStatModID))
_expectedStatModsByContentTuning[contentTuningXExpectedStat->ContentTuningID].push_back(contentTuningXExpectedStat);
+ for (CurrencyContainerEntry const* currencyContainer : sCurrencyContainerStore)
+ _currencyContainers.emplace(currencyContainer->CurrencyTypesID, currencyContainer);
+
for (CurvePointEntry const* curvePoint : sCurvePointStore)
if (sCurveStore.LookupEntry(curvePoint->CurveID))
_curvePoints[curvePoint->CurveID].push_back(curvePoint);
@@ -1175,6 +1202,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
for (auto&& kvp : _azeriteEmpoweredItems)
LoadAzeriteEmpoweredItemUnlockMappings(azeriteUnlockMappings, kvp.first);
+ for (JournalTierEntry const* journalTier : sJournalTierStore)
+ _journalTiersByIndex.push_back(journalTier);
+
for (MapDifficultyEntry const* entry : sMapDifficultyStore)
_mapDifficulties[entry->MapID][entry->DifficultyID] = entry;
_mapDifficulties[0][0] = _mapDifficulties[1][0]; // map 0 is missing from MapDifficulty.dbc so we cheat a bit
@@ -1314,6 +1344,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
if (sSkillLineStore.LookupEntry(entry->SkillID))
_skillRaceClassInfoBySkill.insert(SkillRaceClassInfoContainer::value_type(entry->SkillID, entry));
+ for (SoulbindConduitRankEntry const* soulbindConduitRank : sSoulbindConduitRankStore)
+ _soulbindConduitRanks[{ soulbindConduitRank->SoulbindConduitID, soulbindConduitRank->RankIndex }] = soulbindConduitRank;
+
for (SpecializationSpellsEntry const* specSpells : sSpecializationSpellsStore)
_specializationSpellsBySpec[specSpells->SpecID].push_back(specSpells);
@@ -1359,6 +1392,9 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
for (ToyEntry const* toy : sToyStore)
_toys.insert(toy->ItemID);
+ for (TransmogIllusionEntry const* transmogIllusion : sTransmogIllusionStore)
+ _transmogIllusionsByEnchantmentId[transmogIllusion->SpellItemEnchantmentID] = transmogIllusion;
+
for (TransmogSetItemEntry const* transmogSetItem : sTransmogSetItemStore)
{
TransmogSetEntry const* set = sTransmogSetStore.LookupEntry(transmogSetItem->TransmogSetID);
@@ -1979,6 +2015,15 @@ char const* DB2Manager::GetCreatureFamilyPetName(uint32 petfamily, LocaleConstan
return petFamily->Name[locale][0] != '\0' ? petFamily->Name[locale] : nullptr;
}
+CurrencyContainerEntry const* DB2Manager::GetCurrencyContainerForCurrencyQuantity(uint32 currencyId, int32 quantity) const
+{
+ for (std::pair<uint32 const, CurrencyContainerEntry const*> const& p : Trinity::Containers::MapEqualRange(_currencyContainers, currencyId))
+ if (quantity >= p.second->MinAmount && (!p.second->MaxAmount || quantity <= p.second->MaxAmount))
+ return p.second;
+
+ return nullptr;
+}
+
enum class CurveInterpolationMode : uint8
{
Linear = 0,
@@ -2534,6 +2579,13 @@ std::vector<ItemSpecOverrideEntry const*> const* DB2Manager::GetItemSpecOverride
return Trinity::Containers::MapGetValuePtr(_itemSpecOverrides, itemId);
}
+JournalTierEntry const* DB2Manager::GetJournalTier(uint32 index) const
+{
+ if (index < _journalTiersByIndex.size())
+ return _journalTiersByIndex[index];
+ return nullptr;
+}
+
LFGDungeonsEntry const* DB2Manager::GetLfgDungeon(uint32 mapId, Difficulty difficulty)
{
for (LFGDungeonsEntry const* dungeon : sLFGDungeonsStore)
@@ -2886,6 +2938,11 @@ SkillRaceClassInfoEntry const* DB2Manager::GetSkillRaceClassInfo(uint32 skill, u
return nullptr;
}
+SoulbindConduitRankEntry const* DB2Manager::GetSoulbindConduitRank(int32 soulbindConduitId, int32 rank) const
+{
+ return Trinity::Containers::MapGetValuePtr(_soulbindConduitRanks, { soulbindConduitId, rank });
+}
+
std::vector<SpecializationSpellsEntry const*> const* DB2Manager::GetSpecializationSpells(uint32 specId) const
{
return Trinity::Containers::MapGetValuePtr(_specializationSpellsBySpec, specId);
@@ -2940,6 +2997,11 @@ bool DB2Manager::IsToyItem(uint32 toy) const
return _toys.count(toy) > 0;
}
+TransmogIllusionEntry const* DB2Manager::GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const
+{
+ return Trinity::Containers::MapGetValuePtr(_transmogIllusionsByEnchantmentId, spellItemEnchantmentId);
+}
+
std::vector<TransmogSetEntry const*> const* DB2Manager::GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const
{
return Trinity::Containers::MapGetValuePtr(_transmogSetsByItemModifiedAppearance, itemModifiedAppearanceId);
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index e6dfe80745d..ff391647762 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -110,6 +110,7 @@ TC_GAME_API extern DB2Storage<GarrBuildingPlotInstEntry> sGarrBuildin
TC_GAME_API extern DB2Storage<GarrClassSpecEntry> sGarrClassSpecStore;
TC_GAME_API extern DB2Storage<GarrFollowerEntry> sGarrFollowerStore;
TC_GAME_API extern DB2Storage<GarrFollowerXAbilityEntry> sGarrFollowerXAbilityStore;
+TC_GAME_API extern DB2Storage<GarrMissionEntry> sGarrMissionStore;
TC_GAME_API extern DB2Storage<GarrPlotEntry> sGarrPlotStore;
TC_GAME_API extern DB2Storage<GarrPlotBuildingEntry> sGarrPlotBuildingStore;
TC_GAME_API extern DB2Storage<GarrPlotInstanceEntry> sGarrPlotInstanceStore;
@@ -152,6 +153,10 @@ TC_GAME_API extern DB2Storage<ItemSparseEntry> sItemSparseS
TC_GAME_API extern DB2Storage<ItemSpecEntry> sItemSpecStore;
TC_GAME_API extern DB2Storage<ItemSpecOverrideEntry> sItemSpecOverrideStore;
TC_GAME_API extern DB2Storage<ItemXItemEffectEntry> sItemXItemEffectStore;
+TC_GAME_API extern DB2Storage<JournalEncounterEntry> sJournalEncounterStore;
+TC_GAME_API extern DB2Storage<JournalEncounterSectionEntry> sJournalEncounterSectionStore;
+TC_GAME_API extern DB2Storage<JournalInstanceEntry> sJournalInstanceStore;
+TC_GAME_API extern DB2Storage<KeystoneAffixEntry> sKeystoneAffixStore;
TC_GAME_API extern DB2Storage<LanguageWordsEntry> sLanguageWordsStore;
TC_GAME_API extern DB2Storage<LanguagesEntry> sLanguagesStore;
TC_GAME_API extern DB2Storage<LFGDungeonsEntry> sLFGDungeonsStore;
@@ -159,6 +164,8 @@ TC_GAME_API extern DB2Storage<LiquidTypeEntry> sLiquidTypeS
TC_GAME_API extern DB2Storage<LockEntry> sLockStore;
TC_GAME_API extern DB2Storage<MailTemplateEntry> sMailTemplateStore;
TC_GAME_API extern DB2Storage<MapEntry> sMapStore;
+TC_GAME_API extern DB2Storage<MapChallengeModeEntry> sMapChallengeModeStore;
+TC_GAME_API extern DB2Storage<MawPowerEntry> sMawPowerStore;
TC_GAME_API extern DB2Storage<ModifierTreeEntry> sModifierTreeStore;
TC_GAME_API extern DB2Storage<MountCapabilityEntry> sMountCapabilityStore;
TC_GAME_API extern DB2Storage<MountEntry> sMountStore;
@@ -230,6 +237,7 @@ TC_GAME_API extern DB2Storage<TransmogSetGroupEntry> sTransmogSet
TC_GAME_API extern DB2Storage<TransmogSetItemEntry> sTransmogSetItemStore;
TC_GAME_API extern DB2Storage<TransportAnimationEntry> sTransportAnimationStore;
TC_GAME_API extern DB2Storage<TransportRotationEntry> sTransportRotationStore;
+TC_GAME_API extern DB2Storage<UiMapEntry> sUiMapStore;
TC_GAME_API extern DB2Storage<UnitPowerBarEntry> sUnitPowerBarStore;
TC_GAME_API extern DB2Storage<VehicleEntry> sVehicleStore;
TC_GAME_API extern DB2Storage<VehicleSeatEntry> sVehicleSeatStore;
@@ -366,6 +374,7 @@ public:
ChrSpecializationEntry const* GetDefaultChrSpecializationForClass(uint32 class_) const;
Optional<ContentTuningLevels> GetContentTuningData(uint32 contentTuningId, uint32 replacementConditionMask, bool forItem = false) const;
static char const* GetCreatureFamilyPetName(uint32 petfamily, LocaleConstant locale);
+ CurrencyContainerEntry const* GetCurrencyContainerForCurrencyQuantity(uint32 currencyId, int32 quantity) const;
float GetCurveValueAt(uint32 curveId, float x) const;
EmotesTextSoundEntry const* GetTextSoundEmoteFor(uint32 emote, uint8 race, uint8 gender, uint8 class_) const;
float EvaluateExpectedStat(ExpectedStatType stat, uint32 level, int32 expansion, uint32 contentTuningId, Classes unitClass) const;
@@ -388,6 +397,7 @@ public:
ItemModifiedAppearanceEntry const* GetDefaultItemModifiedAppearance(uint32 itemId) const;
std::vector<ItemSetSpellEntry const*> const* GetItemSetSpells(uint32 itemSetId) const;
std::vector<ItemSpecOverrideEntry const*> const* GetItemSpecOverrides(uint32 itemId) const;
+ JournalTierEntry const* GetJournalTier(uint32 index) const;
static LFGDungeonsEntry const* GetLfgDungeon(uint32 mapId, Difficulty difficulty);
static uint32 GetDefaultMapLight(uint32 mapId);
static uint32 GetLiquidFlags(uint32 liquidType);
@@ -422,6 +432,7 @@ public:
std::vector<SkillLineEntry const*> const* GetSkillLinesForParentSkill(uint32 parentSkillId) const;
std::vector<SkillLineAbilityEntry const*> const* GetSkillLineAbilitiesBySkill(uint32 skillId) const;
SkillRaceClassInfoEntry const* GetSkillRaceClassInfo(uint32 skill, uint8 race, uint8 class_);
+ SoulbindConduitRankEntry const* GetSoulbindConduitRank(int32 soulbindConduitId, int32 rank) const;
std::vector<SpecializationSpellsEntry const*> const* GetSpecializationSpells(uint32 specId) const;
bool IsSpecSetMember(int32 specSetId, uint32 specId) const;
static bool IsValidSpellFamiliyName(SpellFamilyNames family);
@@ -429,6 +440,7 @@ public:
std::vector<TalentEntry const*> const& GetTalentsByPosition(uint32 class_, uint32 tier, uint32 column) const;
static bool IsTotemCategoryCompatibleWith(uint32 itemTotemCategoryId, uint32 requiredTotemCategoryId);
bool IsToyItem(uint32 toy) const;
+ TransmogIllusionEntry const* GetTransmogIllusionForEnchantment(uint32 spellItemEnchantmentId) const;
std::vector<TransmogSetEntry const*> const* GetTransmogSetsForItemModifiedAppearance(uint32 itemModifiedAppearanceId) const;
std::vector<TransmogSetItemEntry const*> const* GetTransmogSetItems(uint32 transmogSetId) const;
static bool GetUiMapPosition(float x, float y, float z, int32 mapId, int32 areaId, int32 wmoDoodadPlacementId, int32 wmoGroupId, UiMapSystem system, bool local,
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 4f09a919e21..7245c5e1da9 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -1237,6 +1237,19 @@ struct CriteriaTreeEntry
EnumFlag<CriteriaTreeFlags> GetFlags() const { return static_cast<CriteriaTreeFlags>(Flags); }
};
+struct CurrencyContainerEntry
+{
+ uint32 ID;
+ LocalizedString ContainerName;
+ LocalizedString ContainerDescription;
+ int32 MinAmount;
+ int32 MaxAmount;
+ int32 ContainerIconID;
+ int32 ContainerQuality;
+ int32 OnLootSpellVisualKitID;
+ uint32 CurrencyTypesID;
+};
+
struct CurrencyTypesEntry
{
uint32 ID;
@@ -1647,6 +1660,42 @@ struct GarrFollowerXAbilityEntry
uint32 GarrFollowerID;
};
+struct GarrMissionEntry
+{
+ uint32 ID;
+ LocalizedString Name;
+ LocalizedString Location;
+ LocalizedString Description;
+ DBCPosition2D MapPos;
+ DBCPosition2D WorldPos;
+ uint8 GarrTypeID;
+ uint8 GarrMissionTypeID;
+ uint8 GarrFollowerTypeID;
+ uint8 MaxFollowers;
+ uint32 MissionCost;
+ uint16 MissionCostCurrencyTypesID;
+ uint8 OfferedGarrMissionTextureID;
+ uint16 UiTextureKitID;
+ uint32 EnvGarrMechanicID;
+ int32 EnvGarrMechanicTypeID;
+ uint32 PlayerConditionID;
+ int32 GarrMissionSetID;
+ int8 TargetLevel;
+ uint16 TargetItemLevel;
+ int32 MissionDuration;
+ int32 TravelDuration;
+ uint32 OfferDuration;
+ uint8 BaseCompletionChance;
+ uint32 BaseFollowerXP;
+ uint32 OvermaxRewardPackID;
+ uint8 FollowerDeathChance;
+ uint32 AreaID;
+ uint32 Flags;
+ float AutoMissionScalar;
+ int32 AutoMissionScalarCurveID;
+ int32 AutoCombatantEnvCasterID;
+};
+
struct GarrPlotEntry
{
uint32 ID;
@@ -2238,6 +2287,64 @@ struct ItemXItemEffectEntry
uint32 ItemID;
};
+struct JournalEncounterEntry
+{
+ LocalizedString Name;
+ LocalizedString Description;
+ DBCPosition2D Map;
+ uint32 ID;
+ uint16 JournalInstanceID;
+ uint16 DungeonEncounterID;
+ uint32 OrderIndex;
+ uint16 FirstSectionID;
+ uint16 UiMapID;
+ uint32 MapDisplayConditionID;
+ uint8 Flags;
+ int8 DifficultyMask;
+};
+
+struct JournalEncounterSectionEntry
+{
+ uint32 ID;
+ LocalizedString Title;
+ LocalizedString BodyText;
+ uint16 JournalEncounterID;
+ uint8 OrderIndex;
+ uint16 ParentSectionID;
+ uint16 FirstChildSectionID;
+ uint16 NextSiblingSectionID;
+ uint8 Type;
+ uint32 IconCreatureDisplayInfoID;
+ int32 UiModelSceneID;
+ int32 SpellID;
+ int32 IconFileDataID;
+ uint16 Flags;
+ uint16 IconFlags;
+ int8 DifficultyMask;
+};
+
+struct JournalInstanceEntry
+{
+ uint32 ID;
+ LocalizedString Name;
+ LocalizedString Description;
+ uint16 MapID;
+ int32 BackgroundFileDataID;
+ int32 ButtonFileDataID;
+ int32 ButtonSmallFileDataID;
+ int32 LoreFileDataID;
+ uint8 OrderIndex;
+ uint8 Flags;
+ uint16 AreaID;
+};
+
+struct JournalTierEntry
+{
+ uint32 ID;
+ LocalizedString Name;
+ int32 PlayerConditionID;
+};
+
#define KEYCHAIN_SIZE 32
struct KeychainEntry
@@ -2246,6 +2353,14 @@ struct KeychainEntry
uint8 Key[KEYCHAIN_SIZE];
};
+struct KeystoneAffixEntry
+{
+ uint32 ID;
+ LocalizedString Name;
+ LocalizedString Description;
+ int32 FiledataID;
+};
+
struct LanguageWordsEntry
{
uint32 ID;
@@ -2409,6 +2524,16 @@ struct MapEntry
bool IsGarrison() const { return (Flags[0] & MAP_FLAG_GARRISON) != 0; }
};
+struct MapChallengeModeEntry
+{
+ LocalizedString Name;
+ uint32 ID;
+ uint16 MapID;
+ uint8 Flags;
+ uint32 ExpansionLevel;
+ int16 CriteriaCount[3];
+};
+
struct MapDifficultyEntry
{
uint32 ID;
@@ -2442,6 +2567,13 @@ struct MapDifficultyXConditionEntry
uint32 MapDifficultyID;
};
+struct MawPowerEntry
+{
+ uint32 ID;
+ int32 SpellID;
+ int32 MawPowerRarityID;
+};
+
struct ModifierTreeEntry
{
uint32 ID;
@@ -2970,6 +3102,15 @@ struct SkillRaceClassInfoEntry
int16 SkillTierID;
};
+struct SoulbindConduitRankEntry
+{
+ uint32 ID;
+ int32 RankIndex;
+ int32 SpellID;
+ float AuraPointsOverride;
+ uint32 SoulbindConduitID;
+};
+
struct SoundKitEntry
{
uint32 ID;