diff --git a/resource/tasks.json b/resource/tasks.json
index 89dc45a90d..d943051342 100644
--- a/resource/tasks.json
+++ b/resource/tasks.json
@@ -3553,6 +3553,16 @@
"baseTask": "ClickCorner",
"next": []
},
+ "SanityMatch": {
+ "algorithm": "OcrDetect",
+ "text": [],
+ "roi": [
+ 1120,
+ 20,
+ 150,
+ 40
+ ]
+ },
"UseMedicine": {
"action": "DoNothing",
"templThreshold": 0.7,
diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj
index 5a033a3923..06a32c91bb 100644
--- a/src/MaaCore/MaaCore.vcxproj
+++ b/src/MaaCore/MaaCore.vcxproj
@@ -66,6 +66,7 @@
+
@@ -223,6 +224,7 @@
+
diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters
index 72dfe1e2b0..e364b613c5 100644
--- a/src/MaaCore/MaaCore.vcxproj.filters
+++ b/src/MaaCore/MaaCore.vcxproj.filters
@@ -618,6 +618,9 @@
源文件\Task\Roguelike
+
+ 源文件\Task\Fight
+
@@ -1019,5 +1022,8 @@
源文件\Task\Roguelike
+
+ 源文件\Task\Fight
+
-
+
\ No newline at end of file
diff --git a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp
new file mode 100644
index 0000000000..b0604bcecc
--- /dev/null
+++ b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp
@@ -0,0 +1,59 @@
+#include "SanityBeforeStagePlugin.h"
+
+#include
+
+#include "Utils/ImageIo.hpp"
+#include "Utils/Logger.hpp"
+#include "Vision/OCRer.h"
+#include "Controller/Controller.h"
+#include "Config/TaskData.h"
+
+bool asst::SanityBeforeStagePlugin::verify(AsstMsg msg, const json::value& details) const
+{
+ // SubTaskStart会在主任务的操作部分之前触发,想不通,但是如果哪天改了记得来这里修
+ if (msg != AsstMsg::SubTaskStart || details.get("subtask", std::string()) != "ProcessTask") {
+ return false;
+ }
+
+ const std::string task = details.at("details").at("task").as_string();
+ if (task == "FightBegin") {
+ //m_cur_info = std::move(details);
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+bool asst::SanityBeforeStagePlugin::_run() {
+ LogTraceFunction;
+
+ get_sanity();
+
+ return true;
+}
+
+///
+/// 获取 当前理智/最大理智
+///
+void asst::SanityBeforeStagePlugin::get_sanity()
+{
+ LogTraceFunction;
+
+ // 直接摘抄博朗台部分,DrGrandetTaskPlugin
+ OCRer analyzer(ctrler()->get_image());
+ analyzer.set_task_info("SanityMatch");
+ analyzer.set_replace(Task.get("NumberOcrReplace")->replace_map);
+ analyzer.set_use_char_model(false);
+
+ if (!analyzer.analyze()) {
+ return;
+ }
+ auto text = analyzer.get_result().front().text;
+
+ Log.info("Current Sanity:" + text);
+
+ json::value sanity_info = basic_info_with_what("SanityBeforeStage");
+ sanity_info["details"]["sanity"] = text;
+ callback(AsstMsg::SubTaskExtraInfo, sanity_info);
+}
diff --git a/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h
new file mode 100644
index 0000000000..ea5c223fd6
--- /dev/null
+++ b/src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h
@@ -0,0 +1,20 @@
+#pragma once
+#include "Task/AbstractTaskPlugin.h"
+
+#include
+namespace asst
+{
+
+ class SanityBeforeStagePlugin final : public AbstractTaskPlugin
+ {
+ public:
+ using AbstractTaskPlugin::AbstractTaskPlugin;
+ virtual ~SanityBeforeStagePlugin() override = default;
+ virtual bool verify(AsstMsg msg, const json::value& details) const override;
+
+ private:
+ virtual bool _run() override;
+
+ void get_sanity();
+ };
+}
diff --git a/src/MaaCore/Task/Interface/FightTask.cpp b/src/MaaCore/Task/Interface/FightTask.cpp
index 90a2ed5b94..d4480bacb2 100644
--- a/src/MaaCore/Task/Interface/FightTask.cpp
+++ b/src/MaaCore/Task/Interface/FightTask.cpp
@@ -7,6 +7,7 @@
#include "Task/Fight/DrGrandetTaskPlugin.h"
#include "Task/Fight/StageDropsTaskPlugin.h"
#include "Task/Fight/StageNavigationTask.h"
+#include "Task/Fight/SanityBeforeStagePlugin.h"
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
#include "Utils/Ranges.hpp"
@@ -46,6 +47,7 @@ asst::FightTask::FightTask(const AsstCallback& callback, Assistant* inst)
m_stage_drops_plugin_ptr->set_retry_times(0);
m_dr_grandet_task_plugin_ptr = m_fight_task_ptr->register_plugin();
m_dr_grandet_task_plugin_ptr->set_enable(false);
+ m_fight_task_ptr->register_plugin();
m_subtasks.emplace_back(m_start_up_task_ptr);
m_subtasks.emplace_back(m_stage_navigation_task_ptr);
diff --git a/src/MaaWpfGui/Main/AsstProxy.cs b/src/MaaWpfGui/Main/AsstProxy.cs
index 98af31ada4..c765f3f8a3 100644
--- a/src/MaaWpfGui/Main/AsstProxy.cs
+++ b/src/MaaWpfGui/Main/AsstProxy.cs
@@ -1092,6 +1092,10 @@ namespace MaaWpfGui.Main
case "ReclamationSmeltGold":
Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("AlgorithmDoneSmeltGold") + $" {(int)subTaskDetails["times"]} " + LocalizationHelper.GetString("UnitTime"));
break;
+
+ case "SanityBeforeStage":
+ Instances.TaskQueueViewModel.AddLog(LocalizationHelper.GetString("CurrentSanity") + $" {subTaskDetails["sanity"]} ");
+ break;
}
}
diff --git a/src/MaaWpfGui/Res/Localizations/en-us.xaml b/src/MaaWpfGui/Res/Localizations/en-us.xaml
index 2328a4e5cf..a9fd8ca58b 100644
--- a/src/MaaWpfGui/Res/Localizations/en-us.xaml
+++ b/src/MaaWpfGui/Res/Localizations/en-us.xaml
@@ -502,6 +502,7 @@ The video aspect ratio needs to be 16:9 without interference factors such as bla
Drops recognition error
Abort upload to Penguin Statistics
No bonus stage, stopped
+ Current Sanity:
Mission started
times
Medicine used
diff --git a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
index a3233a83b4..7ce594f085 100644
--- a/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ja-jp.xaml
@@ -496,6 +496,7 @@
ドロップ認識エラー
Penguin-Statsへのアップロードをあきらめました
ステージ報酬がないため停止します
+ 現在理性:
行動開始しました
回
回復剤を使った
diff --git a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
index b87c1f9bd1..0a37f95b3f 100644
--- a/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
+++ b/src/MaaWpfGui/Res/Localizations/ko-kr.xaml
@@ -502,6 +502,7 @@ OF-1을 해금하지 않았다면 선택하지 말아 주세요.
드롭 인식 오류
펭귄 물류에 업로드 불가
EX 스테이지가 없어 중단되었습니다
+ 현재의 이성:
행동 개시
회
이성 회복 아이템을 사용했습니다
diff --git a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
index 01b0d60f34..45e2644393 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-cn.xaml
@@ -506,6 +506,7 @@
掉落识别错误
放弃上传企鹅物流
无奖励关卡,已停止
+ 当前理智:
已开始行动
次
已使用理智药
diff --git a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
index 4e8bc8b81b..0b5cb89220 100644
--- a/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
+++ b/src/MaaWpfGui/Res/Localizations/zh-tw.xaml
@@ -497,6 +497,7 @@
掉落辨識錯誤
放棄上傳企鵝物流
無獎勵關卡,已停止
+ 當前理智:
已開始行動
次
已使用理智藥