fix 88 command during loading on proxy

This commit is contained in:
Martin Michelsen
2025-10-05 10:48:58 -07:00
parent 00b0f71bf4
commit df2dfd21e3
2 changed files with 11 additions and 0 deletions
+10
View File
@@ -523,6 +523,12 @@ constexpr on_message_t S_P_81 = &S_81<SC_SimpleMail_PC_81>;
constexpr on_message_t S_B_81 = &S_81<SC_SimpleMail_BB_81>;
static asio::awaitable<HandlerResult> S_88(shared_ptr<Client> c, Channel::Message& msg) {
// If the client isn't in the lobby, suppress the command (Ep3 can crash if
// it receives this while loading; other versions probably also will crash)
if (!c->proxy_session->is_in_lobby) {
co_return HandlerResult::SUPPRESS;
}
bool modified = false;
if (c->login && c->login->account->account_id != c->proxy_session->remote_guild_card_number) {
size_t expected_size = sizeof(S_ArrowUpdateEntry_88) * msg.flag;
@@ -1499,6 +1505,7 @@ template <typename CmdT>
static asio::awaitable<HandlerResult> S_65_67_68_EB(shared_ptr<Client> c, Channel::Message& msg) {
if (msg.command == 0x67) {
c->proxy_session->clear_lobby_players(12);
c->proxy_session->is_in_lobby = true;
c->proxy_session->is_in_game = false;
c->proxy_session->is_in_quest = false;
c->floor = 0x0F;
@@ -1642,6 +1649,7 @@ static asio::awaitable<HandlerResult> S_64(shared_ptr<Client> c, Channel::Messag
c->proxy_session->clear_lobby_players(4);
c->floor = 0;
c->proxy_session->is_in_lobby = false;
c->proxy_session->is_in_game = true;
c->proxy_session->is_in_quest = false;
if constexpr (sizeof(cmd) > sizeof(S_JoinGame_DCNTE_64)) {
@@ -1746,6 +1754,7 @@ static asio::awaitable<HandlerResult> S_E8(shared_ptr<Client> c, Channel::Messag
auto& cmd = msg.check_size_t<S_JoinSpectatorTeam_Ep3_E8>();
c->floor = 0;
c->proxy_session->is_in_lobby = false;
c->proxy_session->is_in_game = true;
c->proxy_session->is_in_quest = false;
c->proxy_session->lobby_event = cmd.event;
@@ -1835,6 +1844,7 @@ static asio::awaitable<HandlerResult> S_66_69_E9(shared_ptr<Client> c, Channel::
static asio::awaitable<HandlerResult> C_98(shared_ptr<Client> c, Channel::Message& msg) {
c->floor = 0x0F;
c->proxy_session->is_in_lobby = false;
c->proxy_session->is_in_game = false;
c->proxy_session->is_in_quest = false;
c->proxy_session->lobby_event = 0;