aboutsummaryrefslogtreecommitdiff
path: root/src/server/game/Globals/ObjectMgr.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/game/Globals/ObjectMgr.cpp')
-rw-r--r--src/server/game/Globals/ObjectMgr.cpp59
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)