From 1bb0545b2195d384a93102b150680fbedd6d5895 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Thu, 15 Dec 2022 00:01:17 -0800 Subject: [PATCH] fix battle table edge case --- src/ReceiveCommands.cc | 4 +++- src/SendCommands.cc | 9 ++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index cf7a6a9a..dd8854cf 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -983,8 +983,10 @@ static bool start_ep3_battle_table_game_if_ready( if (c->card_battle_table_seat_number >= 4) { throw logic_error("invalid seat number"); } + // Apparently this can actually happen; just prevent them from starting a + // battle if multiple players are in the same seat if (!table_clients.emplace(c->card_battle_table_seat_number, c).second) { - throw runtime_error("multiple clients in same battle table seat"); + return false; } if (c->card_battle_table_seat_state == 3) { return false; diff --git a/src/SendCommands.cc b/src/SendCommands.cc index 30587344..8e40f97a 100644 --- a/src/SendCommands.cc +++ b/src/SendCommands.cc @@ -1921,12 +1921,11 @@ void send_ep3_card_battle_table_state(shared_ptr l, uint16_t table_number throw runtime_error("invalid battle table seat number"); } auto& e = cmd.entries[c->card_battle_table_seat_number]; - if (e.state != 0) { - throw runtime_error("multiple clients in the same battle table seat"); + if (e.state == 0) { + e.state = c->card_battle_table_seat_state; + e.guild_card_number = c->license->serial_number; + clients.emplace(c); } - e.state = c->card_battle_table_seat_state; - e.guild_card_number = c->license->serial_number; - clients.emplace(c); } }