diff --git a/src/lang/english.txt b/src/lang/english.txt index ef80b11ac5..0a8a84a3d6 100644 --- a/src/lang/english.txt +++ b/src/lang/english.txt @@ -2358,7 +2358,8 @@ STR_NETWORK_CLIENT_LIST_NEW_COMPANY :(New company) STR_NETWORK_CLIENT_LIST_NEW_COMPANY_TOOLTIP :{BLACK}Create a new company and join it STR_NETWORK_CLIENT_LIST_PLAYER_ICON_SELF_TOOLTIP :{BLACK}This is you STR_NETWORK_CLIENT_LIST_PLAYER_ICON_HOST_TOOLTIP :{BLACK}This is the host of the game -STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} / {NUM} compan{P y ies} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT :{BLACK}{NUM} client{P "" s} - {NUM}/{NUM} compan{P y ies} +STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP :{BLACK}The number of currently connected clients, number of companies and maximum number of companies allowed by the server administrator # Matches ConnectionType ###length 5 diff --git a/src/network/network_client.cpp b/src/network/network_client.cpp index 7abd18d6a1..5fab9a655d 100644 --- a/src/network/network_client.cpp +++ b/src/network/network_client.cpp @@ -1111,6 +1111,7 @@ NetworkRecvStatus ClientNetworkGameSocketHandler::Receive_SERVER_CONFIG_UPDATE(P _network_server_max_companies = p->Recv_uint8(); _network_server_name = p->Recv_string(NETWORK_NAME_LENGTH); + SetWindowClassesDirty(WC_CLIENT_LIST); return NETWORK_RECV_STATUS_OKAY; } @@ -1319,11 +1320,20 @@ bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio) return false; } +/** + * Get the maximum number of companies that are allowed by the server. + * @return The number of companies allowed. + */ +uint NetworkMaxCompaniesAllowed() +{ + return _network_server ? _settings_client.network.max_companies : _network_server_max_companies; +} + /** * Check if max_companies has been reached on the server (local check only). * @return true if the max value has been reached or exceeded, false otherwise. */ bool NetworkMaxCompaniesReached() { - return Company::GetNumItems() >= (_network_server ? _settings_client.network.max_companies : _network_server_max_companies); + return Company::GetNumItems() >= NetworkMaxCompaniesAllowed(); } diff --git a/src/network/network_func.h b/src/network/network_func.h index 52c508a75b..63d3d0cdc0 100644 --- a/src/network/network_func.h +++ b/src/network/network_func.h @@ -59,6 +59,7 @@ void NetworkClientSendRcon(const std::string &password, const std::string &comma void NetworkClientSendChat(NetworkAction action, DestType type, int dest, const std::string &msg, int64 data = 0); bool NetworkClientPreferTeamChat(const NetworkClientInfo *cio); bool NetworkCompanyIsPassworded(CompanyID company_id); +uint NetworkMaxCompaniesAllowed(); bool NetworkMaxCompaniesReached(); void NetworkPrintClients(); void NetworkHandlePauseChange(PauseMode prev_mode, PauseMode changed_mode); diff --git a/src/network/network_gui.cpp b/src/network/network_gui.cpp index 6591cde3bd..da89de8c25 100644 --- a/src/network/network_gui.cpp +++ b/src/network/network_gui.cpp @@ -1352,7 +1352,7 @@ static const NWidgetPart _nested_client_list_widgets[] = { NWidget(NWID_VERTICAL), NWidget(WWT_MATRIX, COLOUR_GREY, WID_CL_MATRIX), SetMinimalSize(180, 0), SetResize(1, 1), SetFill(1, 1), SetMatrixDataTip(1, 0, STR_NULL), SetScrollbar(WID_CL_SCROLLBAR), NWidget(WWT_PANEL, COLOUR_GREY), - NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NULL), + NWidget(WWT_TEXT, COLOUR_GREY, WID_CL_CLIENT_COMPANY_COUNT), SetFill(1, 0), SetMinimalTextLines(1, 0), SetResize(1, 0), SetPadding(2, 1, 2, 1), SetAlignment(SA_CENTER), SetDataTip(STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT, STR_NETWORK_CLIENT_LIST_CLIENT_COMPANY_COUNT_TOOLTIP), EndContainer(), EndContainer(), NWidget(NWID_VERTICAL), @@ -1797,6 +1797,7 @@ public: case WID_CL_CLIENT_COMPANY_COUNT: SetDParam(0, NetworkClientInfo::GetNumItems()); SetDParam(1, Company::GetNumItems()); + SetDParam(2, NetworkMaxCompaniesAllowed()); break; } } diff --git a/src/settings_table.cpp b/src/settings_table.cpp index ef910a3600..9fda41720f 100644 --- a/src/settings_table.cpp +++ b/src/settings_table.cpp @@ -477,7 +477,11 @@ static bool ReplaceAsteriskWithEmptyPassword(std::string &newval) static void UpdateClientConfigValues() { NetworkServerUpdateGameInfo(); - if (_network_server) NetworkServerSendConfigUpdate(); + + if (_network_server) { + NetworkServerSendConfigUpdate(); + SetWindowClassesDirty(WC_CLIENT_LIST); + } } /* End - Callback Functions */