fix(roguelike): StrategyChange 插件利用回调直接获取识别结果;NextLevel 区域也进行层名识别;水月肉鸽在 DiceConfirm 之后也进行层名识别

可能把 NextLevel 的识别和点击分开然后把 StrategyChangeAtNextLevel 插进去才比较好,大概
This commit is contained in:
zzyyyl
2023-12-19 16:30:53 +08:00
parent d46976b794
commit a363ff43ea
3 changed files with 44 additions and 31 deletions

View File

@@ -3791,6 +3791,13 @@
"MainThemes#next"
]
},
"NextOnce": {
"algorithm": "JustReturn",
"next": [
"#next",
"Stop"
]
},
"LoadingText": {
"algorithm": "OcrDetect",
"action": "DoNothing",
@@ -9101,7 +9108,8 @@
"Doc_2": "需要在任务 Task 开始时截图时,将 Task 加入到此任务的 next 列表。",
"algorithm": "JustReturn",
"next": [
"Roguelike@StageEncounterOptionUnknown"
"Roguelike@StageEncounterOptionUnknown",
"StrategyChanges@Stop"
]
},
"ScreenshotTaskPlugin-Config-Debug": {
@@ -11747,8 +11755,10 @@
245,
144
],
"sub": [
"Roguelike@StrategyChanges@NextOnce"
],
"next": [
"Roguelike@StrategyChange",
"Roguelike@Stages#next"
]
},
@@ -12732,6 +12742,22 @@
"Roguelike@StartExplore"
]
},
"Roguelike@StrategyChanges": {
"algorithm": "JustReturn",
"next": [
"Roguelike@StrategyChangeAtNextLevel",
"Roguelike@StrategyChange"
]
},
"Roguelike@StrategyChangeAtNextLevel": {
"baseTask": "Roguelike@StrategyChange",
"roi": [
522,
431,
245,
144
]
},
"Roguelike@StrategyChange": {
"baseTask": "Roguelike@StrategyChange_default"
},
@@ -12746,10 +12772,6 @@
0,
186,
129
],
"next": [
"Roguelike@NextLevel",
"Roguelike@Stages#next"
]
},
"Roguelike@StrategyChange_mode0": {
@@ -13400,6 +13422,9 @@
],
"templThreshold": 0.95,
"postDelay": 1000,
"sub": [
"Mizuki@Roguelike@StrategyChanges@NextOnce"
],
"next": [
"Mizuki@Roguelike@StageEncounterEnter",
"Mizuki@Roguelike@Stages#next",
@@ -13407,17 +13432,10 @@
]
},
"Mizuki@Roguelike@DiceConfirmThenAbandon": {
"Doc": "骰子的确认按钮",
"action": "ClickSelf",
"baseTask": "Mizuki@Roguelike@DiceConfirm",
"template": "Mizuki@Roguelike@DiceConfirm.png",
"cache": false,
"roi": [
551,
577,
174,
143
],
"templThreshold": 0.95,
"postDelay": 0,
"sub": [],
"next": [
"Mizuki@Roguelike@ExitThenAbandon"
]

View File

@@ -23,7 +23,8 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::verify(AsstMsg msg, const json::va
if (task_view.starts_with(roguelike_name)) {
task_view.remove_prefix(roguelike_name.length());
}
if (task_view == "Roguelike@StrategyChange") {
if (task_view == "Roguelike@StrategyChange" || task_view == "Roguelike@StrategyChangeAtNextLevel") {
m_result = details.get("details", "result", json::object());
return true;
}
else {
@@ -35,21 +36,12 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run()
{
LogTraceFunction;
std::string theme = m_config->get_theme();
const std::string theme = m_config->get_theme();
const std::string stages_task_name = theme + "@Roguelike@Stages";
const std::string current_strategy = m_result.get("text", "");
const std::string strategy_task_name = stages_task_name + current_strategy;
// TODO: 这段识别有点冗余,要是 plugin 能获取识别结果就好了
std::string task_name = theme + "@Roguelike@StrategyChange";
OCRer analyzer(ctrler()->get_image());
analyzer.set_task_info(task_name);
if (!analyzer.analyze()) {
return false;
}
std::string stages_task_name = theme + "@Roguelike@Stages";
std::string current_strategy = analyzer.get_result().front().text;
std::string strategy_task_name = stages_task_name + current_strategy;
if (Task.get(strategy_task_name) == nullptr) {
if (current_strategy.empty() || Task.get(strategy_task_name) == nullptr) [[unlikely]] {
Log.error("Strategy task", strategy_task_name, "doesn't exist!");
return false;
}

View File

@@ -14,5 +14,8 @@ namespace asst
protected:
virtual bool _run() override;
private:
mutable json::object m_result;
};
}