mirror of
https://github.com/MaaAssistantArknights/MaaAssistantArknights.git
synced 2026-07-18 18:20:39 +08:00
fix: fix typings in Recruit task
fix: https://github.com/MaaAssistantArknights/MaaAssistantArknights/issues/9517
This commit is contained in:
@@ -44,11 +44,48 @@ namespace asst
|
||||
}
|
||||
};
|
||||
|
||||
// 选择额外 Tags 的模式
|
||||
enum class ExtraTagsMode
|
||||
{
|
||||
NoExtra, // 0 - 默认行为
|
||||
Extra, // 1 - 选 3 个 Tags, 即使可能冲突
|
||||
ExtraOnlyRare, // 2 - 如果可能, 同时选择更多的高星 Tag 组合, 即使可能冲突
|
||||
};
|
||||
|
||||
class RecruitConfig final : public SingletonHolder<RecruitConfig>, public AbstractConfig
|
||||
{
|
||||
public:
|
||||
using TagId = std::string;
|
||||
|
||||
public:
|
||||
static constexpr bool is_valid_extra_tags_mode(ExtraTagsMode mode)
|
||||
{
|
||||
return mode == ExtraTagsMode::NoExtra || mode == ExtraTagsMode::Extra || mode == ExtraTagsMode::ExtraOnlyRare;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~RecruitConfig() override = default;
|
||||
static constexpr int CorrectNumberOfTags = 5;
|
||||
|
||||
const std::unordered_set<std::string>& get_all_tags() const noexcept { return m_all_tags; }
|
||||
const std::vector<Recruitment>& get_all_opers() const noexcept { return m_all_opers; }
|
||||
std::string get_tag_name(const TagId& id) const noexcept;
|
||||
|
||||
protected:
|
||||
virtual bool parse(const json::value& json) override;
|
||||
|
||||
void clear();
|
||||
|
||||
std::unordered_set<std::string> m_all_tags;
|
||||
std::vector<Recruitment> m_all_opers;
|
||||
std::unordered_map<TagId, std::string> m_all_tags_name;
|
||||
};
|
||||
|
||||
// 公开招募的干员组合
|
||||
struct RecruitCombs
|
||||
{
|
||||
// TODO: using vector here can be expensive
|
||||
std::vector<std::string> tags;
|
||||
std::vector<RecruitConfig::TagId> tags;
|
||||
std::vector<Recruitment> opers;
|
||||
int max_level = 0;
|
||||
int min_level = 0;
|
||||
@@ -89,41 +126,5 @@ namespace asst
|
||||
}
|
||||
};
|
||||
|
||||
// 选择额外 Tags 的模式
|
||||
enum class ExtraTagsMode
|
||||
{
|
||||
NoExtra, // 0 - 默认行为
|
||||
Extra, // 1 - 选 3 个 Tags, 即使可能冲突
|
||||
ExtraOnlyRare, // 2 - 如果可能, 同时选择更多的高星 Tag 组合, 即使可能冲突
|
||||
};
|
||||
|
||||
class RecruitConfig final : public SingletonHolder<RecruitConfig>, public AbstractConfig
|
||||
{
|
||||
public:
|
||||
using TagId = std::string;
|
||||
|
||||
public:
|
||||
static constexpr bool is_valid_extra_tags_mode(ExtraTagsMode mode)
|
||||
{
|
||||
return mode == ExtraTagsMode::NoExtra || mode == ExtraTagsMode::Extra || mode == ExtraTagsMode::ExtraOnlyRare;
|
||||
}
|
||||
|
||||
public:
|
||||
virtual ~RecruitConfig() override = default;
|
||||
static constexpr int CorrectNumberOfTags = 5;
|
||||
|
||||
const std::unordered_set<std::string>& get_all_tags() const noexcept { return m_all_tags; }
|
||||
const std::vector<Recruitment>& get_all_opers() const noexcept { return m_all_opers; }
|
||||
std::string get_tag_name(const TagId& id) const noexcept;
|
||||
|
||||
protected:
|
||||
virtual bool parse(const json::value& json) override;
|
||||
|
||||
void clear();
|
||||
|
||||
std::unordered_set<std::string> m_all_tags;
|
||||
std::vector<Recruitment> m_all_opers;
|
||||
std::unordered_map<TagId, std::string> m_all_tags_name;
|
||||
};
|
||||
inline static auto& RecruitData = RecruitConfig::get_instance();
|
||||
} // namespace asst
|
||||
|
||||
@@ -838,13 +838,13 @@ std::vector<std::string>
|
||||
return names;
|
||||
}
|
||||
|
||||
std::vector<std::string> asst::AutoRecruitTask::get_select_tags(
|
||||
std::vector<asst::RecruitConfig::TagId> asst::AutoRecruitTask::get_select_tags(
|
||||
const std::vector<RecruitCombs>& combinations,
|
||||
std::vector<RecruitConfig::TagId> tag_ids)
|
||||
{
|
||||
LogTraceFunction;
|
||||
std::unordered_set<std::string> unique_tags;
|
||||
std::vector<std::string> select;
|
||||
std::unordered_set<RecruitConfig::TagId> unique_tags;
|
||||
std::vector<RecruitConfig::TagId> select;
|
||||
|
||||
if (combinations.front().min_level == 3) {
|
||||
// only run if we have certain preferred tags for level-3 tags
|
||||
@@ -857,7 +857,7 @@ std::vector<std::string> asst::AutoRecruitTask::get_select_tags(
|
||||
}
|
||||
// the preferred tag is the tag's substring
|
||||
if (tag_name.find(preferred_tag) != std::string::npos) {
|
||||
select.emplace_back(tag_name);
|
||||
select.emplace_back(tag_id);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -874,7 +874,7 @@ std::vector<std::string> asst::AutoRecruitTask::get_select_tags(
|
||||
else if (m_select_extra_tags_mode == ExtraTagsMode::Extra) {
|
||||
while (select.size() < 3) {
|
||||
for (const asst::RecruitCombs& comb : combinations) {
|
||||
for (const std::string& tag : comb.tags) {
|
||||
for (const RecruitConfig::TagId& tag : comb.tags) {
|
||||
if (unique_tags.find(tag) == unique_tags.cend()) {
|
||||
unique_tags.insert(tag);
|
||||
select.emplace_back(tag);
|
||||
@@ -901,7 +901,7 @@ std::vector<std::string> asst::AutoRecruitTask::get_select_tags(
|
||||
return select;
|
||||
}
|
||||
emplace_back_count = 0;
|
||||
for (const std::string& tag : comb.tags) {
|
||||
for (const RecruitConfig::TagId& tag : comb.tags) {
|
||||
if (unique_tags.find(tag) == unique_tags.cend()) {
|
||||
unique_tags.insert(tag);
|
||||
select.emplace_back(tag);
|
||||
|
||||
@@ -50,7 +50,7 @@ namespace asst
|
||||
bool hire_all();
|
||||
bool initialize_dirty_slot_info(const cv::Mat&);
|
||||
std::vector<std::string> get_tag_names(const std::vector<RecruitConfig::TagId>& ids) const;
|
||||
std::vector<std::string> get_select_tags(const std::vector<RecruitCombs>& combinations, std::vector<RecruitConfig::TagId> tag_ids);
|
||||
std::vector<asst::RecruitConfig::TagId> get_select_tags(const std::vector<RecruitCombs>& combinations, std::vector<RecruitConfig::TagId> tag_ids);
|
||||
static std::vector<TextRect> start_recruit_analyze(const cv::Mat& image);
|
||||
|
||||
template <typename Rng>
|
||||
|
||||
Reference in New Issue
Block a user