From eae6c5f6e8db2438d3d0feada70b90342e8dd84f Mon Sep 17 00:00:00 2001 From: status102 Date: Mon, 25 Sep 2023 10:29:44 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=9C=A8Core=E6=A3=80=E6=9F=A5=E7=90=86?= =?UTF-8?q?=E6=99=BA=E8=8E=B7=E5=8F=96=E6=95=B0=E6=8D=AE=E5=90=88=E6=B3=95?= =?UTF-8?q?=E6=80=A7=20fix=20#6519?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/MaaCore/Assistant.cpp | 8 +++--- .../Task/Fight/SanityBeforeStagePlugin.cpp | 28 +++++++++++++++---- .../Task/Fight/SanityBeforeStagePlugin.h | 2 +- src/MaaWpfGui/Main/AsstProxy.cs | 21 ++++---------- 4 files changed, 32 insertions(+), 27 deletions(-) diff --git a/src/MaaCore/Assistant.cpp b/src/MaaCore/Assistant.cpp index 0b7c80cb27..67286346c8 100644 --- a/src/MaaCore/Assistant.cpp +++ b/src/MaaCore/Assistant.cpp @@ -422,10 +422,10 @@ void Assistant::working_proc() if (m_tasks_list.empty()) { callback_json["finished_tasks"] = json::array(finished_tasks); - const auto& sanity_str = status()->get_str(Status::FightSanityReport); - if (sanity_str) { - auto sanity_array = json::array(json::parse(*sanity_str).value_or(json::value(json::array()))); - // ["100/135", "2023-09-01 09:31:53.527"] + const auto& sanity_report = status()->get_str(Status::FightSanityReport); + if (sanity_report) { + // [100, 135, "2023-09-01 09:31:53.527"] + auto sanity_array = json::array(json::parse(*sanity_report).value_or(json::value(json::array()))); callback_json["sanity"] = sanity_array; } diff --git a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp index f721540a21..49d49de9c1 100644 --- a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp +++ b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp @@ -33,7 +33,7 @@ bool asst::SanityBeforeStagePlugin::_run() { LogTraceFunction; - get_sanity(); + get_sanity_before_stage(); return true; } @@ -41,7 +41,7 @@ bool asst::SanityBeforeStagePlugin::_run() /// /// 获取 当前理智/最大理智 /// -void asst::SanityBeforeStagePlugin::get_sanity() +void asst::SanityBeforeStagePlugin::get_sanity_before_stage() { LogTraceFunction; @@ -75,8 +75,24 @@ void asst::SanityBeforeStagePlugin::get_sanity() sanity_info["details"]["sanity"] = text; callback(AsstMsg::SubTaskExtraInfo, sanity_info); - json::array value; - value.emplace_back(std::move(text)); - value.emplace_back(utils::get_format_time()); - status()->set_str(Status::FightSanityReport, value.dumps()); + if (text.find('/') && + ranges::all_of(text.cbegin(), text.cend(), [](const char& c) { return c == '/' || (c >= '0' && c <= '9'); })) { + std::string sanity_cur = text.substr(0, text.find('/')); + std::string sanity_max = text.substr(text.find('/') + 1); + + if (!sanity_cur.empty() && !sanity_max.empty()) { + // [100, 135, "2023-09-01 09:31:53.527"] + auto value = json::array(); + value.emplace_back(std::stoi(sanity_cur)); + value.emplace_back(std::stoi(sanity_max)); + value.emplace_back(utils::get_format_time()); + status()->set_str(Status::FightSanityReport, value.dumps()); + } + else { + status()->set_str(Status::FightSanityReport, std::string()); + } + } + else { + status()->set_str(Status::FightSanityReport, std::string()); + } } diff --git a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h index ea5c223fd6..03e75d9953 100644 --- a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h +++ b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h @@ -15,6 +15,6 @@ namespace asst private: virtual bool _run() override; - void get_sanity(); + void get_sanity_before_stage(); }; } diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs index 49c3eafe23..cb060b255a 100644 --- a/src/MaaWpfGui/Main/AsstProxy.cs +++ b/src/MaaWpfGui/Main/AsstProxy.cs @@ -589,7 +589,7 @@ namespace MaaWpfGui.Main case AsstMsg.AllTasksCompleted: bool isMainTaskQueueAllCompleted = true; var finished_tasks = details["finished_tasks"] as JArray; - var sanity_report = details["sanity"]?.ToObject(); + var sanity_report = details["sanity"] as JArray; if (finished_tasks?.Count == 1) { var unique_finished_task = (AsstTaskId)finished_tasks[0]; @@ -618,30 +618,19 @@ namespace MaaWpfGui.Main TimeSpan timeDiff = TimeSpan.Zero; do { - if (sanity_report?.Length != 2 || !sanity_report[0].Contains("/")) + if (sanity_report?.Count != 3 || sanity_report.Any(i => i == null)) { break; } - // 被污染了直接抛弃 - int[] sanity = sanity_report[0].Split('/').Select(i => - { - try - { - return Convert.ToInt32(i); - } - catch (FormatException) - { - return -1; - } - }).ToArray(); - if (sanity.Length != 2 || sanity[0] < 0 || sanity[1] <= 1) + int[] sanity = sanity_report.Take(2).Select(i => (int)i).ToArray(); + if (sanity[0] < 0 || sanity[1] <= 1) { break; } timeDiff = new TimeSpan(0, sanity[0] < sanity[1] ? (sanity[1] - sanity[0]) * 6 : 0, 0); - reportTime = DateTimeOffset.Parse(sanity_report[1]).AddMinutes(timeDiff.TotalMinutes); + reportTime = DateTimeOffset.Parse((string)sanity_report[2]).AddMinutes(timeDiff.TotalMinutes); isSanityForecastSucc = true; } while (false);