diff options
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r-- | src/server/game/Globals/ObjectMgr.cpp | 59 |
1 files changed, 32 insertions, 27 deletions
diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index e44d1eeb016..b8352794c06 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -3293,52 +3293,57 @@ void ObjectMgr::LoadPlayerInfo() for (uint8 level = 0; level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL); ++level) _playerXPperLevel[level] = 0; - // 0 1 - QueryResult result = WorldDatabase.Query("SELECT lvl, xp_for_next_level FROM player_xp_for_level"); + // 0 1 + QueryResult result = WorldDatabase.Query("SELECT Level, Experience FROM player_xp_for_level"); - if (!result) + // load the DBC's levels at first... + GtOCTLevelExperienceEntry const* exp; + for (int level = 0; level < MAX_LEVEL; ++level) { - TC_LOG_ERROR("server.loading", ">> Loaded 0 xp for level definitions. DB table `player_xp_for_level` is empty."); - exit(1); + exp = sGtOCTLevelExperienceStore.EvaluateTable(level, 0); + _playerXPperLevel[level + 1] = exp->Data; } uint32 count = 0; - do + // ...overwrite if needed (custom values) + if (result) { - Field* fields = result->Fetch(); + do + { + Field* fields = result->Fetch(); - uint32 current_level = fields[0].GetUInt8(); - uint32 current_xp = fields[1].GetUInt32(); + uint32 current_level = fields[0].GetUInt16(); + uint32 current_xp = uint32(fields[1].GetFloat()); - if (current_level >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) - { - if (current_level > STRONG_MAX_LEVEL) // hardcoded level maximum - TC_LOG_ERROR("sql.sql", "Wrong (> %u) level %u in `player_xp_for_level` table, ignoring.", STRONG_MAX_LEVEL, current_level); - else + if (current_level >= sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL)) { - TC_LOG_INFO("misc", "Unused (> MaxPlayerLevel in worldserver.conf) level %u in `player_xp_for_levels` table, ignoring.", current_level); - ++count; // make result loading percent "expected" correct in case disabled detail mode for example. + if (current_level > STRONG_MAX_LEVEL) // hardcoded level maximum + TC_LOG_ERROR("sql.sql", "Wrong (> %u) level %u in `player_xp_for_level` table, ignoring.", STRONG_MAX_LEVEL, current_level); + else + { + TC_LOG_INFO("misc", "Unused (> MaxPlayerLevel in worldserver.conf) level %u in `player_xp_for_level` table, ignoring.", current_level); + ++count; // make result loading percent "expected" correct in case disabled detail mode for example. + } + continue; } - continue; - } - //PlayerXPperLevel - _playerXPperLevel[current_level] = current_xp; - ++count; + //PlayerXPperLevel + _playerXPperLevel[current_level] = current_xp; + ++count; + } while (result->NextRow()); } - while (result->NextRow()); - // fill level gaps + // fill level gaps - only accounting levels > MAX_LEVEL for (uint8 level = 1; level < sWorld->getIntConfig(CONFIG_MAX_PLAYER_LEVEL); ++level) { if (_playerXPperLevel[level] == 0) { - TC_LOG_ERROR("sql.sql", "Level %i does not have XP for level data. Using data of level [%i] + 100.", level + 1, level); - _playerXPperLevel[level] = _playerXPperLevel[level - 1] + 100; + TC_LOG_ERROR("sql.sql", "Level %i does not have XP for level data. Using data of level [%i] + 12000.", level + 1, level); + _playerXPperLevel[level] = _playerXPperLevel[level - 1] + 12000; } } - TC_LOG_INFO("server.loading", ">> Loaded %u xp for level definitions in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); + TC_LOG_INFO("server.loading", ">> Loaded %u xp for level definition(s) from database in %u ms", count, GetMSTimeDiffToNow(oldMSTime)); } } @@ -8368,7 +8373,7 @@ CreatureBaseStats const* ObjectMgr::GetCreatureBaseStats(uint8 level, uint8 unit void ObjectMgr::LoadCreatureClassLevelStats() { uint32 oldMSTime = getMSTime(); - // 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 16 + // 0 1 2 3 4 5 6 7 8 9 10 11 QueryResult result = WorldDatabase.Query("SELECT level, class, basemana, basearmor, attackpower, rangedattackpower, damage_base, damage_exp1, damage_exp2, damage_exp3, damage_exp4, damage_exp5 FROM creature_classlevelstats"); if (!result) |