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