feat: 增加公招多选策略 (#7463)

* fix #7452   

按照 #7452 的想法,在 #6900  的基础上增加了只选尽可能多选且只选高星tag的功能选项,并将选项策略合并
默认策略:只选一个高星tag组合
#6900 策略:选满三个tag为止

新增策略:尽可能多选高星tag,且额外的tag组合要么完整选入,要么舍弃;且若当前出现更高星tag组合,则不会考虑较低星,只会尽可能选高星tag组合(例如出现五星tag时,将尽力多选五星tag,不会考虑四星tag)
(result_vec的排序规则暂时未更改)
在GUI中增加了选择公招策略的功能,如图:

<details>


![image](https://github.com/MaaAssistantArknights/MaaAssistantArknights/assets/113409320/4b0d4f7d-5156-4144-b411-b96b604e49c7)

![image](https://github.com/MaaAssistantArknights/MaaAssistantArknights/assets/113409320/18167d72-741a-4bcd-95c8-6f916dec008d)

</details>

最后用模拟器在自己账号上进行了一些自动公招测试。

---------

Co-authored-by: David <56174894+Constrat@users.noreply.github.com>
Co-authored-by: Horror Proton <107091537+horror-proton@users.noreply.github.com>
This commit is contained in:
lpowo
2023-12-13 16:22:59 +08:00
committed by GitHub
parent 84ead89ada
commit ae0be8a9a9
18 changed files with 158 additions and 26 deletions

View File

@@ -39,12 +39,17 @@ bool asst::RecruitTask::set_params(const json::value& params)
confirm.emplace_back(confirm_num_json.as_integer());
}
ExtraTagsMode extra_tags_mode = static_cast<ExtraTagsMode>(params.get("extra_tags_mode", 0));
// 若出现未知 extra_tags_mode 将 extra_tags_mod 置为默认的 NoExtra 。
if (!RecruitConfig::is_valid_extra_tags_mode(extra_tags_mode)) {
extra_tags_mode = ExtraTagsMode::NoExtra;
}
bool refresh = params.get("refresh", false);
bool set_time = params.get("set_time", true);
bool force_refresh = params.get("force_refresh", true);
int times = params.get("times", 0);
bool expedite = params.get("expedite", false);
bool extra_tags = params.get("extra_tags", false);
[[maybe_unused]] int expedite_times = params.get("expedite_times", 0);
bool skip_robot = params.get("skip_robot", true);
@@ -65,7 +70,7 @@ bool asst::RecruitTask::set_params(const json::value& params)
m_auto_recruit_task_ptr->set_max_times(times)
.set_need_refresh(refresh)
.set_use_expedited(expedite)
.set_select_extra_tags(extra_tags)
.set_select_extra_tags(extra_tags_mode)
.set_select_level(std::move(select))
.set_confirm_level(std::move(confirm))
.set_skip_robot(skip_robot)