From b63bd4b6eb6f4d2b808a11d05eef6fc9eb5ffe89 Mon Sep 17 00:00:00 2001 From: uye <99072975+ABA2396@users.noreply.github.com> Date: Mon, 20 Oct 2025 22:27:21 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=94=AF=E6=8C=81=E5=89=BF=E7=81=AD?= =?UTF-8?q?=E5=85=B3=E5=8D=A1=E5=90=8D=E8=AF=86=E5=88=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Miscellaneous/StageDropsImageAnalyzer.cpp | 36 +++++++++++++++---- src/MaaWpfGui/Main/AsstProxy.cs | 14 ++++++-- 2 files changed, 41 insertions(+), 9 deletions(-) diff --git a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp index af36f9c00c..3e0467a36e 100644 --- a/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp +++ b/src/MaaCore/Vision/Miscellaneous/StageDropsImageAnalyzer.cpp @@ -54,16 +54,38 @@ bool asst::StageDropsImageAnalyzer::analyze_stage_code() { LogTraceFunction; - RegionOCRer analyzer(m_image); - analyzer.set_task_info("StageDrops-StageName"); - if (!analyzer.analyze()) { - return false; + std::string stage_code; + Rect text_rect; + + // 先用默认 char 模型识别 + { + RegionOCRer analyzer(m_image); + analyzer.set_task_info("StageDrops-StageName"); + if (analyzer.analyze()) { + stage_code = analyzer.get_result().text; + text_rect = analyzer.get_result().rect; + Log.info(__FUNCTION__, "stage_code", stage_code); + } } - m_stage_code = analyzer.get_result().text; - Log.info(__FUNCTION__, "stage_code", m_stage_code); + + // 如果不带 '-',用非 char 模型再识别一次(适配剿灭/活动等特殊关卡码) + if (stage_code.find('-') == std::string::npos) { + RegionOCRer analyzer(m_image); + analyzer.set_task_info("StageDrops-StageName"); + analyzer.set_use_char_model(false); + if (analyzer.analyze()) { + std::string non_char_model_stage_code = analyzer.get_result().text; + if (!non_char_model_stage_code.empty()) { + stage_code = non_char_model_stage_code; + text_rect = analyzer.get_result().rect; + Log.info(__FUNCTION__, "stage_code (Non-ASCII model)", stage_code); + } + } + } + + m_stage_code = stage_code; #ifdef ASST_DEBUG - const Rect& text_rect = analyzer.get_result().rect; cv::rectangle(m_image_draw, make_rect(text_rect), cv::Scalar(0, 0, 255), 2); cv::putText( m_image_draw, diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 7d0af649c8..40f4fe73c9 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -1157,7 +1157,7 @@ public class AsstProxy } } - private static void ProcSubTaskMsg(AsstMsg msg, JObject details) + private void ProcSubTaskMsg(AsstMsg msg, JObject details) { // 下面几行注释暂时没用到,先注释起来... // string taskChain = details["taskchain"].ToString(); @@ -1215,9 +1215,10 @@ public class AsstProxy } } - private static void ProcSubTaskError(JObject details) + private void ProcSubTaskError(JObject details) { string subTask = details["subtask"]?.ToString() ?? string.Empty; + AsstTaskId taskId = details["taskid"]?.ToObject() ?? 0; switch (subTask) { case "StartGameTask": @@ -1242,6 +1243,15 @@ public class AsstProxy case "ReportToPenguinStats": { var why = details["why"]!.ToString(); + + // 剿灭放弃上传企鹅物流的特殊处理 + _tasksStatus.TryGetValue(taskId, out var value); + if (value is { Type: TaskType.Fight } && TaskQueueViewModel.FightTask.Stage == "Annihilation") + { + Instances.TaskQueueViewModel.AddLog("AnnihilationStage, " + LocalizationHelper.GetString("GiveUpUploadingPenguins")); + break; + } + Instances.TaskQueueViewModel.AddLog(why + ", " + LocalizationHelper.GetString("GiveUpUploadingPenguins"), UiLogColor.Warning); break; }