diff options
author | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-09-30 17:52:22 +0200 |
---|---|---|
committer | Yohann Ferreira <yohann_dot_ferreira_at_orange_dot_efer> | 2011-09-30 17:52:22 +0200 |
commit | 5d115b5fd4d9915c4e72c33d800ddbd8a48802b5 (patch) | |
tree | f90af41a0ad0ef42b0eb0f408d7f1731f50610f1 | |
parent | b9ef24610683211dbd847d93f7d29de88bf0f170 (diff) | |
download | mana-5d115b5fd4d9915c4e72c33d800ddbd8a48802b5.tar.gz mana-5d115b5fd4d9915c4e72c33d800ddbd8a48802b5.tar.bz2 mana-5d115b5fd4d9915c4e72c33d800ddbd8a48802b5.tar.xz mana-5d115b5fd4d9915c4e72c33d800ddbd8a48802b5.zip |
Fixed the negative XP notifications on levelups.
This used to have an associated issue
but I just can't find it anymore.
Reviewed-by: Thorbjorn.
-rw-r--r-- | src/localplayer.cpp | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp index 78395438..494bbb5a 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -1031,10 +1031,27 @@ void LocalPlayer::event(Event::Channel channel, const Event &event) { if (event.getInt("id") == EXP) { - int change = event.getInt("newValue") - - event.getInt("oldValue"); + int change = 0; + int oldXp = event.getInt("oldValue"); + int newXp = event.getInt("newValue"); + + // When the new XP is lower than the old one, + // it means that a new level has been reached. + // Thus, the xp difference can only be obtained + // with the exp needed for the next level. + // The new XP value is then the XP obtained for the new level. + if (newXp < oldXp) + { + change = PlayerInfo::getAttribute(EXP_NEEDED) + - oldXp + newXp; + } + else + { + change = newXp - oldXp; + } - addMessageToQueue(toString(change) + " xp"); + if (change > 0) + addMessageToQueue(toString(change) + " xp"); } } } |