feat: 使用 ocrReplace 重写肉鸽选点策略

This commit is contained in:
zzyyyl
2023-10-02 22:00:25 +08:00
parent 42b0222116
commit 9bc1ae8ab9
3 changed files with 118 additions and 40 deletions

View File

@@ -10435,9 +10435,35 @@
},
"Phantom@Roguelike@LevelName_mode0": {
"text": [
"迷雾歧途",
"噩梦之始",
"渴欲大厅"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"迷雾歧途",
"_aggressive"
],
[
"落阳庭院",
"_aggressive"
],
[
"故土残躯",
"_aggressive"
],
[
"噩梦之始",
"_pragmatic"
],
[
"血月长廊",
"_pragmatic"
],
[
"渴欲大厅",
"_default"
]
]
},
"Phantom@Roguelike@LevelName_mode4": {
@@ -10958,9 +10984,39 @@
},
"Mizuki@Roguelike@LevelName_mode0": {
"text": [
"天光海岸",
"波涛略地",
"失尘岩洞"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"天光海岸",
"_aggressive"
],
[
"离岸孤岛",
"_aggressive"
],
[
"波涛略地",
"_pragmatic"
],
[
"隐秘温床",
"_pragmatic"
],
[
"失尘岩洞",
"_default"
],
[
"幽海丛林",
"_default"
],
[
"绀碧摇篮",
"_SKIP_"
]
]
},
"Mizuki@Roguelike@LevelName_mode4": {
@@ -11537,9 +11593,39 @@
},
"Sami@Roguelike@LevelName_mode0": {
"text": [
"初霜湖泽",
"昧明冻土",
"无瑕花园"
"_aggressive",
"_pragmatic",
"_default"
],
"ocrReplace": [
[
"初霜湖泽",
"_aggressive"
],
[
"密静林地",
"_aggressive"
],
[
"昧明冻土",
"_pragmatic"
],
[
"积冰岩骸",
"_pragmatic"
],
[
"无暇花园",
"_default"
],
[
"远见之构",
"_default"
],
[
"深埋迷境",
"_SKIP_"
]
]
},
"Sami@Roguelike@LevelName_mode4": {

View File

@@ -81,6 +81,8 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
m_shopping_plugin_ptr->set_roguelike_theme(theme);
m_skill_plugin_ptr->set_roguelike_theme(theme);
m_stage_encounter_plugin_ptr->set_roguelike_theme(theme);
m_strategy_change_plugin_ptr->set_roguelike_theme(theme);
m_roguelike_task_ptr->set_tasks({ theme + "@Roguelike@Begin" });
// 0 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略

View File

@@ -38,38 +38,28 @@ bool asst::RoguelikeStrategyChangeTaskPlugin::_run()
std::string theme = m_roguelike_theme;
std::string mode = status()->get_properties(Status::RoguelikeMode).value();
if (mode == "0") {
auto image = ctrler()->get_image();
OCRer analyzer(image);
analyzer.set_task_info(theme + "@Roguelike@LevelName_mode0");
if (!analyzer.analyze()) {
return false;
}
const auto& reached_level = analyzer.get_result().front().text;
auto& levelname_list = Task.get<OcrTaskInfo>(theme + "@Roguelike@LevelName_mode0")->text;
for (int i = 0; i < levelname_list.size(); i++) {
if (levelname_list[i] == reached_level) {
switch (i) {
case 0:
// 第一层
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_aggressive");
break;
case 1:
// 中间层,发育
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_pragmatic");
break;
case 2:
// 高层,避战
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_default");
break;
default:
Task.set_task_base(theme + "@Roguelike@Stages", theme + "@Roguelike@Stages_default");
break;
}
break;
}
}
std::string task_name = theme + "@Roguelike@LevelName_mode" + mode;
if (Task.get(task_name) == nullptr) {
Log.info("Task", task_name, "doesn't exist.");
return false;
}
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) {
Log.error("Strategy task", strategy_task_name, "doesn't exist!");
return false;
}
Task.set_task_base(stages_task_name, strategy_task_name);
return true;
}