From 55229afce1b40bfddbec0915989ffe073fb7896d Mon Sep 17 00:00:00 2001 From: MistEO Date: Mon, 26 Dec 2022 19:18:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=82=89=E9=B8=BD?= =?UTF-8?q?=E6=8A=80=E8=83=BD=E8=AF=AF=E8=AF=86=E5=88=AB=E5=90=8E=E5=8D=A1?= =?UTF-8?q?=E4=BD=8F=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/BattleHelper.cpp | 29 +++++++++++++++++++---------- src/MaaCore/Task/BattleHelper.h | 6 +++--- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/MaaCore/Task/BattleHelper.cpp b/src/MaaCore/Task/BattleHelper.cpp index 0076fc5fd6..7611e129b8 100644 --- a/src/MaaCore/Task/BattleHelper.cpp +++ b/src/MaaCore/Task/BattleHelper.cpp @@ -356,7 +356,7 @@ bool asst::BattleHelper::retreat_oper(const Point& loc, bool manually) return true; } -bool asst::BattleHelper::use_skill(const std::string& name) +bool asst::BattleHelper::use_skill(const std::string& name, bool keep_waiting) { LogTraceFunction; @@ -366,14 +366,14 @@ bool asst::BattleHelper::use_skill(const std::string& name) return false; } - return use_skill(oper_iter->second); + return use_skill(oper_iter->second, keep_waiting); } -bool asst::BattleHelper::use_skill(const Point& loc) +bool asst::BattleHelper::use_skill(const Point& loc, bool keep_waiting) { LogTraceFunction; - return click_oper_on_battlefiled(loc) && click_skill(); + return click_oper_on_battlefiled(loc) && click_skill(keep_waiting); } bool asst::BattleHelper::check_pause_button() @@ -452,7 +452,7 @@ bool asst::BattleHelper::check_and_use_skill(const Point& loc, const cv::Mat& re return false; } - return use_skill(loc); + return use_skill(loc, false); } void asst::BattleHelper::save_map(const cv::Mat& image) @@ -533,14 +533,23 @@ bool asst::BattleHelper::click_retreat() return ProcessTask(this_task(), { "BattleOperRetreatJustClick" }).run(); } -bool asst::BattleHelper::click_skill() +bool asst::BattleHelper::click_skill(bool keep_waiting) { LogTraceFunction; - return ProcessTask(this_task(), { "BattleSkillReadyOnClick", "BattleSkillStopOnClick" }) - .set_task_delay(0) - .set_retry_times(1000) - .run(); + ProcessTask skill_task(this_task(), { "BattleSkillReadyOnClick", "BattleSkillStopOnClick" }); + skill_task.set_task_delay(0); + + if (keep_waiting) { + return skill_task.set_retry_times(1000).run(); + } + else { + bool ret = skill_task.set_retry_times(5).run(); + if (!ret) { + cancel_oper_selection(); + } + return ret; + } } bool asst::BattleHelper::cancel_oper_selection() diff --git a/src/MaaCore/Task/BattleHelper.h b/src/MaaCore/Task/BattleHelper.h index a1ecbab0e9..c73f309202 100644 --- a/src/MaaCore/Task/BattleHelper.h +++ b/src/MaaCore/Task/BattleHelper.h @@ -41,8 +41,8 @@ namespace asst bool deploy_oper(const std::string& name, const Point& loc, battle::DeployDirection direction); bool retreat_oper(const std::string& name); bool retreat_oper(const Point& loc, bool manually = true); - bool use_skill(const std::string& name); - bool use_skill(const Point& loc); + bool use_skill(const std::string& name, bool keep_waiting = true); + bool use_skill(const Point& loc, bool keep_waiting = true); bool check_pause_button(); bool wait_for_start(); bool wait_for_end(); @@ -56,7 +56,7 @@ namespace asst bool click_oper_on_battlefiled(const std::string& name); bool click_oper_on_battlefiled(const Point& loc); bool click_retreat(); // 这个是不带识别的,直接点 - bool click_skill(); // 这个是带识别的,转好了才点 + bool click_skill(bool keep_waiting = true); // 这个是带识别的,转好了才点 bool cancel_oper_selection(); bool is_name_invaild(const std::string& name);