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; }; }