From c999cc4146d04fd9b2cbee6cda75dc73b0722a16 Mon Sep 17 00:00:00 2001
From: wangli <342970955@qq.com>
Date: Wed, 1 Feb 2023 18:03:00 +0800
Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E5=A4=8D=E5=BE=AA?=
=?UTF-8?q?=E7=8E=AF=E7=82=B9=E5=87=BB=E9=80=80=E5=87=BA=E5=85=B3=E5=8D=A1?=
=?UTF-8?q?=E6=8C=89=E9=92=AE=E5=AF=BC=E8=87=B4=E7=9A=84=E5=8D=A1=E6=AD=BB?=
=?UTF-8?q?=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
纠正错别字
更改while循环条件: true->!need_exit()
---
resource/tasks.json | 89 ++++++++++--------
...nReword.png => Reclamation@GainReward.png} | Bin
src/MaaCore/MaaCore.vcxproj | 2 +
src/MaaCore/MaaCore.vcxproj.filters | 9 ++
.../Task/Interface/ReclamationTask.cpp | 3 +
src/MaaCore/Task/Interface/ReclamationTask.h | 5 -
.../Reclamation/ReclamationBattlePlugin.cpp | 67 +++++++++++++
.../Reclamation/ReclamationBattlePlugin.h | 21 +++++
8 files changed, 152 insertions(+), 44 deletions(-)
rename resource/template/{Reclamation@GainReword.png => Reclamation@GainReward.png} (100%)
create mode 100644 src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.cpp
create mode 100644 src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.h
diff --git a/resource/tasks.json b/resource/tasks.json
index 2c5aedf1c4..8cb1427475 100644
--- a/resource/tasks.json
+++ b/resource/tasks.json
@@ -9833,7 +9833,9 @@
"next": [
"Reclamation@AtHomePageFlag",
"Reclamation@ResetScope",
- "Reclamation@ClickExitLevel",
+ "Reclamation@LevelForceExitConfirm",
+ "Reclamation@LevelForceExit",
+ "Reclamation@LevelComplete",
"Reclamation@ExitAlgorithm",
"Reclamation@SmallReturn",
"Reclamation@ReturnInFocus",
@@ -9860,16 +9862,16 @@
"Reclamation@StartAlgorithm",
"Reclamation@ConfirmStart#next",
"Reclamation@ReturnTo#next",
- "Reclamation@ClickExitLevel#next",
+ "Reclamation@BattleStart#next",
"Reclamation@LevelComplete",
"Reclamation@GiveupReportSkip",
"Reclamation@GiveupSkipConfirm",
- "Reclamation@GainReword",
+ "Reclamation@GainReward",
"Reclamation@StartUpThemes#next"
]
},
"Reclamation@StartAlgorithm": {
- "Doc": "继续演算的图标也能match,所以就单独写了",
+ "Doc": "继续演算的图标也能match,所以就不单独写了",
"roi": [
844,
569,
@@ -10061,7 +10063,7 @@
],
"action": "ClickSelf",
"next": [
- "Reclamation@ClickExitLevel",
+ "Reclamation@BattleStart",
"Reclamation@StartActionPopupConfirm",
"Reclamation@StartActionConfirm"
]
@@ -10071,61 +10073,70 @@
"baseTask": "Reclamation@PopupConfirm",
"postDelay": 4000,
"next": [
- "Reclamation@ClickExitLevel",
+ "Reclamation@BattleStart",
"Reclamation@StartActionPopupConfirm"
]
},
- "Reclamation@ClickExitLevel": {
- "action": "ClickRect",
+ "Reclamation@BattlePackIconTemplate":{
+ "template": "Reclamation@ClickExitLevel.png",
"roi": [
100,
0,
164,
166
+ ]
+ },
+ "Reclamation@BattleStart":{
+ "baseTask": "Reclamation@BattlePackIconTemplate",
+ "template": "Reclamation@ClickExitLevel.png",
+ "Doc": "注册插件ReclamationBattlePlugin",
+ "onErrorNext": [
+ "Reclamation@Begin"
],
+ "next": [
+ "Reclamation@LevelComplete"
+ ],
+ "specialParams_Doc": "二次复核前的delay,完成后的delay",
+ "specialParams": [
+ 1000,
+ 2000
+ ]
+ },
+ "Reclamation@ClickExitLevel": {
+ "action": "ClickRect",
+ "baseTask": "Reclamation@BattlePackIconTemplate",
+ "template": "Reclamation@ClickExitLevel.png",
"specificRect": [
46,
28,
59,
61
- ],
- "next": [
- "Reclamation@ExitLevelConfirm",
- "Reclamation@ExitLevelWithEnermyConfirm",
- "Reclamation@ClickExitLevel"
]
},
"Reclamation@ExitLevelConfirm": {
+ "algorithm": "OcrDetect",
"roi": [
- 857,
- 337,
- 370,
- 177
+ 856, 336, 371, 177
],
- "action": "ClickSelf",
- "postDelay": 2000,
- "exceededNext": [
- "Reclamation@ClickExitLevelSlowly"
+ "text": [
+ "确认", "离开"
],
+ "action": "ClickSelf"
+ },
+ "Reclamation@LevelForceExit":{
+ "baseTask": "Reclamation@ClickExitLevel",
+ "template": "Reclamation@ClickExitLevel.png",
+ "postDelay": 3000,
"next": [
- "Reclamation@LevelComplete",
- "Reclamation@ExitLevelConfirm",
- "Reclamation@ClickExitLevel"
+ "Reclamation@LevelForceExitConfirm",
+ "Reclamation@LevelForceExit",
+ "Reclamation@ReturnTo#next"
]
},
- "Reclamation@ExitLevelWithEnermyConfirm": {
- "roi": [
- 855,
- 335,
- 372,
- 181
- ],
- "action": "ClickSelf",
- "postDelay": 2000,
+ "Reclamation@LevelForceExitConfirm":{
+ "baseTask":"Reclamation@ExitLevelConfirm",
"next": [
- "Reclamation@LevelComplete",
- "Reclamation@ExitLevelWithEnermyConfirm",
- "Reclamation@ClickExitLevel"
+ "Reclamation@ReturnTo#next"
]
},
"Reclamation@LevelComplete": {
@@ -10256,13 +10267,13 @@
],
"action": "ClickSelf",
"next": [
- "Reclamation@GainReword",
+ "Reclamation@GainReward",
"Reclamation@AtHomePageFlag",
"Reclamation@GiveupSkipConfirm",
"Reclamation@ClickChooseInitUnits"
]
},
- "Reclamation@GainReword": {
+ "Reclamation@GainReward": {
"roi": [
556,
559,
@@ -10272,7 +10283,7 @@
"action": "ClickSelf",
"next": [
"Reclamation@Begin#next",
- "Reclamation@GainReword"
+ "Reclamation@GainReward"
]
},
"Reclamation@GiveupCrossdomainPageFlag":{
diff --git a/resource/template/Reclamation@GainReword.png b/resource/template/Reclamation@GainReward.png
similarity index 100%
rename from resource/template/Reclamation@GainReword.png
rename to resource/template/Reclamation@GainReward.png
diff --git a/src/MaaCore/MaaCore.vcxproj b/src/MaaCore/MaaCore.vcxproj
index c808bef8b7..d38f58deea 100644
--- a/src/MaaCore/MaaCore.vcxproj
+++ b/src/MaaCore/MaaCore.vcxproj
@@ -32,6 +32,7 @@
+
@@ -159,6 +160,7 @@
+
diff --git a/src/MaaCore/MaaCore.vcxproj.filters b/src/MaaCore/MaaCore.vcxproj.filters
index 3d11d92f3a..a3cd2d7bf0 100644
--- a/src/MaaCore/MaaCore.vcxproj.filters
+++ b/src/MaaCore/MaaCore.vcxproj.filters
@@ -77,6 +77,9 @@
{987541fc-58f0-40eb-8b93-c0cb38881d92}
+
+ {97f7690d-5924-405f-a332-831e7dad3f1e}
+
@@ -495,6 +498,9 @@
源文件\Task\Interface
+
+ 源文件\Task\Reclamation
+
@@ -815,5 +821,8 @@
源文件\Task\Interface
+
+ 源文件\Task\Reclamation
+
\ No newline at end of file
diff --git a/src/MaaCore/Task/Interface/ReclamationTask.cpp b/src/MaaCore/Task/Interface/ReclamationTask.cpp
index c0b2c1693d..0f4e130b9e 100644
--- a/src/MaaCore/Task/Interface/ReclamationTask.cpp
+++ b/src/MaaCore/Task/Interface/ReclamationTask.cpp
@@ -5,6 +5,8 @@
#include "Task/ProcessTask.h"
#include "Utils/Logger.hpp"
+#include "Task/Reclamation/ReclamationBattlePlugin.h"
+
asst::ReclamationTask::ReclamationTask(const AsstCallback& callback, Assistant* inst)
: InterfaceTask(callback, inst, TaskType),
@@ -12,6 +14,7 @@ asst::ReclamationTask::ReclamationTask(const AsstCallback& callback, Assistant*
{
m_reclamation_task_ptr->set_tasks({ "Reclamation@Begin" });
m_reclamation_task_ptr->set_ignore_error(true);
+ m_reclamation_task_ptr->register_plugin();
for (int i = 0; i != 100; ++i) {
m_subtasks.emplace_back(m_reclamation_task_ptr);
}
diff --git a/src/MaaCore/Task/Interface/ReclamationTask.h b/src/MaaCore/Task/Interface/ReclamationTask.h
index 39f592c9ba..a2e96ea344 100644
--- a/src/MaaCore/Task/Interface/ReclamationTask.h
+++ b/src/MaaCore/Task/Interface/ReclamationTask.h
@@ -4,11 +4,6 @@
namespace asst
{
class ProcessTask;
- class RoguelikeRecruitTaskPlugin;
- class RoguelikeSkillSelectionTaskPlugin;
- class RoguelikeBattleTaskPlugin;
- class RoguelikeCustomStartTaskPlugin;
- class RoguelikeDebugTaskPlugin;
class ReclamationTask : public InterfaceTask
{
diff --git a/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.cpp b/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.cpp
new file mode 100644
index 0000000000..0b1714674a
--- /dev/null
+++ b/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.cpp
@@ -0,0 +1,67 @@
+#include "ReclamationBattlePlugin.h"
+
+#include "Utils/NoWarningCV.h"
+
+#include "Controller.h"
+#include "Status.h"
+#include "Task/ProcessTask.h"
+#include "Utils/Logger.hpp"
+#include "Vision/OcrImageAnalyzer.h"
+#include "Vision/MatchImageAnalyzer.h"
+#include "Config/TaskData.h"
+
+asst::ReclamationBattlePlugin::ReclamationBattlePlugin(const AsstCallback& callback, Assistant* inst,
+ std::string_view task_chain)
+ : AbstractTaskPlugin(callback, inst, task_chain), BattleHelper(inst)
+{}
+
+bool asst::ReclamationBattlePlugin::verify(AsstMsg msg, const json::value& details) const
+{
+ if (msg != AsstMsg::SubTaskCompleted || details.get("subtask", std::string()) != "ProcessTask") {
+ return false;
+ }
+
+ const std::string& task = details.get("details", "task", "");
+ std::string_view task_view = task;
+ if (task_view == "Reclamation@BattleStart") {
+ return true;
+ }
+ else {
+ return false;
+ }
+}
+
+bool asst::ReclamationBattlePlugin::_run()
+{
+ LogTraceFunction;
+
+ wait_until_start(false);
+
+ while (!need_exit()) {
+ while (!need_exit()) {
+ bool stage1 = ProcessTask(*this, { "Reclamation@ClickExitLevel" }).run();
+ bool stage2 = ProcessTask(*this, { "Reclamation@ExitLevelConfirm" }).run();
+ if (stage2) break;
+ if (!stage1 && !stage2) {
+ Log.info(__FUNCTION__, "| fail to operate");
+ return ProcessTask(*this, { "Reclamation@Begin" }).run();
+ }
+ }
+
+ sleep(Task.get("Reclamation@BattleStart")->special_params.front());
+ const auto img = ctrler()->get_image();
+ bool check1 = check_in_battle(img, false);
+ OcrImageAnalyzer confirmAnalyzer(img);
+ confirmAnalyzer.set_task_info("Reclamation@ExitLevelConfirm");
+ bool check2 = confirmAnalyzer.analyze();
+ if (!check1 && !check2) break;
+ }
+
+ sleep(Task.get("Reclamation@BattleStart")->special_params.at(1));
+ return true;
+}
+
+bool asst::ReclamationBattlePlugin::do_strategic_action(const cv::Mat&)
+{
+ return true;
+}
diff --git a/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.h b/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.h
new file mode 100644
index 0000000000..30bfb026ef
--- /dev/null
+++ b/src/MaaCore/Task/Reclamation/ReclamationBattlePlugin.h
@@ -0,0 +1,21 @@
+#pragma once
+#include "Task/Miscellaneous/BattleProcessTask.h"
+#include "Task/AbstractTaskPlugin.h"
+#include "Task/BattleHelper.h"
+
+namespace asst
+{
+ class ReclamationBattlePlugin : public AbstractTaskPlugin, private BattleHelper
+ {
+ public:
+ ReclamationBattlePlugin(const AsstCallback& callback, Assistant* inst, std::string_view task_chain);
+ virtual ~ReclamationBattlePlugin() override = default;
+
+ virtual bool verify(AsstMsg msg, const json::value& details) const override;
+
+ protected:
+ virtual bool _run() override;
+ virtual bool do_strategic_action(const cv::Mat& reusable = cv::Mat()) override;
+ virtual AbstractTask& this_task() override { return *this; }
+ };
+}