summaryrefslogtreecommitdiff
path: root/src/game-server
diff options
context:
space:
mode:
authorChuck Miller <shadowmil@gmail.com>2009-07-06 18:47:52 -0400
committerChuck Miller <shadowmil@gmail.com>2009-07-06 18:47:52 -0400
commit31942b39ad86f2d52c74afa8c31894bf4cd70b29 (patch)
tree3d741d04910391105f912fc38a3f98d521083a11 /src/game-server
parent7de5af037fda994ca1c6a47d5df01e21dea3f243 (diff)
downloadmanaserv-31942b39ad86f2d52c74afa8c31894bf4cd70b29.tar.gz
manaserv-31942b39ad86f2d52c74afa8c31894bf4cd70b29.tar.bz2
manaserv-31942b39ad86f2d52c74afa8c31894bf4cd70b29.tar.xz
manaserv-31942b39ad86f2d52c74afa8c31894bf4cd70b29.zip
Some final skill fixes, they seem to work fine now
Diffstat (limited to 'src/game-server')
-rw-r--r--src/game-server/character.cpp6
-rw-r--r--src/game-server/character.hpp4
2 files changed, 5 insertions, 5 deletions
diff --git a/src/game-server/character.cpp b/src/game-server/character.cpp
index c78a8a92..809ed5ec 100644
--- a/src/game-server/character.cpp
+++ b/src/game-server/character.cpp
@@ -422,11 +422,12 @@ int Character::levelForExp(int exp)
return int(pow(float(exp) / EXPCURVE_FACTOR, 1.0f / EXPCURVE_EXPONENT));
}
-void Character::receiveExperience(size_t skill, int experience)
+void Character::receiveExperience(int skill, int experience)
{
if (skill >= CHAR_ATTR_END)
{
// add exp
+ int oldExp = mExperience[skill];
long int newExp = mExperience[skill] + experience;
if (newExp > INT_MAX) newExp = INT_MAX; // avoid integer overflow.
if (newExp < 0) newExp = 0; // avoid integer underflow/negative exp
@@ -438,9 +439,8 @@ void Character::receiveExperience(size_t skill, int experience)
skill, newExp);
// check for skill levelup
- while (newExp >= Character::expForLevel(getAttribute(skill) + 1))
+ if (Character::levelForExp(newExp) >= Character::levelForExp(oldExp))
{
- setAttribute(skill, getAttribute(skill) + 1);
modifiedAttribute(skill);
}
diff --git a/src/game-server/character.hpp b/src/game-server/character.hpp
index 828566ab..5eb9198e 100644
--- a/src/game-server/character.hpp
+++ b/src/game-server/character.hpp
@@ -270,7 +270,7 @@ class Character : public Being
* Gives a skill a specific amount of exp and checks if a levelup
* occured.
*/
- void receiveExperience(size_t skill, int experience);
+ void receiveExperience(int skill, int experience);
int getSkillSize() const
{ return mExperience.size(); }
@@ -291,7 +291,7 @@ class Character : public Being
* Sets total accumulated exp for skill
*/
void setExperience(int skill, int value)
- { mExperience[skill] = 0; receiveExperience(skill, value) ; }
+ { mExperience[skill] = 0; receiveExperience(skill, value); }
/**
* Shortcut to get being's health