fix: 给 open_series_list 加上失败截图机制 (#14693)

This commit is contained in:
Weiyou Wang
2025-11-14 12:16:41 +11:00
committed by GitHub
parent 6662457428
commit a84e87f5e7
2 changed files with 25 additions and 3 deletions

View File

@@ -1383,6 +1383,7 @@
"baseTask": "FightSeries-Icon",
"template": "FightSeries-Icon.png",
"action": "ClickSelf",
"rectMove": [0, 0, 0, 0],
"sub": ["FightSeries-Opened"],
"next": ["Stop"]
},

View File

@@ -3,6 +3,7 @@
#include "Config/GeneralConfig.h"
#include "Config/TaskData.h"
#include "Controller/Controller.h"
#include "MaaUtils/ImageIo.h"
#include "MaaUtils/NoWarningCV.hpp"
#include "Task/ProcessTask.h"
#include "Vision/Matcher.h"
@@ -119,7 +120,29 @@ bool asst::FightTimesTaskPlugin::_run()
bool asst::FightTimesTaskPlugin::open_series_list(const cv::Mat& image)
{
return ProcessTask(*this, { "FightSeries-Opened", "FightSeries-Open" }).set_reusable_image(image).run();
if (!ProcessTask(*this, { "FightSeries-Opened", "FightSeries-Open" })
.set_reusable_image(image)
.set_retry_times(10)
.run()) {
Log.error(__FUNCTION__, "unable to open series list");
const auto relative_dir = utils::path("debug") / utils::path("fightSeries");
std::filesystem::path relative_path;
if (!image.empty()) {
relative_path = relative_dir / (std::format("{}_raw.png", MAA_NS::format_now_for_filename()));
Log.info(std::format("Save reusable image to {}", relative_path.string()));
MAA_NS::imwrite(relative_path, image);
}
relative_path = relative_dir / (std::format("{}_raw.png", MAA_NS::format_now_for_filename()));
Log.info(std::format("Save current screenshot to {}", relative_path.string()));
MAA_NS::imwrite(relative_path, ctrler()->get_image());
return false;
}
return true;
}
void asst::FightTimesTaskPlugin::close_series_list(const cv::Mat& image)
@@ -157,7 +180,6 @@ std::optional<int> asst::FightTimesTaskPlugin::change_series(int sanity_current,
std::optional<int> asst::FightTimesTaskPlugin::select_series(bool available_only)
{
if (!open_series_list()) {
Log.error(__FUNCTION__, "unable to open series list");
return std::nullopt;
}
int fight_times_remain = std::min(m_fight_times_max - m_fight_times, 6);
@@ -187,7 +209,6 @@ std::optional<int> asst::FightTimesTaskPlugin::select_series(bool available_only
bool asst::FightTimesTaskPlugin::select_series(int times)
{
if (!open_series_list()) {
Log.error(__FUNCTION__, "unable to open series list");
return false;
}