diff options
Diffstat (limited to 'src/localplayer.cpp')
-rw-r--r-- | src/localplayer.cpp | 43 |
1 files changed, 35 insertions, 8 deletions
diff --git a/src/localplayer.cpp b/src/localplayer.cpp index e9bc30f2..b9f4b850 100644 --- a/src/localplayer.cpp +++ b/src/localplayer.cpp @@ -193,6 +193,8 @@ void LocalPlayer::logic() mLastTarget = -1; } +#endif + if (mTarget) { if (mTarget->getType() == Being::NPC) @@ -203,12 +205,21 @@ void LocalPlayer::logic() } else { +#ifdef TMWSERV_SUPPORT + // Find whether target is in range + const int rangeX = abs(mTarget->getPosition().x - getPosition().x); + const int rangeY = abs(mTarget->getPosition().y - getPosition().y); + const int attackRange = getAttackRange(); + const int inRange = rangeX > attackRange || rangeY > attackRange + ? 1 : 0; +#else // Find whether target is in range const int rangeX = abs(mTarget->mX - mX); const int rangeY = abs(mTarget->mY - mY); const int attackRange = getAttackRange(); const int inRange = rangeX > attackRange || rangeY > attackRange ? 1 : 0; +#endif mTarget->setTargetAnimation( mTargetCursor[inRange][mTarget->getTargetCursorSize()]); @@ -220,7 +231,6 @@ void LocalPlayer::logic() attack(mTarget, true); } } -#endif Player::logic(); } @@ -606,7 +616,7 @@ void LocalPlayer::emote(Uint8 emotion) } #ifdef TMWSERV_SUPPORT - +/* void LocalPlayer::attack() { if (mLastAction != -1) @@ -656,16 +666,25 @@ void LocalPlayer::attack() } Net::GameServer::Player::attack(getSpriteDirection()); } - +*/ void LocalPlayer::useSpecial(int special) { Net::GameServer::Player::useSpecial(special); } -#else +#endif void LocalPlayer::attack(Being *target, bool keep) { +#ifdef TMWSERV_SUPPORT + if (mLastAction != -1) + return; + + // Can only attack when standing still + if (mAction != STAND && mAction != ATTACK) + return; +#endif + mKeepAttacking = keep; if (!target || target->getType() == Being::NPC) @@ -676,9 +695,15 @@ void LocalPlayer::attack(Being *target, bool keep) mLastTarget = -1; setTarget(target); } - +#ifdef TMWSERV_SUPPORT + Vector plaPos = this->getPosition(); + Vector tarPos = mTarget->getPosition(); + int dist_x = plaPos.x - tarPos.x; + int dist_y = plaPos.y - tarPos.y; +#else int dist_x = target->mX - mX; int dist_y = target->mY - mY; +#endif // Must be standing to attack if (mAction != STAND) @@ -699,8 +724,12 @@ void LocalPlayer::attack(Being *target, bool keep) setDirection(LEFT); } +#ifdef TMWSERV_SUPPORT + mLastAction = tick_time; +#else mWalkTime = tick_time; mTargetTime = tick_time; +#endif setAction(ATTACK); @@ -715,14 +744,12 @@ void LocalPlayer::attack(Being *target, bool keep) sound.playSfx("sfx/fist-swish.ogg"); } - Net::getPlayerHandler()->attack(target); + Net::getPlayerHandler()->attack(target->getId()); if (!keep) stopAttack(); } -#endif // no TMWSERV_SUPPORT - void LocalPlayer::stopAttack() { if (mTarget) |