summaryrefslogtreecommitdiff
path: root/src
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
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')
-rw-r--r--src/game-server/character.cpp6
-rw-r--r--src/game-server/character.hpp4
-rw-r--r--src/serialize/characterdata.hpp4
3 files changed, 8 insertions, 6 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
diff --git a/src/serialize/characterdata.hpp b/src/serialize/characterdata.hpp
index 09a8658a..ac281e70 100644
--- a/src/serialize/characterdata.hpp
+++ b/src/serialize/characterdata.hpp
@@ -94,7 +94,9 @@ void deserializeCharacterData(T &data, MessageIn &msg)
for (int i = 0; i < skillSize; ++i)
{
- data.setExperience(msg.readShort(), msg.readLong());
+ int skill = msg.readShort();
+ int level = msg.readLong();
+ data.setExperience(skill,level);
}
data.setMapId(msg.readShort());