diff --git a/src/map/ai/controllers/player_controller.cpp b/src/map/ai/controllers/player_controller.cpp index 864e213d55a..b43d1b96033 100644 --- a/src/map/ai/controllers/player_controller.cpp +++ b/src/map/ai/controllers/player_controller.cpp @@ -122,7 +122,12 @@ bool CPlayerController::Ability(uint16 targid, uint16 abilityid) bool CPlayerController::RangedAttack(uint16 targid) { auto PChar = static_cast(POwner); - if (PChar->PAI->CanChangeState()) + uint8 anim = PChar->animation; + if (anim != ANIMATION_NONE && anim != ANIMATION_ATTACK) + { + PChar->pushPacket(new CMessageBasicPacket(PChar, PChar, 0, 0, MSGBASIC_CANNOT_PERFORM_ACTION)); + } + else if (PChar->PAI->CanChangeState()) { return PChar->PAI->Internal_RangedAttack(targid); } diff --git a/src/map/ai/states/range_state.cpp b/src/map/ai/states/range_state.cpp index fa4501c80c0..5510c64f636 100644 --- a/src/map/ai/states/range_state.cpp +++ b/src/map/ai/states/range_state.cpp @@ -191,6 +191,12 @@ bool CRangeState::CanUseRangedAttack(CBattleEntity* PTarget) m_errorMsg = std::make_unique(m_PEntity, PTarget, 0, 0, MSGBASIC_CANNOT_PERFORM_ACTION); return false; } + uint8 anim = m_PEntity->animation; + if (anim != ANIMATION_NONE && anim != ANIMATION_ATTACK) + { + m_errorMsg = std::make_unique(m_PEntity, PTarget, 0, 0, MSGBASIC_CANNOT_PERFORM_ACTION); + return false; + } return true; }