diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 0ac9492b67..66e2ff36d6 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -4050,18 +4050,20 @@ STR_5742 :Authenticating ... STR_5743 :Connecting ... STR_5744 :Resolving ... STR_5745 :Network desync detected -STR_5746 :Disconnected{STRING} -STR_5747 :Kicked -STR_5748 :Get out of the server! -STR_5749 :Connection Closed -STR_5750 :No Data -STR_5751 :{OUTLINE}{RED}{STRING} has disconnected{STRING} -STR_5752 :Bad Player Name -STR_5753 :Incorrect Software Version -STR_5754 :Bad Password -STR_5755 :Server Full -STR_5756 :{OUTLINE}{GREEN}{STRING} has joined the game -STR_5757 :Downloading map ... ({INT32} / {INT32}) +STR_5746 :Disconnected +STR_5747 :Disconnected: {STRING} +STR_5748 :Kicked +STR_5749 :Get out of the server! +STR_5750 :Connection Closed +STR_5751 :No Data +STR_5752 :{OUTLINE}{RED}{STRING} has disconnected +STR_5753 :{OUTLINE}{RED}{STRING} has disconnected ({STRING}) +STR_5754 :Bad Player Name +STR_5755 :Incorrect Software Version +STR_5756 :Bad Password +STR_5757 :Server Full +STR_5758 :{OUTLINE}{GREEN}{STRING} has joined the game +STR_5759 :Downloading map ... ({INT32} / {INT32}) ############# diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index c101f73d70..1d065b086f 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -2351,18 +2351,20 @@ enum { STR_MULTIPLAYER_CONNECTING = 5743, STR_MULTIPLAYER_AUTHENTICATING = 5744, STR_MULTIPLAYER_DESYNC = 5745, - STR_MULTIPLAYER_DISCONNECTED = 5746, - STR_MULTIPLAYER_KICKED = 5747, - STR_MULTIPLAYER_DISCONNECT_MSG = 5748, - STR_MULTIPLAYER_CONNECTION_CLOSED = 5749, - STR_MULTIPLAYER_NO_DATA = 5750, - STR_MULTIPLAYER_HAS_DISCONNECTED = 5751, - STR_MULTIPLAYER_BAD_PLAYER_NAME = 5752, - STR_MULTIPLAYER_INCORRECT_SOFTWARE_VERSION = 5753, - STR_MULTIPLAYER_BAD_PASSWORD = 5754, - STR_MULTIPLAYER_SERVER_FULL = 5755, - STR_MULTIPLAYER_HAS_JOINED_THE_GAME = 5756, - STR_MULTIPLAYER_DOWNLOADING_MAP = 5757, + STR_MULTIPLAYER_DISCONNECTED_NO_REASON = 5746, + STR_MULTIPLAYER_DISCONNECTED_WITH_REASON = 5747, + STR_MULTIPLAYER_KICKED = 5748, + STR_MULTIPLAYER_KICKED_REASON = 5749, + STR_MULTIPLAYER_CONNECTION_CLOSED = 5750, + STR_MULTIPLAYER_NO_DATA = 5751, + STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_NO_REASON = 5752, + STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_WITH_REASON = 5753, + STR_MULTIPLAYER_BAD_PLAYER_NAME = 5754, + STR_MULTIPLAYER_INCORRECT_SOFTWARE_VERSION = 5755, + STR_MULTIPLAYER_BAD_PASSWORD = 5756, + STR_MULTIPLAYER_SERVER_FULL = 5757, + STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME = 5758, + STR_MULTIPLAYER_DOWNLOADING_MAP = 5759, // Have to include resource strings (from scenarios and objects) for the time being now that language is partially working STR_COUNT = 32768 diff --git a/src/network/network.cpp b/src/network/network.cpp index 36e4e576fa..505d098284 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -896,13 +896,15 @@ void Network::UpdateClient() if (server_connection.authstatus == NETWORK_AUTH_REQUIREPASSWORD) { // Do not show disconnect message window when password window closed/canceled window_network_status_close(); } else { - char str_disconnected[256], str_conditional_buffer[256]; - str_conditional_buffer[0] = '\0'; + char str_disconnected[256]; + if (server_connection.getLastDisconnectReason()) { - strcat(str_conditional_buffer, ": "); - strcat(str_conditional_buffer, server_connection.getLastDisconnectReason()); + const char * disconnect_reason = server_connection.getLastDisconnectReason(); + format_string(str_disconnected, STR_MULTIPLAYER_DISCONNECTED_WITH_REASON, &disconnect_reason); + } else { + format_string(str_disconnected, STR_MULTIPLAYER_DISCONNECTED_NO_REASON, NULL); } - format_string(str_disconnected, STR_MULTIPLAYER_DISCONNECTED, &str_conditional_buffer); + window_network_status_open(str_disconnected); } Close(); @@ -1017,7 +1019,7 @@ void Network::KickPlayer(int playerId) // Disconnect the client gracefully (*it)->setLastDisconnectReason(STR_MULTIPLAYER_KICKED); char str_disconnect_msg[256]; - format_string(str_disconnect_msg, STR_MULTIPLAYER_DISCONNECT_MSG, NULL); + format_string(str_disconnect_msg, STR_MULTIPLAYER_KICKED_REASON, NULL); Server_Send_SETDISCONNECTMSG(*(*it), str_disconnect_msg); shutdown((*it)->socket, SHUT_RD); (*it)->SendQueuedPackets(); @@ -1589,18 +1591,16 @@ void Network::RemoveClient(std::unique_ptr& connection) NetworkPlayer* connection_player = connection->player; if (connection_player) { char text[256]; - char reasonstr[100]; - reasonstr[0] = 0; - if (connection->getLastDisconnectReason() && strlen(connection->getLastDisconnectReason()) < sizeof(reasonstr)) { - sprintf(reasonstr, " (%s)", connection->getLastDisconnectReason()); + const char * has_disconnected_args[2] = { + (char *) connection_player->name, + connection->getLastDisconnectReason() + }; + if (has_disconnected_args[1]) { + format_string(text, STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_WITH_REASON, has_disconnected_args); + } else { + format_string(text, STR_MULTIPLAYER_PLAYER_HAS_DISCONNECTED_NO_REASON, &(has_disconnected_args[0])); } - char **has_disconnected_args = new char *[2]{ - (char *) connection_player->name, - reasonstr - }; - format_string(text, STR_MULTIPLAYER_HAS_DISCONNECTED, has_disconnected_args); - delete [] has_disconnected_args; chat_history_add(text); gNetwork.Server_Send_CHAT(text); } @@ -1702,7 +1702,7 @@ void Network::Server_Handle_AUTH(NetworkConnection& connection, NetworkPacket& p player->SetName(name); char text[256]; const char * player_name = (const char *) player->name; - format_string(text, STR_MULTIPLAYER_HAS_JOINED_THE_GAME, &player_name); + format_string(text, STR_MULTIPLAYER_PLAYER_HAS_JOINED_THE_GAME, &player_name); chat_history_add(text); Server_Send_MAP(&connection); gNetwork.Server_Send_CHAT(text);