From e5bc59a8966d2abd3d450022eac042253db15df6 Mon Sep 17 00:00:00 2001 From: Martin Michelsen Date: Mon, 7 Mar 2022 20:21:10 -0800 Subject: [PATCH] fix game join conditions and messages --- src/Lobby.hh | 2 +- src/ReceiveCommands.cc | 25 +++++++++---------------- 2 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/Lobby.hh b/src/Lobby.hh index b4b1d9ef..612920d4 100644 --- a/src/Lobby.hh +++ b/src/Lobby.hh @@ -18,7 +18,7 @@ enum LobbyFlag { Episode3 = 0x08, // lobby only QuestInProgress = 0x10, // game only JoinableQuestInProgress = 0x20, // game only - Default = 0x40, // lobby only; false for private lobbies + Default = 0x40, // lobby only; not set for games and private lobbies Persistent = 0x80, // if not set, lobby is deleted when empty }; diff --git a/src/ReceiveCommands.cc b/src/ReceiveCommands.cc index 0fbcc034..5d42f74c 100644 --- a/src/ReceiveCommands.cc +++ b/src/ReceiveCommands.cc @@ -665,39 +665,32 @@ void process_menu_selection(shared_ptr s, shared_ptr c, case GAME_MENU_ID: { auto game = s->find_lobby(cmd->item_id); if (!game) { - send_message_box(c, u"$C6This game is no\nlonger active."); + send_lobby_message_box(c, u"$C6You cannot join this\ngame because it no longer\nexists."); break; } - if (!game->is_game()) { - send_message_box(c, u"$C6This game is not\na game."); + send_lobby_message_box(c, u"$C6You cannot join this\ngame because it is not\na game."); break; } - if (game->count_clients() >= game->max_clients) { - send_message_box(c, u"$C6This game is full."); + send_lobby_message_box(c, u"$C6You cannot join this\ngame because it is full."); break; } - if ((game->version != c->version) || (!(game->flags & LobbyFlag::Episode3) != !(c->flags & LobbyFlag::Episode3))) { - send_message_box(c, u"$C6This game is for\n a different version\nof PSO."); + send_lobby_message_box(c, u"$C6You cannot join this\ngame because it is for\na different version\nof PSO."); break; } - - if ((game->version != c->version) || - (!(game->flags & LobbyFlag::Episode3) != !(c->flags & LobbyFlag::Episode3))) { - send_message_box(c, u"$C6A quest is in progress\nin this game."); + if (game->flags & LobbyFlag::QuestInProgress) { + send_lobby_message_box(c, u"$C6You cannot join this\ngame because a quest is\nalready in progress."); break; } - if (game->any_client_loading()) { - send_message_box(c, u"$C6A player is currently\nloading."); + send_lobby_message_box(c, u"$C6You cannot join this\ngame because another\nplayer is currently\nloading. Try again soon."); break; } - - if (game->any_client_loading()) { - send_message_box(c, u"$C6You cannot join a\nSolo Mode game."); + if (game->mode == 3) { + send_lobby_message_box(c, u"$C6You cannot join this\n game because it is a\nSolo Mode game."); break; }