summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2009-07-03 23:51:10 -0400
committerChuck Miller <shadowmil@gmail.com>2009-07-03 23:51:10 -0400
commit6898cb109e9d7ee4ff9c9d9648e95b79544f6405 (patch)
tree291ef704b7dc55b63abc974940b23ae9bc4bf4ab
parentc8772d145ea5db993a0d9ebc78f55b977dab1973 (diff)
downloadmanaserv-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
-rw-r--r--src/game-server/character.cpp7
-rw-r--r--src/game-server/character.hpp5
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
*/