cache decompressed dat files for quests

This commit is contained in:
Martin Michelsen
2024-01-13 09:47:43 -08:00
parent be8130b621
commit 1453cd4c9c
4 changed files with 10 additions and 6 deletions
+5 -3
View File
@@ -270,14 +270,16 @@ shared_ptr<Map> Lobby::load_maps(
shared_ptr<const Map::RareEnemyRates> rare_rates,
shared_ptr<PSOLFGEncryption> random_crypt,
shared_ptr<const VersionedQuest> vq) {
if (!vq->dat_contents_decompressed) {
throw runtime_error("quest does not have DAT data");
}
auto map = make_shared<Map>(version, lobby_id, random_crypt);
auto dat_contents = prs_decompress(*vq->dat_contents);
map->add_enemies_and_objects_from_quest_data(
episode,
difficulty,
event,
dat_contents.data(),
dat_contents.size(),
vq->dat_contents_decompressed->data(),
vq->dat_contents_decompressed->size(),
rare_rates);
return map;
}
+4
View File
@@ -222,6 +222,10 @@ VersionedQuest::VersionedQuest(
available_expression(available_expression),
enabled_expression(enabled_expression) {
if (this->dat_contents) {
this->dat_contents_decompressed = make_shared<string>(prs_decompress(*this->dat_contents));
}
auto bin_decompressed = prs_decompress(*this->bin_contents);
switch (this->version) {
+1
View File
@@ -68,6 +68,7 @@ struct VersionedQuest {
std::string long_description;
std::shared_ptr<const std::string> bin_contents;
std::shared_ptr<const std::string> dat_contents;
std::shared_ptr<const std::string> dat_contents_decompressed;
std::shared_ptr<const std::string> pvr_contents;
std::shared_ptr<const BattleRules> battle_rules;
ssize_t challenge_template_index;
-3
View File
@@ -3012,9 +3012,6 @@ static void on_battle_restart_bb(shared_ptr<Client> c, uint8_t, uint8_t, void* d
l->leader_id == c->lobby_client_id) {
const auto& cmd = check_size_t<G_StartBattle_BB_6xCF>(data, size);
auto vq = l->quest->version(Version::BB_V4, c->language());
auto dat_contents = prs_decompress(*vq->dat_contents);
auto new_rules = make_shared<BattleRules>(cmd.rules);
if (l->item_creator) {
l->item_creator->set_restrictions(new_rules);