diff options
author | Chuck Miller <shadowmil@gmail.com> | 2009-07-03 23:51:10 -0400 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2009-07-03 23:51:10 -0400 |
commit | 6898cb109e9d7ee4ff9c9d9648e95b79544f6405 (patch) | |
tree | 291ef704b7dc55b63abc974940b23ae9bc4bf4ab /src | |
parent | c8772d145ea5db993a0d9ebc78f55b977dab1973 (diff) | |
download | manaserv-6898cb109e9d7ee4ff9c9d9648e95b79544f6405.tar.gz manaserv-6898cb109e9d7ee4ff9c9d9648e95b79544f6405.tar.bz2 manaserv-6898cb109e9d7ee4ff9c9d9648e95b79544f6405.tar.xz manaserv-6898cb109e9d7ee4ff9c9d9648e95b79544f6405.zip |
Helps fix one issue with skill levels
It seems players skill random get a lot of exp in random, unused skill IDs
Diffstat (limited to 'src')
-rw-r--r-- | src/game-server/character.cpp | 7 | ||||
-rw-r--r-- | src/game-server/character.hpp | 5 |
2 files changed, 11 insertions, 1 deletions
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 @@ -299,6 +299,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 */ |