diff --git a/src/Client.cc b/src/Client.cc index 2b5a34a0..dbc8534a 100644 --- a/src/Client.cc +++ b/src/Client.cc @@ -783,6 +783,7 @@ std::shared_ptr Client::bank_file(bool allow_load) { auto s = this->require_server_state(); this->bank_data->max_items = s->bb_max_bank_items; this->bank_data->max_meseta = s->bb_max_bank_meseta; + this->update_bank_data_after_load(this->bank_data); } return this->bank_data; } @@ -1033,6 +1034,23 @@ void Client::update_character_data_after_load(shared_ptr cha charfile->guild_card.language = lang; } +void Client::update_bank_data_after_load(shared_ptr bank) { + auto s = this->require_server_state(); + auto limits = s->item_stack_limits(this->version()); + for (auto& item : bank->items) { + if (item.data.is_stackable(*limits)) { + if (item.data.data1[5] != item.amount) { + this->log.info_f("Updating item data stack count from bank stack count ({} -> {}) for {}", + item.data.data1[5], item.amount, item.data.hex()); + item.data.data1[5] = item.amount; + } + } else if (item.amount != 1) { + this->log.info_f("Clearing bank stack count ({}) for {}", item.amount, item.data.hex()); + item.amount = 1; + } + } +} + void Client::save_all() { if (this->system_data) { this->save_system_file(); diff --git a/src/Client.hh b/src/Client.hh index 234535b5..5e7e86e5 100644 --- a/src/Client.hh +++ b/src/Client.hh @@ -356,4 +356,5 @@ private: void load_all_files(); void update_character_data_after_load(std::shared_ptr character_data); + void update_bank_data_after_load(std::shared_ptr bank_data); };