From 0e81efa42fc0291ca17e7a0dafedfa1b40a5796e Mon Sep 17 00:00:00 2001 From: status102 Date: Fri, 17 Nov 2023 22:02:17 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86?= =?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=E8=82=89=E9=B8=BD=E6=8A=80=E7=BB=93?= =?UTF-8?q?=E7=AE=97=E6=97=B6=E6=8A=80=E8=83=BD=E5=A2=9E=E9=95=BF=E6=9C=AA?= =?UTF-8?q?=E5=AE=8C=E5=85=A8=E6=98=BE=E7=A4=BA=E5=AF=BC=E8=87=B4=E8=AF=86?= =?UTF-8?q?=E5=88=AB=E4=B8=8D=E6=AD=A3=E7=A1=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 2 +- .../RoguelikeSettlementTaskPlugin.cpp | 32 ++++++++++++++++--- .../Roguelike/RoguelikeSettlementTaskPlugin.h | 2 ++ 3 files changed, 31 insertions(+), 5 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index 0957ae85a5..36607abc90 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -10580,7 +10580,7 @@ 80, 80 ], - "postDelay": 1000, + "postDelay": 3000, "specialParamsDoc": [ "结算界面Part1等待加载完的延迟" ], diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.cpp index 6c89bf37a2..89aa6ea744 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.cpp @@ -2,6 +2,7 @@ #include "Config/TaskData.h" #include "Controller/Controller.h" +#include "Utils/ImageIo.hpp" #include "Vision/Matcher.h" #include "Vision/RegionOCRer.h" @@ -32,9 +33,8 @@ bool asst::RoguelikeSettlementTaskPlugin::_run() json_msg["details"]["game_pass"] = m_game_pass; sleep(task->special_params[0]); - if (m_game_pass) { - save_img(utils::path("achievement") / utils::path("roguelike")); + save_img(ctrler()->get_image(), utils::path("achievement") / utils::path("roguelike"), "Page1"); } const static auto rect = Task.get("Roguelike@ClickToStartPoint")->specific_rect; @@ -43,14 +43,14 @@ bool asst::RoguelikeSettlementTaskPlugin::_run() if (!wait_for_whole_page()) { Log.error(__FUNCTION__, "wait for whole page failed"); - save_img(utils::path("debug") / utils::path("roguelike")); + save_img(ctrler()->get_image(), utils::path("debug") / utils::path("roguelike"), "Page2_Error"); return true; } sleep(task->post_delay); auto image = ctrler()->get_image(); if (m_game_pass) { - save_img(utils::path("achievement") / utils::path("roguelike")); + save_img(image, utils::path("achievement") / utils::path("roguelike"), "Page2"); } get_settlement_info(json_msg, image); callback(AsstMsg::SubTaskExtraInfo, json_msg); @@ -131,3 +131,27 @@ bool asst::RoguelikeSettlementTaskPlugin::wait_for_whole_page() } while (!need_exit() && retry < 20); return false; } + +void asst::RoguelikeSettlementTaskPlugin::save_img(const cv::Mat& image, const std::filesystem::path& relative_dir, + std::string name) +{ + if (image.empty()) { + return; + } + std::string stem = utils::get_time_filestem(); + + if (true) { + // 第1次或每执行 debug.clean_files_freq(100) 次后执行清理 + // 限制文件数量 debug.max_debug_file_num + if (m_save_file_cnt[relative_dir] == 0) { + filenum_ctrl(relative_dir, Config.get_options().debug.max_debug_file_num); + m_save_file_cnt[relative_dir] = 0; + } + m_save_file_cnt[relative_dir] = + (m_save_file_cnt[relative_dir] + 1) % Config.get_options().debug.clean_files_freq; + } + + auto relative_path = relative_dir / (stem + "_" + name + ".png"); + Log.trace("Save image", relative_path); + asst::imwrite(relative_path, image); +} diff --git a/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.h index 8d5931a018..87cf0fba5d 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeSettlementTaskPlugin.h @@ -3,6 +3,7 @@ namespace asst { + // 肉鸽结算图保存及统计 class RoguelikeSettlementTaskPlugin : public AbstractRoguelikeTaskPlugin { public: @@ -14,6 +15,7 @@ namespace asst virtual bool _run() override; bool get_settlement_info(json::value& info, const cv::Mat& image); bool wait_for_whole_page(); + void save_img(const cv::Mat& image, const std::filesystem::path& path, std::string name); mutable bool m_game_pass = false; };