From 6898cb109e9d7ee4ff9c9d9648e95b79544f6405 Mon Sep 17 00:00:00 2001 From: Chuck Miller Date: Fri, 3 Jul 2009 23:51:10 -0400 Subject: Helps fix one issue with skill levels It seems players skill random get a lot of exp in random, unused skill IDs --- src/game-server/character.cpp | 7 ++++++- src/game-server/character.hpp | 5 +++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp index 9e30ca57..1015f438 100644 --- a/src/game-server/character.cpp +++ b/src/game-server/character.cpp @@ -330,7 +330,7 @@ int Character::getAttribute(int attr) const } else { - return mExperience.find(attr)->second; + return Character::levelForExp(mExperience.find(attr)->second); } } @@ -404,6 +404,11 @@ int Character::expForLevel(int level) return int(pow(level, EXPCURVE_EXPONENT) * EXPCURVE_FACTOR); } +int Character::levelForExp(int exp) +{ + return int(pow(float(exp) / EXPCURVE_FACTOR, 1.0f / EXPCURVE_EXPONENT)); +} + void Character::receiveExperience(size_t skill, int experience) { if (skill >= CHAR_ATTR_END) diff --git a/src/game-server/character.hpp b/src/game-server/character.hpp index d90adbf3..da2af285 100644 --- a/src/game-server/character.hpp +++ b/src/game-server/character.hpp @@ -298,6 +298,11 @@ class Character : public Being */ static int expForLevel(int level); + /** + * Returns the level for a given exp + */ + static int levelForExp(int exp); + /** * Tries to use a character point to increase a * basic attribute -- cgit v1.2.3-60-g2f50