cache decompressed dat files for quests
This commit is contained in:
+5
-3
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user