implement meseta/item reward commands on BB
This commit is contained in:
+12
-1
@@ -5247,9 +5247,20 @@ struct G_EnemyKilled_BB_6xC8 {
|
|||||||
le_uint32_t unused;
|
le_uint32_t unused;
|
||||||
} __packed__;
|
} __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)
|
// 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)
|
// 6xCB: Request to transfer item (BB)
|
||||||
|
|
||||||
struct G_ItemTransferRequest_BB_6xCB {
|
struct G_ItemTransferRequest_BB_6xCB {
|
||||||
|
|||||||
@@ -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>,
|
static void on_destroy_inventory_item(shared_ptr<ServerState>,
|
||||||
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
shared_ptr<Lobby> l, shared_ptr<Client> c, uint8_t command, uint8_t flag,
|
||||||
const void* data, size_t size) {
|
const void* data, size_t size) {
|
||||||
@@ -1900,8 +1934,8 @@ subcommand_handler_t subcommand_handlers[0x100] = {
|
|||||||
/* 6xC6 */ nullptr,
|
/* 6xC6 */ nullptr,
|
||||||
/* 6xC7 */ on_charge_attack_bb,
|
/* 6xC7 */ on_charge_attack_bb,
|
||||||
/* 6xC8 */ on_enemy_killed_bb,
|
/* 6xC8 */ on_enemy_killed_bb,
|
||||||
/* 6xC9 */ nullptr,
|
/* 6xC9 */ on_meseta_reward_request_bb,
|
||||||
/* 6xCA */ nullptr,
|
/* 6xCA */ on_item_reward_request_bb,
|
||||||
/* 6xCB */ nullptr,
|
/* 6xCB */ nullptr,
|
||||||
/* 6xCC */ nullptr,
|
/* 6xCC */ nullptr,
|
||||||
/* 6xCD */ nullptr,
|
/* 6xCD */ nullptr,
|
||||||
|
|||||||
Reference in New Issue
Block a user