From 3d40a4d4eedb0723fd70181e812441df78e428bc Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Fri, 1 Aug 2025 00:28:56 +0800 Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=E5=A4=9A=E5=B1=82?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks/Roguelike/base.json | 4 +-- .../RoguelikeStageEncounterTaskPlugin.cpp | 27 ++++++++++++------- 2 files changed, 19 insertions(+), 12 deletions(-) diff --git a/resource/tasks/Roguelike/base.json b/resource/tasks/Roguelike/base.json index f0ae6a2230..3055b2525a 100644 --- a/resource/tasks/Roguelike/base.json +++ b/resource/tasks/Roguelike/base.json @@ -1231,14 +1231,14 @@ "Roguelike@StageEncounterJudgeClick": { "algorithm": "JustReturn", "action": "ClickRect", - "specificRect": [640, 360, 0, 0], + "specificRect": [640, 360, 1, 1], "preDelay": 150, "next": ["Roguelike@StageEncounterJudgeClick2"] }, "Roguelike@StageEncounterJudgeClick2": { "algorithm": "JustReturn", "action": "ClickRect", - "specificRect": [640, 360, 0, 0], + "specificRect": [640, 360, 1, 1], "preDelay": 150, "next": ["Roguelike@StageEncounterJudgeOption"] }, diff --git a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp index 63393b3f01..46a0284478 100644 --- a/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp +++ b/src/MaaCore/Task/Roguelike/RoguelikeStageEncounterTaskPlugin.cpp @@ -165,18 +165,25 @@ std::optional asst::RoguelikeStageEncounterTaskPlugin::handle_singl } if (hp_disappeared) { - if (!event.next_event.empty()) { - for (int i = 0; i < 3; ++i) { - ProcessTask(*this, { "Roguelike@StageEncounterJudgeClick" }).run(); - ProcessTask(*this, { "Roguelike@StageEncounterJudgeClick2" }).run(); - image = ctrler()->get_image(); - if (hp(image) >= 0) { - Log.debug("HP gone, going to next_event:", event.next_event); - return event.next_event; - } + if (event.next_event.empty()) { + return std::nullopt; + } + + const auto& task = Task.get("Roguelike@StageEncounterJudgeClick"); + for (int i = 0; i < 3; ++i) { + for (int j = 0; j < 2; ++j) { + ctrler()->click(task->specific_rect); + sleep(500); + } + image = ctrler()->get_image(); + if (hp(image) >= 0) { + Log.debug("HP restored, going to next_event:", event.next_event); + // 多点一次,确保选项恢复 + ctrler()->click(task->specific_rect); + sleep(500); + return event.next_event; } } - return std::nullopt; } // 兜底处理,从 option_num-option_num 点到 1-1