diff --git a/src/otclient/game.cpp b/src/otclient/game.cpp index d3b6308f..0772c0c7 100644 --- a/src/otclient/game.cpp +++ b/src/otclient/game.cpp @@ -385,7 +385,7 @@ void Game::processQuestLine(int questId, const std::vectorsendRefreshContainer(); } -void Game::attack(const CreaturePtr& creature) +void Game::attack(CreaturePtr creature) { if(!canPerformGameAction() || creature == m_localPlayer) return; - if(creature && creature == m_attackingCreature) { - cancelAttack(); - return; - } + // cancel when attacking again + if(creature && creature == m_attackingCreature) + creature = nullptr; if(creature && isFollowing()) cancelFollow(); setAttackingCreature(creature); - m_protocolGame->sendAttack(creature ? creature->getId() : 0, ++m_seq); + m_seq++; + m_protocolGame->sendAttack(creature ? creature->getId() : 0, m_seq); } -void Game::follow(const CreaturePtr& creature) +void Game::follow(CreaturePtr creature) { - if(!canPerformGameAction() || creature == m_localPlayer || creature == m_followingCreature) + if(!canPerformGameAction() || creature == m_localPlayer) return; + // cancel when following again + if(creature && creature == m_followingCreature) + creature = nullptr; + if(creature && isAttacking()) cancelAttack(); setFollowingCreature(creature); - m_protocolGame->sendFollow(creature ? creature->getId() : 0, ++m_seq); + m_seq++; + m_protocolGame->sendFollow(creature ? creature->getId() : 0, m_seq); } void Game::cancelAttackAndFollow() @@ -771,11 +776,6 @@ void Game::cancelAttackAndFollow() if(!canPerformGameAction()) return; - if(isAttacking()) - setAttackingCreature(nullptr); - if(isFollowing()) - setFollowingCreature(nullptr); - m_protocolGame->sendCancelAttackAndFollow(); } diff --git a/src/otclient/game.h b/src/otclient/game.h index cffadf98..142b737c 100644 --- a/src/otclient/game.h +++ b/src/otclient/game.h @@ -156,9 +156,9 @@ public: void refreshContainer(); // attack/follow related - void attack(const CreaturePtr& creature); + void attack(CreaturePtr creature); void cancelAttack() { attack(nullptr); } - void follow(const CreaturePtr& creature); + void follow(CreaturePtr creature); void cancelFollow() { follow(nullptr); } void cancelAttackAndFollow();