summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjørn Lindeijer <bjorn@lindeijer.nl>2009-02-16 23:57:21 +0100
committerBjørn Lindeijer <bjorn@lindeijer.nl>2009-02-16 23:57:21 +0100
commit91ee1c7b3e861d84c8aae51ad933ff6015adb5b8 (patch)
treec6458c99d566f0e656a6db1a9acc66d8f0fd0d27
parentf93c40463d018b4a2c2909bf5de14a81ce91ac64 (diff)
downloadmana-91ee1c7b3e861d84c8aae51ad933ff6015adb5b8.tar.gz
mana-91ee1c7b3e861d84c8aae51ad933ff6015adb5b8.tar.bz2
mana-91ee1c7b3e861d84c8aae51ad933ff6015adb5b8.tar.xz
mana-91ee1c7b3e861d84c8aae51ad933ff6015adb5b8.zip
Don't arbitrarily unset player target on NPC deletion
When an NPC got deleted it would reset the player target. I'm assuming what was meant was to reset the target when the deleted NPC was the target.
-rw-r--r--src/localplayer.cpp10
-rw-r--r--src/localplayer.h8
-rw-r--r--src/npc.cpp14
3 files changed, 16 insertions, 16 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index 2487ab54..70e42f88 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -329,6 +329,11 @@ void LocalPlayer::walk(unsigned char dir)
}
}
+Being* LocalPlayer::getTarget() const
+{
+ return mTarget;
+}
+
void LocalPlayer::setTarget(Being *target)
{
if (mLastTarget != -1 || target == this)
@@ -563,11 +568,6 @@ void LocalPlayer::stopAttack()
mLastTarget = -1;
}
-Being* LocalPlayer::getTarget() const
-{
- return mTarget;
-}
-
void LocalPlayer::revive()
{
MessageOut outMsg(mNetwork);
diff --git a/src/localplayer.h b/src/localplayer.h
index 4d0a05be..5f02de4f 100644
--- a/src/localplayer.h
+++ b/src/localplayer.h
@@ -141,8 +141,6 @@ class LocalPlayer : public Player
void stopAttack();
- Being* getTarget() const;
-
/**
* Overridden to do nothing. The attacks of the local player are
* displayed as soon as the player attacks, not when the server says
@@ -154,6 +152,12 @@ class LocalPlayer : public Player
virtual void handleAttack(Being *victim, int damage) {}
/**
+ * Returns the current target of the player. Returns 0 if no being is
+ * currently targeted.
+ */
+ Being* getTarget() const;
+
+ /**
* Sets the target being of the player.
*/
void setTarget(Being* target);
diff --git a/src/npc.cpp b/src/npc.cpp
index 70b3ce13..9aa7ad15 100644
--- a/src/npc.cpp
+++ b/src/npc.cpp
@@ -72,21 +72,17 @@ NPC::NPC(Uint32 id, Uint16 job, Map *map, Network *network):
NPC::~NPC()
{
- if (mName)
- {
- delete mName;
+ delete mName;
+
+ if (player_node->getTarget() == this)
player_node->setTarget(NULL);
- }
}
void NPC::setName(const std::string &name)
{
- if (mName)
- {
- delete mName;
- }
- std::string displayName = name.substr(0, name.find('#', 0));
+ const std::string displayName = name.substr(0, name.find('#', 0));
+ delete mName;
mName = new Text(displayName, mPx + NAME_X_OFFSET, mPy + NAME_Y_OFFSET,
gcn::Graphics::CENTER, gcn::Color(200, 200, 255));
Being::setName(displayName + " (NPC)");