sort bank contents before sending to client

This commit is contained in:
Martin Michelsen
2023-12-04 18:43:37 -08:00
parent 33bbb15bf0
commit 2360beb77b
5 changed files with 29 additions and 1 deletions
+11
View File
@@ -43,6 +43,17 @@ bool ItemData::operator!=(const ItemData& other) const {
return !this->operator==(other);
}
bool ItemData::operator<(const ItemData& other) const {
for (size_t z = 0; z < 3; z++) {
if (this->data1db[z] < other.data1db[z]) {
return true;
} else if (this->data1db[z] > other.data1db[z]) {
return false;
}
}
return (this->data2db < other.data2db);
}
void ItemData::clear() {
this->data1d.clear(0);
this->id = 0xFFFFFFFF;
+6
View File
@@ -111,13 +111,17 @@ struct ItemData { // 0x14 bytes
union {
parray<uint8_t, 12> data1;
parray<le_uint16_t, 6> data1w;
parray<be_uint16_t, 6> data1wb;
parray<le_uint32_t, 3> data1d;
parray<be_uint32_t, 3> data1db;
} __attribute__((packed));
le_uint32_t id;
union {
parray<uint8_t, 4> data2;
parray<le_uint16_t, 2> data2w;
parray<be_uint16_t, 2> data2wb;
le_uint32_t data2d;
be_uint32_t data2db;
} __attribute__((packed));
ItemData();
@@ -128,6 +132,8 @@ struct ItemData { // 0x14 bytes
bool operator==(const ItemData& other) const;
bool operator!=(const ItemData& other) const;
bool operator<(const ItemData& other) const;
void clear();
static ItemData from_data(const std::string& data);
+4
View File
@@ -683,6 +683,10 @@ size_t PlayerBank::find_item(uint32_t item_id) {
throw out_of_range("item not present");
}
void PlayerBank::sort() {
std::sort(this->items.data(), this->items.data() + this->num_items);
}
BattleRules::BattleRules(const JSON& json) {
static const JSON empty_list = JSON::list();
+6
View File
@@ -63,6 +63,10 @@ struct PlayerBankItem {
/* 14 */ le_uint16_t amount = 0;
/* 16 */ le_uint16_t present = 0;
/* 18 */
inline bool operator<(const PlayerBankItem& other) const {
return this->data < other.data;
}
} __attribute__((packed));
struct PlayerInventory {
@@ -99,6 +103,8 @@ struct PlayerBank {
void add_item(const ItemData& item);
ItemData remove_item_by_index(size_t index, uint32_t amount);
size_t find_item(uint32_t item_id);
void sort();
} __attribute__((packed));
struct PlayerDispDataBB;
+2 -1
View File
@@ -2361,7 +2361,8 @@ void send_bank(shared_ptr<Client> c) {
}
auto p = c->game_data.character();
const auto& bank = c->game_data.current_bank();
auto& bank = c->game_data.current_bank();
bank.sort();
const auto* items_it = bank.items.data();
vector<PlayerBankItem> items(items_it, items_it + bank.num_items);