aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOvahlord <dreadkiller@gmx.de>2023-11-23 14:00:24 +0100
committerOvahlord <dreadkiller@gmx.de>2023-11-23 14:00:24 +0100
commitd68abc1652d840303fa37a35caadf31d15633332 (patch)
treea228b6bd47f59d709d7ee06e7cbc6088dd0732db
parentcf25e56cf4a266dc1decdcff9d250f9b71be3e1f (diff)
Core/DataStores: load ScalingStatDistribution.db2 and ScalingStatValues.db2
-rw-r--r--sql/updates/hotfixes/3.4.x/2023_11_23_00_hotfixes.sql91
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.cpp13
-rw-r--r--src/server/database/Database/Implementation/HotfixDatabase.h6
-rw-r--r--src/server/game/DataStores/DB2LoadInfo.h66
-rw-r--r--src/server/game/DataStores/DB2Stores.cpp4
-rw-r--r--src/server/game/DataStores/DB2Stores.h2
-rw-r--r--src/server/game/DataStores/DB2Structure.h38
7 files changed, 220 insertions, 0 deletions
diff --git a/sql/updates/hotfixes/3.4.x/2023_11_23_00_hotfixes.sql b/sql/updates/hotfixes/3.4.x/2023_11_23_00_hotfixes.sql
new file mode 100644
index 00000000000..6b58c6925c8
--- /dev/null
+++ b/sql/updates/hotfixes/3.4.x/2023_11_23_00_hotfixes.sql
@@ -0,0 +1,91 @@
+--
+-- Table structure for table `scaling_stat_distribution`
+--
+
+DROP TABLE IF EXISTS `scaling_stat_distribution`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `scaling_stat_distribution` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `PlayerLevelToItemLevelCurveID` smallint(5) unsigned NOT NULL DEFAULT '0',
+ `MinLevel` int(11) NOT NULL DEFAULT '0',
+ `MaxLevel` int(11) NOT NULL DEFAULT '0',
+ `Bonus1` int(10) NOT NULL DEFAULT '0',
+ `Bonus2` int(10) NOT NULL DEFAULT '0',
+ `Bonus3` int(10) NOT NULL DEFAULT '0',
+ `Bonus4` int(10) NOT NULL DEFAULT '0',
+ `Bonus5` int(10) NOT NULL DEFAULT '0',
+ `Bonus6` int(10) NOT NULL DEFAULT '0',
+ `Bonus7` int(10) NOT NULL DEFAULT '0',
+ `Bonus8` int(10) NOT NULL DEFAULT '0',
+ `Bonus9` int(10) NOT NULL DEFAULT '0',
+ `Bonus10` int(10) NOT NULL DEFAULT '0',
+ `StatID1` int(10) NOT NULL DEFAULT '0',
+ `StatID2` int(10) NOT NULL DEFAULT '0',
+ `StatID3` int(10) NOT NULL DEFAULT '0',
+ `StatID4` int(10) NOT NULL DEFAULT '0',
+ `StatID5` int(10) NOT NULL DEFAULT '0',
+ `StatID6` int(10) NOT NULL DEFAULT '0',
+ `StatID7` int(10) NOT NULL DEFAULT '0',
+ `StatID8` int(10) NOT NULL DEFAULT '0',
+ `StatID9` int(10) NOT NULL DEFAULT '0',
+ `StatID10` int(10) 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 */;
+
+--
+-- Dumping data for table `scaling_stat_distribution`
+--
+
+LOCK TABLES `scaling_stat_distribution` WRITE;
+/*!40000 ALTER TABLE `scaling_stat_distribution` DISABLE KEYS */;
+/*!40000 ALTER TABLE `scaling_stat_distribution` ENABLE KEYS */;
+UNLOCK TABLES;
+
+--
+-- Table structure for table `scaling_stat_values`
+--
+
+DROP TABLE IF EXISTS `scaling_stat_values`;
+/*!40101 SET @saved_cs_client = @@character_set_client */;
+/*!50503 SET character_set_client = utf8mb4 */;
+CREATE TABLE `scaling_stat_values` (
+ `ID` int(10) unsigned NOT NULL DEFAULT '0',
+ `Charlevel` int(11) NOT NULL DEFAULT '0',
+ `WeaponDPS1H` int(11) NOT NULL DEFAULT '0',
+ `WeaponDPS2h` int(11) NOT NULL DEFAULT '0',
+ `SpellcasterDPS1H` int(11) NOT NULL DEFAULT '0',
+ `SpellcasterDPS2H` int(11) NOT NULL DEFAULT '0',
+ `RangedDPS` int(11) NOT NULL DEFAULT '0',
+ `WandDPS` int(11) NOT NULL DEFAULT '0',
+ `SpellPower` int(11) NOT NULL DEFAULT '0',
+ `ShoulderBudget` int(11) NOT NULL DEFAULT '0',
+ `TrinketBudget` int(11) NOT NULL DEFAULT '0',
+ `WeaponBudget` int(11) NOT NULL DEFAULT '0',
+ `PrimaryBudget` int(11) NOT NULL DEFAULT '0',
+ `RangedBudget` int(11) NOT NULL DEFAULT '0',
+ `TertiaryBudget` int(11) NOT NULL DEFAULT '0',
+ `ClothShoulderArmor` int(11) NOT NULL DEFAULT '0',
+ `LeatherShoulderArmor` int(11) NOT NULL DEFAULT '0',
+ `MailShoulderArmor` int(11) NOT NULL DEFAULT '0',
+ `PlateShoulderArmor` int(11) NOT NULL DEFAULT '0',
+ `ClothCloakArmor` int(11) NOT NULL DEFAULT '0',
+ `ClothChestArmor` int(11) NOT NULL DEFAULT '0',
+ `LeatherChestArmor` int(11) NOT NULL DEFAULT '0',
+ `MailChestArmor` int(11) NOT NULL DEFAULT '0',
+ `PlateChestArmor` 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 */;
+
+--
+-- Dumping data for table `scaling_stat_values`
+--
+
+LOCK TABLES `scaling_stat_values` WRITE;
+/*!40000 ALTER TABLE `scaling_stat_values` DISABLE KEYS */;
+/*!40000 ALTER TABLE `scaling_stat_values` ENABLE KEYS */;
+UNLOCK TABLES;
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.cpp b/src/server/database/Database/Implementation/HotfixDatabase.cpp
index 9662753ccc6..32506a8fcb6 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.cpp
+++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp
@@ -1320,6 +1320,19 @@ void HotfixDatabaseConnection::DoPrepareStatements()
PREPARE_LOCALE_STMT(HOTFIX_SEL_SCENARIO_STEP, "SELECT ID, Description_lang, Title_lang FROM scenario_step_locale WHERE (`VerifiedBuild` > 0) = ?"
" AND locale = ?", CONNECTION_SYNCH);
+ // ScalingStatDistribution.db2
+ PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, PlayerLevelToItemLevelCurveID, MinLevel, MaxLevel, Bonus1, Bonus2, Bonus3, "
+ "Bonus4, Bonus5, Bonus6, Bonus7, Bonus8, Bonus9, Bonus10, StatID1, StatID2, StatID3, StatID4, StatID5, StatID6, StatID7, StatID8, StatID9, "
+ "StatID10 FROM scaling_stat_distribution WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT MAX(ID) + 1 FROM scaling_stat_distribution", CONNECTION_SYNCH);
+
+ // ScalingStatValues.db2
+ PrepareStatement(HOTFIX_SEL_SCALING_STAT_VALUES, "SELECT ID, Charlevel, WeaponDPS1H, WeaponDPS2h, SpellcasterDPS1H, SpellcasterDPS2H, RangedDPS, "
+ "WandDPS, SpellPower, ShoulderBudget, TrinketBudget, WeaponBudget, PrimaryBudget, RangedBudget, TertiaryBudget, ClothShoulderArmor, "
+ "LeatherShoulderArmor, MailShoulderArmor, PlateShoulderArmor, ClothCloakArmor, ClothChestArmor, LeatherChestArmor, MailChestArmor, "
+ "PlateChestArmor FROM scaling_stat_values WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
+ PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCALING_STAT_VALUES, "SELECT MAX(ID) + 1 FROM scaling_stat_values", CONNECTION_SYNCH);
+
// SceneScript.db2
PrepareStatement(HOTFIX_SEL_SCENE_SCRIPT, "SELECT ID, FirstSceneScriptID, NextSceneScriptID, Unknown915 FROM scene_script"
" WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH);
diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h
index a81f7046a39..350f2531ff5 100644
--- a/src/server/database/Database/Implementation/HotfixDatabase.h
+++ b/src/server/database/Database/Implementation/HotfixDatabase.h
@@ -763,6 +763,12 @@ enum HotfixDatabaseStatements : uint32
HOTFIX_SEL_SCENARIO_STEP_MAX_ID,
HOTFIX_SEL_SCENARIO_STEP_LOCALE,
+ HOTFIX_SEL_SCALING_STAT_DISTRIBUTION,
+ HOTFIX_SEL_SCALING_STAT_DISTRIBUTION_MAX_ID,
+
+ HOTFIX_SEL_SCALING_STAT_VALUES,
+ HOTFIX_SEL_SCALING_STAT_VALUES_MAX_ID,
+
HOTFIX_SEL_SCENE_SCRIPT,
HOTFIX_SEL_SCENE_SCRIPT_MAX_ID,
diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h
index 80c81958373..9b51f55f59c 100644
--- a/src/server/game/DataStores/DB2LoadInfo.h
+++ b/src/server/game/DataStores/DB2LoadInfo.h
@@ -4359,6 +4359,72 @@ struct ScenarioStepLoadInfo
static constexpr DB2LoadInfo Instance{ Fields, 12, &ScenarioStepMeta::Instance, HOTFIX_SEL_SCENARIO_STEP };
};
+struct ScalingStatDistributionLoadInfo
+{
+ static constexpr DB2FieldMeta Fields[24] =
+ {
+ { false, FT_INT, "ID" },
+ { false, FT_SHORT, "PlayerLevelToItemLevelCurveID" },
+ { true, FT_INT, "MinLevel" },
+ { true, FT_INT, "MaxLevel" },
+ { true, FT_INT, "Bonus1" },
+ { true, FT_INT, "Bonus2" },
+ { true, FT_INT, "Bonus3" },
+ { true, FT_INT, "Bonus4" },
+ { true, FT_INT, "Bonus5" },
+ { true, FT_INT, "Bonus6" },
+ { true, FT_INT, "Bonus7" },
+ { true, FT_INT, "Bonus8" },
+ { true, FT_INT, "Bonus9" },
+ { true, FT_INT, "Bonus10" },
+ { true, FT_INT, "StatID1" },
+ { true, FT_INT, "StatID2" },
+ { true, FT_INT, "StatID3" },
+ { true, FT_INT, "StatID4" },
+ { true, FT_INT, "StatID5" },
+ { true, FT_INT, "StatID6" },
+ { true, FT_INT, "StatID7" },
+ { true, FT_INT, "StatID8" },
+ { true, FT_INT, "StatID9" },
+ { true, FT_INT, "StatID10" },
+ };
+
+ static constexpr DB2LoadInfo Instance{ Fields, 24, &ScalingStatDistributionMeta::Instance, HOTFIX_SEL_SCALING_STAT_DISTRIBUTION };
+};
+
+struct ScalingStatValuesLoadInfo
+{
+ static constexpr DB2FieldMeta Fields[24] =
+ {
+ { false, FT_INT, "ID" },
+ { true, FT_INT, "Charlevel" },
+ { true, FT_INT, "WeaponDPS1H" },
+ { true, FT_INT, "WeaponDPS2h" },
+ { true, FT_INT, "SpellcasterDPS1H" },
+ { true, FT_INT, "SpellcasterDPS2H" },
+ { true, FT_INT, "RangedDPS" },
+ { true, FT_INT, "WandDPS" },
+ { true, FT_INT, "SpellPower" },
+ { true, FT_INT, "ShoulderBudget" },
+ { true, FT_INT, "TrinketBudget" },
+ { true, FT_INT, "WeaponBudget" },
+ { true, FT_INT, "PrimaryBudget" },
+ { true, FT_INT, "RangedBudget" },
+ { true, FT_INT, "TertiaryBudget" },
+ { true, FT_INT, "ClothShoulderArmor" },
+ { true, FT_INT, "LeatherShoulderArmor" },
+ { true, FT_INT, "MailShoulderArmor" },
+ { true, FT_INT, "PlateShoulderArmor" },
+ { true, FT_INT, "ClothCloakArmor" },
+ { true, FT_INT, "ClothChestArmor" },
+ { true, FT_INT, "LeatherChestArmor" },
+ { true, FT_INT, "MailChestArmor" },
+ { true, FT_INT, "PlateChestArmor" },
+ };
+
+ static constexpr DB2LoadInfo Instance{ Fields, 24, &ScalingStatValuesMeta::Instance, HOTFIX_SEL_SCALING_STAT_VALUES };
+};
+
struct SceneScriptLoadInfo
{
static constexpr DB2FieldMeta Fields[4] =
diff --git a/src/server/game/DataStores/DB2Stores.cpp b/src/server/game/DataStores/DB2Stores.cpp
index 4d72ec9894b..f0edc028f7c 100644
--- a/src/server/game/DataStores/DB2Stores.cpp
+++ b/src/server/game/DataStores/DB2Stores.cpp
@@ -258,6 +258,8 @@ DB2Storage<RandPropPointsEntry> sRandPropPointsStore("RandPropPo
DB2Storage<RewardPackEntry> sRewardPackStore("RewardPack.db2", &RewardPackLoadInfo::Instance);
DB2Storage<RewardPackXCurrencyTypeEntry> sRewardPackXCurrencyTypeStore("RewardPackXCurrencyType.db2", &RewardPackXCurrencyTypeLoadInfo::Instance);
DB2Storage<RewardPackXItemEntry> sRewardPackXItemStore("RewardPackXItem.db2", &RewardPackXItemLoadInfo::Instance);
+DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore("ScalingStatDistribution.db2", &ScalingStatDistributionLoadInfo::Instance);
+DB2Storage<ScalingStatValuesEntry> sScalingStatValuesStore("ScalingStatValues.db2", &ScalingStatValuesLoadInfo::Instance);
DB2Storage<ScenarioEntry> sScenarioStore("Scenario.db2", &ScenarioLoadInfo::Instance);
DB2Storage<ScenarioStepEntry> sScenarioStepStore("ScenarioStep.db2", &ScenarioStepLoadInfo::Instance);
DB2Storage<SceneScriptEntry> sSceneScriptStore("SceneScript.db2", &SceneScriptLoadInfo::Instance);
@@ -828,6 +830,8 @@ uint32 DB2Manager::LoadStores(std::string const& dataPath, LocaleConstant defaul
LOAD_DB2(sRewardPackStore);
LOAD_DB2(sRewardPackXCurrencyTypeStore);
LOAD_DB2(sRewardPackXItemStore);
+ LOAD_DB2(sScalingStatDistributionStore);
+ LOAD_DB2(sScalingStatValuesStore);
LOAD_DB2(sScenarioStore);
LOAD_DB2(sScenarioStepStore);
LOAD_DB2(sSceneScriptStore);
diff --git a/src/server/game/DataStores/DB2Stores.h b/src/server/game/DataStores/DB2Stores.h
index 3c7c96fca94..5f75928e390 100644
--- a/src/server/game/DataStores/DB2Stores.h
+++ b/src/server/game/DataStores/DB2Stores.h
@@ -206,6 +206,8 @@ TC_GAME_API extern DB2Storage<RewardPackEntry> sRewardPackS
TC_GAME_API extern DB2Storage<ScenarioEntry> sScenarioStore;
TC_GAME_API extern DB2Storage<ScenarioStepEntry> sScenarioStepStore;
TC_GAME_API extern DB2Storage<SkillLineEntry> sSkillLineStore;
+TC_GAME_API extern DB2Storage<ScalingStatDistributionEntry> sScalingStatDistributionStore;
+TC_GAME_API extern DB2Storage<ScalingStatValuesEntry> sScalingStatValuesStore;
TC_GAME_API extern DB2Storage<SceneScriptPackageEntry> sSceneScriptPackageStore;
TC_GAME_API extern DB2Storage<ServerMessagesEntry> sServerMessagesStore;
TC_GAME_API extern DB2Storage<SkillLineAbilityEntry> sSkillLineAbilityStore;
diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h
index 1af31d98744..1749f8a9d65 100644
--- a/src/server/game/DataStores/DB2Structure.h
+++ b/src/server/game/DataStores/DB2Structure.h
@@ -3153,6 +3153,44 @@ struct ScenarioStepEntry
}
};
+struct ScalingStatDistributionEntry
+{
+ uint32 ID;
+ uint16 PlayerLevelToItemLevelCurveID;
+ int32 MinLevel;
+ int32 MaxLevel;
+ std::array<int32, 10> Bonus;
+ std::array<int32, 10> StatID;
+};
+
+struct ScalingStatValuesEntry
+{
+ uint32 ID;
+ int32 Charlevel;
+ int32 WeaponDPS1H;
+ int32 WeaponDPS2h;
+ int32 SpellcasterDPS1H;
+ int32 SpellcasterDPS2H;
+ int32 RangedDPS;
+ int32 WandDPS;
+ int32 SpellPower;
+ int32 ShoulderBudget;
+ int32 TrinketBudget;
+ int32 WeaponBudget;
+ int32 PrimaryBudget;
+ int32 RangedBudget;
+ int32 TertiaryBudget;
+ int32 ClothShoulderArmor;
+ int32 LeatherShoulderArmor;
+ int32 MailShoulderArmor;
+ int32 PlateShoulderArmor;
+ int32 ClothCloakArmor;
+ int32 ClothChestArmor;
+ int32 LeatherChestArmor;
+ int32 MailChestArmor;
+ int32 PlateChestArmor;
+};
+
struct SceneScriptEntry
{
uint32 ID;