work around 6xD9 client bug

This commit is contained in:
Martin Michelsen
2025-10-05 10:48:44 -07:00
parent df2dfd21e3
commit 31eedd7e7e
2 changed files with 6 additions and 2 deletions
+4 -1
View File
@@ -6356,7 +6356,10 @@ struct G_AddSRankWeaponSpecial_BB_6xD8 {
} __packed_ws__(G_AddSRankWeaponSpecial_BB_6xD8, 0x24);
// 6xD9: Momoka item exchange (BB; handled by server)
// The client sends this when it executes an F95B quest opcode.
// The client sends this when it executes an F95B quest opcode. The client has
// an unfortunate bug where it doesn't set the size field when generating this
// command, so the size ends up as an uninitialized value and the client sends
// more (or less!) data than necessary.
struct G_MomokaItemExchange_BB_6xD9 {
G_ClientIDHeader header;
+2 -1
View File
@@ -5194,7 +5194,8 @@ static asio::awaitable<void> on_momoka_item_exchange_bb(shared_ptr<Client> c, Su
throw runtime_error("6xD9 command sent during free play");
}
const auto& cmd = msg.check_size_t<G_MomokaItemExchange_BB_6xD9>();
// See notes in CommandFormats.hh about why we allow larger commands here
const auto& cmd = msg.check_size_t<G_MomokaItemExchange_BB_6xD9>(0xFFFF);
auto s = c->require_server_state();
auto p = c->character_file();
try {