make CardAuctionPool name matching more lenient

This commit is contained in:
Martin Michelsen
2023-08-31 14:00:02 -07:00
parent e566a247e4
commit ba7951a9f4
3 changed files with 21 additions and 1 deletions
+16
View File
@@ -1769,6 +1769,7 @@ CardIndex::CardIndex(const string& filename, const string& decompressed_filename
// unindexed (they can still be looked up by ID, of course)
string name = entry->def.en_name;
this->card_definitions_by_name.emplace(name, entry);
this->card_definitions_by_name_normalized.emplace(this->normalize_card_name(name), entry);
entry->def.hp.decode_code();
entry->def.ap.decode_code();
@@ -1840,6 +1841,10 @@ shared_ptr<const CardIndex::CardEntry> CardIndex::definition_for_name(const stri
return this->card_definitions_by_name.at(name);
}
shared_ptr<const CardIndex::CardEntry> CardIndex::definition_for_name_normalized(const string& name) const {
return this->card_definitions_by_name_normalized.at(this->normalize_card_name(name));
}
set<uint32_t> CardIndex::all_ids() const {
set<uint32_t> ret;
for (const auto& it : this->card_definitions) {
@@ -1852,6 +1857,17 @@ uint64_t CardIndex::definitions_mtime() const {
return this->mtime_for_card_definitions;
}
string CardIndex::normalize_card_name(const string& name) {
string ret;
for (char ch : name) {
if (ch == ' ') {
continue;
}
ret.push_back(tolower(ch));
}
return ret;
}
MapIndex::MapIndex(const string& directory) {
auto add_maps_from_dir = [&](const string& dir, bool is_quest) -> void {
for (const auto& filename : list_directory(dir)) {
+4
View File
@@ -1048,13 +1048,17 @@ public:
const std::string& get_compressed_definitions() const;
std::shared_ptr<const CardEntry> definition_for_id(uint32_t id) const;
std::shared_ptr<const CardEntry> definition_for_name(const std::string& name) const;
std::shared_ptr<const CardEntry> definition_for_name_normalized(const std::string& name) const;
std::set<uint32_t> all_ids() const;
uint64_t definitions_mtime() const;
private:
static std::string normalize_card_name(const std::string& name);
std::string compressed_card_definitions;
std::unordered_map<uint32_t, std::shared_ptr<CardEntry>> card_definitions;
std::unordered_map<std::string, std::shared_ptr<CardEntry>> card_definitions_by_name;
std::unordered_map<std::string, std::shared_ptr<CardEntry>> card_definitions_by_name_normalized;
uint64_t mtime_for_card_definitions;
};
+1 -1
View File
@@ -833,7 +833,7 @@ void ServerState::load_ep3_data() {
config_log.info("Resolving Episode 3 card auction pool");
for (auto& e : this->ep3_card_auction_pool) {
try {
const auto& card = this->ep3_card_index->definition_for_name(e.card_name);
const auto& card = this->ep3_card_index->definition_for_name_normalized(e.card_name);
e.card_id = card->def.card_id;
} catch (const out_of_range&) {
throw runtime_error(string_printf("Ep3 card \"%s\" does not exist", e.card_name.c_str()));