From a363ff43ea2a6ca435a76d3717f80a24065e0796 Mon Sep 17 00:00:00 2001 From: zzyyyl Date: Tue, 19 Dec 2023 16:30:53 +0800 Subject: [PATCH] =?UTF-8?q?fix(roguelike):=20StrategyChange=20=E6=8F=92?= =?UTF-8?q?=E4=BB=B6=E5=88=A9=E7=94=A8=E5=9B=9E=E8=B0=83=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E8=AF=86=E5=88=AB=E7=BB=93=E6=9E=9C=EF=BC=9B?= =?UTF-8?q?NextLevel=20=E5=8C=BA=E5=9F=9F=E4=B9=9F=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E5=B1=82=E5=90=8D=E8=AF=86=E5=88=AB=EF=BC=9B=E6=B0=B4=E6=9C=88?= =?UTF-8?q?=E8=82=89=E9=B8=BD=E5=9C=A8=20DiceConfirm=20=E4=B9=8B=E5=90=8E?= =?UTF-8?q?=E4=B9=9F=E8=BF=9B=E8=A1=8C=E5=B1=82=E5=90=8D=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 可能把 NextLevel 的识别和点击分开然后把 StrategyChangeAtNextLevel 插进去才比较好,大概 --- resource/tasks.json | 50 +++++++++++++------ .../RoguelikeStrategyChangeTaskPlugin.cpp | 22 +++----- .../RoguelikeStrategyChangeTaskPlugin.h | 3 ++ 3 files changed, 44 insertions(+), 31 deletions(-) diff --git a/resource/tasks.json b/resource/tasks.json index 1bc755a796..cd7c954c8f 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -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" ] diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp index e6fdfbcdcf..1fab6d3fa4 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.cpp @@ -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; } diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h index f711173808..86fc733ae2 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h +++ b/src/MaaCore/Task/Roguelike/RoguelikeStrategyChangeTaskPlugin.h @@ -14,5 +14,8 @@ namespace asst protected: virtual bool _run() override; + + private: + mutable json::object m_result; }; }