diff options
5 files changed, 306 insertions, 1 deletions
diff --git a/sql/updates/hotfixes/cata_classic/2025_04_11_00_hotfixes.sql b/sql/updates/hotfixes/cata_classic/2025_04_11_00_hotfixes.sql new file mode 100644 index 00000000000..0cab817f6c0 --- /dev/null +++ b/sql/updates/hotfixes/cata_classic/2025_04_11_00_hotfixes.sql @@ -0,0 +1,128 @@ +-- +-- 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 unsigned NOT NULL DEFAULT '0', + `StatID1` int NOT NULL DEFAULT '0', + `StatID2` int NOT NULL DEFAULT '0', + `StatID3` int NOT NULL DEFAULT '0', + `StatID4` int NOT NULL DEFAULT '0', + `StatID5` int NOT NULL DEFAULT '0', + `StatID6` int NOT NULL DEFAULT '0', + `StatID7` int NOT NULL DEFAULT '0', + `StatID8` int NOT NULL DEFAULT '0', + `StatID9` int NOT NULL DEFAULT '0', + `StatID10` int NOT NULL DEFAULT '0', + `Bonus1` int NOT NULL DEFAULT '0', + `Bonus2` int NOT NULL DEFAULT '0', + `Bonus3` int NOT NULL DEFAULT '0', + `Bonus4` int NOT NULL DEFAULT '0', + `Bonus5` int NOT NULL DEFAULT '0', + `Bonus6` int NOT NULL DEFAULT '0', + `Bonus7` int NOT NULL DEFAULT '0', + `Bonus8` int NOT NULL DEFAULT '0', + `Bonus9` int NOT NULL DEFAULT '0', + `Bonus10` int NOT NULL DEFAULT '0', + `Maxlevel` int NOT NULL DEFAULT '0', + `VerifiedBuild` int 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 unsigned NOT NULL DEFAULT '0', + `Charlevel` int NOT NULL DEFAULT '0', + `WeaponDPS1H` int NOT NULL DEFAULT '0', + `WeaponDPS2H` int NOT NULL DEFAULT '0', + `SpellcasterDPS1H` int NOT NULL DEFAULT '0', + `SpellcasterDPS2H` int NOT NULL DEFAULT '0', + `RangedDPS` int NOT NULL DEFAULT '0', + `WandDPS` int NOT NULL DEFAULT '0', + `SpellPower` int NOT NULL DEFAULT '0', + `BudgetPrimary` int NOT NULL DEFAULT '0', + `BudgetSecondary` int NOT NULL DEFAULT '0', + `BudgetTertiary` int NOT NULL DEFAULT '0', + `BudgetSub` int NOT NULL DEFAULT '0', + `BudgetTrivial` int NOT NULL DEFAULT '0', + `ClothCloakArmor` int NOT NULL DEFAULT '0', + `Unk440_0` int NOT NULL DEFAULT '0', + `Unk440_1` int NOT NULL DEFAULT '0', + `Unk440_2` int NOT NULL DEFAULT '0', + `Unk440_3` int NOT NULL DEFAULT '0', + `Unk440_4` int NOT NULL DEFAULT '0', + `Unk440_5` int NOT NULL DEFAULT '0', + `Unk440_6` int NOT NULL DEFAULT '0', + `Unk440_7` int NOT NULL DEFAULT '0', + `Unk440_8` int NOT NULL DEFAULT '0', + `Unk440_9` int NOT NULL DEFAULT '0', + `Unk440_10` int NOT NULL DEFAULT '0', + `Unk440_11` int NOT NULL DEFAULT '0', + `Unk440_12` int NOT NULL DEFAULT '0', + `Unk440_13` int NOT NULL DEFAULT '0', + `Unk440_14` int NOT NULL DEFAULT '0', + `Unk440_15` int NOT NULL DEFAULT '0', + `ShoulderArmor1` int NOT NULL DEFAULT '0', + `ShoulderArmor2` int NOT NULL DEFAULT '0', + `ShoulderArmor3` int NOT NULL DEFAULT '0', + `ShoulderArmor4` int NOT NULL DEFAULT '0', + `ChestArmor1` int NOT NULL DEFAULT '0', + `ChestArmor2` int NOT NULL DEFAULT '0', + `ChestArmor3` int NOT NULL DEFAULT '0', + `ChestArmor4` int NOT NULL DEFAULT '0', + `HeadArmor1` int NOT NULL DEFAULT '0', + `HeadArmor2` int NOT NULL DEFAULT '0', + `HeadArmor3` int NOT NULL DEFAULT '0', + `HeadArmor4` int NOT NULL DEFAULT '0', + `LegsArmor1` int NOT NULL DEFAULT '0', + `LegsArmor2` int NOT NULL DEFAULT '0', + `LegsArmor3` int NOT NULL DEFAULT '0', + `LegsArmor4` int NOT NULL DEFAULT '0', + `FeetArmor1` int NOT NULL DEFAULT '0', + `FeetArmor2` int NOT NULL DEFAULT '0', + `FeetArmor3` int NOT NULL DEFAULT '0', + `FeetArmor4` int NOT NULL DEFAULT '0', + `WaistArmor1` int NOT NULL DEFAULT '0', + `WaistArmor2` int NOT NULL DEFAULT '0', + `WaistArmor3` int NOT NULL DEFAULT '0', + `WaistArmor4` int NOT NULL DEFAULT '0', + `HandsArmor1` int NOT NULL DEFAULT '0', + `HandsArmor2` int NOT NULL DEFAULT '0', + `HandsArmor3` int NOT NULL DEFAULT '0', + `HandsArmor4` int NOT NULL DEFAULT '0', + `WristsArmor1` int NOT NULL DEFAULT '0', + `WristsArmor2` int NOT NULL DEFAULT '0', + `WristsArmor3` int NOT NULL DEFAULT '0', + `WristsArmor4` int NOT NULL DEFAULT '0', + `VerifiedBuild` int 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 2f6a0460256..a0e2bf66dd1 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.cpp +++ b/src/server/database/Database/Implementation/HotfixDatabase.cpp @@ -1099,6 +1099,22 @@ void HotfixDatabaseConnection::DoPrepareStatements() " WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_REWARD_PACK_X_ITEM, "SELECT MAX(ID) + 1 FROM reward_pack_x_item", CONNECTION_SYNCH); + // ScalingStatDistribution.db2 + PrepareStatement(HOTFIX_SEL_SCALING_STAT_DISTRIBUTION, "SELECT ID, StatID1, StatID2, StatID3, StatID4, StatID5, StatID6, StatID7, StatID8, " + "StatID9, StatID10, Bonus1, Bonus2, Bonus3, Bonus4, Bonus5, Bonus6, Bonus7, Bonus8, Bonus9, Bonus10, Maxlevel 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, BudgetPrimary, BudgetSecondary, BudgetTertiary, BudgetSub, BudgetTrivial, ClothCloakArmor, Unk440_0, Unk440_1, " + "Unk440_2, Unk440_3, Unk440_4, Unk440_5, Unk440_6, Unk440_7, Unk440_8, Unk440_9, Unk440_10, Unk440_11, Unk440_12, Unk440_13, Unk440_14, " + "Unk440_15, ShoulderArmor1, ShoulderArmor2, ShoulderArmor3, ShoulderArmor4, ChestArmor1, ChestArmor2, ChestArmor3, ChestArmor4, HeadArmor1, " + "HeadArmor2, HeadArmor3, HeadArmor4, LegsArmor1, LegsArmor2, LegsArmor3, LegsArmor4, FeetArmor1, FeetArmor2, FeetArmor3, FeetArmor4, " + "WaistArmor1, WaistArmor2, WaistArmor3, WaistArmor4, HandsArmor1, HandsArmor2, HandsArmor3, HandsArmor4, WristsArmor1, WristsArmor2, " + "WristsArmor3, WristsArmor4 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); + // Scenario.db2 PrepareStatement(HOTFIX_SEL_SCENARIO, "SELECT ID, Name, AreaTableID, Type, Flags, UiTextureKitID FROM scenario WHERE (`VerifiedBuild` > 0) = ?", CONNECTION_SYNCH); PREPARE_MAX_ID_STMT(HOTFIX_SEL_SCENARIO, "SELECT MAX(ID) + 1 FROM scenario", CONNECTION_SYNCH); diff --git a/src/server/database/Database/Implementation/HotfixDatabase.h b/src/server/database/Database/Implementation/HotfixDatabase.h index dfa5cb9240f..b28d27eadc4 100644 --- a/src/server/database/Database/Implementation/HotfixDatabase.h +++ b/src/server/database/Database/Implementation/HotfixDatabase.h @@ -632,6 +632,12 @@ enum HotfixDatabaseStatements : uint32 HOTFIX_SEL_REWARD_PACK_X_ITEM, HOTFIX_SEL_REWARD_PACK_X_ITEM_MAX_ID, + 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_SCENARIO, HOTFIX_SEL_SCENARIO_MAX_ID, HOTFIX_SEL_SCENARIO_LOCALE, diff --git a/src/server/game/DataStores/DB2LoadInfo.h b/src/server/game/DataStores/DB2LoadInfo.h index 1e7ce97ecb3..ae072a81863 100644 --- a/src/server/game/DataStores/DB2LoadInfo.h +++ b/src/server/game/DataStores/DB2LoadInfo.h @@ -23,7 +23,6 @@ #include "DB2DatabaseLoader.h" #include "DB2Metadata.h" -#include "HotfixDatabase.h" struct AchievementLoadInfo { @@ -3712,6 +3711,109 @@ struct RewardPackXItemLoadInfo static constexpr DB2LoadInfo Instance{ Fields, 4, &RewardPackXItemMeta::Instance, HOTFIX_SEL_REWARD_PACK_X_ITEM }; }; +struct ScalingStatDistributionLoadInfo +{ + static constexpr DB2FieldMeta Fields[22] = + { + { false, FT_INT, "ID" }, + { 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" }, + { 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, "Maxlevel" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 22, &ScalingStatDistributionMeta::Instance, HOTFIX_SEL_SCALING_STAT_DISTRIBUTION }; +}; + +struct ScalingStatValuesLoadInfo +{ + static constexpr DB2FieldMeta Fields[63] = + { + { 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, "BudgetPrimary" }, + { true, FT_INT, "BudgetSecondary" }, + { true, FT_INT, "BudgetTertiary" }, + { true, FT_INT, "BudgetSub" }, + { true, FT_INT, "BudgetTrivial" }, + { true, FT_INT, "ClothCloakArmor" }, + { true, FT_INT, "Unk440_0" }, + { true, FT_INT, "Unk440_1" }, + { true, FT_INT, "Unk440_2" }, + { true, FT_INT, "Unk440_3" }, + { true, FT_INT, "Unk440_4" }, + { true, FT_INT, "Unk440_5" }, + { true, FT_INT, "Unk440_6" }, + { true, FT_INT, "Unk440_7" }, + { true, FT_INT, "Unk440_8" }, + { true, FT_INT, "Unk440_9" }, + { true, FT_INT, "Unk440_10" }, + { true, FT_INT, "Unk440_11" }, + { true, FT_INT, "Unk440_12" }, + { true, FT_INT, "Unk440_13" }, + { true, FT_INT, "Unk440_14" }, + { true, FT_INT, "Unk440_15" }, + { true, FT_INT, "ShoulderArmor1" }, + { true, FT_INT, "ShoulderArmor2" }, + { true, FT_INT, "ShoulderArmor3" }, + { true, FT_INT, "ShoulderArmor4" }, + { true, FT_INT, "ChestArmor1" }, + { true, FT_INT, "ChestArmor2" }, + { true, FT_INT, "ChestArmor3" }, + { true, FT_INT, "ChestArmor4" }, + { true, FT_INT, "HeadArmor1" }, + { true, FT_INT, "HeadArmor2" }, + { true, FT_INT, "HeadArmor3" }, + { true, FT_INT, "HeadArmor4" }, + { true, FT_INT, "LegsArmor1" }, + { true, FT_INT, "LegsArmor2" }, + { true, FT_INT, "LegsArmor3" }, + { true, FT_INT, "LegsArmor4" }, + { true, FT_INT, "FeetArmor1" }, + { true, FT_INT, "FeetArmor2" }, + { true, FT_INT, "FeetArmor3" }, + { true, FT_INT, "FeetArmor4" }, + { true, FT_INT, "WaistArmor1" }, + { true, FT_INT, "WaistArmor2" }, + { true, FT_INT, "WaistArmor3" }, + { true, FT_INT, "WaistArmor4" }, + { true, FT_INT, "HandsArmor1" }, + { true, FT_INT, "HandsArmor2" }, + { true, FT_INT, "HandsArmor3" }, + { true, FT_INT, "HandsArmor4" }, + { true, FT_INT, "WristsArmor1" }, + { true, FT_INT, "WristsArmor2" }, + { true, FT_INT, "WristsArmor3" }, + { true, FT_INT, "WristsArmor4" }, + }; + + static constexpr DB2LoadInfo Instance{ Fields, 63, &ScalingStatValuesMeta::Instance, HOTFIX_SEL_SCALING_STAT_VALUES }; +}; + struct ScenarioLoadInfo { static constexpr DB2FieldMeta Fields[6] = diff --git a/src/server/game/DataStores/DB2Structure.h b/src/server/game/DataStores/DB2Structure.h index 3221e0d1518..0b72240c29c 100644 --- a/src/server/game/DataStores/DB2Structure.h +++ b/src/server/game/DataStores/DB2Structure.h @@ -2884,6 +2884,59 @@ struct RewardPackXItemEntry uint32 RewardPackID; }; +// structure for ScalingStatDistribution.db2 +struct ScalingStatDistributionEntry +{ + uint32 ID; + std::array<int32, 10> StatID; + std::array<int32, 10> Bonus; + int32 Maxlevel; +}; + +// structure for ScalingStatValues.db2 +struct ScalingStatValuesEntry +{ + uint32 ID; + int32 Charlevel; + int32 WeaponDPS1H; + int32 WeaponDPS2H; + int32 SpellcasterDPS1H; + int32 SpellcasterDPS2H; + int32 RangedDPS; + int32 WandDPS; + int32 SpellPower; + int32 BudgetPrimary; + int32 BudgetSecondary; + int32 BudgetTertiary; + int32 BudgetSub; + int32 BudgetTrivial; + int32 ClothCloakArmor; + int32 Unk440_0; + int32 Unk440_1; + int32 Unk440_2; + int32 Unk440_3; + int32 Unk440_4; + int32 Unk440_5; + int32 Unk440_6; + int32 Unk440_7; + int32 Unk440_8; + int32 Unk440_9; + int32 Unk440_10; + int32 Unk440_11; + int32 Unk440_12; + int32 Unk440_13; + int32 Unk440_14; + int32 Unk440_15; + std::array<int32, 4> ShoulderArmor; + std::array<int32, 4> ChestArmor; + std::array<int32, 4> HeadArmor; + std::array<int32, 4> LegsArmor; + std::array<int32, 4> FeetArmor; + std::array<int32, 4> WaistArmor; + std::array<int32, 4> HandsArmor; + std::array<int32, 4> WristsArmor; +}; + // structure for Scenario.db2 struct ScenarioEntry { |
