summaryrefslogtreecommitdiff
path: root/src/being
diff options
context:
space:
mode:
Diffstat (limited to 'src/being')
-rw-r--r--src/being/localplayer.cpp48
-rw-r--r--src/being/localplayer.h4
2 files changed, 36 insertions, 16 deletions
diff --git a/src/being/localplayer.cpp b/src/being/localplayer.cpp
index db37992f6..9da05d898 100644
--- a/src/being/localplayer.cpp
+++ b/src/being/localplayer.cpp
@@ -1055,18 +1055,8 @@ void LocalPlayer::optionChanged(const std::string &value)
mShowServerPos = config.getBoolValue("showserverpos");
}
-void LocalPlayer::statChanged(const int id,
- const int oldVal1,
- const int oldVal2)
+void LocalPlayer::addJobMessage(const int change)
{
- if (!mShowJobExp || id != Attributes::JOB)
- return;
-
- const std::pair<int, int> exp = PlayerInfo::getStatExperience(id);
- if (oldVal1 > exp.first || !oldVal2)
- return;
-
- const int change = exp.first - oldVal1;
if (change != 0 && mMessages.size() < 20)
{
if (!mMessages.empty())
@@ -1095,6 +1085,34 @@ void LocalPlayer::statChanged(const int id,
}
}
+void LocalPlayer::addXpMessage(const int change)
+{
+ if (change != 0 && mMessages.size() < 20)
+ {
+ // TRANSLATORS: get xp message
+ addMessageToQueue(strprintf("%d %s", change, _("xp")));
+ }
+}
+
+void LocalPlayer::statChanged(const int id,
+ const int oldVal1,
+ const int oldVal2)
+{
+ if (!mShowJobExp ||
+ id != Attributes::JOB ||
+ serverFeatures->haveExpPacket())
+ {
+ return;
+ }
+
+ const std::pair<int, int> exp = PlayerInfo::getStatExperience(id);
+ if (oldVal1 > exp.first || !oldVal2)
+ return;
+
+ const int change = exp.first - oldVal1;
+ addJobMessage(change);
+}
+
void LocalPlayer::attributeChanged(const int id,
const int oldVal,
const int newVal)
@@ -1103,15 +1121,13 @@ void LocalPlayer::attributeChanged(const int id,
{
case Attributes::EXP:
{
+ if (serverFeatures->haveExpPacket())
+ break;
if (oldVal > newVal)
break;
const int change = newVal - oldVal;
- if (change != 0)
- {
- // TRANSLATORS: get xp message
- addMessageToQueue(strprintf("%d %s", change, _("xp")));
- }
+ addXpMessage(change);
break;
}
case Attributes::LEVEL:
diff --git a/src/being/localplayer.h b/src/being/localplayer.h
index d63e5a7e6..a0865baa9 100644
--- a/src/being/localplayer.h
+++ b/src/being/localplayer.h
@@ -366,6 +366,10 @@ class LocalPlayer final : public Being,
void stopAdvert();
+ void addXpMessage(const int change);
+
+ void addJobMessage(const int change);
+
static bool checAttackPermissions(const Being *const target)
A_WARN_UNUSED;