feat.支持肉鸽干员技能选择字段

This commit is contained in:
MistEO
2022-03-13 19:19:19 +08:00
parent 92c27fcaa3
commit cd007ee786
23 changed files with 364 additions and 33 deletions

View File

@@ -4,6 +4,7 @@
#include "RoguelikeFormationTaskPlugin.h"
#include "RoguelikeBattleTaskPlugin.h"
#include "RoguelikeRecruitTaskPlugin.h"
#include "RoguelikeSkillSelectionTaskPlugin.h"
#include "Logger.hpp"
@@ -19,6 +20,9 @@ asst::RoguelikeTask::RoguelikeTask(AsstCallback callback, void* callback_arg)
m_recruit_task_ptr = m_roguelike_task_ptr->regiseter_plugin<RoguelikeRecruitTaskPlugin>();
m_recruit_task_ptr->set_retry_times(2);
m_skill_task_ptr = m_roguelike_task_ptr->regiseter_plugin<RoguelikeSkillSelectionTaskPlugin>();
m_skill_task_ptr->set_retry_times(0);
// 这个任务如果卡住会放弃当前的肉鸽并重新开始,所以多添加一点。先这样凑合用
for (int i = 0; i != 10000; ++i) {
m_subtasks.emplace_back(m_roguelike_task_ptr);
@@ -30,23 +34,29 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
// 0 - 尽可能一直往后打
// 1 - 第一层投资完源石锭就退出
// 2 - 投资过后再退出,没有投资就继续往后打
int mode = params.get("mode", 0);
std::vector<std::string> opers_vec;
if (params.contains("opers") && params.at("opers").is_array()) {
for (auto& oper : params.at("opers").as_array()) {
if (oper.contains("name") && oper.at("name").is_string()) {
opers_vec.emplace_back(oper.at("name").as_string());
}
else {
return false;
}
}
}
else {
if (!params.contains("opers") || !params.at("opers").is_array()) {
return false;
}
std::vector<std::string> opers_vec;
RoguelikeSkillSelectionTaskPlugin::SkillMap skill_map;
for (auto& oper : params.at("opers").as_array()) {
if (!oper.contains("name") || !oper.at("name").is_string()) {
return false;
}
int skill = oper.get("skill", 1);
if (skill < 1 || 3 < skill) {
return false;
}
std::string name = oper.at("name").as_string();
opers_vec.emplace_back(name);
skill_map.emplace(name, skill);
}
skill_map.emplace("Unknown", 3);
int mode = params.get("mode", 0);
switch (mode) {
case 0:
break;
@@ -62,6 +72,7 @@ bool asst::RoguelikeTask::set_params(const json::value& params)
}
m_recruit_task_ptr->set_opers(std::move(opers_vec));
m_skill_task_ptr->set_skill_map(std::move(skill_map));
return true;
}