diff --git a/src/MeoAssistant/AbstractTask.cpp b/src/MeoAssistant/AbstractTask.cpp index 75dc30919d..fefe5270f7 100644 --- a/src/MeoAssistant/AbstractTask.cpp +++ b/src/MeoAssistant/AbstractTask.cpp @@ -191,10 +191,15 @@ void asst::AbstractTask::click_return_button() ProcessTask(*this, { "Return" }).run(); } -void asst::AbstractTask::save_image() +bool asst::AbstractTask::save_img(const std::string& dirname) { + auto image = m_ctrler->get_image(); + if (image.empty()) { + return false; + } + std::string stem = utils::get_format_time(); stem = utils::string_replace_all(stem, { { ":", "-" }, { " ", "_" } }); - std::filesystem::create_directory("debug"); - asst::imwrite("debug/" + stem + "_raw.png", m_ctrler->get_image()); + std::filesystem::create_directories(dirname); + return asst::imwrite(dirname + stem + "_raw.png", image); } diff --git a/src/MeoAssistant/AbstractTask.h b/src/MeoAssistant/AbstractTask.h index 0eaaf4c9ff..2d4bd9a983 100644 --- a/src/MeoAssistant/AbstractTask.h +++ b/src/MeoAssistant/AbstractTask.h @@ -62,7 +62,7 @@ namespace asst virtual bool on_run_fails() { return true; } virtual void callback(AsstMsg msg, const json::value& detail); virtual void click_return_button(); - void save_image(); + bool save_img(const std::string& dirname = "debug/"); json::value basic_info_with_what(std::string what) const; bool sleep(unsigned millisecond); diff --git a/src/MeoAssistant/MeoAssistant.vcxproj b/src/MeoAssistant/MeoAssistant.vcxproj index e3e53cc799..45beda22e6 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj +++ b/src/MeoAssistant/MeoAssistant.vcxproj @@ -49,6 +49,7 @@ + @@ -144,6 +145,7 @@ + diff --git a/src/MeoAssistant/MeoAssistant.vcxproj.filters b/src/MeoAssistant/MeoAssistant.vcxproj.filters index 569c033b2e..573c7ea269 100644 --- a/src/MeoAssistant/MeoAssistant.vcxproj.filters +++ b/src/MeoAssistant/MeoAssistant.vcxproj.filters @@ -411,6 +411,9 @@ 头文件\Utils + + 头文件\Task\Plugin\Roguelike + @@ -689,6 +692,9 @@ 源文件 + + 源文件\Task\Plugin\Roguelike + diff --git a/src/MeoAssistant/RoguelikeDebugTaskPlugin.cpp b/src/MeoAssistant/RoguelikeDebugTaskPlugin.cpp new file mode 100644 index 0000000000..608b85d1c7 --- /dev/null +++ b/src/MeoAssistant/RoguelikeDebugTaskPlugin.cpp @@ -0,0 +1,27 @@ +#include "RoguelikeDebugTaskPlugin.h" + +#include "Controller.h" + +bool asst::RoguelikeDebugTaskPlugin::verify(AsstMsg msg, const json::value& details) const +{ + if (details.get("subtask", std::string()) != "ProcessTask") { + return false; + } + + if (msg == AsstMsg::SubTaskError) { + return true; + } + + std::string task = details.get("details", "task", std::string()); + if (msg == AsstMsg::SubTaskStart && details.get("subtask", std::string()) == "ProcessTask" && + task == "Roguelike1ExitThenAbandon") { + return true; + } + + return false; +} + +bool asst::RoguelikeDebugTaskPlugin::_run() +{ + return save_img("debug/roguelike/"); +} diff --git a/src/MeoAssistant/RoguelikeDebugTaskPlugin.h b/src/MeoAssistant/RoguelikeDebugTaskPlugin.h new file mode 100644 index 0000000000..a19b9fcef6 --- /dev/null +++ b/src/MeoAssistant/RoguelikeDebugTaskPlugin.h @@ -0,0 +1,18 @@ +#pragma once +#include "AbstractTaskPlugin.h" + +namespace asst +{ + class RoguelikeDebugTaskPlugin : public AbstractTaskPlugin + { + public: + using AbstractTaskPlugin::AbstractTaskPlugin; + virtual ~RoguelikeDebugTaskPlugin() override = default; + + public: + virtual bool verify(AsstMsg msg, const json::value& details) const override; + + protected: + virtual bool _run() override; + }; +} diff --git a/src/MeoAssistant/RoguelikeTask.cpp b/src/MeoAssistant/RoguelikeTask.cpp index c8f434b330..913689a3a5 100644 --- a/src/MeoAssistant/RoguelikeTask.cpp +++ b/src/MeoAssistant/RoguelikeTask.cpp @@ -4,6 +4,7 @@ #include "RoguelikeBattleTaskPlugin.h" #include "RoguelikeControlTaskPlugin.h" #include "RoguelikeCustomStartTaskPlugin.h" +#include "RoguelikeDebugTaskPlugin.h" #include "RoguelikeFormationTaskPlugin.h" #include "RoguelikeRecruitTaskPlugin.h" #include "RoguelikeResetTaskPlugin.h" @@ -16,21 +17,20 @@ asst::RoguelikeTask::RoguelikeTask(const AsstCallback& callback, void* callback_ : PackageTask(callback, callback_arg, TaskType), m_roguelike_task_ptr(std::make_shared(callback, callback_arg, TaskType)) { - m_roguelike_task_ptr->set_tasks({ "Roguelike1Begin" }).set_retry_times(50); + m_roguelike_task_ptr->set_tasks({ "Roguelike1Begin" }); m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); m_roguelike_task_ptr->register_plugin(); + m_roguelike_task_ptr->register_plugin()->set_retry_times(0); m_roguelike_task_ptr->register_plugin()->set_retry_times(0); + m_custom_start_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_battle_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_recruit_task_ptr = m_roguelike_task_ptr->register_plugin(); m_recruit_task_ptr->set_retry_times(2); - m_skill_task_ptr = m_roguelike_task_ptr->register_plugin(); - m_skill_task_ptr->set_retry_times(3); + m_skill_task_ptr->set_retry_times(2); // 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用 for (int i = 0; i != 100; ++i) {