diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 558c86d748..67902e8feb 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4219,6 +4219,7 @@ STR_5907 :{SMALLFONT}{BLACK}When enabled, zooming in will centre around the c STR_5908 :Allow arbitrary ride type changes STR_5909 :{SMALLFONT}{BLACK}Allows changing ride type freely. May cause crashes. STR_5910 :Apply +STR_5911 :{OUTLINE}{GREEN}{STRING} ############# # Scenarios # diff --git a/src/config.c b/src/config.c index c85c76d76d..99e27b114b 100644 --- a/src/config.c +++ b/src/config.c @@ -271,6 +271,7 @@ config_property_definition _networkDefinitions[] = { { offsetof(network_configuration, maxplayers), "maxplayers", CONFIG_VALUE_TYPE_UINT8, 16, NULL }, { offsetof(network_configuration, server_name), "server_name", CONFIG_VALUE_TYPE_STRING, {.value_string = "Server" }, NULL }, { offsetof(network_configuration, server_description), "server_description", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL }, + { offsetof(network_configuration, server_greeting), "server_greeting", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL }, { offsetof(network_configuration, master_server_url), "master_server_url", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL }, { offsetof(network_configuration, provider_name), "provider_name", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL }, { offsetof(network_configuration, provider_email), "provider_email", CONFIG_VALUE_TYPE_STRING, {.value_string = NULL }, NULL }, diff --git a/src/config.h b/src/config.h index ffc28ba085..c654ac93a7 100644 --- a/src/config.h +++ b/src/config.h @@ -242,6 +242,7 @@ typedef struct network_configuration { uint8 maxplayers; utf8string server_name; utf8string server_description; + utf8string server_greeting; utf8string master_server_url; utf8string provider_name; utf8string provider_email; diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index d48ac9d3e0..c78c037382 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -3343,6 +3343,7 @@ enum { STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES = 5908, STR_CHEAT_ALLOW_ARBITRARY_RIDE_TYPE_CHANGES_TIP = 5909, STR_APPLY = 5910, + STR_SERVER_GREETING = 5911, // 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 d3a2038e51..43e3920dc8 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -155,6 +155,7 @@ bool Network::Init() ServerName = std::string(); ServerDescription = std::string(); + ServerGreeting = std::string(); ServerProviderName = std::string(); ServerProviderEmail = std::string(); ServerProviderWebsite = std::string(); @@ -300,6 +301,7 @@ bool Network::BeginServer(unsigned short port, const char* address) ServerName = String::ToStd(gConfigNetwork.server_name); ServerDescription = String::ToStd(gConfigNetwork.server_description); + ServerGreeting = String::ToStd(gConfigNetwork.server_greeting); ServerProviderName = String::ToStd(gConfigNetwork.provider_name); ServerProviderEmail = String::ToStd(gConfigNetwork.provider_email); ServerProviderWebsite = String::ToStd(gConfigNetwork.provider_website); @@ -1174,6 +1176,7 @@ void Network::Server_Send_GAMEINFO(NetworkConnection& connection) json_object_set_new(obj, "players", json_integer(player_list.size())); json_object_set_new(obj, "maxPlayers", json_integer(gConfigNetwork.maxplayers)); json_object_set_new(obj, "description", json_string(gConfigNetwork.server_description)); + json_object_set_new(obj, "greeting", json_string(gConfigNetwork.server_greeting)); json_object_set_new(obj, "dedicated", json_boolean(gOpenRCT2Headless)); // Provider details @@ -1939,6 +1942,7 @@ void Network::Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacke ServerName = json_stdstring_value(json_object_get(root, "name")); ServerDescription = json_stdstring_value(json_object_get(root, "description")); + ServerGreeting = json_stdstring_value(json_object_get(root, "greeting")); json_t *jsonProvider = json_object_get(root, "provider"); if (jsonProvider != nullptr) { @@ -1947,6 +1951,14 @@ void Network::Client_Handle_GAMEINFO(NetworkConnection& connection, NetworkPacke ServerProviderWebsite = json_stdstring_value(json_object_get(jsonProvider, "website")); } json_decref(root); + + // Display server greeting if one exists + const char* greeting = network_get_server_greeting(); + if (strcmp(greeting, "") != 0) { + char greeting_formatted[256]; + format_string(greeting_formatted, STR_SERVER_GREETING, &greeting); + chat_history_add(greeting_formatted); + } } namespace Convert @@ -2451,6 +2463,7 @@ static void network_get_keymap_path(utf8 *buffer, size_t bufferSize) const utf8 * network_get_server_name() { return gNetwork.ServerName.c_str(); } const utf8 * network_get_server_description() { return gNetwork.ServerDescription.c_str(); } +const utf8 * network_get_server_greeting() { return gNetwork.ServerGreeting.c_str(); } const utf8 * network_get_server_provider_name() { return gNetwork.ServerProviderName.c_str(); } const utf8 * network_get_server_provider_email() { return gNetwork.ServerProviderEmail.c_str(); } const utf8 * network_get_server_provider_website() { return gNetwork.ServerProviderWebsite.c_str(); } @@ -2502,6 +2515,7 @@ int network_get_current_player_group_index() { return 0; } void network_append_chat_log(const utf8 *text) { } const utf8 * network_get_server_name() { return nullptr; } const utf8 * network_get_server_description() { return nullptr; } +const utf8 * network_get_server_greeting() { return nullptr; } const utf8 * network_get_server_provider_name() { return nullptr; } const utf8 * network_get_server_provider_email() { return nullptr; } const utf8 * network_get_server_provider_website() { return nullptr; } diff --git a/src/network/network.h b/src/network/network.h index c96ee3773c..7ec279498b 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -152,6 +152,7 @@ public: std::string ServerName; std::string ServerDescription; + std::string ServerGreeting; std::string ServerProviderName; std::string ServerProviderEmail; std::string ServerProviderWebsite; @@ -308,6 +309,7 @@ void network_print_error(); void network_append_chat_log(const utf8 *text); const utf8 * network_get_server_name(); const utf8 * network_get_server_description(); +const utf8 * network_get_server_greeting(); const utf8 * network_get_server_provider_name(); const utf8 * network_get_server_provider_email(); const utf8 * network_get_server_provider_website();