implement meseta/item reward commands on BB

This commit is contained in:
Martin Michelsen
2023-06-19 19:20:11 -07:00
parent 9a6c0b6c9a
commit 5842d70094
2 changed files with 48 additions and 3 deletions
+12 -1
View File
@@ -5247,9 +5247,20 @@ struct G_EnemyKilled_BB_6xC8 {
le_uint32_t unused;
} __packed__;
// 6xC9: Meseta reward from quest (BB; handled by server)
// 6xC9: Request meseta reward from quest (BB; handled by server)
struct G_MesetaRewardRequest_BB_6xC9 {
G_UnusedHeader header;
le_uint32_t amount;
} __packed__;
// 6xCA: Item reward from quest (BB; handled by server)
struct G_ItemRewardRequest_BB_6xCA {
G_UnusedHeader header;
ItemData item_data;
} __packed__;
// 6xCB: Request to transfer item (BB)
struct G_ItemTransferRequest_BB_6xCB {
+36 -2
View File
@@ -1502,6 +1502,40 @@ static void on_enemy_killed_bb(shared_ptr<ServerState> s,
}
}
void on_meseta_reward_request_bb(shared_ptr<ServerState>,
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t, uint8_t,
const void* data, size_t size) {
const auto& cmd = check_size_t<G_MesetaRewardRequest_BB_6xC9>(data, size);
auto p = c->game_data.player();
if (cmd.amount < 0) {
if (-cmd.amount > p->disp.meseta) {
p->disp.meseta = 0;
} else {
p->disp.meseta += cmd.amount;
}
} else {
PlayerInventoryItem item;
item.data.data1[0] = 0x04;
item.data.data2d = cmd.amount;
item.data.id = l->generate_item_id(0xFF);
c->game_data.player()->add_item(item);
send_create_inventory_item(l, c, item.data);
}
}
void on_item_reward_request_bb(shared_ptr<ServerState>,
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t, uint8_t,
const void* data, size_t size) {
const auto& cmd = check_size_t<G_ItemRewardRequest_BB_6xCA>(data, size);
PlayerInventoryItem item;
item.data = cmd.item_data;
item.data.id = l->generate_item_id(0xFF);
c->game_data.player()->add_item(item);
send_create_inventory_item(l, c, item.data);
}
static void on_destroy_inventory_item(shared_ptr<ServerState>,
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
const void* data, size_t size) {
@@ -1900,8 +1934,8 @@ subcommand_handler_t subcommand_handlers[0x100] = {
/* 6xC6 */ nullptr,
/* 6xC7 */ on_charge_attack_bb,
/* 6xC8 */ on_enemy_killed_bb,
/* 6xC9 */ nullptr,
/* 6xCA */ nullptr,
/* 6xC9 */ on_meseta_reward_request_bb,
/* 6xCA */ on_item_reward_request_bb,
/* 6xCB */ nullptr,
/* 6xCC */ nullptr,
/* 6xCD */ nullptr,