From 29d052e34fdde58f693baae251dc5bb3466243ba Mon Sep 17 00:00:00 2001 From: YueLengM Date: Wed, 4 Sep 2024 23:27:09 +0800 Subject: [PATCH 1/3] =?UTF-8?q?fix:=20=E8=82=89=E9=B8=BD=E9=87=8D=E6=96=B0?= =?UTF-8?q?=E7=BC=96=E9=98=9F=E5=BA=94=E5=85=88=E5=9B=9E=E5=88=B0=E9=A6=96?= =?UTF-8?q?=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Roguelike/RoguelikeFormationTaskPlugin.cpp | 17 +++++++++++------ .../Roguelike/RoguelikeFormationTaskPlugin.h | 1 + 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index fce6750865..186b448c2f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -97,7 +97,7 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() m_last_detected_oper_names.clear(); oper_list.clear(); - cur_page = 1; + swipe_to_first_page(); while (analyze()) { // 返回true说明新增了干员,可能还有下一页 ProcessTask(*this, { "RoguelikeRecruitOperListSlowlySwipeToTheRight" }).run(); @@ -199,11 +199,7 @@ bool asst::RoguelikeFormationTaskPlugin::select(RoguelikeFormationImageAnalyzer: Log.info(__FUNCTION__, "swipe from page", cur_page, "to page", oper.page); // 在最大页码时(当总页数>=2),从右往左划可能会有对不齐的问题,直接划动到底 if ((cur_page > oper.page && max_page >= 2 && cur_page == max_page) || max_page == 1) { - for (; cur_page > 0; --cur_page) { // 多划一次到不存在的第0页 - ProcessTask(*this, { "RoguelikeRecruitOperListSwipeToTheLeft" }).run(); - } - ProcessTask(*this, { "SleepAfterOperListQuickSwipe" }).run(); - cur_page = 1; + swipe_to_first_page(); } // 中间页面划动姑且当成是相对准确的 while (cur_page > oper.page) { @@ -219,3 +215,12 @@ bool asst::RoguelikeFormationTaskPlugin::select(RoguelikeFormationImageAnalyzer: ctrler()->click(oper.rect); return true; } + +void asst::RoguelikeFormationTaskPlugin::swipe_to_first_page() +{ + for (; cur_page > 0; --cur_page) { // 多划一次到不存在的第0页 + ProcessTask(*this, { "RoguelikeRecruitOperListSwipeToTheLeft" }).run(); + } + ProcessTask(*this, { "SleepAfterOperListQuickSwipe" }).run(); + cur_page = 1; +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h index 0ab6b65c99..9e41a262c0 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h @@ -23,6 +23,7 @@ namespace asst void clear_and_reselect(); bool analyze(); bool select(RoguelikeFormationImageAnalyzer::FormationOper oper); + void swipe_to_first_page(); private: int cur_page = 0; From 1d0de2fcfa873bb93a5226ca14d8f9762210016e Mon Sep 17 00:00:00 2001 From: YueLengM Date: Wed, 4 Sep 2024 23:40:49 +0800 Subject: [PATCH 2/3] =?UTF-8?q?fix:=20=E5=B7=B2=E5=9C=A8=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=E6=97=B6=E4=B8=8D=E5=86=8D=E8=A7=A6=E5=8F=91=E7=BF=BB=E8=87=B3?= =?UTF-8?q?=E9=A6=96=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp | 5 ++++- src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index 186b448c2f..2fe502c39f 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -97,7 +97,10 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() m_last_detected_oper_names.clear(); oper_list.clear(); - swipe_to_first_page(); + + if (cur_page > 1) { + swipe_to_first_page(); + } while (analyze()) { // 返回true说明新增了干员,可能还有下一页 ProcessTask(*this, { "RoguelikeRecruitOperListSlowlySwipeToTheRight" }).run(); diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h index 9e41a262c0..9afc301b44 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h @@ -26,7 +26,7 @@ namespace asst void swipe_to_first_page(); private: - int cur_page = 0; + int cur_page = 1; int max_page = 0; std::vector oper_list; std::vector m_last_detected_oper_names; // 上一页识别到的干员 From 8857eb03eaadb117d0093c9819b03b1ed889fc74 Mon Sep 17 00:00:00 2001 From: YueLengM Date: Thu, 5 Sep 2024 23:38:40 +0800 Subject: [PATCH 3/3] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E5=9B=9E=E5=88=B0?= =?UTF-8?q?=E5=B9=B2=E5=91=98=E9=A6=96=E9=A1=B5=E7=9A=84=E6=9D=A1=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../RoguelikeFormationTaskPlugin.cpp | 32 ++++++++++++------- .../Roguelike/RoguelikeFormationTaskPlugin.h | 3 +- 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp index 2fe502c39f..5c6838013e 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.cpp @@ -95,19 +95,13 @@ void asst::RoguelikeFormationTaskPlugin::clear_and_reselect() // 清空并退出游戏会自动按等级重新排序 ProcessTask(*this, { "RoguelikeQuickFormationClearAndReselect" }).run(); - m_last_detected_oper_names.clear(); - oper_list.clear(); - - if (cur_page > 1) { - swipe_to_first_page(); + scan_oper(); + // 如果新识别出的干员页数没有之前的多,说明没在最左侧开始识别 + if (max_page > cur_page) { + cur_page = max_page; + swipe_to_first_page(); + scan_oper(); } - - while (analyze()) { // 返回true说明新增了干员,可能还有下一页 - ProcessTask(*this, { "RoguelikeRecruitOperListSlowlySwipeToTheRight" }).run(); - cur_page++; - } - - cur_page--; // 最后多划了一下,退回最后一页的页码 max_page = cur_page; // 将oper_list的每个干员重置为未选择 @@ -227,3 +221,17 @@ void asst::RoguelikeFormationTaskPlugin::swipe_to_first_page() ProcessTask(*this, { "SleepAfterOperListQuickSwipe" }).run(); cur_page = 1; } + +void asst::RoguelikeFormationTaskPlugin::scan_oper() +{ + m_last_detected_oper_names.clear(); + oper_list.clear(); + cur_page = 1; + + while (analyze()) { // 返回true说明新增了干员,可能还有下一页 + ProcessTask(*this, { "RoguelikeRecruitOperListSlowlySwipeToTheRight" }).run(); + cur_page++; + } + + cur_page--; // 最后多划了一下,退回最后一页的页码 +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h index 9afc301b44..55722accf7 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeFormationTaskPlugin.h @@ -24,10 +24,11 @@ namespace asst bool analyze(); bool select(RoguelikeFormationImageAnalyzer::FormationOper oper); void swipe_to_first_page(); + void scan_oper(); private: int cur_page = 1; - int max_page = 0; + int max_page = 1; std::vector oper_list; std::vector m_last_detected_oper_names; // 上一页识别到的干员 };