From 9bc1ae8ab93dbcd9d49a3d382ed97cf6a73d702d Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Mon, 2 Oct 2023 22:00:25 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BD=BF=E7=94=A8=20ocrReplace=20?= =?UTF-8?q?=E9=87=8D=E5=86=99=E8=82=89=E9=B8=BD=E9=80=89=E7=82=B9=E7=AD=96?= =?UTF-8?q?=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 104 ++++++++++++++++-- src/MaaCore/Task/Interface/RoguelikeTask.cpp | 2 + .../RoguelikeStrategyChangeTaskPlugin.cpp | 52 ++++----- 3 files changed, 118 insertions(+), 40 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index 4deae5f778..8d6de0dafb 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -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": { diff --git a/src/MaaCore/Task/Interface/RoguelikeTask.cpp b/src/MaaCore/Task/Interface/RoguelikeTask.cpp index 55fdb790a9..e74d0451f4 100644 --- a/src/MaaCore/Task/Interface/RoguelikeTask.cpp +++ b/src/MaaCore/Task/Interface/RoguelikeTask.cpp @@ -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 - 刷经验,尽可能稳定地打更多层数,不期而遇采用激进策略 diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp index c4253910af..8cf4ae36be 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp @@ -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(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; }