diff options
author | Bjørn Lindeijer <bjorn@lindeijer.nl> | 2009-02-16 23:57:21 +0100 |
---|---|---|
committer | Ira Rice <irarice@gmail.com> | 2009-02-16 18:03:27 -0700 |
commit | a739b7d2936bc1074edc4703bd06605162efd166 (patch) | |
tree | 0a9bcc26bbb2adbf90e2ee4518cafb4fb4643a10 | |
parent | 5964b89cbe0aa78768a6abfe37eafe70f50a3222 (diff) | |
download | mana-a739b7d2936bc1074edc4703bd06605162efd166.tar.gz mana-a739b7d2936bc1074edc4703bd06605162efd166.tar.bz2 mana-a739b7d2936bc1074edc4703bd06605162efd166.tar.xz mana-a739b7d2936bc1074edc4703bd06605162efd166.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.cpp | 10 | ||||
-rw-r--r-- | src/localplayer.h | 8 | ||||
-rw-r--r-- | src/npc.cpp | 14 |
3 files changed, 16 insertions, 16 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp index b8703b70..a719e265 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -328,6 +328,11 @@ void LocalPlayer::walk(unsigned char dir) } } +Being* LocalPlayer::getTarget() const +{ + return mTarget; +} + void LocalPlayer::setTarget(Being *target) { if (mLastTarget != -1 || target == this) @@ -565,11 +570,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 0ba0dd90..b368d7c1 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 3edb57a0..1088a082 100644 --- a/src/npc.cpp +++ b/src/npc.cpp @@ -73,21 +73,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)"); |