summaryrefslogtreecommitdiff
path: root/src/localplayer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r--src/localplayer.cpp38
1 files changed, 25 insertions, 13 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp
index eb92fbab..92fea956 100644
--- a/src/localplayer.cpp
+++ b/src/localplayer.cpp
@@ -153,22 +153,30 @@ void LocalPlayer::logic()
{
stopAttack();
}
- else if (mGoingToTarget && !withinAttackRange
- && getPath().empty())
+ else if (mGoingToTarget)
{
- setDestination(mTarget->getPosition());
- mKeepAttacking = true;
- }
- else if (withinAttackRange)
- {
- mGoingToTarget = false;
- if (!getPath().empty())
+ if (!withinAttackRange && getPath().empty())
{
- stopWalking();
+ setDestination(mTarget->getPosition());
+ }
+ else if (withinAttackRange)
+ {
+ // Truncate the path to terminate at the next node.
+ // This permits to avoid a walking glitch in tile path
+ // mode.
+ if (!mPath.empty())
+ {
+ pathSetByMouse();
+ setDestination(mPath.front());
+ }
+
mKeepAttacking = true;
+ mGoingToTarget = false;
}
- if (mKeepAttacking)
- attack(mTarget, true);
+ }
+ else if (withinAttackRange && mKeepAttacking)
+ {
+ attack(mTarget, true);
}
break;
}
@@ -616,6 +624,8 @@ void LocalPlayer::pickUp(FloorItem *item)
if (!item)
return;
+ cancelGoToTarget();
+
if (withinRange(item, Net::getGameHandler()->getPickupRange()))
{
Net::getPlayerHandler()->pickUp(item);
@@ -746,6 +756,8 @@ void LocalPlayer::setWalkingDir(int dir)
else if (!dir)
return;
+ cancelGoToTarget();
+
mWalkingDir = dir;
// If we're not already walking, start walking.
@@ -886,7 +898,7 @@ void LocalPlayer::stopAttack()
setTarget(0);
}
mLastTargetTime = -1;
- mKeepAttacking = false;
+ cancelGoToTarget();
}
void LocalPlayer::pickedUp(const ItemInfo &itemInfo, int amount,