diff --git a/resource/tasks.json b/resource/tasks.json index 16b43e3bf8..8d76c37ef9 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -4722,7 +4722,7 @@ ], "rearDelay": 1000 }, - "InfrastFilterMenu": { + "InfrastFilterMenuNotStationed": { "action": "ClickSelf", "template": "InfrastFilterMenu.png", "cache": false, @@ -4768,6 +4768,52 @@ "InfrastFilterMenuConfirmButton" ] }, + "InfrastFilterMenuCancelNotStationed": { + "action": "ClickSelf", + "template": "InfrastFilterMenu.png", + "cache": false, + "roi": [ + 1050, + 0, + 230, + 100 + ], + "next": [ + "InfrastFilterMenuCancelNotStationedButtonAlreadyClicked", + "InfrastFilterMenuCancelNotStationedButton" + ], + "rearDelay": 1000 + }, + "InfrastFilterMenuCancelNotStationedButton": { + "action": "DoNothing", + "template": "InfrastFilterMenuNotStationedButton.png", + "templThreshold": 0.85, + "cache": false, + "roi": [ + 300, + 300, + 250, + 150 + ], + "rearDelay": 1000, + "next": [ + "InfrastFilterMenuConfirmButton" + ] + }, + "InfrastFilterMenuCancelNotStationedButtonAlreadyClicked": { + "action": "ClickSelf", + "template": "InfrastFilterMenuNotStationedButtonAlreadyClicked.png", + "cache": false, + "roi": [ + 300, + 300, + 250, + 150 + ], + "next": [ + "InfrastFilterMenuConfirmButton" + ] + }, "InfrastFilterMenuConfirmButton": { "action": "ClickSelf", "template": "InfrastFilterMenuConfirmButton.png", @@ -5701,6 +5747,30 @@ "InfrastOperListTabMoodDoubleClick" ] }, + "InfrastOperListTabMoodDoubleClickWhenUnclicked": { + "action": "ClickSelf", + "roi": [ + 900, + 0, + 131, + 117 + ], + "templThreshold": 0.7, + "next": [ + "InfrastOperListTabMoodClick" + ] + }, + "InfrastOperListTabMoodClick": { + "template": "InfrastOperListTabMoodDoubleClick.png", + "action": "ClickSelf", + "roi": [ + 900, + 0, + 131, + 117 + ], + "templThreshold": 0.7 + }, "BattleStageName": { "algorithm": "OcrDetect", "cache": false, diff --git a/resource/template/InfrastOperListTabMoodDoubleClickWhenUnclicked.png b/resource/template/InfrastOperListTabMoodDoubleClickWhenUnclicked.png new file mode 100644 index 0000000000..f960c19310 Binary files /dev/null and b/resource/template/InfrastOperListTabMoodDoubleClickWhenUnclicked.png differ diff --git a/src/MeoAssistant/Task/Sub/InfrastAbstractTask.cpp b/src/MeoAssistant/Task/Sub/InfrastAbstractTask.cpp index c259b2b152..9556958e9c 100644 --- a/src/MeoAssistant/Task/Sub/InfrastAbstractTask.cpp +++ b/src/MeoAssistant/Task/Sub/InfrastAbstractTask.cpp @@ -397,7 +397,15 @@ bool asst::InfrastAbstractTask::click_filter_menu_not_stationed_button() { LogTraceFunction; - ProcessTask task(*this, { "InfrastFilterMenu" }); + ProcessTask task(*this, { "InfrastFilterMenuNotStationed" }); + return task.run(); +} + +bool asst::InfrastAbstractTask::click_filter_menu_cancel_not_stationed_button() +{ + LogTraceFunction; + + ProcessTask task(*this, { "InfrastFilterMenuCancelNotStationed" }); return task.run(); } diff --git a/src/MeoAssistant/Task/Sub/InfrastAbstractTask.h b/src/MeoAssistant/Task/Sub/InfrastAbstractTask.h index 97d0a844ad..82dae2d8d2 100644 --- a/src/MeoAssistant/Task/Sub/InfrastAbstractTask.h +++ b/src/MeoAssistant/Task/Sub/InfrastAbstractTask.h @@ -46,7 +46,9 @@ namespace asst virtual bool click_clear_button(); // 点击干员选择页面的“清空选择”按钮 virtual bool click_sort_by_trust_button(); // 点击干员选择页面的“按信赖值排序”按钮 virtual bool click_filter_menu_not_stationed_button(); // 点击干员选择页面的筛选菜单按钮的“未进驻”按钮 - virtual bool click_confirm_button(); // 点击干员选择页面的“确认”按钮 + virtual bool + click_filter_menu_cancel_not_stationed_button(); // 取消点击干员选择页面的筛选菜单按钮的“未进驻”按钮 + virtual bool click_confirm_button(); // 点击干员选择页面的“确认”按钮 int m_last_swipe_id = 0; const std::string m_work_mode_name = diff --git a/src/MeoAssistant/Task/Sub/InfrastDormTask.cpp b/src/MeoAssistant/Task/Sub/InfrastDormTask.cpp index 5193ad8d67..f14ec24853 100644 --- a/src/MeoAssistant/Task/Sub/InfrastDormTask.cpp +++ b/src/MeoAssistant/Task/Sub/InfrastDormTask.cpp @@ -73,6 +73,7 @@ bool asst::InfrastDormTask::opers_choose() { size_t num_of_selected = m_is_custom ? current_room_config().selected : 0; size_t num_of_fulltrust = 0; + bool to_fill = false; while (num_of_selected < max_num_of_opers()) { if (need_exit()) { @@ -99,8 +100,23 @@ bool asst::InfrastDormTask::opers_choose() Log.info("num_of_selected:", num_of_selected, ", just break"); break; } + if (to_fill) { + if (oper.doing != infrast::Doing::Working && !oper.selected) { + Log.info("to fill"); + m_ctrler->click(oper.rect); + ++num_of_selected; + } + continue; + } switch (oper.smiley.type) { case infrast::SmileyType::Rest: + if (m_next_step == NextStep::Fill) { + to_fill = true; + Log.info("set to_fill = true;"); + m_ctrler->click(oper.rect); + ++num_of_selected; + continue; + } // 如果所有心情不满的干员已经放入宿舍,就把信赖不满的干员放入宿舍 if (m_drom_trust_enabled && m_next_step != NextStep::Rest && oper.selected == false && oper.doing != infrast::Doing::Working && oper.doing != infrast::Doing::Resting) { @@ -114,20 +130,27 @@ bool asst::InfrastDormTask::opers_choose() std::string opertrust = trust_analyzer.get_result().front().text; std::regex rule("[^0-9]"); // 只保留数字 opertrust = std::regex_replace(opertrust, rule, ""); - Log.trace("opertrust:", opertrust); bool if_opertrust_not_full = false; - if (opertrust != "" && atoi(opertrust.c_str()) < 200) { - if_opertrust_not_full = true; - } - else if (opertrust != "" && atoi(opertrust.c_str()) >= 200) { - num_of_fulltrust++; + if (!opertrust.empty()) { + int trust = std::stoi(opertrust); + if (trust < 200) { + if_opertrust_not_full = true; + } + else { + num_of_fulltrust++; + } } if (num_of_fulltrust >= 6) { // 所有干员都满信赖了 - m_next_step = NextStep::AllDone; - Log.trace("num_of_fulltrust:", num_of_fulltrust, ", just return"); - return true; + Log.trace("num_of_fulltrust:", num_of_fulltrust); + m_next_step = NextStep::Fill; + to_fill = true; + if (!m_dorm_notstationed_enabled && m_if_filter_notstationed_haspressed) { + click_filter_menu_cancel_not_stationed_button(); + } + click_order_by_mood(); + break; } // 获得干员所在设施 @@ -146,20 +169,15 @@ bool asst::InfrastDormTask::opers_choose() // 判断要不要把人放进宿舍if_opertrust_not_full && if_oper_not_stationed if (if_opertrust_not_full && if_oper_not_stationed) { - Log.trace("put oper in"); - m_ctrler->click(oper.rect); - if (++num_of_selected >= max_num_of_opers()) { - Log.trace("num_of_selected:", num_of_selected, ", just break"); - break; - } + ++num_of_selected; } else { Log.trace("not put oper in"); } } // 如果当前页面休息完成的人数超过5个,说明已经已经把所有心情不满的滑过一遍、没有更多的了 - else if (++num_of_resting > max_num_of_opers()) { + else if (++num_of_resting >= 6) { Log.trace("num_of_resting:", num_of_resting, ", dorm finished"); if (m_drom_trust_enabled) { Log.trace("m_drom_trust_enabled:", m_drom_trust_enabled); @@ -173,9 +191,10 @@ bool asst::InfrastDormTask::opers_choose() m_next_step = NextStep::RestDone; // 选中未进驻标签并按信赖值排序 } else { - m_next_step = NextStep::AllDone; - Log.trace("m_drom_trust_enabled:", m_drom_trust_enabled, ", just return"); - return true; + Log.trace("m_drom_trust_enabled:", m_drom_trust_enabled); + m_next_step = NextStep::Fill; + // click_filter_menu_cancel_not_stationed_button(); + // click_order_by_mood(); } } break; @@ -184,10 +203,7 @@ bool asst::InfrastDormTask::opers_choose() // 干员没有被选择的情况下,且不在工作,就进驻宿舍 if (oper.selected == false && oper.doing != infrast::Doing::Working) { m_ctrler->click(oper.rect); - if (++num_of_selected >= max_num_of_opers()) { - Log.trace("num_of_selected:", num_of_selected, ", just break"); - break; - } + ++num_of_selected; } break; default: @@ -197,6 +213,12 @@ bool asst::InfrastDormTask::opers_choose() if (m_next_step == NextStep::RestDone) { break; } + + // 如果是之前设置的to_fill,走不到这里,一定是当次设置的 + if (to_fill) { + swipe_of_operlist(); + break; + } } if (num_of_selected >= max_num_of_opers()) { Log.trace("num_of_selected:", num_of_selected, ", just break"); @@ -218,6 +240,11 @@ bool asst::InfrastDormTask::opers_choose() return true; } +bool asst::InfrastDormTask::click_order_by_mood() +{ + return ProcessTask(*this, { "InfrastOperListTabMoodDoubleClickWhenUnclicked", "Stop" }).run(); +} + // bool asst::InfrastDormTask::click_confirm_button() //{ // LogTraceFunction; diff --git a/src/MeoAssistant/Task/Sub/InfrastDormTask.h b/src/MeoAssistant/Task/Sub/InfrastDormTask.h index 61b67f8e89..81dc23970f 100644 --- a/src/MeoAssistant/Task/Sub/InfrastDormTask.h +++ b/src/MeoAssistant/Task/Sub/InfrastDormTask.h @@ -19,6 +19,7 @@ namespace asst // virtual bool click_confirm_button() override; bool opers_choose(); + bool click_order_by_mood(); bool m_dorm_notstationed_enabled = false; // 设置是否启用未进驻筛选 bool m_drom_trust_enabled = true; // 设置是否启用蹭信赖 @@ -31,6 +32,7 @@ namespace asst Rest, RestDone, Trust, + Fill, AllDone, }; NextStep m_next_step = NextStep::Rest;