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; } + }; +}