show player & game count at main menu
This commit is contained in:
+38
-9
@@ -201,6 +201,10 @@ void on_connect(std::shared_ptr<ServerState> s, std::shared_ptr<Client> c) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void send_main_menu(shared_ptr<ServerState> s, shared_ptr<Client> c) {
|
||||||
|
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
||||||
|
}
|
||||||
|
|
||||||
void on_login_complete(shared_ptr<ServerState> s, shared_ptr<Client> c) {
|
void on_login_complete(shared_ptr<ServerState> s, shared_ptr<Client> c) {
|
||||||
if (c->flags & Client::Flag::IS_EPISODE_3) {
|
if (c->flags & Client::Flag::IS_EPISODE_3) {
|
||||||
auto team = s->ep3_tournament_index->team_for_serial_number(
|
auto team = s->ep3_tournament_index->team_for_serial_number(
|
||||||
@@ -239,7 +243,7 @@ void on_login_complete(shared_ptr<ServerState> s, shared_ptr<Client> c) {
|
|||||||
if (send_enable_send_function_call_if_applicable(s, c)) {
|
if (send_enable_send_function_call_if_applicable(s, c)) {
|
||||||
send_update_client_config(c);
|
send_update_client_config(c);
|
||||||
}
|
}
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
} else {
|
} else {
|
||||||
send_message_box(c, s->welcome_message.c_str());
|
send_message_box(c, s->welcome_message.c_str());
|
||||||
}
|
}
|
||||||
@@ -1389,7 +1393,7 @@ static void on_D6_V3(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
send_enable_send_function_call_if_applicable(s, c);
|
send_enable_send_function_call_if_applicable(s, c);
|
||||||
c->flags &= ~Client::Flag::AT_WELCOME_MESSAGE;
|
c->flags &= ~Client::Flag::AT_WELCOME_MESSAGE;
|
||||||
send_update_client_config(c);
|
send_update_client_config(c);
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1399,9 +1403,34 @@ static void on_09(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
switch (cmd.menu_id) {
|
switch (cmd.menu_id) {
|
||||||
case MenuID::MAIN:
|
case MenuID::MAIN:
|
||||||
for (const auto& item : s->main_menu) {
|
if (cmd.item_id == MainMenuItemID::GO_TO_LOBBY) {
|
||||||
if (item.item_id == cmd.item_id) {
|
size_t num_players = 0;
|
||||||
send_ship_info(c, item.description);
|
size_t num_games = 0;
|
||||||
|
size_t num_compatible_games = 0;
|
||||||
|
for (const auto& it : s->id_to_lobby) {
|
||||||
|
const auto& l = it.second;
|
||||||
|
if (l->is_game()) {
|
||||||
|
num_games++;
|
||||||
|
if (l->version == c->version() &&
|
||||||
|
(!(l->flags & Lobby::Flag::EPISODE_3_ONLY) == !(c->flags & Client::Flag::IS_EPISODE_3))) {
|
||||||
|
num_compatible_games++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const auto& c : l->clients) {
|
||||||
|
if (c) {
|
||||||
|
num_players++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
string info = string_printf(
|
||||||
|
"$C6%zu$C7 players online\n$C6%zu$C7 games\n$C6%zu$C7 compatible games",
|
||||||
|
num_players, num_games, num_compatible_games);
|
||||||
|
send_ship_info(c, decode_sjis(info));
|
||||||
|
} else {
|
||||||
|
for (const auto& item : s->main_menu) {
|
||||||
|
if (item.item_id == cmd.item_id) {
|
||||||
|
send_ship_info(c, item.description);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@@ -1743,7 +1772,7 @@ static void on_10(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
case MenuID::INFORMATION: {
|
case MenuID::INFORMATION: {
|
||||||
if (item_id == InformationMenuItemID::GO_BACK) {
|
if (item_id == InformationMenuItemID::GO_BACK) {
|
||||||
c->flags &= ~Client::Flag::IN_INFORMATION_MENU;
|
c->flags &= ~Client::Flag::IN_INFORMATION_MENU;
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
try {
|
try {
|
||||||
@@ -1807,7 +1836,7 @@ static void on_10(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
case MenuID::PROXY_DESTINATIONS: {
|
case MenuID::PROXY_DESTINATIONS: {
|
||||||
if (item_id == ProxyDestinationsMenuItemID::GO_BACK) {
|
if (item_id == ProxyDestinationsMenuItemID::GO_BACK) {
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
|
|
||||||
} else if (item_id == ProxyDestinationsMenuItemID::OPTIONS) {
|
} else if (item_id == ProxyDestinationsMenuItemID::OPTIONS) {
|
||||||
send_menu(c, s->name.c_str(), MenuID::PROXY_OPTIONS,
|
send_menu(c, s->name.c_str(), MenuID::PROXY_OPTIONS,
|
||||||
@@ -2006,7 +2035,7 @@ static void on_10(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
case MenuID::PATCHES:
|
case MenuID::PATCHES:
|
||||||
if (item_id == PatchesMenuItemID::GO_BACK) {
|
if (item_id == PatchesMenuItemID::GO_BACK) {
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (c->flags & Client::Flag::NO_SEND_FUNCTION_CALL) {
|
if (c->flags & Client::Flag::NO_SEND_FUNCTION_CALL) {
|
||||||
@@ -2021,7 +2050,7 @@ static void on_10(shared_ptr<ServerState> s, shared_ptr<Client> c,
|
|||||||
|
|
||||||
case MenuID::PROGRAMS:
|
case MenuID::PROGRAMS:
|
||||||
if (item_id == ProgramsMenuItemID::GO_BACK) {
|
if (item_id == ProgramsMenuItemID::GO_BACK) {
|
||||||
send_menu(c, s->name.c_str(), MenuID::MAIN, s->main_menu);
|
send_main_menu(s, c);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
if (c->flags & Client::Flag::NO_SEND_FUNCTION_CALL) {
|
if (c->flags & Client::Flag::NO_SEND_FUNCTION_CALL) {
|
||||||
|
|||||||
Reference in New Issue
Block a user