filter non-download quests by episode
This commit is contained in:
+4
-2
@@ -703,10 +703,12 @@ shared_ptr<const Quest> QuestIndex::get(uint32_t quest_number) const {
|
||||
}
|
||||
}
|
||||
|
||||
vector<shared_ptr<const Quest>> QuestIndex::filter(uint32_t category_id, QuestScriptVersion version) const {
|
||||
vector<shared_ptr<const Quest>> QuestIndex::filter(Episode episode, uint32_t category_id, QuestScriptVersion version) const {
|
||||
vector<shared_ptr<const Quest>> ret;
|
||||
for (auto it : this->quests_by_number) {
|
||||
if ((it.second->category_id == category_id) && it.second->has_version_any_language(version)) {
|
||||
if (((episode == Episode::NONE) || (it.second->episode == episode)) &&
|
||||
(it.second->category_id == category_id) &&
|
||||
it.second->has_version_any_language(version)) {
|
||||
ret.emplace_back(it.second);
|
||||
}
|
||||
}
|
||||
|
||||
+1
-1
@@ -123,7 +123,7 @@ struct QuestIndex {
|
||||
QuestIndex(const std::string& directory, std::shared_ptr<const QuestCategoryIndex> category_index, bool is_ep3);
|
||||
|
||||
std::shared_ptr<const Quest> get(uint32_t quest_number) const;
|
||||
std::vector<std::shared_ptr<const Quest>> filter(uint32_t category_id, QuestScriptVersion version) const;
|
||||
std::vector<std::shared_ptr<const Quest>> filter(Episode episode, uint32_t category_id, QuestScriptVersion version) const;
|
||||
};
|
||||
|
||||
std::string encode_download_quest_data(
|
||||
|
||||
@@ -1971,7 +1971,7 @@ static void on_10(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
|
||||
if (num_ep3_categories == 1) {
|
||||
auto quest_index = s->quest_index_for_client(c);
|
||||
if (quest_index) {
|
||||
auto quests = quest_index->filter(ep3_category_id, c->quest_version());
|
||||
auto quests = quest_index->filter(Episode::EP3, ep3_category_id, c->quest_version());
|
||||
send_quest_menu(c, MenuID::QUEST, quests, true);
|
||||
} else {
|
||||
send_lobby_message_box(c, "$C6Quests are not available.");
|
||||
@@ -2225,7 +2225,7 @@ static void on_10(shared_ptr<Client> c, uint16_t, uint32_t, string& data) {
|
||||
break;
|
||||
}
|
||||
shared_ptr<Lobby> l = c->lobby.lock();
|
||||
auto quests = quest_index->filter(item_id, c->quest_version());
|
||||
auto quests = quest_index->filter(l ? l->episode : Episode::NONE, item_id, c->quest_version());
|
||||
|
||||
// Hack: Assume the menu to be sent is the download quest menu if the
|
||||
// client is not in any lobby
|
||||
|
||||
@@ -488,13 +488,13 @@
|
||||
// category_name: what appears in the quest menu on the client.
|
||||
// description: what appears in the category description window (may
|
||||
// contain color escape codes like $C6).
|
||||
[0x21, "retrieval", "Retrieval", "$E$C6Quests that involve\nretrieving an object"],
|
||||
[0x21, "extermination", "Extermination", "$E$C6Quests that involve\ndestroying all\nmonsters"],
|
||||
[0x21, "events", "Events", "$E$C6Quests that are part\nof an event"],
|
||||
[0x21, "shops", "Shops", "$E$C6Quests that contain\nshops"],
|
||||
[0x21, "vr", "Virtual Reality", "$E$C6Quests that are\ndone in a simulator"],
|
||||
[0xA1, "tower", "Control Tower", "$E$C6Quests that take\nplace at the Control\nTower"],
|
||||
[0xA1, "team", "Team", "$E$C6Quests for you\nand your team\nmembers."],
|
||||
[0x01, "retrieval", "Retrieval", "$E$C6Quests that involve\nretrieving an object"],
|
||||
[0x01, "extermination", "Extermination", "$E$C6Quests that involve\ndestroying all\nmonsters"],
|
||||
[0x01, "events", "Events", "$E$C6Quests that are part\nof an event"],
|
||||
[0x01, "shops", "Shops", "$E$C6Quests that contain\nshops"],
|
||||
[0x01, "vr", "Virtual Reality", "$E$C6Quests that are\ndone in a simulator"],
|
||||
[0x81, "tower", "Control Tower", "$E$C6Quests that take\nplace at the Control\nTower"],
|
||||
[0x81, "team", "Team", "$E$C6Quests for you\nand your team\nmembers."],
|
||||
[0x02, "battle", "Battle", "$E$C6Battle mode rule\nsets"],
|
||||
[0x04, "challenge-ep1", "Challenge (Episode 1)", "$E$C6Challenge mode\nquests in Episode 1"],
|
||||
[0x84, "challenge-ep2", "Challenge (Episode 2)", "$E$C6Challenge mode\nquests in Episode 2"],
|
||||
|
||||
+7
-7
@@ -127,13 +127,13 @@
|
||||
},
|
||||
|
||||
"QuestCategories": [
|
||||
[0x21, "retrieval", "Retrieval", "$E$C6Quests that involve\nretrieving an object"],
|
||||
[0x21, "extermination", "Extermination", "$E$C6Quests that involve\ndestroying all\nmonsters"],
|
||||
[0x21, "events", "Events", "$E$C6Quests that are part\nof an event"],
|
||||
[0x21, "shops", "Shops", "$E$C6Quests that contain\nshops"],
|
||||
[0x21, "vr", "Virtual Reality", "$E$C6Quests that are\ndone in a simulator"],
|
||||
[0xA1, "tower", "Control Tower", "$E$C6Quests that take\nplace at the Control\nTower"],
|
||||
[0xA1, "team", "Team", "$E$C6Quests for you\nand your team\nmembers."],
|
||||
[0x01, "retrieval", "Retrieval", "$E$C6Quests that involve\nretrieving an object"],
|
||||
[0x01, "extermination", "Extermination", "$E$C6Quests that involve\ndestroying all\nmonsters"],
|
||||
[0x01, "events", "Events", "$E$C6Quests that are part\nof an event"],
|
||||
[0x01, "shops", "Shops", "$E$C6Quests that contain\nshops"],
|
||||
[0x01, "vr", "Virtual Reality", "$E$C6Quests that are\ndone in a simulator"],
|
||||
[0x81, "tower", "Control Tower", "$E$C6Quests that take\nplace at the Control\nTower"],
|
||||
[0x81, "team", "Team", "$E$C6Quests for you\nand your team\nmembers."],
|
||||
[0x02, "battle", "Battle", "$E$C6Battle mode rule\nsets"],
|
||||
[0x04, "challenge-ep1", "Challenge (Episode 1)", "$E$C6Challenge mode\nquests in Episode 1"],
|
||||
[0x84, "challenge-ep2", "Challenge (Episode 2)", "$E$C6Challenge mode\nquests in Episode 2"],
|
||||
|
||||
Reference in New Issue
Block a user