fix: 关闭连战列表

This commit is contained in:
status102
2025-05-08 09:52:09 +08:00
parent d4b1e7fbb3
commit 8458f1f9ca
3 changed files with 34 additions and 1 deletions

View File

@@ -1228,6 +1228,21 @@
"sub": ["FightSeries-Opened"],
"next": ["Stop"]
},
"FightSeries-NotClosed": {
"baseTask": "FightSeries-Opened",
"template": "FightSeries-Indicator.png",
"next": ["FightSeries-CloseList"]
},
"FightSeries-Close": {
"baseTask": "FightSeries-Icon",
"template": "FightSeries-Icon.png",
"action": "ClickSelf",
"next": ["Stop"]
},
"FightSeries-CloseList": {
"algorithm": "JustReturn",
"next": ["FightSeries-NotClosed", "FightSeries-Close"]
},
"FightSeries-List-Exceeded": {
"doc": "连战列表中需要使用理智药才能打的次数会带+号标记",
"roi": [965, 200, 70, 325]

View File

@@ -122,6 +122,11 @@ bool asst::FightTimesTaskPlugin::open_series_list(const cv::Mat& image)
return ProcessTask(*this, { "FightSeries-Opened", "FightSeries-Open" }).set_reusable_image(image).run();
}
void asst::FightTimesTaskPlugin::close_series_list(const cv::Mat& image)
{
ProcessTask(*this, { "FightSeries-CloseList" }).set_reusable_image(image).run();
}
std::optional<int> asst::FightTimesTaskPlugin::change_series(int sanity_current, int sanity_cost, int series)
{
int fight_times_remain = std::min(m_fight_times_max - m_fight_times, 6);
@@ -138,7 +143,15 @@ std::optional<int> asst::FightTimesTaskPlugin::change_series(int sanity_current,
return series;
}
return select_series(true);
auto ret = select_series(true);
if (!ret) {
select_series(1);
if (m_is_medicine_exhausted) { // 药品用完, 且没有次数可用, 刷理智结束
m_task_ptr->set_enable(false);
}
}
return ret;
}
std::optional<int> asst::FightTimesTaskPlugin::select_series(bool available_only)
@@ -151,6 +164,7 @@ std::optional<int> asst::FightTimesTaskPlugin::select_series(bool available_only
auto image = ctrler()->get_image();
auto list = analyze_series_list(image);
if (list.empty()) {
close_series_list();
Log.error(__FUNCTION__, "unable to analyze series list");
return std::nullopt;
}
@@ -165,6 +179,7 @@ std::optional<int> asst::FightTimesTaskPlugin::select_series(bool available_only
return item.times;
}
}
close_series_list();
Log.error(__FUNCTION__, "no available series found");
return std::nullopt;
}
@@ -179,6 +194,7 @@ bool asst::FightTimesTaskPlugin::select_series(int times)
auto image = ctrler()->get_image();
auto list = analyze_series_list(image);
if (list.empty()) {
close_series_list();
Log.error(__FUNCTION__, "unable to analyze series list");
return false;
}
@@ -189,6 +205,7 @@ bool asst::FightTimesTaskPlugin::select_series(int times)
return true;
}
}
close_series_list();
Log.error(__FUNCTION__, "no available series found");
return false;
}

View File

@@ -55,6 +55,7 @@ protected:
private:
bool open_series_list(const cv::Mat& image = cv::Mat());
void close_series_list(const cv::Mat& image = cv::Mat());
// 计算并调整连续战斗次数, 返回是否修改了次数
std::optional<int> change_series(int sanity_remain, int sanity_cost, int series);
std::optional<int> select_series(bool available_only);