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<const Map::RareEnemyRates> rare_rates,
|
||||||
shared_ptr<PSOLFGEncryption> random_crypt,
|
shared_ptr<PSOLFGEncryption> random_crypt,
|
||||||
shared_ptr<const VersionedQuest> vq) {
|
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 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(
|
map->add_enemies_and_objects_from_quest_data(
|
||||||
episode,
|
episode,
|
||||||
difficulty,
|
difficulty,
|
||||||
event,
|
event,
|
||||||
dat_contents.data(),
|
vq->dat_contents_decompressed->data(),
|
||||||
dat_contents.size(),
|
vq->dat_contents_decompressed->size(),
|
||||||
rare_rates);
|
rare_rates);
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -222,6 +222,10 @@ VersionedQuest::VersionedQuest(
|
|||||||
available_expression(available_expression),
|
available_expression(available_expression),
|
||||||
enabled_expression(enabled_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);
|
auto bin_decompressed = prs_decompress(*this->bin_contents);
|
||||||
|
|
||||||
switch (this->version) {
|
switch (this->version) {
|
||||||
|
|||||||
@@ -68,6 +68,7 @@ struct VersionedQuest {
|
|||||||
std::string long_description;
|
std::string long_description;
|
||||||
std::shared_ptr<const std::string> bin_contents;
|
std::shared_ptr<const std::string> bin_contents;
|
||||||
std::shared_ptr<const std::string> dat_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 std::string> pvr_contents;
|
||||||
std::shared_ptr<const BattleRules> battle_rules;
|
std::shared_ptr<const BattleRules> battle_rules;
|
||||||
ssize_t challenge_template_index;
|
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) {
|
l->leader_id == c->lobby_client_id) {
|
||||||
const auto& cmd = check_size_t<G_StartBattle_BB_6xCF>(data, size);
|
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);
|
auto new_rules = make_shared<BattleRules>(cmd.rules);
|
||||||
if (l->item_creator) {
|
if (l->item_creator) {
|
||||||
l->item_creator->set_restrictions(new_rules);
|
l->item_creator->set_restrictions(new_rules);
|
||||||
|
|||||||
Reference in New Issue
Block a user