handle 6xE2 full inventory case

This commit is contained in:
Martin Michelsen
2025-09-25 21:16:50 -07:00
parent 648d9c5164
commit ba131ab94a
+21 -9
View File
@@ -5155,18 +5155,30 @@ static asio::awaitable<void> on_quest_F960_result_bb(shared_ptr<Client> c, Subco
{0xE3, sizeof(G_SetMesetaSlotPrizeResult_BB_6xE3) >> 2, c->lobby_client_id}, item}; {0xE3, sizeof(G_SetMesetaSlotPrizeResult_BB_6xE3) >> 2, c->lobby_client_id}, item};
send_command_t(c, 0x60, 0x00, cmd_6xE3); send_command_t(c, 0x60, 0x00, cmd_6xE3);
// Add the item to the player's inventory if possible; if not, drop it on the
// floor where the player is standing
bool added_to_inventory;
try { try {
p->add_item(item, *s->item_stack_limits(c->version())); p->add_item(item, *s->item_stack_limits(c->version()));
send_create_inventory_item_to_lobby(c, c->lobby_client_id, item); added_to_inventory = true;
if (c->log.should_log(phosg::LogLevel::L_INFO)) {
string name = s->describe_item(c->version(), item);
c->log.info_f("Awarded item {}", name);
}
} catch (const out_of_range&) { } catch (const out_of_range&) {
if (c->log.should_log(phosg::LogLevel::L_INFO)) { // If the game's drop mode is private or duplicate, make the item visible
string name = s->describe_item(c->version(), item); // only to this player; in other modes, make it visible to everyone
c->log.info_f("Attempted to award item {}, but inventory was full", name); uint16_t flags = ((l->drop_mode == ServerDropMode::SERVER_PRIVATE) || (l->drop_mode == ServerDropMode::SERVER_DUPLICATE))
} ? (1 << c->lobby_client_id)
: 0x000F;
l->add_item(c->floor, item, cmd.pos, nullptr, nullptr, flags);
added_to_inventory = false;
}
if (c->log.should_log(phosg::LogLevel::L_INFO)) {
string name = s->describe_item(c->version(), item);
c->log.info_f("Awarded item {} {}", name, added_to_inventory ? "in inventory" : "on ground (inventory is full)");
}
if (added_to_inventory) {
send_create_inventory_item_to_lobby(c, c->lobby_client_id, item);
} else {
send_drop_item_to_channel(s, c->channel, item, 0, cmd.floor, cmd.pos, 0xFFFF);
} }
co_return; co_return;
} }