mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-16 09:50:40 +08:00
feat.支持肉鸽干员技能选择字段
This commit is contained in:
67
src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp
Normal file
67
src/MeoAssistant/RoguelikeSkillSelectionTaskPlugin.cpp
Normal file
@@ -0,0 +1,67 @@
|
||||
#include "RoguelikeSkillSelectionTaskPlugin.h"
|
||||
|
||||
#include "RoguelikeSkillSelectionImageAnalyzer.h"
|
||||
#include "Controller.h"
|
||||
#include "TaskData.h"
|
||||
|
||||
#include "Logger.hpp"
|
||||
|
||||
bool asst::RoguelikeSkillSelectionTaskPlugin::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() == "Roguelike1StartAction") {
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void asst::RoguelikeSkillSelectionTaskPlugin::set_skill_map(SkillMap skill_mapping)
|
||||
{
|
||||
m_skill_mapping = std::move(skill_mapping);
|
||||
}
|
||||
|
||||
bool asst::RoguelikeSkillSelectionTaskPlugin::_run()
|
||||
{
|
||||
//#ifdef ASST_DEBUG
|
||||
// m_skill_mapping.clear();
|
||||
// m_skill_mapping.reserve(4);
|
||||
// m_skill_mapping.emplace("棘刺", 3);
|
||||
// m_skill_mapping.emplace("芙蓉", 1);
|
||||
// m_skill_mapping.emplace("梓兰", 1);
|
||||
// m_skill_mapping.emplace("阿米娅", 3);
|
||||
// m_skill_mapping.emplace("Unknown", 3);
|
||||
//#endif
|
||||
auto image = m_ctrler->get_image();
|
||||
RoguelikeSkillSelectionImageAnalyzer analyzer(image);
|
||||
|
||||
if (!analyzer.analyze()) {
|
||||
return false;
|
||||
}
|
||||
|
||||
for (const auto& [name, skill_vec] : analyzer.get_result()) {
|
||||
for (const auto& [req_name, req_skill] : m_skill_mapping) {
|
||||
if (name.find(req_name) == std::string::npos) {
|
||||
continue;
|
||||
}
|
||||
size_t index = 0;
|
||||
if (skill_vec.size() < req_skill) {
|
||||
index = skill_vec.size() - 1;
|
||||
Log.info("skill", req_skill, "not exists, use skill", index);
|
||||
}
|
||||
else {
|
||||
index = req_skill - 1;
|
||||
}
|
||||
Rect target = skill_vec.at(index);
|
||||
m_ctrler->click(target);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
Reference in New Issue
Block a user