Files
MaaAssistantArknights/src/MeoAssistant/RoguelikeShoppingTaskPlugin.cpp

70 lines
2.0 KiB
C++

#include "RoguelikeShoppingTaskPlugin.h"
#include "OcrWithFlagTemplImageAnalyzer.h"
#include "Resource.h"
#include "Controller.h"
#include "ProcessTask.h"
#include "Logger.hpp"
bool asst::RoguelikeShoppingTaskPlugin::verify(AsstMsg msg, const json::value& details) const
{
if (msg != AsstMsg::SubTaskStart
|| details.get("subtask", std::string()) != "ProcessTask") {
return false;
}
if (details.at("details").at("task").as_string() == "Roguelike1TraderRandomShopping") {
return true;
}
else {
return false;
}
}
bool asst::RoguelikeShoppingTaskPlugin::_run()
{
LogTraceFunction;
OcrWithFlagTemplImageAnalyzer analyzer;
analyzer.set_task_info("Roguelike1TraderShopping", "Roguelike1TraderShoppingOcr");
analyzer.set_image(m_ctrler->get_image());
if (!analyzer.analyze()) {
return false;
}
const auto& result = analyzer.get_result();
const auto& order_goods_list = Resrc.roguelike_shopping().get_goods();
for (const auto& goods : order_goods_list) {
if (need_exit()) {
return false;
}
if (goods.restriction != BattleRole::Unknown) {
// TODO
continue;
}
auto find_it = std::find_if(result.cbegin(), result.cend(),
[&](const TextRect& tr) -> bool {
return tr.text == goods.name;
});
if (find_it == result.cend()) {
continue;
}
Log.info("Ready to buy", goods.name);
m_ctrler->click(find_it->rect);
bool confirmed = ProcessTask(*this, { "Roguelike1TraderShoppingConfirm", "Roguelike1ChooseOperFlag" })
.set_times_limit("Roguelike1TraderRandomShopping", 0)
.set_times_limit("Roguelike1StageTraderLeave", 0)
.set_times_limit("Roguelike1ExitThenAbandon", 0)
.set_retry_times(5)
.run();
if (!confirmed) {
return false;
}
}
return true;
}