diff --git a/data/sql/updates/pending_db_world/remove-fake-dk-levelstats.sql b/data/sql/updates/pending_db_world/remove-fake-dk-levelstats.sql new file mode 100644 index 000000000..a432dc681 --- /dev/null +++ b/data/sql/updates/pending_db_world/remove-fake-dk-levelstats.sql @@ -0,0 +1,2 @@ +DELETE FROM `player_class_stats` WHERE `class` = 6 AND `level` < 55; +DELETE FROM `player_classlevelstats` WHERE `class` = 6 AND `level` < 55; diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index f95ed05ad..70cd22535 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3992,7 +3992,7 @@ void ObjectMgr::LoadPlayerInfo() PlayerClassInfo* pClassInfo = _playerClassInfo[class_]; // fatal error if no level 1 data - if (!pClassInfo->levelInfo || pClassInfo->levelInfo[0].basehealth == 0) + if (!pClassInfo->levelInfo || (pClassInfo->levelInfo[sWorld->getIntConfig(CONFIG_START_PLAYER_LEVEL) - 1].basehealth == 0 && class_ != CLASS_DEATH_KNIGHT) || (pClassInfo->levelInfo[sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL) - 1].basehealth == 0 && class_ == CLASS_DEATH_KNIGHT)) { LOG_ERROR("sql.sql", "Class {} Level 1 does not have health/mana data!", class_); exit(1); @@ -4001,7 +4001,7 @@ void ObjectMgr::LoadPlayerInfo() // fill level gaps for (uint8 level = 1; level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL); ++level) { - if (pClassInfo->levelInfo[level].basehealth == 0) + if ((pClassInfo->levelInfo[level].basehealth == 0 && class_ != CLASS_DEATH_KNIGHT) || (level >= sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL) && pClassInfo->levelInfo[level].basehealth == 0 && class_ == CLASS_DEATH_KNIGHT)) { LOG_ERROR("sql.sql", "Class {} Level {} does not have health/mana data. Using stats data of level {}.", class_, level + 1, level); pClassInfo->levelInfo[level] = pClassInfo->levelInfo[level - 1]; @@ -4126,16 +4126,16 @@ void ObjectMgr::LoadPlayerInfo() continue; // fatal error if no level 1 data - if (!info->levelInfo || info->levelInfo[0].stats[0] == 0) + if (!info->levelInfo || (info->levelInfo[sWorld->getIntConfig(CONFIG_START_PLAYER_LEVEL) - 1].stats[0] == 0 && class_ != CLASS_DEATH_KNIGHT) || (info->levelInfo[sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL) - 1].stats[0] == 0 && class_ == CLASS_DEATH_KNIGHT)) { - LOG_ERROR("sql.sql", "Race {} Class {} Level 1 does not have stats data!", race, class_); + LOG_ERROR("sql.sql", "Race {} Class {} initial level does not have stats data!", race, class_); exit(1); } // fill level gaps for (uint8 level = 1; level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL); ++level) { - if (info->levelInfo[level].stats[0] == 0) + if ((info->levelInfo[level].stats[0] == 0 && class_ != CLASS_DEATH_KNIGHT) || (level >= sWorld->getIntConfig(CONFIG_START_HEROIC_PLAYER_LEVEL) && info->levelInfo[level].stats[0] == 0 && class_ == CLASS_DEATH_KNIGHT)) { LOG_ERROR("sql.sql", "Race {} Class {} Level {} does not have stats data. Using stats data of level {}.", race, class_, level + 1, level); info->levelInfo[level] = info->levelInfo[level - 1];