refactor: use MatchTemplate instead of OcrDetect to recognise the current zone
@@ -7031,57 +7031,6 @@
|
||||
72
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
"cache": false,
|
||||
"text": [
|
||||
"初霜湖泽",
|
||||
"密静林地",
|
||||
"昧明冻土",
|
||||
"积冰岩骸",
|
||||
"无瑕花园",
|
||||
"远见之构",
|
||||
"永恒之尘",
|
||||
"深埋迷境"
|
||||
],
|
||||
"ocrReplace": [
|
||||
[
|
||||
"Brisk Marshalands",
|
||||
"初霜湖泽"
|
||||
],
|
||||
[
|
||||
"Placid Forests",
|
||||
"密静林地"
|
||||
],
|
||||
[
|
||||
"Dawning Frostbounds",
|
||||
"昧明冻土"
|
||||
],
|
||||
[
|
||||
"Gelid Rockshelves",
|
||||
"积冰岩骸"
|
||||
],
|
||||
[
|
||||
"Immaculate Garden",
|
||||
"无瑕花园"
|
||||
],
|
||||
[
|
||||
"Clayrovant Carcass",
|
||||
"远见之构"
|
||||
],
|
||||
[
|
||||
"Secluded Passage",
|
||||
"深埋迷境"
|
||||
]
|
||||
],
|
||||
"roi": [
|
||||
530,
|
||||
30,
|
||||
240,
|
||||
60
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
|
||||
@@ -8266,57 +8266,6 @@
|
||||
"深埋の迷境"
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
"cache": false,
|
||||
"text": [
|
||||
"初霜湖泽",
|
||||
"密静林地",
|
||||
"昧明冻土",
|
||||
"积冰岩骸",
|
||||
"无瑕花园",
|
||||
"远见之构",
|
||||
"永恒之尘",
|
||||
"深埋迷境"
|
||||
],
|
||||
"ocrReplace": [
|
||||
[
|
||||
"初霜の湖沼",
|
||||
"初霜湖泽"
|
||||
],
|
||||
[
|
||||
"静謐な森",
|
||||
"密静林地"
|
||||
],
|
||||
[
|
||||
"夜明けの凍",
|
||||
"昧明冻土"
|
||||
],
|
||||
[
|
||||
"凍てつく岩骸",
|
||||
"积冰岩骸"
|
||||
],
|
||||
[
|
||||
"汚れなき花園",
|
||||
"无瑕花园"
|
||||
],
|
||||
[
|
||||
"遠見の巨構",
|
||||
"远见之构"
|
||||
],
|
||||
[
|
||||
"深埋の迷境",
|
||||
"深埋迷境"
|
||||
]
|
||||
],
|
||||
"roi": [
|
||||
530,
|
||||
30,
|
||||
240,
|
||||
60
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
|
||||
@@ -6874,57 +6874,6 @@
|
||||
"숨겨진비경"
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
"cache": false,
|
||||
"text": [
|
||||
"初霜湖泽",
|
||||
"密静林地",
|
||||
"昧明冻土",
|
||||
"积冰岩骸",
|
||||
"无瑕花园",
|
||||
"远见之构",
|
||||
"永恒之尘",
|
||||
"深埋迷境"
|
||||
],
|
||||
"ocrReplace": [
|
||||
[
|
||||
"은빛의호수",
|
||||
"初霜湖泽"
|
||||
],
|
||||
[
|
||||
"고요한숲",
|
||||
"密静林地"
|
||||
],
|
||||
[
|
||||
"여명의툰드라",
|
||||
"昧明冻土"
|
||||
],
|
||||
[
|
||||
"얼어붙은바위",
|
||||
"积冰岩骸"
|
||||
],
|
||||
[
|
||||
"무결점의정원",
|
||||
"无瑕花园"
|
||||
],
|
||||
[
|
||||
"예견의구상",
|
||||
"远见之构"
|
||||
],
|
||||
[
|
||||
"숨겨진비경",
|
||||
"深埋迷境"
|
||||
]
|
||||
],
|
||||
"roi": [
|
||||
530,
|
||||
30,
|
||||
240,
|
||||
60
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
|
||||
"algorithm": "OcrDetect",
|
||||
"action": "DoNothing",
|
||||
|
||||
@@ -15253,24 +15253,25 @@
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_onStage": {
|
||||
"algorithm": "OcrDetect",
|
||||
"algorithm": "MatchTemplate",
|
||||
"template": [
|
||||
"Sami@Roguelike@OnStage_1",
|
||||
"Sami@Roguelike@OnStage_2",
|
||||
"Sami@Roguelike@OnStage_3",
|
||||
"Sami@Roguelike@OnStage_4",
|
||||
"Sami@Roguelike@OnStage_5",
|
||||
"Sami@Roguelike@OnStage_6",
|
||||
"Sami@Roguelike@OnStage_7",
|
||||
"Sami@Roguelike@OnStage_0"
|
||||
],
|
||||
"templThreshold": 0.96,
|
||||
"action": "DoNothing",
|
||||
"cache": false,
|
||||
"text": [
|
||||
"初霜湖泽",
|
||||
"密静林地",
|
||||
"昧明冻土",
|
||||
"积冰岩骸",
|
||||
"无瑕花园",
|
||||
"远见之构",
|
||||
"永恒之尘",
|
||||
"深埋迷境"
|
||||
],
|
||||
"roi": [
|
||||
530,
|
||||
30,
|
||||
240,
|
||||
60
|
||||
590,
|
||||
45,
|
||||
45,
|
||||
35
|
||||
]
|
||||
},
|
||||
"Sami@Roguelike@CheckCollapsalParadigms_loading": {
|
||||
|
||||
BIN
resource/template/Sami@Roguelike@OnStage_0.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_1.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_2.png
Normal file
|
After Width: | Height: | Size: 3.5 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_3.png
Normal file
|
After Width: | Height: | Size: 3.6 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_4.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_5.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_6.png
Normal file
|
After Width: | Height: | Size: 3.9 KiB |
BIN
resource/template/Sami@Roguelike@OnStage_7.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
@@ -6,6 +6,7 @@
|
||||
#include "Task/ProcessTask.h"
|
||||
#include "Utils/Logger.hpp"
|
||||
#include "Vision/OCRer.h"
|
||||
#include "Vision/Matcher.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
@@ -39,7 +40,7 @@ bool asst::RoguelikeCollapsalParadigmTaskPlugin::verify(const AsstMsg msg, const
|
||||
}
|
||||
|
||||
if(msg == AsstMsg::SubTaskStart && m_panel_triggers.find(task_name) != m_panel_triggers.end()) {
|
||||
if (new_level()) {
|
||||
if (new_zone()) {
|
||||
m_need_check_panel = true;
|
||||
m_verification_check = false;
|
||||
}
|
||||
@@ -287,7 +288,8 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::exit_then_restart()
|
||||
.run();
|
||||
}
|
||||
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::clp_pd_callback(std::string cur, int deepen_or_weaken, std::string prev) {
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::clp_pd_callback(std::string cur, int deepen_or_weaken, std::string prev)
|
||||
{
|
||||
callback(AsstMsg::SubTaskExtraInfo, json::object {
|
||||
{ "what", "RoguelikeCollapsalParadigms" },
|
||||
{ "details", json::object {
|
||||
@@ -304,7 +306,8 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::toggle_collapsal_status_panel()
|
||||
sleep(500);
|
||||
}
|
||||
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int millisecond) {
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int millisecond)
|
||||
{
|
||||
OCRer analyzer(ctrler()->get_image());
|
||||
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
|
||||
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_loading");
|
||||
@@ -316,25 +319,27 @@ void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_loading(unsigned int m
|
||||
sleep(millisecond);
|
||||
}
|
||||
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_stage(unsigned int millisecond) {
|
||||
OCRer analyzer(ctrler()->get_image());
|
||||
void asst::RoguelikeCollapsalParadigmTaskPlugin::wait_for_stage(unsigned int millisecond)
|
||||
{
|
||||
Matcher matcher(ctrler()->get_image());
|
||||
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
|
||||
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
|
||||
while (!analyzer.analyze()) {
|
||||
matcher.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
|
||||
while (!matcher.analyze()) {
|
||||
sleep(100);
|
||||
analyzer.set_image(ctrler()->get_image());
|
||||
matcher.set_image(ctrler()->get_image());
|
||||
// if (DEBUG) { analyzer.save_img(utils::path("debug") / utils::path("collapsalParadigms")); }
|
||||
}
|
||||
sleep(millisecond);
|
||||
}
|
||||
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::new_level() const {
|
||||
OCRer analyzer(ctrler()->get_image());
|
||||
analyzer.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
|
||||
if (analyzer.analyze()) {
|
||||
std::string level = analyzer.get_result().front().text;
|
||||
if (level != m_level) {
|
||||
m_level = level;
|
||||
bool asst::RoguelikeCollapsalParadigmTaskPlugin::new_zone() const
|
||||
{
|
||||
Matcher matcher(ctrler()->get_image());
|
||||
matcher.set_task_info(m_config->get_theme() + "@Roguelike@CheckCollapsalParadigms_onStage");
|
||||
if (matcher.analyze()) {
|
||||
std::string zone = m_zone_dict.at(matcher.get_result().templ_name);
|
||||
if (zone != m_zone) {
|
||||
m_zone = zone;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@ namespace asst
|
||||
mutable bool m_check_panel = false;
|
||||
mutable bool m_need_check_panel = false;
|
||||
mutable bool m_verification_check = false;
|
||||
mutable std::string m_level;
|
||||
mutable std::string m_zone;
|
||||
|
||||
const std::unordered_set<std::string_view> m_banner_triggers_start = {
|
||||
"NeedCheckCollapsalParadigmBanner",
|
||||
@@ -108,7 +108,18 @@ namespace asst
|
||||
"Sami@Roguelike@StageFerociousPresage"
|
||||
};
|
||||
|
||||
bool new_level() const;
|
||||
const std::unordered_map<std::string_view, std::string> m_zone_dict = {
|
||||
{"Sami@Roguelike@OnStage_0", "深埋迷境"},
|
||||
{"Sami@Roguelike@OnStage_1", "初霜湖泽"},
|
||||
{"Sami@Roguelike@OnStage_2", "密静林地"},
|
||||
{"Sami@Roguelike@OnStage_3", "昧明冻土"},
|
||||
{"Sami@Roguelike@OnStage_4", "积冰岩骸"},
|
||||
{"Sami@Roguelike@OnStage_5", "无瑕花园"},
|
||||
{"Sami@Roguelike@OnStage_6", "远见之构"},
|
||||
{"Sami@Roguelike@OnStage_7", "永恒之尘"}
|
||||
};
|
||||
|
||||
bool new_zone() const;
|
||||
|
||||
bool check_collapsal_paradigm_banner();
|
||||
bool check_collapsal_paradigm_panel();
|
||||
|
||||