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