From 8458f1f9ca8c4e33a33879a2bd46bfe2020e8214 Mon Sep 17 00:00:00 2001 From: status102 <102887808+status102@users.noreply.github.com> Date: Thu, 8 May 2025 09:52:09 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=85=B3=E9=97=AD=E8=BF=9E=E6=88=98?= =?UTF-8?q?=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks/tasks.json | 15 +++++++++++++++ .../Task/Fight/FightTimesTaskPlugin.cpp | 19 ++++++++++++++++++- src/MaaCore/Task/Fight/FightTimesTaskPlugin.h | 1 + 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/resource/tasks/tasks.json b/resource/tasks/tasks.json index 50c71ac840..94aa43b1fb 100644 --- a/resource/tasks/tasks.json +++ b/resource/tasks/tasks.json @@ -1228,6 +1228,21 @@ "sub": ["FightSeries-Opened"], "next": ["Stop"] }, + "FightSeries-NotClosed": { + "baseTask": "FightSeries-Opened", + "template": "FightSeries-Indicator.png", + "next": ["FightSeries-CloseList"] + }, + "FightSeries-Close": { + "baseTask": "FightSeries-Icon", + "template": "FightSeries-Icon.png", + "action": "ClickSelf", + "next": ["Stop"] + }, + "FightSeries-CloseList": { + "algorithm": "JustReturn", + "next": ["FightSeries-NotClosed", "FightSeries-Close"] + }, "FightSeries-List-Exceeded": { "doc": "连战列表中需要使用理智药才能打的次数会带+号标记", "roi": [965, 200, 70, 325] diff --git a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp index 54cfd066c8..2498f36f0e 100644 --- a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp +++ b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.cpp @@ -122,6 +122,11 @@ bool asst::FightTimesTaskPlugin::open_series_list(const cv::Mat& image) return ProcessTask(*this, { "FightSeries-Opened", "FightSeries-Open" }).set_reusable_image(image).run(); } +void asst::FightTimesTaskPlugin::close_series_list(const cv::Mat& image) +{ + ProcessTask(*this, { "FightSeries-CloseList" }).set_reusable_image(image).run(); +} + std::optional asst::FightTimesTaskPlugin::change_series(int sanity_current, int sanity_cost, int series) { int fight_times_remain = std::min(m_fight_times_max - m_fight_times, 6); @@ -138,7 +143,15 @@ std::optional asst::FightTimesTaskPlugin::change_series(int sanity_current, return series; } - return select_series(true); + auto ret = select_series(true); + if (!ret) { + select_series(1); + if (m_is_medicine_exhausted) { // 药品用完, 且没有次数可用, 刷理智结束 + m_task_ptr->set_enable(false); + } + } + + return ret; } std::optional asst::FightTimesTaskPlugin::select_series(bool available_only) @@ -151,6 +164,7 @@ std::optional asst::FightTimesTaskPlugin::select_series(bool available_only auto image = ctrler()->get_image(); auto list = analyze_series_list(image); if (list.empty()) { + close_series_list(); Log.error(__FUNCTION__, "unable to analyze series list"); return std::nullopt; } @@ -165,6 +179,7 @@ std::optional asst::FightTimesTaskPlugin::select_series(bool available_only return item.times; } } + close_series_list(); Log.error(__FUNCTION__, "no available series found"); return std::nullopt; } @@ -179,6 +194,7 @@ bool asst::FightTimesTaskPlugin::select_series(int times) auto image = ctrler()->get_image(); auto list = analyze_series_list(image); if (list.empty()) { + close_series_list(); Log.error(__FUNCTION__, "unable to analyze series list"); return false; } @@ -189,6 +205,7 @@ bool asst::FightTimesTaskPlugin::select_series(int times) return true; } } + close_series_list(); Log.error(__FUNCTION__, "no available series found"); return false; } diff --git a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.h b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.h index dd8160d672..2e6fd1e8b4 100644 --- a/src/MaaCore/Task/Fight/FightTimesTaskPlugin.h +++ b/src/MaaCore/Task/Fight/FightTimesTaskPlugin.h @@ -55,6 +55,7 @@ protected: private: bool open_series_list(const cv::Mat& image = cv::Mat()); + void close_series_list(const cv::Mat& image = cv::Mat()); // 计算并调整连续战斗次数, 返回是否修改了次数 std::optional change_series(int sanity_remain, int sanity_cost, int series); std::optional select_series(bool available_only);