feat: 肉鸽卡住时自动保存截图

This commit is contained in:
MistEO
2022-09-28 22:40:13 +08:00
parent 492b7d66a3
commit 580e6ca112
7 changed files with 67 additions and 9 deletions

View File

@@ -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);
}

View File

@@ -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);

View File

@@ -49,6 +49,7 @@
<ClInclude Include="ReportDataTask.h" />
<ClInclude Include="RoguelikeControlTaskPlugin.h" />
<ClInclude Include="RoguelikeCustomStartTaskPlugin.h" />
<ClInclude Include="RoguelikeDebugTaskPlugin.h" />
<ClInclude Include="RoguelikeRecruitConfiger.h" />
<ClInclude Include="CopilotTask.h" />
<ClInclude Include="DebugTask.h" />
@@ -144,6 +145,7 @@
<ClCompile Include="ReportDataTask.cpp" />
<ClCompile Include="RoguelikeControlTaskPlugin.cpp" />
<ClCompile Include="RoguelikeCustomStartTaskPlugin.cpp" />
<ClCompile Include="RoguelikeDebugTaskPlugin.cpp" />
<ClCompile Include="RoguelikeRecruitConfiger.cpp" />
<ClCompile Include="CopilotTask.cpp" />
<ClCompile Include="DebugTask.cpp" />

View File

@@ -411,6 +411,9 @@
<ClInclude Include="AsstPlatform.h">
<Filter>头文件\Utils</Filter>
</ClInclude>
<ClInclude Include="RoguelikeDebugTaskPlugin.h">
<Filter>头文件\Task\Plugin\Roguelike</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="Controller.cpp">
@@ -689,6 +692,9 @@
<ClCompile Include="AsstPlatformWin32.cpp">
<Filter>源文件</Filter>
</ClCompile>
<ClCompile Include="RoguelikeDebugTaskPlugin.cpp">
<Filter>源文件\Task\Plugin\Roguelike</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="..\..\resource\config.json">

View File

@@ -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/");
}

View File

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

View File

@@ -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<ProcessTask>(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<RoguelikeFormationTaskPlugin>();
m_roguelike_task_ptr->register_plugin<RoguelikeControlTaskPlugin>();
m_roguelike_task_ptr->register_plugin<RoguelikeResetTaskPlugin>();
m_roguelike_task_ptr->register_plugin<RoguelikeDebugTaskPlugin>()->set_retry_times(0);
m_roguelike_task_ptr->register_plugin<RoguelikeShoppingTaskPlugin>()->set_retry_times(0);
m_custom_start_task_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeCustomStartTaskPlugin>();
m_battle_task_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeBattleTaskPlugin>();
m_recruit_task_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeRecruitTaskPlugin>();
m_recruit_task_ptr->set_retry_times(2);
m_skill_task_ptr = m_roguelike_task_ptr->register_plugin<RoguelikeSkillSelectionTaskPlugin>();
m_skill_task_ptr->set_retry_times(3);
m_skill_task_ptr->set_retry_times(2);
// 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用
for (int i = 0; i != 100; ++i) {