diff --git a/resource/tasks.json b/resource/tasks.json index e9bcf3f4ad..955f201a6b 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -5230,7 +5230,7 @@ ] }, "Roguelike1InitalDrop": { - "Doc": "古堡观光(简单模式)初始会有一个免费道具,点确认", + "Doc": "古堡观光(简单模式)初始会有一个免费道具,点确认。月底小队也有,再多几次", "action": "ClickSelf", "roi": [ 569, @@ -5239,7 +5239,41 @@ 137 ], "next": [ - "Roguelike1Recruit1" + "Roguelike1Recruit1", + "Roguelike1InitalDrop" + ] + }, + "Roguelike1DialogSkip": { + "Doc": "月底小队,跳过对话", + "action": "ClickSelf", + "roi": [ + 1106, + 0, + 174, + 139 + ], + "next": [ + "Roguelike1DialogSkip", + "Roguelike1DialogSkipConfirm" + ] + }, + "Roguelike1DialogSkipConfirm": { + "action": "ClickSelf", + "roi": [ + 725, + 409, + 249, + 169 + ], + "next": [ + "Roguelike1DialogSkip", + "Roguelike1StageTrader", + "Roguelike1StageSafeHouse", + "Roguelike1StageEncounter", + "Roguelike1StageBoons", + "Roguelike1StageCambatDps", + "Roguelike1StageEmergencyDps", + "Roguelike1StageDreadfulFoe" ] }, "Roguelike1LastReward": { @@ -5341,9 +5375,14 @@ "Roguelike1LastReward3", "Roguelike1LastRewardRand", "Roguelike1Team3", - "Roguelike1CloseCollection" + "Roguelike1CloseCollection", + "Roguelike1DialogSkip" ] }, + "BattleWaitingToLoad": { + "algorithm": "JustReturn", + "rearDelay": 200 + }, "Roguelike1CloseCollection": { "action": "ClickSelf", "cache": false, @@ -6345,7 +6384,8 @@ "Roguelike1ChooseOperFlag", "Roguelike1StageEncounterSpecialClose", "Roguelike1EnterAfterRecruit", - "Roguelike1StageTraderLeave" + "Roguelike1StageTraderLeave", + "Roguelike1DialogSkip" ] }, "Roguelike1GetDrop1": { diff --git a/resource/template/Roguelike1DialogSkip.png b/resource/template/Roguelike1DialogSkip.png new file mode 100644 index 0000000000..3fe09f55b3 Binary files /dev/null and b/resource/template/Roguelike1DialogSkip.png differ diff --git a/resource/template/Roguelike1DialogSkipConfirm.png b/resource/template/Roguelike1DialogSkipConfirm.png new file mode 100644 index 0000000000..cfd61befd1 Binary files /dev/null and b/resource/template/Roguelike1DialogSkipConfirm.png differ diff --git a/src/MeoAssistant/BattleProcessTask.cpp b/src/MeoAssistant/BattleProcessTask.cpp index 5700373775..5cc1dc09d3 100644 --- a/src/MeoAssistant/BattleProcessTask.cpp +++ b/src/MeoAssistant/BattleProcessTask.cpp @@ -454,7 +454,7 @@ bool asst::BattleProcessTask::oper_deploy(const BattleAction& action) std::sqrt( (std::abs(placed_point.x - oper_rect.x) << 1) + (std::abs(placed_point.y - oper_rect.y) << 1))); - int duration = static_cast(swipe_oper_task_ptr->pre_delay / 1000.0 * dist); // 随便取的一个系数 + int duration = static_cast(swipe_oper_task_ptr->pre_delay / 500.0 * dist); // 随便取的一个系数 m_ctrler->swipe(oper_rect, placed_rect, duration, true, 0); sleep(use_oper_task_ptr->rear_delay); diff --git a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp index ef8431e1d7..35521d5cae 100644 --- a/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp +++ b/src/MeoAssistant/RoguelikeBattleTaskPlugin.cpp @@ -36,8 +36,6 @@ bool asst::RoguelikeBattleTaskPlugin::_run() { bool getted_info = get_stage_info(); - //speed_up(); - if (!getted_info) { return true; } @@ -294,7 +292,12 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() cv::circle(draw_image, cv::Point(placed_point.x, placed_point.y), 10, cv::Scalar(0, 0, 255), -1); #endif Rect placed_rect(placed_point.x, placed_point.y, 1, 1); - m_ctrler->swipe(opt_oper.rect, placed_rect, swipe_oper_task_ptr->pre_delay); + int dist = static_cast( + std::sqrt( + (std::abs(placed_point.x - opt_oper.rect.x) << 1) + + (std::abs(placed_point.y - opt_oper.rect.y) << 1))); + int duration = static_cast(swipe_oper_task_ptr->pre_delay / 1000.0 * dist); // 随便取的一个系数 + m_ctrler->swipe(opt_oper.rect, placed_rect, duration, true, 0); sleep(use_oper_task_ptr->rear_delay); // 计算往哪边拖动(干员朝向) @@ -311,7 +314,7 @@ bool asst::RoguelikeBattleTaskPlugin::auto_battle() end_point.y = std::max(0, end_point.y); end_point.y = std::min(end_point.y, WindowHeightDefault); - m_ctrler->swipe(placed_point, end_point, swipe_oper_task_ptr->rear_delay); + m_ctrler->swipe(placed_point, end_point, swipe_oper_task_ptr->rear_delay, true, 100); m_used_tiles.emplace(placed_loc, oper_name); m_opers_used = true; @@ -329,8 +332,9 @@ bool asst::RoguelikeBattleTaskPlugin::speed_up() bool asst::RoguelikeBattleTaskPlugin::use_skill(const asst::Rect& rect) { m_ctrler->click(rect); + sleep(Task.get("BattleUseOper")->pre_delay); - ProcessTask task(*this, { "BattleUseSkillBegin" }); + ProcessTask task(*this, { "BattleUseSkill" }); task.set_retry_times(0); return task.run(); } @@ -338,8 +342,9 @@ bool asst::RoguelikeBattleTaskPlugin::use_skill(const asst::Rect& rect) bool asst::RoguelikeBattleTaskPlugin::retreat(const Point& point) { m_ctrler->click(point); + sleep(Task.get("BattleUseOper")->pre_delay); - ProcessTask task(*this, { "BattleOperRetreatBegin" }); + ProcessTask task(*this, { "BattleOperRetreat" }); task.set_retry_times(0); return task.run(); } @@ -412,18 +417,36 @@ bool asst::RoguelikeBattleTaskPlugin::try_possible_skill(const cv::Mat& image) bool asst::RoguelikeBattleTaskPlugin::wait_start() { + auto start_time = std::chrono::system_clock::now(); + auto check_time = [&]() -> bool { + auto now = std::chrono::system_clock::now(); + auto diff = now - start_time; + return diff.count() > std::chrono::seconds(60).count(); + }; + + MatchImageAnalyzer officially_begin_analyzer; + officially_begin_analyzer.set_task_info("BattleOfficiallyBegin"); + cv::Mat image; + while (!need_exit() && !check_time()) { + image = m_ctrler->get_image(); + officially_begin_analyzer.set_image(image); + if (officially_begin_analyzer.analyze()) { + break; + } + std::this_thread::yield(); + } + BattleImageAnalyzer oper_analyzer; oper_analyzer.set_target(BattleImageAnalyzer::Target::Oper); - - while (!need_exit()) { - oper_analyzer.set_image(m_ctrler->get_image()); + while (!need_exit() && !check_time()) { + image = m_ctrler->get_image(); + oper_analyzer.set_image(image); if (oper_analyzer.analyze()) { break; } std::this_thread::yield(); } - // 干员头像出来之后,还要过 2 秒左右才可以点击,这里要加个延时 sleep(Task.get("BattleWaitingToLoad")->rear_delay); return true;