From 7d026ee55652ff780a4678d2dafc28a88607c0e3 Mon Sep 17 00:00:00 2001 From: status102 Date: Thu, 31 Aug 2023 13:51:40 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A2=9E=E5=8A=A0=E5=88=B7=E7=90=86?= =?UTF-8?q?=E6=99=BA=E6=AF=8F=E6=AC=A1=E6=89=93=E5=85=B3=E5=8D=A1=E4=B9=8B?= =?UTF-8?q?=E5=89=8D=E6=97=B6=E7=90=86=E6=99=BA=E5=89=A9=E4=BD=99=E9=87=8F?= =?UTF-8?q?=E8=BE=93=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 10 ++++ src/MaaCore/MaaCore.vcxproj | 2 + src/MaaCore/MaaCore.vcxproj.filters | 8 ++- .../Task/Fight/SanityBeforeStagePlugin.cpp | 59 +++++++++++++++++++ .../Task/Fight/SanityBeforeStagePlugin.h | 20 +++++++ src/MaaCore/Task/Interface/FightTask.cpp | 2 + src/MaaWpfGui/Main/AsstProxy.cs | 4 ++ src/MaaWpfGui/Res/Localizations/en-us.xaml | 1 + src/MaaWpfGui/Res/Localizations/ja-jp.xaml | 1 + src/MaaWpfGui/Res/Localizations/ko-kr.xaml | 1 + src/MaaWpfGui/Res/Localizations/zh-cn.xaml | 1 + src/MaaWpfGui/Res/Localizations/zh-tw.xaml | 1 + 12 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/MaaCore/Task/Fight/SanityBeforeStagePlugin.cpp create mode 100644 src/MaaCore/Task/Fight/SanityBeforeStagePlugin.h 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 @@ 掉落辨識錯誤 放棄上傳企鵝物流 無獎勵關卡,已停止 + 當前理智: 已開始行動 已使用理智藥