diff options
author | Chuck Miller <shadowmil@gmail.com> | 2009-07-06 18:47:52 -0400 |
---|---|---|
committer | Chuck Miller <shadowmil@gmail.com> | 2009-07-06 18:47:52 -0400 |
commit | 31942b39ad86f2d52c74afa8c31894bf4cd70b29 (patch) | |
tree | 3d741d04910391105f912fc38a3f98d521083a11 /src | |
parent | 7de5af037fda994ca1c6a47d5df01e21dea3f243 (diff) | |
download | manaserv-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.cpp | 6 | ||||
-rw-r--r-- | src/game-server/character.hpp | 4 | ||||
-rw-r--r-- | src/serialize/characterdata.hpp | 4 |
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()); |