From 4fc2a16628187e147e9dbdc027843c17c7cd07fd Mon Sep 17 00:00:00 2001 From: youqii Date: Thu, 2 Nov 2023 16:53:23 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9F=BA=E5=BB=BA=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E9=A2=86=E5=8F=96=E4=B8=93=E7=B2=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/tasks.json | 41 ++++++++++++++++++ .../template/InfrastTrainingCompleted.png | Bin 0 -> 3589 bytes resource/template/Training.png | Bin 0 -> 16446 bytes resource/template/TrainingMini.png | Bin 0 -> 9412 bytes src/MaaCore/MaaCore.vcxproj | 2 + src/MaaCore/MaaCore.vcxproj.filters | 6 +++ .../Task/Infrast/InfrastTrainingTask.cpp | 30 +++++++++++++ .../Task/Infrast/InfrastTrainingTask.h | 18 ++++++++ src/MaaCore/Task/Interface/InfrastTask.cpp | 6 +++ src/MaaCore/Task/Interface/InfrastTask.h | 2 + .../Infrast/InfrastFacilityImageAnalyzer.cpp | 2 +- 11 files changed, 106 insertions(+), 1 deletion(-) create mode 100644 resource/template/InfrastTrainingCompleted.png create mode 100644 resource/template/Training.png create mode 100644 resource/template/TrainingMini.png create mode 100644 src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp create mode 100644 src/MaaCore/Task/Infrast/InfrastTrainingTask.h diff --git a/resource/tasks.json b/resource/tasks.json index cf205c1309..b014c20f18 100644 --- a/resource/tasks.json +++ b/resource/tasks.json @@ -6527,6 +6527,34 @@ ], "templThreshold": 0.95 }, + "InfrastTraining": { + "template": "Training.png", + "maskRange": [ + 1, + 255 + ], + "roi": [ + 880, + 420, + 400, + 160 + ], + "templThreshold": 0.95 + }, + "InfrastTrainingMini": { + "template": "TrainingMini.png", + "maskRange": [ + 1, + 255 + ], + "roi": [ + 980, + 400, + 300, + 140 + ], + "templThreshold": 0.95 + }, "InfrastControl": { "template": "ControlCenter.png", "maskRange": [ @@ -7574,6 +7602,19 @@ "ClueGiveTo1stConfirm" ] }, + "InfrastTrainingCompleted": { + "action": "ClickSelf", + "roi": [ + 350, + 600, + 200, + 120 + ], + "postDelay": 5000, + "next": [ + "CloseTaskAward" + ] + }, "InfrastOperListTabSkillUnClicked": { "action": "ClickSelf", "roi": [ diff --git a/resource/template/InfrastTrainingCompleted.png b/resource/template/InfrastTrainingCompleted.png new file mode 100644 index 0000000000000000000000000000000000000000..83ccb93d8e02a584640d367da239119f8a03cb4b GIT binary patch literal 3589 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 KMNUMnLSTaQ3`a8n literal 0 HcmV?d00001 diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj index f5ed68d8ea..151672fe5f 100644 --- a/src/MaaCore/MaaCore.vcxproj +++ b/src/MaaCore/MaaCore.vcxproj @@ -76,6 +76,7 @@ + @@ -253,6 +254,7 @@ + diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters index bdba56d8c1..3dc8355f8b 100644 --- a/src/MaaCore/MaaCore.vcxproj.filters +++ b/src/MaaCore/MaaCore.vcxproj.filters @@ -408,6 +408,9 @@ Source\Task\Infrast + + Source\Task\Infrast + Source\Task\Infrast @@ -1148,5 +1151,8 @@ Source\Resource\TaskData + + Source\Task\Infrast + \ No newline at end of file diff --git a/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp b/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp new file mode 100644 index 0000000000..21cd146b1f --- /dev/null +++ b/src/MaaCore/Task/Infrast/InfrastTrainingTask.cpp @@ -0,0 +1,30 @@ +#include "InfrastTrainingTask.h" + +#include "Task/ProcessTask.h" + +bool asst::InfrastTrainingTask::_run() +{ + m_all_available_opers.clear(); + + set_product("SkillLevel"); + + swipe_to_the_right_of_main_ui(); + + if (!enter_facility()) { + return false; + } + enter_facility(); + + // 训练未完成或没有训练,退出 + if (!training_completed()) { + return true; + } + + return true; +} + +bool asst::InfrastTrainingTask::training_completed() +{ + ProcessTask task(*this, { "InfrastTrainingCompleted" }); + return task.run(); +} diff --git a/src/MaaCore/Task/Infrast/InfrastTrainingTask.h b/src/MaaCore/Task/Infrast/InfrastTrainingTask.h new file mode 100644 index 0000000000..aa78fedbb9 --- /dev/null +++ b/src/MaaCore/Task/Infrast/InfrastTrainingTask.h @@ -0,0 +1,18 @@ +#pragma once +#include "InfrastProductionTask.h" + +namespace asst +{ + class InfrastTrainingTask final : public InfrastProductionTask + { + public: + using InfrastProductionTask::InfrastProductionTask; + virtual ~InfrastTrainingTask() override = default; + + protected: + virtual bool _run() override; + + private: + bool training_completed(); + }; +} diff --git a/src/MaaCore/Task/Interface/InfrastTask.cpp b/src/MaaCore/Task/Interface/InfrastTask.cpp index df2230e1a7..9985a95022 100644 --- a/src/MaaCore/Task/Interface/InfrastTask.cpp +++ b/src/MaaCore/Task/Interface/InfrastTask.cpp @@ -8,6 +8,7 @@ #include "Task/Infrast/InfrastInfoTask.h" #include "Task/Infrast/InfrastMfgTask.h" #include "Task/Infrast/InfrastOfficeTask.h" +#include "Task/Infrast/InfrastTrainingTask.h" #include "Task/Infrast/InfrastPowerTask.h" #include "Task/Infrast/InfrastProcessingTask.h" #include "Task/Infrast/InfrastReceptionTask.h" @@ -26,6 +27,7 @@ asst::InfrastTask::InfrastTask(const AsstCallback& callback, Assistant* inst) m_reception_task_ptr(std::make_shared(callback, inst, TaskType)), m_office_task_ptr(std::make_shared(callback, inst, TaskType)), m_processing_task_ptr(std::make_shared(callback, inst, TaskType)), + m_training_task_ptr(std::make_shared(callback, inst, TaskType)), m_dorm_task_ptr(std::make_shared(callback, inst, TaskType)) { LogTraceFunction; @@ -39,6 +41,7 @@ asst::InfrastTask::InfrastTask(const AsstCallback& callback, Assistant* inst) m_control_task_ptr->set_ignore_error(true); m_reception_task_ptr->set_ignore_error(true); m_office_task_ptr->set_ignore_error(true); + m_training_task_ptr->set_ignore_error(true); m_processing_task_ptr->set_ignore_error(true); m_dorm_task_ptr->set_ignore_error(true); @@ -96,6 +99,9 @@ bool asst::InfrastTask::set_params(const json::value& params) else if (facility == "Processing") { m_subtasks.emplace_back(m_processing_task_ptr); } + else if (facility == "Training") { + m_subtasks.emplace_back(m_training_task_ptr); + } else { Log.error(__FUNCTION__, "| Unknown facility", facility); m_subtasks.clear(); diff --git a/src/MaaCore/Task/Interface/InfrastTask.h b/src/MaaCore/Task/Interface/InfrastTask.h index f141e399cb..8e7c7d1201 100644 --- a/src/MaaCore/Task/Interface/InfrastTask.h +++ b/src/MaaCore/Task/Interface/InfrastTask.h @@ -13,6 +13,7 @@ namespace asst class InfrastControlTask; class InfrastReceptionTask; class InfrastOfficeTask; + class InfrastTrainingTask; class InfrastDormTask; class ReplenishOriginiumShardTaskPlugin; class InfrastProcessingTask; @@ -44,6 +45,7 @@ namespace asst std::shared_ptr m_control_task_ptr = nullptr; std::shared_ptr m_reception_task_ptr = nullptr; std::shared_ptr m_office_task_ptr = nullptr; + std::shared_ptr m_training_task_ptr = nullptr; std::shared_ptr m_processing_task_ptr = nullptr; std::shared_ptr m_dorm_task_ptr = nullptr; std::shared_ptr m_replenish_task_ptr = nullptr; diff --git a/src/MaaCore/Vision/Infrast/InfrastFacilityImageAnalyzer.cpp b/src/MaaCore/Vision/Infrast/InfrastFacilityImageAnalyzer.cpp index 2f109b09e3..496a8ccfc4 100644 --- a/src/MaaCore/Vision/Infrast/InfrastFacilityImageAnalyzer.cpp +++ b/src/MaaCore/Vision/Infrast/InfrastFacilityImageAnalyzer.cpp @@ -11,7 +11,7 @@ bool asst::InfrastFacilityImageAnalyzer::analyze() const static std::unordered_map facility_task_name = { { "Dorm", "InfrastDorm" }, { "Control", "InfrastControl" }, { "Mfg", "InfrastMfg" }, { "Trade", "InfrastTrade" }, { "Power", "InfrastPower" }, { "Office", "InfrastOffice" }, - { "Reception", "InfrastReception" }, { "Processing", "InfrastProcessing" }, + { "Reception", "InfrastReception" }, { "Processing", "InfrastProcessing" }, { "Training", "InfrastTraining" } }; // 因为基建的缩放是不确定的,有可能是正常大小,也可能是最小化的 // 所以对每种情况都进行一下识别,取其中得分最高的